3.0.0

[For 开发/运行策略的用户]

3.x 相比 2.x 进行了如下更改,如果您升级到 3.x 版本,请务必阅读以下内容,保证您的策略可以顺利启动和执行:

  • 命令行参数做出如下调整
    • 不再使用 -sc/—stock-starting-cash 参数
    • 不再使用 -fc/—future-starting-cash 参数
    • 不再使用 -i/—init-cash 参数
    • 不再使用 -s/—security 参数
    • 不再使用 -k/—kind 参数
    • 不再使用 —strategy-type 参数
    • 使用 —account 来替代,具体用法如下
  1. # 策略通过命令行运行,设置可交易类型是股票,起始资金为 10000
  2. $ rqalpha run --account stock 10000
  3. # 策略通过命令行运行,设置可交易类型为期货,起始资金为 50000
  4. $ rqalpha run --account future 50000
  5. # 策略通过命令行运行,设置可交易类型为期货和股票,起始资金分别为 股票 10000, 期货 50000
  6. $ rqalpha run --account stock 10000 --account future 50000
  7. # 如果您通过 Mod 扩展,自定义了一种可交易类型(假设是huobi),您也可以增加对于火币的支持和起始资金设置
  8. $ rqalpha run --account stock 10000 --account future 50000 --account huobi 20000
  • 相应,如果您通过 run_file | run_code | run_func 来启动策略,配置文件及配置信息也做了对应的调整:
    • 不再使用 base.stock_starting_cash
    • 不再使用 base.future_starting_cash
    • 不再使用 base.securities
    • 使用 base.accounts 来替代,具体用法如下:
  1. # 策略通过配置,设置可交易类型是股票,起始资金为 10000
  2. config = {
  3. "base": {
  4. "start_date": "...",
  5. "end_date": "...",
  6. "frequency": "...",
  7. "matching_type": "...",
  8. "benchmark": "...",
  9. "accounts": {
  10. "stock": 10000
  11. }
  12. }
  13. }
  14. # 策略通过配置,设置可交易类型是期货,起始资金为 50000
  15. config = {
  16. "base": {
  17. "start_date": "...",
  18. "end_date": "...",
  19. "frequency": "...",
  20. "matching_type": "...",
  21. "benchmark": "...",
  22. "accounts": {
  23. "future": 50000
  24. }
  25. }
  26. }
  27. # 策略通过配置,设置可交易类型为期货和股票,起始资金分别为 股票 10000, 期货 50000
  28. config = {
  29. "base": {
  30. "start_date": "...",
  31. "end_date": "...",
  32. "frequency": "...",
  33. "matching_type": "...",
  34. "benchmark": "...",
  35. "accounts": {
  36. "stock": 10000,
  37. "future": 50000
  38. }
  39. }
  40. }
  41. # 如果您通过 Mod 扩展,自定义了一种可交易类型(假设是huobi),您也可以增加对于火币的支持和起始资金设置
  42. config = {
  43. "base": {
  44. "start_date": "...",
  45. "end_date": "...",
  46. "frequency": "...",
  47. "matching_type": "...",
  48. "benchmark": "...",
  49. "accounts": {
  50. "stock": 10000,
  51. "future": 50000,
  52. "huobi": 20000
  53. }
  54. }
  55. }

[For Mod developer]

本次更新可能导致已实现 Mod 无法正常使用,请按照文档升级您的 Mod,或者使用 2.2.x 版本 RQAlpha

在通过 Mod 扩展 RQAlpha 的时候,由于 RQAlpha 直接定义了 AccountPosition 相关的 Model, 增加新的 accountposition 变得非常的困难,想扩展更多类型是一件很麻烦的事情,因此我们决定重构该模块从而解决这些问题。

详情请查看: https://github.com/ricequant/rqalpha/issues/160

主要进行如下更改:

  • 增加 AbstractAccountAbstractPosition, 用户可以基于该抽象类进行扩展。
  • const.ACCOUNT_TYPE 修改为 const.DEFAULT_ACCOUNT_TYPE,并且不再直接使用,您可以通过 Environment.get_instance().account_type_dict 来获取包括 Mod 注入的账户类型。
  • 原先所有使用 ACCOUNT_TYPE 作为 key 的地方,不再使用 Enum 类型作为 Key, 而是修改为对应 Enum 的 name 作为key。比如说原本使用 portfolio.accounts[ACCOUNT_TYPE.STOCK] 更改为 portfolio.accounts['STOCK']
  • Environment 提供 set_account_model | get_account_model | set_position_model | get_position_model API 来注入 自定义Model。
  • Environment 提供 set_smart_order API 来注入自定义账户类型的智能下单函数,从而通过通用的 order | order_to API 便可以交易对应自定义账户类型。
  • RQAlpha 将已有的 AccountModel, PositionModel 和 API 抽离至 rqalpha_mod_sys_accounts 中,通过如下方式注入:
  1. from .account_model import *
  2. from .position_model import *
  3. from .api import api_future, api_stock
  4.  
  5.  
  6. class AccountMod(AbstractMod):
  7.  
  8. def start_up(self, env, mod_config):
  9.  
  10. # 注入 Account
  11. env.set_account_model(DEFAULT_ACCOUNT_TYPE.STOCK.name, StockAccount)
  12. env.set_account_model(DEFAULT_ACCOUNT_TYPE.FUTURE.name, FutureAccount)
  13. env.set_account_model(DEFAULT_ACCOUNT_TYPE.BENCHMARK.name, BenchmarkAccount)
  14.  
  15. # 注入 Position
  16. env.set_position_model(DEFAULT_ACCOUNT_TYPE.STOCK.name, StockPosition)
  17. env.set_position_model(DEFAULT_ACCOUNT_TYPE.FUTURE.name, FuturePosition)
  18. env.set_position_model(DEFAULT_ACCOUNT_TYPE.BENCHMARK.name, StockPosition)
  19.  
  20. # 注入 API
  21. if DEFAULT_ACCOUNT_TYPE.FUTURE.name in env.config.base.accounts:
  22. # 注入期货API
  23. for export_name in api_future.__all__:
  24. export_as_api(getattr(api_future, export_name))
  25. # 注入 smart order
  26. env.set_smart_order(DEFAULT_ACCOUNT_TYPE.FUTURE.name, api_future.smart_order)
  27. if DEFAULT_ACCOUNT_TYPE.STOCK.name in env.config.base.accounts:
  28. # 注入股票API
  29. for export_name in api_stock.__all__:
  30. export_as_api(getattr(api_stock, export_name))
  31. # 注入 smart order
  32. env.set_smart_order(DEFAULT_ACCOUNT_TYPE.STOCK.name, api_stock.smart_order)
  33.  
  34. def tear_down(self, code, exception=None):
  35. pass