# Ricequant SDK-米筐本地量化开发工具套件文档
Ricequant SDK 是米筐量化平台中一系列的量化工具的统称,包括金融数据 API RQData、回测框架 RQAlpha-Plus、因子投研工具 RQFactor 以及股票组合优化器 RQOptimizer 四个产品。在网页平台中的“投资研究”版块所使用的所有功能即是基于 Ricequant SDK,或简称 RQSDK 的开发环境。现在米筐将这一套便捷的开发环境本地化,使您可以轻松在本地通过 RQData 调用金融数据、通过 RQAlpha Plus 进行回测、通过 RQFactor 挖掘因子、通过 RQOptimizer 进行股票组合优化,同时您还可以轻松地访问您的本地数据、用您最熟悉的本地 IDE 进行断点调试。
# 快速上手
# 如何安装 Ricequant SDK
# 准备
- Ricequant SDK 需要 64-bit,Python3.6+运行环境。如果您目前没有 Python 环境,或者已有的环境版本过低,请参考下面的说明来准备 Python 环境。
- Ricequant SDK 需要商业授权才能使用。请在安装前准备好米筐发放的许可证文件(通常会以邮件的形式发放),或联系销售获取授权。如果您想先试用本产品,可以点击这里 (opens new window)申请试用 RQSDK 产品。
# 安装 Python 环境
Ricequant SDK 支持 Python3.6 及以上环境。如果您对 Python 版本没有特殊要求,建议安装最新版的 Python 环境。
由于 Python 原生的安装和配置相对比较复杂,我们建议使用Anaconda (opens new window)进行安装及配置,安装使用教程可参考安装 Anaconda 虚拟环境(强烈建议)。
# 安装 Ricequant SDK
有关如何在 Mac M1 平台上安装 RQSDK,请点击常见问题
在开始之前我们假设您已经自行或按照上述步骤装好了 Python,并激活了您希望进行量化策略开发的虚拟环境。
Ricequant SDK 的安装非常简单,您只需在激活了虚拟环境的命令行终端内输入下面的命令即可安装(或复制下面的命令再黏贴进命令行——Windows 的 cmd 终端用鼠标右键点击黑色区域任意位置来黏贴):
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple rqsdk
整个安装过程持续约 5 分钟(取决于机器配置和网络状况)。如果您在 Windows 下的 cmd 窗口运行上述命令,请在安装程序运行的时候不要用鼠标点击 cmd 窗口内,这样会导致程序运行暂停。如果不慎点击了,可以按一次回车键
来继续运行程序。
安装完毕后直接在窗口中输入rqsdk
命令,如果安装成功会输出下列内容:
# 配置代理
如果您所在的环境需要通过代理访问外网(如不需要可跳过此步骤,进行下一步骤配置许可证信息),rqsdk 可通过如下命令配置或更新代理:
rqsdk proxy
该命令是交互式的,您只需要根据命令提示填入所需信息即可。配置完毕后可以调用rqsdk proxy info
来查看刚配置的许可证信息。
# 配置许可证信息
在您申请试用或者正式采购 Ricequant SDK 之后,米筐会将含有许可证信息的邮件发送到您提供的邮箱中。许可证信息是一串看起来像“乱码”的文字:
5tyGjIiAWfs6azz40Ad9TOc1E8SFjwmp0zoHD0Leg4ZfzHsDJEsYmBgoOAyQxfmMDILeSyMPA2yoO1xN99PsLLhlHATh/5nupsahbzK4MO8wwL/PmZwhOF;fkOUGrPWQFkuguZUv3wid37Gf3hm1T9WRPS61BhFBPbcLOq4pCQw=IViSI2J51NV3IhUcHJ4f9l7YtSP6o6ziClTRgiGxoM]kI2IvlqBCh1AZKuqi7wafRoa0ZHzmNZ05SOx+a6sS8x/ihvOT+iYnvokDx7/6Zaz9VePmdIa35OB3v3+Hl+N4q8UmbQrgv/sG3mUPfFRaWP0jDuSUanuU5mPWfmwfkX4=
如果您曾经安装过 Ricequant SDK,可以通过rqsdk license info
命令来查看许可证信息。
无论您是否已经配置过许可证,都可以通过下列命令来更新到最新的许可证:
rqsdk license
该命令是交互式的,您只需要根据命令提示填入所需信息即可。配置完毕后可以调用rqsdk license info
来查看刚配置的许可证信息。
# 安装产品
在安装完rqsdk
及配置许可证之后,您需要根据自己的需要选择安装 Ricequant SDK 中包含的产品。如果您只需要 RQData——金融数据 API 的功能,那么您已经完成了所有的安装和配置步骤,请参考 RQData 的文档来进行下一步工作。
如果您的许可证信息在使用过程中有所变化(例如原本仅有 RQData 的权限,后来添加了回测功能)或希望使用其他功能,则需要通过下面的方法来安装其他产品组件。
目前 Ricequant SDK 中可选的产品如下表:
安装代码 | 产品名 | 组件用途及依赖 |
---|---|---|
rqdatac | RQData | 金融数据 API,所有组件的基础依赖,默认已安装 |
rqoptimizer | RQOptimizer | 股票优化器,依赖 rqdatac |
rqfactor | RQFactor | 因子投研工具,依赖 rqdatac |
rqalpha_plus | RQAlpha Plus | 回测引擎,依赖 rqoptimizer 及 rqfactor |
Ricequant SDK 支持通过下列命令安装特定产品:
rqsdk install <安装代码>
例如安装 RQAlpha Plus,命令为rqsdk install rqalpha_plus
。
注意:在安装某个产品时,如果上表中已说明组件依赖关系,则其所依赖的组建都会被同时安装上。例如运行了上述的命令安装了 RQAlpha Plus,那么 RQFactor 和 RQOptimizer 也会同时被装上。
# 更新 Ricequant SDK 的版本
米筐会不定期更新 Ricequant SDK 的版本以修复问题和增加功能,每次版本升级后会通过邮件告知更新的内容列表。当您决定要更新的时候,只需要在安装了 RQSDK 的虚拟环境中运行下列命令即可更新到最新版:
rqsdk update
以上rqsdk update
命令会更新 rqsdk 及本地安装的各产品的版本,如有更新特定产品需求,可通过rqsdk update --help
获取该命令的完整用法。
特别注意:在执行该命令时请确保所有运行中的 Python 程序都已停止,例如 IPython Notebook、您自己写的 Python 应用等,否则很可能会报“无写权限”而升级失败。
# 准备进行一次回测
Ricequant SDK 的回测功能由RQAlpha Plus提供,而回测所需的数据——除了您自己的数据之外——则由RQData提供。
RQAlpha Plus 回测依赖于历史行情数据,而这些数据需要预先被缓存到本地(股票、期货回测及各类品种的 tick 回测)。因此在进行回测之前,首先需要准备好历史行情数据。
取决于您期望进行研究的标的数量和回测频次,历史行情数据量可能会非常庞大。如果直接通过网络下载可能会耗时非常久,并且很可能会突破您账号的每日流量限制。如果您已经正式采购 Ricequant SDK,可以联系米筐销售为您提供线下的行情数据拷贝服务。
我们先用一个简单的例子(大约会消耗 500MB 的流量)来演示一下使用 Ricequant SDK 做回测的简便性。
# 准备回测所需数据
尊敬的试用客户:我们为您准备了每日 1G 的流量配额,按照前文描述的 500MB 流量消耗是可以满足数据缓存初始化的。同时,我们专门为试用账户准备了不消耗计费流量的初始化方式。
在开始之前,请确保已通过conda activate 环境名
命令切换到已经装好 Ricequant SDK 的虚拟环境。
通过网络的方式初始化数据缓存只需要运行如下命令:
rqsdk update-data --base --minbar 000001.XSHE
该命令在运行中将产生如下图所示的动态输出:
命令运行完毕后如下,注意会有两行进度条:
该命令的目的是更新所有日线及基础数据,并且更新代号为000001.XSHE(平安银行)
的分钟线行情数据。这样您就可以针对所有的股票和期货做日线回测,而仅对平安银行
做分钟线回测。
注意:
- 如果您对需要做分钟线、tick 回测的合约有更复杂的需求,请运行
rqsdk update-data
获得该命令的完整用法。 - 更新数据过程中,请不要运行回测,避免出现同时读写数据的情况.
# 试用客户初始化缓存的方式
我们为试用客户专门准备了不消耗计费流量的数据初始化方式,避免因为要下载 500MB 的数据而耗尽每日流量配额。在完成前面的安装过程后,您只需要运行下列命令:
rqsdk download-data --sample
该命令将下载米筐准备的样例数据,不消耗 rqdatac 的每日流量配额,它会为您准备好真实的日级别历史行情数据、合约列表数据、分红拆分数据等回测所需的基础数据。之后如果您再运行rqsdk update-data
或该命令的其他参数形式(如前文提到的rqsdk update-data --minbar 000001.XSHE --base
,则对于已下载的部分只会进行增量更新,并不会消耗大量流量。
注意:在调取本节所描述的数据相关命令时,因为只有 RQAlpha Plus 的回测功能依赖本地数据包,因此系统会自动检查是否已经安装了该产品,如无安装则会提示安装。
# 准备回测所需策略代码
在上述命令执行完毕后,将会在<用户目录>\.rqalpha-plus\bundle
目录下创建历史行情数据的缓存文件。
这是 Ricequant SDK 管理缓存文件的默认目录,您可以通过参数-d <完整路径>
进行定制化。在回测时同样可以指定-d
参数来更改 RQAlpha Plus 读取回测历史文件的位置。
接下来您需要准备一个策略来进行回测。策略是交易决策逻辑的载体,用 Python 代码来体现。您只需要在策略中实现由 RQAlpha Plus 指定的回调函数即可 (详细用法请参考策略引擎 API 文档)。
但是现在并不需要急着去研究策略引擎的细节,我们已经为您准备好了几个直接能运行的策略。请您用cd
命令切换到您希望放置样例策略的目录,然后运行下面的命令:
rqalpha-plus examples
该命令会在当前目录下创建一个名为 exmaples 的目录,其内容如下图所示:
您可以用惯用的 IDE 或者编辑器打开这些 Python 源码文件来查看代码,这里列举了一些常用的策略写法,以便您快速上手策略编写的 API。
我们现在以buy_and_hold.py
策略为例,简单讲解一下策略的几个构成部分。当然您也完全可以跳过下面的代码讲解,直接到下一个环节,先看一下回测引擎能对策略做哪些分析,输出了哪些数据。
# 顾名思义,这是一个“买入并持有”的简单策略。在这个策略里,我们将在策略开始时买入平安银行,并持有到策略结束。
# 首先策略引入了RQAlpha的框架依赖,这是所有策略必须具备的。
from rqalpha.api import *
# 在这个方法中编写任何的初始化逻辑。context对象是由引擎构建并传入的,这个对象内涵了关于整个策略的信息,
# 这个对象也会出现在其他回调中,使用同一个实例。
def init(context):
# 在这里定义了一个类似“全局变量”的变量。因为这个context对象实例会出现在别的回调中,因此在别的函数中
# 也可以引用context.s1这个变量
context.s1 = "000001.XSHE"
# 告诉引擎该策略的股票池包含了什么股票,在这里股票池只有“平安银行”一个,您还可以传入一个列表或一个
# 指数代码
update_universe(context.s1)
# 创建一个变量,用来判断是否已经执行过买入操作。因为行情会不断触发回调,因此需要策略自行判断是否
# 已经买入过,而不是在每一次行情触发时都执行买入
context.fired = False
# 日志会直接打印在命令行(标准输出)中,您可以通过将输出流转发到文件的方式将日志保存下来。
logger.info("RunInfo: {}".format(context.run_info))
# 这个回调模拟的是每个交易日开盘前希望执行的一些操作,例如对昨天收盘后的情况做一些处理来指导今天的交易,
# 但是在我们这个很简单的策略中并不需要这一回调,可以略过。
def before_trading(context):
pass
# 这是前面提到的行情处理回调,也是整个策略的核心部分。行情是以K线的方式传入的,每当策略收到一个新的行情
# (在回测的情况下,就是下一个时间单位的K线准备好)时,这个函数就会被触发一次。
# 除了context变量之外,bar_dict就是含有行情信息的一个字典结构,它的key是合约代码,值是引擎内定义的
# Bar结构,包含了常见的开盘价、收盘价、最高最低价等信息,具体含义可以参考下面的链接:
# https://www.ricequant.com/doc/api/python/chn#object-bar
def handle_bar(context, bar_dict):
# 这里就是策略逻辑的主体了。
# 我们先判断买入的逻辑是否已经触发过,如果没有触发过,说明是第一次收到行情,那么就进行买入
# 如果已经触发过,则什么也不做。
if not context.fired:
# order_percent并且传入1代表买入该股票并且使其占有投资组合的100%
logger.info("order_percent:{}".format(order_percent(context.s1, 1)))
# 注意将代表是否买入过的变量设为True,确保只执行一次买入操作
context.fired = True
# 类似前面的before_trading,这个回调函数模拟了每个交易日收盘后需要进行的一些处理。
# 在这个策略中并不需要做任何处理,因此直接略过了。
def after_trading(context):
pass
# 运行回测!
到这里,您已经准备好了运行回测所需的所有条件,可以准备运行回测了。我们仍然以前面提到的buy_and_hold.py
——一个简单的买入并持有策略为例。
运行回测之前,您需要想好几个参数:
- 策略从那一天开始:起始时间
- 策略运行到那一天为止:结束时间
- 策略所使用的最大资金量是多少:账户资金
- 策略以什么频率进行回测:日线、分钟线或 tick
现在我们假设以分钟线频率,从2018 年 1 月 1 日开始到2018 年 12 月 31 日为止(引擎会自动按各个交易所公示的交易日期针对不同交易品种跳过非交易日,您只需要按您所想的日期指定即可,不必考虑节假日或周末的情况),账户资金10 万元。那么执行下列命令即可:
rqalpha-plus run -f examples/buy_and_hold.py -s 2018-01-01 -e 2018-12-31 -fq 1m --plot --account stock 100000
由于在上述策略运行命令中输入了--plot
命令,因此在策略执行完毕后会弹出策略执行结果的图片,展示策略运行情况。如果您希望获得更多的策略运行结果以备分析,可以使用--report
和-o
命令来分别输出csv
格式的报告和pickle
格式的 Python 内存序列化文件。更多的配置参数可以通过下列命令查看:
rqalpha-plus run --help
您将会看到非常多的可配置项。随着使用的逐渐深入,这些配置项都会成为您的得力工具。
# 上手总结
至此您已经完成了所有 RQSDK 的配置流程,并运行了一个策略。这里总结一下几个关键的命令,假设您已经配置了满足条件的 Python 环境,其实安装 Ricequant SDK 是非常简单的。
从网络安装 Ricequant SDK:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple rqsdk
下载试用数据:
rqsdk download-data --sample
下载生产数据:
rqsdk update-data --minbar 000001.XSHE
生成回测样例:
rqalpha-plus examples
以分钟线频率运行回测样例:
rqalpha-plus run -f examples/buy_and_hold.py -s 2018-01-01 -e 2018-12-31 -fq 1m --plot --account stock 100000
接下来我们会更详细地带您了解 Ricequant SDK 的每一个细节。我们建议您按照前面的内容先行配置好环境,后面的讲解将不再赘述环境的配置、数据的更新等内容。
# Ricequant SDK 文档目录
Ricequant SDK 由四个主要部件组成,分别为:
- 负责提供和管理金融数据的 RQData;
- 作为回测引擎的 RQAlpha Plus;
- 承担了因子投研的 RQFactor;
- 可进行股票组合优化的优化器 RQOptimizer。
四个组件既各司其职又紧密配合,共同提供了流畅、完整的本地量化开发体验。
产品 | 资源 |
---|---|
RQData - 金融数据 API | 使用说明 |
RQAlpha Plus - 策略回测引擎 | 使用教程 | API 手册 (opens new window) |
RQFactor - 因子编写及检验 | 使用说明 | API 手册 |
RQOptimizer - 股票多因子优化器 | 使用说明 | API 手册 (opens new window) |
# 安装 Anaconda 虚拟环境(强烈建议)
完整版的 Anaconda 对于大多数人来说都是没有必要的,因此 Anaconda 官方提供了精简版的 Miniconda,只安装最核心的工具包。本文档将以 Miniconda 的安装为例。如果您希望安装 Anaconda 本体,请移步至Anaconda 官网 (opens new window)获得安装指引。下面简要列出 Miniconda 的安装步骤(注意:本章所述的功能只适用于大多数用户。如果您已对 Anaconda 非常熟悉,或者已有惯用的环境,完全可以不按本章节所述方法配置环境):
# 下载 Miniconda
- 如果您身处国内,请在清华大学的 Miniconda 镜像仓库 (opens new window)中寻找适用于您系统的安装包,或直接
- Windows 系统:点击下载 (opens new window)
- MacOS 系统
- X86 版:点击下载 (opens new window)
- ARM 版:点击下载 (opens new window)
- Linux 系统:点击下载 (opens new window)
- 如果您身处海外,可以直接去官方网站 (opens new window)下载对应您系统的安装包
# 安装 Miniconda
在各个系统中安装 Miniconda 的体验与安装其他软件无异,但是在安装过程中有一个需要留意的配置点:
添加命令到环境变量
如果在安装过程中错过了环境变量的选项,可以按如下步骤手工添加
假设您的 Miniconda 安装位置为D:\ProgramData\Miniconda3
(默认安装位置是C:\Users\<用户目录>\miniconda3
,或C:\ProgramData\Miniconda3
,可在安装过程中手工更改)。
将下列值逐个添加到Path
环境变量中(注意在实际操作的时候依据您的实际安装情况来更改目录):
D:\ProgramData\Miniconda3\Scripts
D:\ProgramData\Miniconda3\Library\bin
D:\ProgramData\Miniconda3\Library\usr\bin
D:\ProgramData\Miniconda3\Library\mingw-w64\bin
D:\ProgramData\Miniconda3
添加方法如下:
- 在 Windows 搜索框中搜索
环境变量
或env
,系统会给出最佳匹配项
- 打开配置面板后点击
环境变量
按钮
- 在打开的对话框中找到
Path
列,双击或选中后点击编辑
按钮
- 在打开的对话框中点击
新建
按钮,依次将本节开头的五个路径添加进去,注意根据自己实际安装的配置改变路径,不要直接复制黏贴。配置完成后将会看到如下图所示状态:
- 配置完成后打开一个命令行窗口,输入
conda
回车,如果您看到类似下图的结果,说明配置生效。后续的使用中如果碰到类似No such file or directory
之类关于文件、路径未找到的错误时,可以再次检查一下是否本节描述的五个值都设置正确。
# 创建及切换 Python 虚拟环境
安装好 Miniconda 并配置好环境变量之后,您就可以使用conda
命令方便地进行虚拟环境的配置和管理了。
Python 虚拟环境是 Python 提供的一种依赖管理方式,它允许您在同一台电脑上使用不同版本的 Python、不同版本的依赖来开发不同的程序。环境之间互相独立,互不干涉,还可以随意切换。
用下列命令创建一个名为rqsdk
的 Python 3.9 环境:
conda create -n rqsdk python=3.9
创建完毕后还需要用conda activate rqsdk
来激活刚才创建的环境,这样之后的操作(例如调用pip install
等)就都只会影响这个虚拟环境了。
如果要退出虚拟环境,可以直接在环境激活的状态下运行conda deactivate
命令。
本节仅以 Windows 10 系统为例,更多关于如何使用 conda 命令管理虚拟环境的内容可以参考conda 官方文档——环境管理 (opens new window)章节。
# 升级 Python 环境
如果您已有的环境是低于 Python 3.6 的,请根据您的实际情况升级到 Python 3.6 或以上(推荐升级到最新的 Python 3.9)。我们要求 64-bit 的 Python 环境,如果您的环境是 32-bit 的,请重新安装 64-bit 的环境。
如果您已有环境是 Anaconda 或 Miniconda,可以先用conda update conda
命令更新 conda 工具本身,然后再通过conda activate <env name>
激活您的 Python 虚拟环境,然后运行conda install python=3.9
来安装最新的 Python 到该虚拟环境。
# 中国境内安装加速方案
pip 默认下载源服务器在国外,从中国境内访问速度会比较慢。推荐在全局范围内更改默认 pip 下载源到国内的清华镜像,将会对安装配置速度有非常明显的提升,感谢清华为中国的 Python 发展做出的贡献。
在命令行中运行如下命令可以轻松配置:
conda activate base
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# conda 基本操作
- 查看版本信息
conda --version
- 更新 conda
conda update conda
- 创建一个虚拟环境
conda create -n rqsdk python=3.9
- 激活新的虚拟环境
conda activate rqsdk
- 列出环境信息
conda env list
- 退出当前环境
conda deactivate
- 删除虚拟环境
conda remove --name rqsdk --all
# 在 Powershell 中使用 conda 命令
如果您习惯于 Windows 的 Powershell 环境,则在默认的安装状态下,conda 并不能支持,还需要进行以下步骤。
查看您的 conda 版本
通过conda --version
查看您当前的 conda 版本,分两种情况:
- 版本号大于等于 4.6
- 用管理员权限运行 Powershell
- 执行命令
conda init powershell
- 版本号小于 4.6
- 用管理员权限运行 Powershell
- 输入命令
conda install -n root -c pscondaenvs pscondaenvs
安装PSCondaEnvs (opens new window)包。这里注意正确的命令中确实包含了两个pscondaenvs
,并不是文档写错了。 - 输入命令
Set-ExecutionPolicy RemoteSigned
,随后输入Y
并回车,以更改 Powershell 安全策略 - 在 Powershell 中激活和退出环境的命令分别为
activate rqsdk
和deactivate
,而不是conda activate rqsdk
和conda deactivate
。
如果对 Conda 环境没有特殊要求的话,建议直接通过conda update conda
命令升级到最新版本
# PyCharm 及 vsCode 快速配置
# PyCharm
# 为什么要用 PyCharm?
- PyCharm 作为 IDE(集成开发环境),自带 python 解释器和虚拟环境管理功能,开箱即用。
- PyCharm 默认的内置功能极为丰富(Git、数据库支持、框架支持等),无需手动配置插件便可直接使用。
- PyCharm 内置了在业界无出其右的静态代码审查(code inspect)功能。
# PyCharm 下载
PyCharm 官网 (opens new window)提供了专业版和社区版下载。
- 专业版用于科学计算和 Web 开发。同时具有 HTML、JS 和 SQL 等支持。专业版 PyCharm 支持试用 30 天。
- 社区版用于通常的 Python 开发。免费且开源。
# 创建 PyCharm 工程(Project)
下载且安装完成 PyCharm 后,便可打开 Pycharm 后建立一个项目(Project)。
建立项目时,可以设置项目使用的 Python 解释器/虚拟环境。后续开发中的代码提示、调试等功能都依赖项目配置的虚拟环境
- 点击 Create New Project 按钮
- 展开 Project interpreter
- 选择虚拟环境(若没有已存在环境,则 PyCharm 会自动创建)
- 点击 Create 按钮,创建项目
如果没有 python 环境 ,编辑器右下角会有进度条提示 python 的安装进度。
工程创建完成后,亦可在设置中修改当前工程使用的虚拟环境:
- 点击左上角菜单栏 FIle -> Settings(macOS 中为 PyCharm -> Preference)
- 点击 Project: **** -> Project Interpreter
- 点击右边小齿轮 -> Show All
- 点击加号(+) -> 选择虚拟环境(Virtualenv Environment) 或者 Conda 环境(Conda Environment) `
# 在 PyCharm 中安装 RQSDK
若当前工程配置的虚拟环境中还未安装 RQSDK,可以直接在 PyCharm 中调用终端(terminal)安装,PyCharm 会自动在改终端激活先前配置好的虚拟环境。
若点击左下角 Terminal 以激活终端,输入以下代码以安装 RQSDK
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple rqsdk
# 使用 PyCharm 编写代码
创建 Python 模块(module)
鼠标右键项目文件夹 -> New -> Python File -> 输入文件名
若当前工程正确配置了虚拟环境,且虚拟环境中安装了 RQSDK,在 py 文件中输入“import rq”时便可以看到 PyCharm 给出的代码提示
在 py 文件中输入下列代码,使用 RQDatac 调取日线数据:
import rqdatac rqdatac.init() print(rqdatac.get_price("000001.XSHE"))
在编辑区域点击右键执行 Run... 便可以运行当前代码。
注意,上述代码的运行要求事先使用rqsdk license
命令配置好 license。
当运行
rqsdk install rqalpha_plus
命令后,当前 python 环境也会有 rqoptimizer 和 rqfactor
# 使用 PyCharm 运行回测
回测在终端中需要通过 rqalpha-plus 命令而非 python 命令运行,故在 PyCharm 中运行回测需要进行一些额外的配置,以简单的 buy-and-hold 回测策略为例。
创建名为 buy_and_hold.py 的 python 文件并键入以下代码:
# buy_and_hold.py def init(context): context.s = "000001.XSHE" context.fired = False def handle_bar(context, bar_dict): if not context.fired: order_shares(context.s, 1000) context.fired = True
点击右上角的
Add Configuration
在打开的窗口中将第一项左侧默认的运行方式由
Script path
修改为Module name
设置
Module name
为rqalpha_plus
,设置Parameters
为回测运行的子命令run
及其参数,如:run -f buy_and_hold.py -s 20190101 -e 20191231 -a stock 20000 --plot
- 点击 OK 按钮以完成配置
- 点击右上角的三角形按钮以运行回测,或点击虫子按钮以调试(debug)代码
# Visual Studio Code (VS Code)
# 为什么要用 VS Code?
- 轻量化,下载安装更快;资源占用低,对配置相对不足的计算机更友好。
- 启动快速,首次创建工程时没有漫长等待创建索引的过程。
- 生态健全,有着丰富的第三方主题和插件。
在Visual Studio Code (opens new window)官网可以下载标准版。
# 安装 Python 插件(Extensions)
VScode 不是 python 专用的编辑器,故使用其开发 python 需要安装专门的插件支持才能获得代码提示、审查、调试等功能:
- 在左侧栏点击 Extensions 后,搜索 python,选择搜索到的第一项并点击
install
按钮安装。
# 设置虚拟环境/Python 解释器
- 使用 Ctrl+Shift+P 快捷键(macOS 为 Command+Shift+P)打开 command palette 窗口
- 输入关键字
python select
并找到Python: Select Interpreter
一项, 点击该项并在随后弹出的 Python 解释器列表中选择目标虚拟环境中的解释器(若目标虚拟环境未列出,则需要手工输入解释器的路径)
# 使用 VS Code 编写代码
- 在 VS Code 中点击打开一个系统文件夹,使用 vs code 会在此文件夹中生成配置文件。
- 在打开的文件夹中创建新的 python 文件,文件名
demo_rqdatac.py
)
- 使用 rqdatac 查看平安银行日线数据
文件中输入以下代码:
import rqdatac
rqdatac.init()
print(rqdatac.get_price("000001.XSHE"))
# 用 debug 方式运行回测
首先需配置 pyhton 解释器。
启动 rqalpha debug 模式 需要在 vs code 的配置文件中配置 debug 参数。
debug 配置文件在 .vscode 文件夹下 launch.json 文件中。
需要加入如下代码:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: 模块",
"type": "python",
"request": "launch",
"module": "rqalpha-plus",
"args": [
"run",
"-f",
"examples\\buy_and_hold.py",
"-s",
"2018-01-01",
"-e",
"2018-05-31",
"-fq",
"1m",
"--plot",
"--account",
"stock",
"1000000"
]
}
]
}
配置完成后,即可在需要的文件上打上断点,然后 debug 运行。
# 常见问题
# 1.磁盘空间不足
(rqb) C:\Users\jinjuan\python\examples>rqsdk update-data --tick M1905C2350
开始更新 2 只标的的tick数据:{'M1905', 'M1905C2350'}
[##################------------------] 50%
concurrent.futures.process._RemoteTraceback:
"""
Traceback (most recent call last):
File "c:\users\jinjuan\miniconda3\miniconda\envs\rqb\lib\site-packages\rqalpha\utils\concurrent.py", line 26, in _process_worker
r = call_item.fn(*call_item.args, **call_item.kwargs)
File "rqalpha_plus\bundle.py", line 166, in rqalpha_plus.bundle._append_h5_tick
File "rqalpha_plus\bundle.py", line 186, in rqalpha_plus.bundle._append_h5_tick
File "h5py\_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
File "h5py\_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
File "c:\users\jinjuan\miniconda3\miniconda\envs\rqb\lib\site-packages\h5py\_hl\group.py", line 399, in __delitem__
self.id.unlink(self._e(name))
File "h5py\_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
File "h5py\_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
File "h5py\h5g.pyx", line 304, in h5py.h5g.GroupID.unlink
KeyError: "Couldn't delete link (link count would be negative)"
"""
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "c:\users\jinjuan\miniconda3\miniconda\envs\rqb\lib\runpy.py", line 192, in _run_module_as_main
return _run_code(code, main_globals, None,
File "c:\users\jinjuan\miniconda3\miniconda\envs\rqb\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\Users\jinjuan\Miniconda3\miniconda\envs\rqb\Scripts\rqsdk.exe\__main__.py", line 7, in <module>
File "c:\users\jinjuan\miniconda3\miniconda\envs\rqb\lib\site-packages\rqsdk\__init__.py", line 26, in entry_point
cli()
File "c:\users\jinjuan\miniconda3\miniconda\envs\rqb\lib\site-packages\click\core.py", line 764, in __call__
return self.main(*args, **kwargs)
File "c:\users\jinjuan\miniconda3\miniconda\envs\rqb\lib\site-packages\click\core.py", line 717, in main
rv = self.invoke(ctx)
File "c:\users\jinjuan\miniconda3\miniconda\envs\rqb\lib\site-packages\click\core.py", line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "c:\users\jinjuan\miniconda3\miniconda\envs\rqb\lib\site-packages\click\core.py", line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "c:\users\jinjuan\miniconda3\miniconda\envs\rqb\lib\site-packages\click\core.py", line 555, in invoke
return callback(*args, **kwargs)
File "c:\users\jinjuan\miniconda3\miniconda\envs\rqb\lib\site-packages\rqalpha_plus\cmds.py", line 66, in update_bundle
update_tick(os.path.join(path, "h5", "ticks"), tick, with_derivatives, concurrency)
File "rqalpha_plus\bundle.py", line 217, in rqalpha_plus.bundle.update_tick
File "c:\users\jinjuan\miniconda3\miniconda\envs\rqb\lib\concurrent\futures\_base.py", line 636, in __exit__
self.shutdown(wait=True)
File "c:\users\jinjuan\miniconda3\miniconda\envs\rqb\lib\site-packages\rqalpha\utils\concurrent.py", line 94, in shutdown
raise fut.exception()
KeyError: "Couldn't delete link (link count would be negative)"
请查看您存储数据的磁盘是否有足够的可用空间,若可用空间不足,请清理一些空间后再次更新数据,如无法解决该问题,请联系我们协助您解决。
# 2.本地 bundle 数据被损坏
一般报上述错误原因是本地数据被损坏,请找到该指定文件进行删除,然后重新执行一次更新即可。
# 3.同时对本地 bundle 进行读写操作
更新数据时报错:unable to create file 'resource temporaily unavailable'
通常是由于其他程序在占用 bundle 文件导致的,更新数据过程中,请不要运行回测,避免出现同时读写数据的情况。
# 4.简单举例说明如何更新数据
- 更新基础日线
rqsdk update-data --base
- 更新分钟线
## 更新某几个合约的分钟线
rqsdk update-data --minbar 000001.XSHE --minbar 000002.XSHE --minbar IF2006
## 更新某个期货品种的分钟线
rqsdk update-data --minbar RB
## 更新某个资产的分钟线,耗时较长,可能会突破流量限制,不建议这样更新
rqsdk update-data --minbar futures
## 更新某个合约分钟线的同时也更新日线
rqsdk update-data --base --minbar 000001.XSHE
## 更新某个合约的分钟数据的同时也更新该合约的相关衍生品数据
rqsdk update-data --minbar M1905 --with-derivatives
- 更新 tick
## 更新合约tick数据使用方式和更新分钟线类似
rqsdk update-data --tick M1905
更新数据的完整参数说明可通过运行 rqsdk update-data --help
查看
# 5.将 bundle 数据下载到指定位置
## 用 -d 指定下载数据的保存位置,如将 000001.XSHE的最新分钟数据下载到D:\bundle
rqsdk update-data --minbar 000001.XSHE -d D:\bundle
# 6.查询下载到本地的 bundle 数据
首先找到对应的 bundle 文件,默认会下载到 C 盘用户目录下的的.rqalpha-plus 文件夹下,以股票日线为例就是 C:\Users\用户.rqalpha-plus\bundle\stocks.h5,然后在 python 中使用下列代码进行查询
import h5py
import pandas
import numpy as np
file_path = r"C:\Users\rice\.rqalpha-plus\bundle\stocks.h5"
#r只读,r+读写,不创建
h5 = h5py.File(file_path,"r")
order_book_id = "000401.XSHE"
#print(h5[order_book_id][()])
#print(h5.keys())
#print(order_book_id in h5.keys())
#print(h5[order_book_id].value)
#df = pandas.DataFrame(h5[order_book_id].value)
df = pandas.DataFrame(h5[order_book_id][()])
# 具体查询某个日期
df[df['datetime']==np.int64('20051130000000')]
# 7.运行回测报错找不到指定模块
报错类似下图
一般是需要重新安装所缺的包
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple h5py --force-reinstall
# 8.如何查看某次回测的交易流水
参见 RQAlpha Plus 使用教程保存回测结果 (opens new window)
# 9.运行回测日志报订单创建失败: 下单量为 0 的 WARN
一般是用 order_target_percent 或者 order_target_value 的时候容易出现,原因是调仓的股票下单数量小于 100 股导致的。举例说明:已有 300268 的持仓 57500 股,用 Order_target_pecent 下单的目标仓位是 57511,也就是要再买 57511-57500=11 股,11 股不满足 100 的整数倍的交易规则,所以出现这个 WARN。
# 10. linux 系统上运行样例策略报错
报错提示:tkinter.TclError: couldn't connect to display "localhost:10.0"
原因是 Linux 系统没有 GUI,图片无法展示,把运行回测命令里面的 --plot 去掉
# 11. 如何在 Apple Silicon(M1)平台的 Mac 上安装 RQSDK?
从 1.4.1 开始,RQSDK 开始提供为 M1 平台原生编译的版本(该版本暂不包含 RQOptimizer),但在现阶段——因为众多第三方包的支持问题——x86 版本仍然是兼容性更好的选择。
如您希望安装 x86 版本的 rqsdk,您需要首先安装 x86 版本的 conda (opens new window),并在该 conda 创建的虚拟环境中按照一般的安装流程安装 RQSDK 。
如您暂不需要用到 RQOptimizer,且希望拥有更好的执行性能,您可以选择安装 ARM 版本。您只需要安装 ARM 版本的 conda (opens new window),并在该 conda 创建的虚拟环境中安装 RQSDK 即可。
# 版本变更
更新 rqsdk 及相关产品版本的操作,见前文更新 sdk 的版本部分的介绍。
rqsdk 版本号 | 发布日期 | 新功能/改善 | Bug 修复 |
---|---|---|---|
1.5.13 | 2024-5-8 | 1. RQAlpha Summary 年度指标增加 Alpha、Beta 内容 2. 优化 RQAlpha 回测流水上传至米筐 AMS 功能 | 1. RQAlpha 优化 portfolio 的 cash 账户存在负数的情况 2. 修复 RQAlpha 增量回测报错问题 |
1.5.12 | 2024-4-16 | 1. RQAlpha Summary 报告增加压力测试期 2. RQAlpha 支持基准合约在上市前的行情(主要为指数) 3. RQAlpha 下单 API 在下单失败时发布 ORDER_CREATION_REJECT 事件 | |
1.5.11 | 2024-3-29 | 1. RQAlpha 行权操作、分红再投资加入交易流水记录中 2. RQAlpha 的 open_auction 阶段成交量限制优化 | 1. 修复获取 tick_size 报错问题 2. 期货交割日 trading_pnl 计算异常问题修复 |
1.5.10 | 2024-2-26 | 1. 兼容 RQData 3.0 | 1. 修复期货分钟线更新重复的问题 2. 修复 RQAlpha 的 init_positions 无法设置空仓位的问题 |
1.5.9 | 2024-2-4 | 1. RQAlpha 支持使用时间序列的期货费率及保证金数据进行回测 2. RQAlpha 回测的印花税收取新增 PIT 模式,即可使用回测当时时间点对应的真实印花税率进行计算 3. RQSDK 兼容 Python 3.12 | 1. 修复 history_bars 无法获取期权夜盘数据的问题 |
1.5.8 | 2023-12-8 | 1. RQAlpha mod syslyser 增加 strategy_name 参数,可自定义设置summary、输出报告的策略名、回测结果图中的标题 2. 更新和优化期权手续费,且支持在品种级别上自定义期权费率 | 1. 回测结果导出的csv乱码问题修复 2. 期货夜盘超过 23:00 无法正常下单问题修复 3. 优化基准合约上市日期晚于回测起始日期的报错 4. RQAlpha 期权回测报告文件中,position.csv 中 pnl 字段错误问题修复 |
1.5.7 | 2023-10-16 | 1. 回测时输出的日志支持同时输出至指定文件 | 1. 基金回测份额异常问题修复 2. 期权费率信息异常问题修复 |
1.5.6 | 2023-9-18 | 1. RQOptimizer 兼容 Python==3.11.x | 1. RQAlpha 期货夜盘分钟回测时,open_auction 获取到错误的最新价的问题 2. 执行算法单时,若回测结束时间超过可转债强赎时间时,回测报错的问题 3. 算法单报分钟线缺失的错误问题 |
1.5.5 | 2023-9-4 | 1. RQAlpha 回测报告中引入超额夏普指标 2. RQAlpha_plus 可转债回测新增批量调仓 3. RQAlpha 回测调整默认印花税 4. RQAlpha_plus 分钟线 bundle 更新速度优化 | 1. 可转债付息异常问题 2. 更新期权数据报错问题 3. 期货退市交割时总权益计算错误 4. RQAlpha 在 open_auction 阶段获取 current_snapshot 信息有误 |
1.5.4 | 2023-8-9 | 1. rqalpha_plus 支持在回测成功执行后将流水上传至 [米筐 AMS] 指定产品 2. RQPAttr 兼容 pandas 2.0 版本 | 1. RQAlpha 分钟回测时,期货订单挂单在非交易时间被拒单问题 2. RQAlpha 运行回测时,进行股指期权交易时出现异常的问题 |
1.5.3 | 2023-7-24 | 1. 修复基金回测仓位异常导致的无法平仓问题 | |
1.5.2 | 2023-7-7 | 1. RQPAttr 支持可视化输出(即将分析结果导出为 Excel) | 1. RQAlpha 修复下单 API 参数顺序问题导致的下单行为错误问题 |
1.5.1 | 2023-6-16 | 1. RQAlpha 引入获取期货主力连续合约行情数据 API futures.get_dominant_price(支持动态复权) 2. RQAlpha 回测结果新增个股权重检测(内容新增到输出的回测结果文件中) 3. RQOptimizer 兼容 pandas 2.0 版本 | 1. rqsdk update 无法正常升级 rqsdk 版本问题 2. RQAlpha 执行日内回转交易时,trading_pnl 数值异常问题 |
1.5.0 | 2023-6-5 | 1. RQAlpha 支持在日回测中发送分钟级 VWAP/TWAP 算法单 2. 兼容性调整: - RQPAttr 支持 Mac ARM 平台 - RQAlpha、RQData、RQFactor 兼容 pandas 2.0 3. RQAlpha 交易指数时不再限制 listed_date 4. RQAlpha 回测适配期权新品种(如 RB 品种) 5. RQAlpha 中,order_target_portfolio 交易接口未设置价格时,调整为使用市价单下单 | 1. 欧式期权到期日主动行权存在异常 2. 期权自动行权没有收取手续费 3. 期权上市第一天下单报错的问题 4. RQAlpha 在 Trade 事件处理函数中发单异常 5. RQAlpha 期货账户 cash 计算有误 6. 更新分钟 bundle 异常问题 7. 期权分开下单时,总平仓数量可超过持仓数量的问题 8. 调用 excess_annual_return 时显示多余的异常信息 |
1.4.15 | 2023-4-14 | 1. RQAlpha 支持分别配置股票期货的佣金倍率 2. RQSDK 适配 Python 3.11.x | 1. get_positions 在非交易日时间获取 position 报错问题修复 |
1.4.14 | 2023-3-23 | 1. RQSDK 新增 RQPattr 绩效分析模块 2. RQSDK check-data 命令新增对日线的支持 3. RQAlpha 回测报告的”年度指标”中引入以下指标: - 超额收益年化波动率 - 绝对收益的最大回撤和对应的回撤持续时间 - 绝对收益的年化波动率 4. RQAlpha order_target_portfolio 支持分别自定义开平仓价格 5. RQOptimizer 及其依赖包支持 Mac ARM64 版本 | 1. 期权、期货混合 tick 策略报错问题修复 2. RQAlpha 夏普率计算错误问题修复 |
1.4.13 | 2023-3-3 | 1. 重新定义超额收益率、超额年化收益、超额回撤等指标 2. RQAlpha 支持使用结算价结算期货 3. RQSDK 兼容 matplotlib 3.7 | 1. RQAlpha 输出的跟踪误差未做年化处理的问题修复 2. 商品期权保证金计算错误问题修复 3. ubuntu Python 3.10 更新回测数据报错问题修复 |
1.4.12 | 2023-1-17 | 1. RQAlpha 回测结果报告改善,包括指标的增加及数字格式规范 2. RQAlpha 回测报告年度指标增加跟踪误差 | |
1.4.11 | 2023-1-6 | 1. RQAlpha 回测结果及报告新增如下指标: - 周度累计回撤深度 - 周度累计回撤夏普率 - 周度超额累计回撤深度 - 周度超额累计回撤夏普率 | 1. 修复 RQAlpha 回测结果图的水印异常问题 |
1.4.10 | 2022-12-27 | 1. RQAlpha 适配次主力合约数据 | 1. 修复增量回测中使用 open_auction 函数报错的问题 |
1.4.9 | 2022-11-11 | 1. RQAlpha 的 account 对象中的”持仓总权益”属性由字段 equity 修改为 position_equity 2. RQAlpha 增加报告图模板功能 3. 回测新增 Fund 类型,用于进行”reits 类基金”和”非 ETF/LOF 的封闭式基金”的回测 | 1. RQSDK 兼容 rqdatac>2.10.7,解决 RQSDK 更新基础数据报错的问题 2. 修复 RQAlpha 运行期货分钟线回测时,抛出期货日期不合法的错误 3. 修复 RQAlpha 回测无交易记录时,在收益图中展示买卖点时报错的问题 |
1.4.8 | 2022-10-13 | 1. RQAlpha 回测结果的 win_rate(胜率)计算方法修改为:绝对收益大于零的期数的比例 2. RQAlpha 回测结果指标图修改: 1)指标”胜率、波动率、超额收益波动率、最大回撤、跟踪误差、周度胜率”修改为百分比展示 2)超额收益波动率修改为年化指标 3. RQAlpha 更新部分期权费率数据 | 1. 修复基金回测进行拆分操作时报错的问题 |
1.4.7 | 2022-9-15 | 1. RQAlpha 回测结果增加胜率、盈亏比指标 | 1. 修复回测清仓时股票账户手续费异常的问题 2. 修复期货类型回测调用 context.portfolio.positions 报错的问题 |
1.4.6 | 2022-8-19 | 1. 解决 rqsdk 更新数据时内存占用过大的问题 | |
1.4.5 | 2022-8-11 | 1. 回测报告及返回值中增加如下指标: 1)最长回撤持续期(max_drawdown_duration) 2)超额收益最长回撤持续期(excess_max_drawdown_duration) 2. rqalpha 增加融资功能: 1)支持股票账户的负债,对负债进行每日计息,用户可自行设定融资利率 2)限制融资买入标的,用户可选择是否开启融资买入标的的限制;当开启限制时,股票账户不可买入融资融券股票列表外的股票 3. rqalpha 调整默认的撮合方式: 1)rqalpha config 中 matching_type 的默认值改为 None,表示根据回测频率自动选择 2)日/分钟回测下选择 current_bar,tick 回测下选择 last | 1. WT 品种下单报错不支持该期货标的问题修复 2. rqfactor-utils 因子值时间超过 5 个月出现报错问题修复 |
1.4.4 | 2022-7-13 | 1. tick 回测撮合机制改善: 1)tick 回测中不再触发 open_auction,开盘前的 tick 也触发 handle_tick 2)tick 回测加入基于 tick 的成交量限制,成交量限制为两个 tick 的 volume 之差乘以 volume_percent 3)集合竞价的撮合无视 matching_type 的设置,采用 last 撮合 2. rqrisk 支持按照自然日执行年化 | 1. tick 数据更新提示优化 2. 修复由于更新 bundle 中断导致的分钟线数据异常问题 |
1.4.3 | 2022-6-15 | 1. RQSDK 适配 python 3.10 | 1. rqsdk install/update 命令改善 2. 修复增量回测时结果图出现突变的问题 |
1.4.2 | 2022-5-19 | 1. 回测输出增加超额累计指标,替换原收益图上的超额收益年化波动率 | 1. 修复基金回测异常的问题 2. 更新调整期货夜盘 tick 数据出现错误的问题 3. 修复 history_bars 的 include_now 参数偶尔不生效的问题 |
1.4.1 | 2022-4-7 | 1. rqdata、rqfactor、rqalpha_plus 支持 Apple Silicon(M1)平台 | |
1.4.0 | 2022-3-17 | 1. 改善回测输出的 summary,修改 csv 为 excel,展示更多的内容 2. 优化 Alpha 多因子大持仓选股策略的性能表现 | 1. 修复 rqrisk 指标计算 2. 修复 tick 回测默认从 rqdata 获取行情的问题 |
1.3.15 | 2022-3-04 | 1. 更新 rqfactor == 1.2.3,增加基准设置: 1)engine.analysis 增加 benchmark 基准,支持输入指数作为基准 2)quantilereturnanalysis 返回结果增加:基准累计收益率、绘图增加基准收益率曲线 2. Python 版本限制>= 3.6.1 | |
1.3.14 | 2022-1-21 | 1. 更新期权费率数据 更新燃 rqfactor == 1.2.2,IC 行业分布支持任意频率 2. 更新 rqdata == 2.9.44 | 1. 修复“bundle 价格数据正常但报错价格不合法:nan”问题 2. 修复 rqfactor 出现“Boolean index has wrong length”的问题 |
1.3.13 | 2021-12-24 | 1. rqoptimizer2 升级至 1.2.16,增加如下约束条件: 1)指数权重约束:对某一指数成分股的头寸进行上下限约束 2)自定义组合权重约束:与指数权重约束类似,自定义股票池时,对其中的成分股占比进行上下限头寸约束 3)成交量:用户传入当前可用资金或初始头寸,进行成交量百分比的约束 4)成交市值限制:用户传入当前可用资金或初始头寸,进行成交市值占总市值百分比的约束 2. 优化了 tick bundle 的下载性能和存储空间占用 | 1. 修复了在设置初始化持仓后进行分钟、tick 回测时报错的问题 |
1.3.12 | 2021-12-02 | 1. 限制 rqdatac 版本 ≥ 2.9.42,修复使用 RQOptimizer 报错的问题 2. 限制 rqfactor 版本 ≥ 1.2.1,修复引入 rqfactor 时缺少 bokeh 的问题 | |
1.3.11 | 2021-12-02 | 1. 回测结果收益图中增加买卖点,通过设置"open_close_points"进行开启 2. RQAlpha 在 signal 模式下开启 price_limit 选项时,超出涨跌停价格范围的订单将会被拒绝 3. 回测结果收益图中的周度因子和曲线调整为默认不展示,通过参数开启 4. 移除了 RQSDK 中与银行间债券相关的组件及内容 5. RQFactor 升级至 1.2.0,新增 FactorAnalysisEngine | |
1.3.10 | 2021-11-19 | 1. 兼容因更新 bundle 过程意外中断导致的 h5 文件不完整的问题修复 | 1. 合约未上市导致分钟线 bundle 出现异常文件问题修复 |
1.3.9 | 2021-10-19 | 1. 回测收益图增加超额收益曲线及相关指标 回测收益图增加周度收益曲线及对应指标统计 | 1. 公募基金回测无法平仓问题修复 |
1.3.8 | 2021-09-26 | 1. ETF 分红情况问题修复 2. 可转债、期权 tick 回测部分 bug 修复 | |
1.3.7 | 2021-09-16 | 1. 修复部分已知 bug | |
1.3.6 | 2021-07-21 | 1. 修复期权回测结果差异较大的问题 | |
1.3.5 | 2021-07-06 | 1. RQSDK 所有功能适配 Python 3.9 | |
1.3.4 | 2021-06-21 | 1. rqalpha_plus 回测兼容 tushare 2. tick 回测引入 counterparty_offer 的撮合方式 3. 改善在使用--smart 更细对不支持的标的时的处理方式 | 1. rqfactor 因子检验的 shift 参数无法设置为其他参数的问题修复 |
1.3.3 | 2021-05-18 | 1. 优化 RQSDK 部分默认依赖项的版本号 2. rqalpha 增加 get_pit_financials_ex API 3. 改善因并发访问文件导致 bundle 更新失败时的错误提示 4. rqalpha 画图结果增加 RiceQuant 水印 | 未设置基准合约时结果中仍有信息比率和年华跟踪误差的修复 回测结果基准收益率小数点修复 rqalpha 持仓收益计算错误修复 |
1.3.2 | 2021-04-01 | 1. 分钟回测 history_bar 支持获取周线 2. 引入 VWAP 成交价,支持回测时使用 VWAP 价格成交 3. 调整修改数据更新时间(17:30 后可获取当前交易日的分钟、tick 数据) 4. 修改科创板下单股数限制机制 5. 限制 pandas 版本 ≥0.24.2,避免部分版本问题的发生 | 1. 回测资金出现负数问题修复 2. 增量更新数据时 line_no 数据错误问题修复 3. 安装 rqalpha_plus 时出现报错的问题修复 |
1.3.1 | 2020-12-31 | 1. 可转债回测出现没有基金数据权限的报错 2. 回测 history_bars('110047.XSHG',3,'1d','close')报错 | |
1.3.0 | 2020-12-28 | 1. 公募基金回测 2. 交易所债券回测 3. 新增出入金、管理费用设置、自定义基准、增量回测功能 4. rqfactor 支持将因子检验结果绘图保存至本地 5. 优化 rqfactor 报错提示信息 | |
1.2.20 | 2020-11-09 | 1. 增加卖出整手限制 2. 增加设置印花税倍率参数 tax-multiplier 3. 增加设置性能分析的参数 enable_profiler | 1. 用户 tick 回测策略跳过了 before_trading |
1.2.19 | 2020-09-15 | 1. 回测 sortino 指标和 downside risk 指标的阈值由基准收益率改为无风险收益率 | 1. bundle 下载地址路径和回测调用 bundle 路径不一致 2. 对更新数据过程中进程意外退出导致的 h5 文件损坏进行处理 3. 更新 rqafctor 版本,修复 rqfactor 画图结果异常问题 |
1.2.18 | 2020-08-14 | 1. rqalpha 针对债券数据改动进行适配 2. 补齐 rqsdk --help 命令中遗漏的描述信息 | |
1.2.17 | 2020-07-30 | 1. rqsdk license 新增参数 -l 设置 license 2. 可转债强赎触发由登记日改成理论兑付日 payment_date | 1. rqsdk 安装后 .rqalpha-plus 路径没有创建导致下载数据失败 2. 可转债回测相关 bug |
1.2.16 | 2020-07-07 | 1. 流量超额和账户到期后无法查看 rqsdk license 信息的问题 | |
1.2.15 | 2020-06-21 | 1. rqsdk 命令行兼容旧版本的 pip 2. 针对不完整的 bundle 文件,回测时提示信息优化 | |
1.2.14.1 | 2020-06-09 | 1. 可转债回测验券风控未生效 2. download-data 在 .rqalpha-plus 目录不存在时会出现异常 | |
1.2.13 | 2020-06-03 | 1. rqsdk 支持的命令改善 |