介绍
RQAlpha 从数据获取、算法交易、回测引擎,实盘模拟,实盘交易到数据分析,为程序化交易者提供了全套解决方案。
RQAlpha 具有灵活的配置方式,强大的扩展性,用户可以非常容易地定制专属于自己的程序化交易系统。
特点
易于使用 | 让您集中于策略的开发,一行简单的命令就可以执行您的策略。 |
完善的文档 | 您可以直接访问 RQAlpha 文档 或者 Ricequant 文档 来获取您需要的信息。 |
活跃的社区 | 您可以通过访问 Ricequant 社区 获取和询问有关 RQAlpha 的一切问题,有很多优秀的童鞋会解答您的问题。 |
稳定的环境 | 每天都有会大量的算法交易在 Ricequant 上运行,无论是 RQAlpha,还是数据,我们能会做到问题秒处理,秒解决。 |
灵活的配置 | 您可以使用多种方式来配置和运行策略,只需简单的配置就可以构建适合自己的交易系统。 |
强大的扩展性 | 开发者可以基于我们提供的 Mod Hook 接口来进行扩展。 |
警告
RQAlpha 本身支持不同周期的回测和实盘交易,但是目前只免费开放A股市场日线数据,如果用户需要做分钟回测或者更细级别的回测可以在 Ricequant 上进行,也通过实现数据层接口函数来使用自己的数据。自有数据源对接请参考 扩展事件源
RQAlpha 安装
- $ pip install rqalpha
注解
RQAlpha 依赖一些需要 GCC 编译的库,如果您安装遇到问题请访问 安装指南 来寻找详细的安装文档信息。
警告
我们强烈建议您在虚拟环境下安装RQAlpha
虚拟环境的安装,请参考 环境搭建
数据获取
当 RQAlpha 安装完成后,可以通过如下命令获取我们提供的免费A股日线数据。获取数据的详细内容请参考 获取回测数据
- $ rqalpha update-bundle
生成样例策略
运行以下命令,将会在指定目录生成一个examples文件夹,其中包含几个有趣的样例策略:
- $ rqalpha examples -d ./
运行回测
运行 RQAlpha 需要传递一些参数,可以通过命令 rqalpha help 查看,或者查看文档 获取配置文件 来获取相关信息。
运行如下命令:
- $ cd examples
- $ rqalpha run -f rsi.py -s 2014-01-01 -e 2016-01-01 -o result.pkl --plot --progress --account stock 100000
等待回测结束后,将显示您的收益率和Risk。
绘制回测结果
如果运行完回测后,还需要再次绘制回测结果,可以运行以下命令:
- $ rqalpha plot result.pkl
分析结果
RQAlpha可以输出一个 pickle 文件,里面为一个 dict 。keys 包括
- summary 回测摘要
- stock_portfolios 股票帐号的市值
- future_portfolios 期货帐号的市值
- total_portfolios 总账号的的市值
- benchmark_portfolios 基准帐号的市值
- stock_positions 股票持仓
- future_positions 期货仓位
- benchmark_positions 基准仓位
- trades 交易详情(交割单)
- plots 调用plot画图时,记录的值
- import pickle
- result_dict = pickle.load(open("/tmp/alpha.pkl", "rb")) # 从输出pickle中读取数据
- result_dict.keys()
- # Out: dict_keys(['stock_portfolios', 'total_portfolios', 'stock_positions',
- # 'benchmark_portfolios', 'plots', 'summary', 'trades', 'benchmark_positions'])
- result_dict["summary"]
- # Out:
- # {'alpha': 0.027,
- # 'annualized_returns': 0.025000000000000001,
- # 'benchmark': '000001.XSHG',
- # 'benchmark_annualized_returns': -0.057285289949864038,
- # 'benchmark_total_returns': -0.059871893424000011,
- # 'beta': 0.314,
- # 'cash': -617.64200000000005,
- # 'commission_multiplier': 1,
- # 'dividend_receivable': 0.0,
- # 'downside_risk': 0.14299999999999999,
- # 'end_date': datetime.date(2017, 1, 19),
- # 'frequency': '1d',
- # 'frozen_cash': 0.0,
- # 'information_ratio': 0.45700000000000002,
- # 'margin_multiplier': 1,
- # 'market_value': 1027242.0,
- # 'matching_type': 'CURRENT_BAR_CLOSE',
- # 'max_drawdown': 0.087999999999999995,
- # 'pnl': 26624.358,
- # 'portfolio_value': 1026624.358,
- # 'run_type': 'BACKTEST',
- # 'sharpe': 0.016,
- # 'slippage': 0,
- # 'sortino': 0.014,
- # 'start_date': datetime.date(2016, 1, 4),
- # 'strategy_file': 'rqalpha/examples/simple_macd.py',
- # 'strategy_name': 'simple_macd',
- # 'strategy_type': 'stock',
- # 'total_returns': 0.027,
- # 'tracking_error': 0.18099999999999999,
- # 'transaction_cost': 27467.462,
- # 'volatility': 0.125}
- result_dict["total_portfolios"][-5:]
- # Out:
- # annualized_returns cash daily_pnl daily_returns \
- # date
- # 2017-01-13 0.024 -617.642 1119.0 0.001
- # 2017-01-16 0.021 -617.642 -2238.0 -0.002
- # 2017-01-17 0.022 -617.642 1119.0 0.001
- # 2017-01-18 0.024 -617.642 2238.0 0.002
- # 2017-01-19 0.025 -617.642 1119.0 0.001
- # dividend_receivable frozen_cash market_value pnl \
- # date
- # 2017-01-13 0.0 0.0 1025004.0 24386.358
- # 2017-01-16 0.0 0.0 1022766.0 22148.358
- # 2017-01-17 0.0 0.0 1023885.0 23267.358
- # 2017-01-18 0.0 0.0 1026123.0 25505.358
- # 2017-01-19 0.0 0.0 1027242.0 26624.358
- # portfolio_value total_returns transaction_cost
- # date
- # 2017-01-13 1024386.358 0.024 27467.462
- # 2017-01-16 1022148.358 0.022 27467.462
- # 2017-01-17 1023267.358 0.023 27467.462
- # 2017-01-18 1025505.358 0.026 27467.462
- # 2017-01-19 1026624.358 0.027 27467.462
- result_dict["stock_positions"][-5:]
- # Out[6]:
- # average_cost avg_price bought_quantity bought_value \
- # date
- # 2017-01-13 9.15 9.15 111900 1023885.0
- # 2017-01-16 9.15 9.15 111900 1023885.0
- # 2017-01-17 9.15 9.15 111900 1023885.0
- # 2017-01-18 9.15 9.15 111900 1023885.0
- # 2017-01-19 9.15 9.15 111900 1023885.0
- # market_value order_book_id pnl quantity sellable \
- # date
- # 2017-01-13 1025004.0 000001.XSHE 1119.0 111900 111900
- # 2017-01-16 1022766.0 000001.XSHE -1119.0 111900 111900
- # 2017-01-17 1023885.0 000001.XSHE 0.0 111900 111900
- # 2017-01-18 1026123.0 000001.XSHE 2238.0 111900 111900
- # 2017-01-19 1027242.0 000001.XSHE 3357.0 111900 111900
- # sold_quantity sold_value symbol total_orders total_trades \
- # date
- # 2017-01-13 0 0.0 平安银行 1 1
- # 2017-01-16 0 0.0 平安银行 1 1
- # 2017-01-17 0 0.0 平安银行 1 1
- # 2017-01-18 0 0.0 平安银行 1 1
- # 2017-01-19 0 0.0 平安银行 1 1
- # transaction_cost value_percent
- # date
- # 2017-01-13 819.108 1.001
- # 2017-01-16 819.108 1.001
- # 2017-01-17 819.108 1.001
- # 2017-01-18 819.108 1.001
- # 2017-01-19 819.108 1.001