介绍

RQAlpha 从数据获取、算法交易、回测引擎,实盘模拟,实盘交易到数据分析,为程序化交易者提供了全套解决方案。

RQAlpha 具有灵活的配置方式,强大的扩展性,用户可以非常容易地定制专属于自己的程序化交易系统。

特点

易于使用让您集中于策略的开发,一行简单的命令就可以执行您的策略。
完善的文档您可以直接访问 RQAlpha 文档 或者 Ricequant 文档 来获取您需要的信息。
活跃的社区您可以通过访问 Ricequant 社区 获取和询问有关 RQAlpha 的一切问题,有很多优秀的童鞋会解答您的问题。
稳定的环境每天都有会大量的算法交易在 Ricequant 上运行,无论是 RQAlpha,还是数据,我们能会做到问题秒处理,秒解决。
灵活的配置您可以使用多种方式来配置和运行策略,只需简单的配置就可以构建适合自己的交易系统。
强大的扩展性开发者可以基于我们提供的 Mod Hook 接口来进行扩展。

警告

RQAlpha 本身支持不同周期的回测和实盘交易,但是目前只免费开放A股市场日线数据,如果用户需要做分钟回测或者更细级别的回测可以在 Ricequant 上进行,也通过实现数据层接口函数来使用自己的数据。自有数据源对接请参考 扩展事件源

RQAlpha 安装

  1. $ pip install rqalpha

注解

RQAlpha 依赖一些需要 GCC 编译的库,如果您安装遇到问题请访问 安装指南 来寻找详细的安装文档信息。

警告

我们强烈建议您在虚拟环境下安装RQAlpha

虚拟环境的安装,请参考 环境搭建

数据获取

当 RQAlpha 安装完成后,可以通过如下命令获取我们提供的免费A股日线数据。获取数据的详细内容请参考 获取回测数据

  1. $ rqalpha update-bundle

生成样例策略

运行以下命令,将会在指定目录生成一个examples文件夹,其中包含几个有趣的样例策略:

  1. $ rqalpha examples -d ./

运行回测

运行 RQAlpha 需要传递一些参数,可以通过命令 rqalpha help 查看,或者查看文档 获取配置文件 来获取相关信息。

运行如下命令:

  1. $ cd examples
  2. $ rqalpha run -f rsi.py -s 2014-01-01 -e 2016-01-01 -o result.pkl --plot --progress --account stock 100000

等待回测结束后,将显示您的收益率和Risk。

绘制回测结果

如果运行完回测后,还需要再次绘制回测结果,可以运行以下命令:

  1. $ 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画图时,记录的值
  1. import pickle
  2.  
  3. result_dict = pickle.load(open("/tmp/alpha.pkl", "rb")) # 从输出pickle中读取数据
  4.  
  5. result_dict.keys()
  6. # Out: dict_keys(['stock_portfolios', 'total_portfolios', 'stock_positions',
  7. # 'benchmark_portfolios', 'plots', 'summary', 'trades', 'benchmark_positions'])
  8.  
  9. result_dict["summary"]
  10. # Out:
  11. # {'alpha': 0.027,
  12. # 'annualized_returns': 0.025000000000000001,
  13. # 'benchmark': '000001.XSHG',
  14. # 'benchmark_annualized_returns': -0.057285289949864038,
  15. # 'benchmark_total_returns': -0.059871893424000011,
  16. # 'beta': 0.314,
  17. # 'cash': -617.64200000000005,
  18. # 'commission_multiplier': 1,
  19. # 'dividend_receivable': 0.0,
  20. # 'downside_risk': 0.14299999999999999,
  21. # 'end_date': datetime.date(2017, 1, 19),
  22. # 'frequency': '1d',
  23. # 'frozen_cash': 0.0,
  24. # 'information_ratio': 0.45700000000000002,
  25. # 'margin_multiplier': 1,
  26. # 'market_value': 1027242.0,
  27. # 'matching_type': 'CURRENT_BAR_CLOSE',
  28. # 'max_drawdown': 0.087999999999999995,
  29. # 'pnl': 26624.358,
  30. # 'portfolio_value': 1026624.358,
  31. # 'run_type': 'BACKTEST',
  32. # 'sharpe': 0.016,
  33. # 'slippage': 0,
  34. # 'sortino': 0.014,
  35. # 'start_date': datetime.date(2016, 1, 4),
  36. # 'strategy_file': 'rqalpha/examples/simple_macd.py',
  37. # 'strategy_name': 'simple_macd',
  38. # 'strategy_type': 'stock',
  39. # 'total_returns': 0.027,
  40. # 'tracking_error': 0.18099999999999999,
  41. # 'transaction_cost': 27467.462,
  42. # 'volatility': 0.125}
  43.  
  44. result_dict["total_portfolios"][-5:]
  45. # Out:
  46. # annualized_returns cash daily_pnl daily_returns \
  47. # date
  48. # 2017-01-13 0.024 -617.642 1119.0 0.001
  49. # 2017-01-16 0.021 -617.642 -2238.0 -0.002
  50. # 2017-01-17 0.022 -617.642 1119.0 0.001
  51. # 2017-01-18 0.024 -617.642 2238.0 0.002
  52. # 2017-01-19 0.025 -617.642 1119.0 0.001
  53. # dividend_receivable frozen_cash market_value pnl \
  54. # date
  55. # 2017-01-13 0.0 0.0 1025004.0 24386.358
  56. # 2017-01-16 0.0 0.0 1022766.0 22148.358
  57. # 2017-01-17 0.0 0.0 1023885.0 23267.358
  58. # 2017-01-18 0.0 0.0 1026123.0 25505.358
  59. # 2017-01-19 0.0 0.0 1027242.0 26624.358
  60. # portfolio_value total_returns transaction_cost
  61. # date
  62. # 2017-01-13 1024386.358 0.024 27467.462
  63. # 2017-01-16 1022148.358 0.022 27467.462
  64. # 2017-01-17 1023267.358 0.023 27467.462
  65. # 2017-01-18 1025505.358 0.026 27467.462
  66. # 2017-01-19 1026624.358 0.027 27467.462
  67.  
  68. result_dict["stock_positions"][-5:]
  69. # Out[6]:
  70. # average_cost avg_price bought_quantity bought_value \
  71. # date
  72. # 2017-01-13 9.15 9.15 111900 1023885.0
  73. # 2017-01-16 9.15 9.15 111900 1023885.0
  74. # 2017-01-17 9.15 9.15 111900 1023885.0
  75. # 2017-01-18 9.15 9.15 111900 1023885.0
  76. # 2017-01-19 9.15 9.15 111900 1023885.0
  77. # market_value order_book_id pnl quantity sellable \
  78. # date
  79. # 2017-01-13 1025004.0 000001.XSHE 1119.0 111900 111900
  80. # 2017-01-16 1022766.0 000001.XSHE -1119.0 111900 111900
  81. # 2017-01-17 1023885.0 000001.XSHE 0.0 111900 111900
  82. # 2017-01-18 1026123.0 000001.XSHE 2238.0 111900 111900
  83. # 2017-01-19 1027242.0 000001.XSHE 3357.0 111900 111900
  84. # sold_quantity sold_value symbol total_orders total_trades \
  85. # date
  86. # 2017-01-13 0 0.0 平安银行 1 1
  87. # 2017-01-16 0 0.0 平安银行 1 1
  88. # 2017-01-17 0 0.0 平安银行 1 1
  89. # 2017-01-18 0 0.0 平安银行 1 1
  90. # 2017-01-19 0 0.0 平安银行 1 1
  91. # transaction_cost value_percent
  92. # date
  93. # 2017-01-13 819.108 1.001
  94. # 2017-01-16 819.108 1.001
  95. # 2017-01-17 819.108 1.001
  96. # 2017-01-18 819.108 1.001
  97. # 2017-01-19 819.108 1.001