rqalpha简介
优点:
- rqalpha简单易学,能很快上手
- rqalpha具有灵活的配置方式和比较强大的扩展性,可以比较容易地定制
- rqalpha所有的策略都可以直接在 Ricequant上进行回测和实盘模拟,并且可以通过微信和邮件实时推送交易信号
缺点:
- rqalpha不支持港美股回测&交易,可以自定义支持,但成本不小
- rqalpha仅限非商业使用,如需商业使用,需要联系官方
- Ricequant实盘模拟需要开通企业版
- rqalpha本身支持不同周期的回测和实盘交易,但是目前只免费开放A股市场日线数据,如果用户需要做分钟回测或者更细级别的回测可以在 Ricequant上进行,也通过实现数据层接口函数来使用自己的数据
rqalpha安装
1 | pip install rqalpha |
RiceQuant免费提供日级别的股票、常用指数、场内基金和期货数据供回测使用。数据每个月月初更新,可以通过以下命令来下载和更新:$ rqalpha download-bundle
bundle 默认存放在 ~/.rqalpha 下,也可以指定 bundle 的存放位置$ rqalpha download-bundle -d target_bundle_path
如果使用了指定路径来存放 bundle,那么执行程序的时候也同样需要指定对应的 bundle 路径。$ rqalpha run -d target_bundle_path .....
如果申请了免费试用(免费试用15天,试用账户进行了每天 50MB 的配额限制,申请链接)或者付费购买了米筐数据服务,可以使用 RQDatac 在每日盘后即时更新回测数据,更新命令如下:$ rqalpha update-bundle
运行以下命令,将会在指定目录生成一个examples文件夹,其中包含几个有趣的样例策略:
$ rqalpha examples -d ./
运行回测
1
2$ cd examples
$ rqalpha run -f rsi.py -s 2020-01-01 -e 2021-01-01 -o result.pkl --plot --progress --account stock 100000绘制回测结果:如果运行完回测后,还需要再次绘制回测结果,可以运行以下命令:
$ rqalpha plot result.pkl
rqalpha使用
rqalpha抽离了策略框架的所有技术细节,以API的方式提供给策略研发者用于编写策略,从而避免陷入过多的技术细节。
rqalpha的 API主要分为约定函数、数据查询接口、交易接口等几类。
约定函数: 作为 API 的入口函数,用户必须实现对应的约定函数才可以正确的使用RQAlpha
1
2
3
4* init() : 初始化方法,会在程序启动的时候执行
* handle_bar(): bar数据更新时会自动触发调用
* before_trading(): 会在每天策略交易开始前调用
* after_trading(): 会在每天交易结束后调用示例代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):
# 在context中保存全局变量
context.s1 = "000001.XSHE"
# 实时打印日志
logger.info("RunInfo: {}".format(context.run_info))
# before_trading此函数会在每天策略交易开始前被调用,当天只会被调用一次
def before_trading(context):
logger.info("开盘前执行before_trading函数")
# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context, bar_dict):
logger.info("每一个Bar执行")
logger.info("打印Bar数据:")
logger.info(bar_dict[context.s1])
# after_trading函数会在每天交易结束后被调用,当天只会被调用一次
def after_trading(context):
logger.info("收盘后执行after_trading函数")数据查询接口
需要获取数据,根据数据来确定我们的仓位逻辑,因此会使用到数据查询的 API接口。
1 | * all_instruments() : 获取所有合约基础信息数据 |
- 交易接口
rqalpha提供了多种交易接口,以方便不同的使用需求。1
2
3
4
5
6
7
8
9
10
11
12* order_shares(): 【股票专用】指定股数交易
* order_lots(): 【股票专用】指定手数交易
* order_value(): 【股票专用】指定价值交易
* order_percent():【股票专用】 一定比例下单
* order_target_value(): 【股票专用】按照目标价值下单
* order_target_percent(): 【股票专用】按照目标比例下单
* buy_open(): 【期货专用】买开
* sell_close():【期货专用】 平买仓
* sell_open(): 【期货专用】卖开
* buy_close(): 【期货专用】平卖仓
* cancel_order(): 撤单
* get_open_orders(): 获取未成交订单数据
rsi.py示例代码
1 | from rqalpha.apis import * |
多种方式运行策略
- 命令行运行:rqalpha run -f rsi.py -s 2020-01-01 -e 2021-01-01 -o result.pkl –plot –progress –account stock 100000
- 使用配置文件运行策略: rqalpha在运行策略时候会在当前目录下寻找 config.yml 或者 config.json 文件作为用户配置文件来读取,可以创建config.yml 配置文件,里面配置项为strategy_file: .buy_and_hold.py
- 策略内配置参数信息
- 通过引用 rqalpha库在代码中运行策略:使用 run_file、run_code、 run_func函数来运行策略
创建mod
rqalpha提供了拓展性较强的Mod Hook接口,这意味着开发者可以比较容易的对接第三方库。
1 | $ rqalpha mod list # 查看当前安装的 Mod 列表及状态 |
扩展rqalpha API:如果你想为 rqalpha 创建自己的 API,可以通过 Mod 来注册新的 API。在内建的 mod 中,有一个 FuncatAPIMod,将通达信、同花顺的公式表达能力移植到python中,扩展了 rqalpha的 API
扩展rqalpha实现自有数据的读取:rqalpha不限制本地运行的策略调使用哪些库,因此可以直接在策略中读取文件、访问数据库等,但需要关注如下两个注意事项:
- 请在 init, before_trading, handle_bar, handle_tick, after_trading 等函数中读取自有数据,而不要在函数外执行数据获取的代码,否则可能会产生异常。
- rqalpha是读取策略代码并执行的,因此实际当前路径是运行 rqalpha 命令的路径,策略使用相对路径容易产生异常。如果您需要根据策略路径来定位相对路径可以通过context.config.base.strategy_file 来获取策略路径,从而获取相对策略文件的其他路径
rqalpha采用logbook 作为默认的日志模块,可以通过在 mod 中为 logger添加 handler 实现自定义的日志收集
诸葛说 基于rqalpha文档行情数据 - 五十行代码接入 tushare 行情数据完善了tushare mod接口,增加了对tspro接口的支持,参见rqalpha_mod_tushare
交流
我发文章的几个地方,欢迎大家在朋友圈等地方分享,多多交流。
- 微信公众号:诸葛说talk
- 知乎:https://www.zhihu.com/people/richard-zhu/posts
- 博客:https://rchardzhu.github.io/