一、rqalpha简介

  • rqalpha是米筐量化开源的从数据获取、算法交易、回测引擎、实盘模拟、实盘交易到数据分析的程序化交易框架。跟quantopian开源的zipline从api到本地运行方式都比较类似

优点:

  • rqalpha简单易学,能很快上手
  • rqalpha具有灵活的配置方式和比较强大的扩展性,可以比较容易地定制
  • rqalpha所有的策略都可以直接在 Ricequant上进行回测和实盘模拟,并且可以通过微信和邮件实时推送交易信号

缺点:

  • rqalpha不支持港美股回测&交易,可以自定义支持,但成本不小
  • rqalpha仅限非商业使用,如需商业使用,需要联系官方
  • Ricequant实盘模拟需要开通企业版
  • rqalpha本身支持不同周期的回测和实盘交易,但是目前只免费开放A股市场日线数据,如果用户需要做分钟回测或者更细级别的回测可以在 Ricequant上进行,也通过实现数据层接口函数来使用自己的数据

二、rqalpha安装

$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主要分为约定函数、数据查询接口、交易接口等几类。

1. 约定函数: 作为 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函数")

2. 数据查询接口
需要获取数据,根据数据来确定我们的仓位逻辑,因此会使用到数据查询的 API接口。

1
2
3
4
5
6
7
8
9
10
11
* all_instruments() : 获取所有合约基础信息数据
* instruments() : 获取合约详细数据
* history_bars() : 获取某一合约的历史数据
* current_snapshot() : 获取当前快照数据
* get_future_contracts() : 获取期货可以交易合约列表
* get_trading_dates(): 获取交易日列表
* get_previous_trading_date() : 获取上一日交易日
* get_next_trading_date() : 获取下一个交易日
* get_yield_curve(): 获取收益率曲线
* is_suspended() : 判断某股票当天是否停牌
* is_st_stock() : 判断某股票是否为 *st

3. 交易接口
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from rqalpha.apis import *import talib# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):# 选择我们感兴趣的股票context.s1 = "000001.XSHE"context.s2 = "601988.XSHG"context.s3 = "000068.XSHE"context.stocks = [context.s1, context.s2, context.s3]context.TIME_PERIOD = 14context.HIGH_RSI = 85context.LOW_RSI = 30context.ORDER_PERCENT = 0.3# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context, bar_dict):# 开始编写你的主要的算法逻辑# bar_dict[order_book_id] 可以拿到某个证券的bar信息# context.portfolio 可以拿到现在的投资组合状态信息# 使用order_shares(id_or_ins, amount)方法进行落单# TODO: 开始编写你的算法吧!# 对我们选中的股票集合进行loop,运算每一只股票的RSI数值for stock in context.stocks:# 读取历史数据prices = history_bars(stock, context.TIME_PERIOD+1, '1d', 'close')# 用Talib计算RSI值rsi_data = talib.RSI(prices, timeperiod=context.TIME_PERIOD)[-1]cur_position = get_position(stock).quantity# 用剩余现金的30%来购买新的股票target_available_cash = context.portfolio.cash * context.ORDER_PERCENT# 当RSI大于设置的上限阀值,清仓该股票if rsi_data > context.HIGH_RSI and cur_position > 0:order_target_value(stock, 0)# 当RSI小于设置的下限阀值,用剩余cash的一定比例补仓该股if rsi_data < context.LOW_RSI:logger.info("target available cash caled: " + str(target_available_cash))# 如果剩余的现金不够一手 - 100shares,那么会被ricequant 的order management system reject掉order_value(stock, target_available_cash)

四、多种方式运行策略

  • 命令行运行: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
2
3
$ rqalpha mod list # 查看当前安装的 Mod 列表及状态
$ rqalpha mod enable xxx # 启用
$ rqalpha mod disable xxx # 关闭
  • 扩展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
  • 博客:量化小站​​​​​​​

参考

  • rqalpha github
  • rqalpha介绍
  • zipline和rqalpha对比
  • rqalpha扩展事件源
  • rqalpha扩展数据源
  • rqalpha策略示例
  • rqalpha基础api

量化框架rqalpha入门相关推荐

  1. 米筐开源量化框架 RQalpha 安装使用

    RQalpha 是 Ricequant 开源的量化框架,提供数据获取,算法交易,策略回测,实盘模拟,实盘交易,数据分析等功能.RQalpha 的安装过程并不十分友好,本文讲述如何安装 RQalpha. ...

  2. 《Python股票量化交易从入门到实践》随书赠送“回测框架”的使用帮助

    点击:QTYX最新版本使用指南[文字版] 点击:QTYX最新版本使用指南[视频版] 点击: QTYX历史版本更新说明 赠送"回测框架"的目的 为了帮助读者再建立一座从书本知识到实战 ...

  3. 量化交易平台Ptrade、QMT框架,入门

    ·量化投资从入门到入土 ·免费提供Ptrade.QMT技术支持与疑问解答 ·帮助搭建量化交易平台及风控系统 ·这个账号会持续更新相关示例的讲解,欢迎关注 ·欢迎深入交流 ~~~~~~~~~~~~~~~ ...

  4. 知识星球《玩转股票量化交易》之Backtrader量化框架的使用说明

    量化交易是一个多技术综合的项目,学习完书籍<Python股票量化交易从入门到实践>我们再次升级学习的内容--知识星球<玩转股票量化交易> 在星球中我们会深入分享包括Python ...

  5. Python量化交易学习入门

    量化交易-Python实现 一.量化交易的流程和概念 1.数据分析I2O流程 2.量化交易和高频交易.自动交易的区别 3.量化交易的流程 二.量化交易的分类 三:常用量化框架 四.一个完整的策略 五. ...

  6. Quartz 框架快速入门(二)

    尽可能的用声明式处理软件配置,其次才考虑编程式的方式.在上一篇<Quartz 框架快速入门(一)>中,如果我们要在 Job 启动之后改变它的执行时间和频度,必须去修改源代码重新编译.这种方 ...

  7. node.js Web应用框架Express入门指南

    node.js Web应用框架Express入门指南 作者: 字体:[增加 减小] 类型:转载 时间:2014-05-28 我要评论 这篇文章主要介绍了node.js Web应用框架Express入门 ...

  8. Quartz 框架快速入门(四)

    Spring的scheduling.quartz包中对Quartz框架进行了封装,使得开发时不用写任何QuartSpring的代码就可以实现定时任务.Spring通过JobDetailBean,Met ...

  9. Quartz 框架快速入门(三)

    在前面两篇文章中简单介绍了在java应用程序中如何使用Quartz框架,这一篇中我们将看到如何在web环境下通过配置文件来完成Quartz的后台作业调度,而不必手工去创建Trigger和Schedul ...

最新文章

  1. 2015.11.11
  2. 生日快乐的代码_生日快乐,我的上电!
  3. C语言数据段分类,13.2.1 段的分类
  4. 微软Azure CDN现已普遍可用
  5. windows 下更新 npm 和 node
  6. 线程、协成、IO模型
  7. Cloud一分钟 | 马云发表致股东的公开信;5G算什么?中国已着手研究6G相关工作...
  8. MySql数据库常用命令宝典
  9. return另外一个用法
  10. Windows下如何使用CMD命令进入MySQL数据库
  11. win8 计算机配置,Win8如何进行系统配置
  12. tomcat的服务器目录在哪个文件夹,Tomcat目录结构详细介绍
  13. android studio run的时候一直卡在waiting for debug
  14. PKU 2528 POJ 2528 Mayor's posters ( 线段树+离散化 ) ACM 2528 IN PKU
  15. linux c语言头文件 在另外的地方,linux下的c语言的头文件在windows下头文件是哪几个?...
  16. 关于 Java 数组的 12 个最佳方法
  17. linux 锐捷 dns,锐捷Linux
  18. 大漠插件注册使用方法教程
  19. 原创Maya mel系列插件推荐
  20. python docx 设置字体大小_python docx字体设置

热门文章

  1. Threejs纹理对象Texture阵列、偏移、旋转(纹理动画)
  2. 傻子都能看懂的——信息熵(香农熵)
  3. Mock InjectMocks ( @Mock 和 @InjectMocks )区别
  4. MATLAB学习笔记:求导数
  5. 学习总结HTML CSS JAVASCRIPT,对三剑客的一些理解
  6. Linux设备管理: kobject、kset、ktype分析
  7. std:;remove_if用法讲解
  8. Codeforces 832D题解报告
  9. visionPro8.2r紧急许可重复利用方法
  10. xcode 报Remote object proxy returned error: Error Domain=NSCocoaErrorDomain Code=4099 The connec...