CHANGELOG

4.0.0

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

对于开发/运行策略的用户,RQAlpha 4.x 版本改动的核心是加强与 RQDatac 之间的联动,拥有 RQDatac license 的用户可以更及时地更新 bundle, 亦可以在开源的 RQAlpha 框架下直接调用从前在 Ricequant 网站或终端产品中才能使用的扩展 API。

  • 新增

    • 新增集合竞价函数 open_auction ,您可以在该函数内发单以实现开盘成交,详见 基础 API

    • 新增扩展 API 的实现,现在您可以在开源的 rqalpha 框架下直接调用扩展 API,详见 扩展 API

    • 新增股票下单 API,order_target_portfolio,使用该 API 可以根据给定的目标组合仓位批量下单,详见 交易接口

  • 变更

    • rqalpha update-bundle 命令的功能改为使用 RQDatac 更新已存在的数据 bundle,新增 rqalpha download-bundlerqalpha create-bundle 命令用于下载和创建 bundle,详见 获取回测数据

    • line-profiler 库不再是 RQAlpha 的硬性依赖,如果您需要性能分析功能,则需要手动安装 line-profiler,详见 FAQ

    • 配置项中股票和期货验券风控的开关 validate_stock_positionvalidate_future_position 移动到了 rqalpha_mod_sys_accounts,详见 rqalpha_mod_sys_accounts

    • 传入 --report 参数后输出的策略报告文件将直接生成于 --report 参数值给定的目录下,不再在该目录下新建以策略名为名称的文件夹

  • 废弃

    • 不再支持 Python2.7

    • context.portfolio.positions 可能会在未来版本中废弃,推荐使用 get_positionget_positions API 获取仓位信息,详见 持仓查询接口

    • context 对象的部分老旧属性已移除,如 stock_portfoliofuture_portfolioslippagebenchmarkmargin_ratecommission 等,详见

[For Mod 开发者]

RQAlpha 4.x 相对于 3.x 版本进行了部分重构,重构的核心目标是 Mod 开发者可以更方便地对接不同品种的金融工具。

  • BaseDataSource 新增 register_day_bar_storeregister_instruments_storeregister_dividend_storeregister_split_storeregister_calendar_store 方法,用于在不重载 DataSource 的情况下对接更丰富的行情及基础数据

  • 移除 rqalpha mod install/uninstall 命令,您可以使用 pip install/uninstall 命令替代,详见 Mod

  • Environment 移除 set_account_modelget_account_model 方法,默认的 Account 类现在可以支持挂载不同类型的金融工具持仓,大多数情况下无需重载 Account

  • Environment 移除 set_position_modelget_position_model 方法,重载的 Position 类型可以调用 Portfolio.register_instrument_type 注册

  • 重构了 AbstractPosition 接口,现在的 Position 对象仅表征单个方向的持仓,而非包含多空两方向的持仓,详见 基本概念

  • 移除了 BenchmarkProvider 接口,基准相关的逻辑转移到 rqalpha_mod_sys_analyser 内部

  • BaseDataSource 使用的 bundle 格式由 bcolz 替换为 hdf5

  • 移除 Mod: rqalpha_mod_sys_funcatrqalpha_mod_sys_benchmark

  • Instrument 新增 calc_cash_occupation 方法,该方法被风控等模块用于计算订单需要占用的资金量,对接新品种的金融工具应重载该方法

  • 移除了以下冗余的 logger 对象:user_detail_logbasic_system_logstd_log

3.4.4

  • 修复

    • 修复 rqalpha mod install/uninstall 命令与 pip 19.3.1 的兼容性问题

  • 变更

    • history_bars 取不到行情时返回空 ndarray 而非 None

3.4.2

  • 变更

    • 移除代码中硬编码的期货交易时间、佣金费率等信息,期货新品种上市不再需要更新 RQAlpha 版本,只需更新 bundle 数据(获取回测数据

    • 变更 rqalpha.data 的目录结构

    • rqalpha.utils.get_trading_periodrqalpha.utils.is_night_trading 函数变更为 DataProxy 的方法

    • 调整下载 bundle 的 URL

  • 新增

    • Instrument 对象新增交易时间相关的 trading_hourstrade_at_night property

3.4.1

  • 新增

    • 对期货 SS, EB 的支持

  • 变更

    • 调整下载 bundle 的 URL,提高 bundle 下载速度

  • 修复

    • 股票/期货上市首日调用 pnl 相关属性抛出异常的问题

    • 股票股权登记日和分红到账日间隔多个交易日时分红计算错误的问题

3.4.0

  • 新增

    • 股票下单 API 加入资金不足时自动转为使用所有剩余资金下单的功能,见 rqalpha_mod_sys_accounts

  • 变更

    • 重构 rqalpha_mod_sys_accounts 中的账户、持仓类,主要变化如下:

      • 持仓类拆分为两层,核心同时兼容期货和股票的逻辑,上层兼容绝大部分旧有 API

      • 期货保证金的计算逻辑改为跟随行情变化的动态保证金、不再维护持仓序列

      • 新增 position_pnl 昨仓盈亏、trading_pnl 交易盈亏字段

      • 删除 holding_pnl 持仓盈亏、realized_pnl 实现盈亏字段

      • 降低账户类和持仓类之间的耦合程度

    • 去掉配置项 base.resume_modeextra.force_run_init_when_pt_resume,相关判断移交给 PersistProvider 实现

    • 去掉 Booking 类,相关逻辑合并至持仓类

3.3.3

  • 新增

    • 对期货 NR、UR、RR 的支持

  • 修复

    • Python2.7 环境下依赖的 numpy 版本不正确的问题

    • 进程启动后初次触发 settlement 事件时框架内部时间可能不正确的问题

    • 期货下单 API 未拒绝不足一手的下单请求的问题

3.3.2

  • 新增

    • SelfTradeValidator 模块,用于拦截策略可能产生自成交的订单

    • buy_closesell_close API 将订单拆分成多个时给出 WARNING 提示

    • 对股票更换代码这一行为的支持

    • 对期货 CJ 品种的支持

  • 变更

    • 不再支持 Python3.4

  • 修复

    • Booking 持久化逻辑错误的问题

    • 指数的 Bar 对象获取 limit_uplimit_down 字段报错的问题

    • 策略订阅的合约交易时间与基准合约交易时间不一致会导致模拟交易报错退出的问题

    • 股票在同一个交易日出现多次分红时计算有误的问题

    • order_value 等 API 在市价单时计算下单量有误的问题

    • 信号模式下仍然会拦截在标的涨跌停时下出的订单

3.3.1

  • 新增

    • 对期货 SP, EG 品种的支持。

    • 加入 python3.7 环境下的自动化测试。

    • 使用 run_func 运行的策略不再需要显式地执行 from rqalpha.api import *

    • update-bundle 命令增加中断重试功能。

    • 增加 MinuteBarObject 对象,当分钟线数据不包含涨跌停价时该对象的涨跌停字段改为从日线获取。

  • 变更

    • 年化(如收益率)的计算改为使用交易日而非是自然日。

    • 基准收益率不再使用全仓买入基准合约模拟,改为直接使用前复权价格序列计算。

    • 策略使用 subscribe_event 注册的回调函数改为接收两个参数 context, event

    • 重构了 Booking 的计算逻辑,增加了 trading_pnl, position_pnl 两个字段。

    • 抽离 risk.pyrqrisk 项目。

    • order_value 等使用价值计算股数的下单 API 计算股数时增加对税费的考虑(即计算包含税费的情况下花费一定数量的现金可以交易多少合约)。

  • 修复

    • 净值为负的情况下 Portfolio 年化收益率计算有误的问题。

    • Portfolio 对象不存在的情况下某些 API 的报错信息不明确的问题。

    • RunInfo 对象中的 commission_multiplier 字段不正确的问题。

    • 期货 tick 回测/模拟交易下滑点计算报错的问题。

    • 模拟交易和实盘中调用 submit_order 发送代码中包含 “88” 的股票订单报错的问题。

    • 限价单 round price 的精度问题。

    • 策略使用 subscribe_event 注册的回调函数和框架内部逻辑触发顺序不可控的问题。

    • 回测和模拟交易中股票市价单冻结和解冻的资金可能出现不一致的问题。

3.2.0

  • 配置和命令

    • rqalpha run 命令增加参数 -mk/--market,用来标识策略交易标的所在的市场,如 cn、hk 等。

    • rqalpha update_bundle 更改为 rqalpha update-bundle

  • 接口和 Mod

    • 增加新接口 AbstractTransactionCostDecider,在 Environment 中注册该接口的实现可以自定义不同合约品种、不同市场的税费计算逻辑。

    • 增加新 Mod sys_transaction_cost 实现上述接口,抽离了原 sys_simulation Mod 中的税费计算逻辑,并加入了对港股税费计算的支持。

    • 移除 sys_booking Mod,booking 相关逻辑移入框架中,BookingPortfolio 类地位相当。

    • 移除 sys_stock_realtime Mod,该 Mod 被移到了单独的仓库 rqalpha-mod-stock-realtime ,不再与框架一同维护。

    • 移除 sys_stock_incremental Mod,该 Mod 被移到了单独的仓库 rqalpha-mod-incremental ,不再与框架一同维护。

  • 类型和 Api

    • 增加 SimulationBooking 类,实现了 Booking 类相同的方法,用于在回测和模拟交易中兼容实盘 Booking 相关的 Api。

    • 增加 Api get_positionget_positions,用来获取策略持仓的 BookingPosition 对象。

    • 增加 Api subscribe_event,策略可以通过该 Api 注册回调函数,订阅框架内部事件。

    • DEFAULT_ACCOUNT_TYPE 枚举类增加债券 BOND 类型。

    • history_barsbefore_trading 中调用时可以取到当日日线数据。

    • 重构 Instrument 类,该类所需的字段现在以 property 的形式写明,方便对 Instrument 对象的调用及对接第三方数据源。

    • Instrument 类型新增字段 market_tplus,用来标识合约对平仓时间的限制,例如有 T+1 限制的 A 股该字段值为1,港股为 0。

  • 逻辑

    • 更改 Benchmark 的买入逻辑,不再对买入数量进行取整,避免初始资金较小时 Benchmark 空仓的问题。

    • 修正画图时最大回撤的计算逻辑。

    • 修正年化收益的计算逻辑,年化的天数的计算使用 start_dateend_date,而非根据交易日历调整后的日期。

    • 下单冻结资金时考虑税费。

    • 前端风控验资时考虑税费。

    • 修复了 before_trading 中更新订阅池会可能会导致开盘收到错误 tick 的 Bug。

    • 修复 beta 值为 0 时 plot result 出错的问题。

    • 重构 A 股 T+1 的相关逻辑,移除 hard code。

    • 滑点计算增加对涨跌停价的判断,现在有涨跌停价的合约滑点不会超出涨跌停价的范围。

    • 修复在取不到行情时下单可能会抛出 RuntimeError 的 Bug。

  • 依赖

    • 在 Python2.7 和 Python3.4 环境中限制 Matplotlib 的版本。

    • 移除了测试用例对 Pandas 的版本依赖。

    • 不再限制 Pandas 的版本上限。

    • 移除对 colorama 库的依赖。

    • 限制 click 库的版本下限为 7.0。

  • 其他

    • 加入对期货 TS 品种的支持。

    • 模拟交易和实盘中支持持久化自定义类型(可被 pickle 的自定义类型)。

    • 增加了单元测试框架并添加了少量测试用例。

3.1.2

  • 修复上个版本打包时包含异常文件的问题。

3.1.1

  • 修复 rqalpha mod uninstall 命令不兼容 pip 10.0 以上版本的bug。

  • 不再限制 logbook 库的版本上限。

  • python 2.7/3.5/3.6 环境下不再限制 bcolz 的版本上限。

3.1.0

  • Api

    • 增加 symbol(order_book_id, split=", ") 扩展Api,用于获取合约简称。

    • 修改 current_snapshot(id_or_symbol),该 Api 支持在 before_trading/after_trading 中调用。

    • 修改 history_bars,增加对 frequency 参数的检查。

    • 修正 order(order_book_id, quantity, price=None, style=None) 函数期货下单的逻辑。

    • 修改股票下单接口,允许一次性申报卖出非100股整倍数的股票。

    • 修改下单接口,当因参数检查或前端风控等原因创建订单失败时,接口返回 None 或空 list,并打印 warn。

  • 接口

    • AbstractDataSource 接口增加 get_tick_size(instrument) 方法,BaseDataSource 实现了该方法。

    • AbstractDataSource 接口增加 history_ticks(instrument, count, fields, dt) 方法,支持 tick 级别策略运行的 DataSource 应实现该方法。

    • 增加通用下单接口 submit_order(id_or_ins, amount, side, price=None, position_effect=None),策略可以通过该接口自由选择参数下单。

    • Instrument 类新增 tick_size() 方法。

    • PersistHelper 类新增 unregister(key) 方法,可以调用该方法注销已经注册了持久化服务的模块。

    • 新增 TickObject 类,替代原 Tick 类和 SnapshotObject 类。可通过 TickObject 对象的 asks, bids, ask_vols, bid_bols 四个属性获取买卖报盘。

  • 配置

    • 增加 base.round_price 参数,开启后现价单价格会被调整为最小价格变动单位的整倍数,对应的命令行参数为 --round-price

    • sys_simulation Mod 增加滑点模型 slippage_model 参数,滑点不再限制为价格的比率,亦可使用基于最小价格变动单位的滑点模型,甚至加载自定义的滑点模型。

    • sys_simulation Mod 增加股票最小手续费 stock_min_commission 参数,用于控制回测和模拟交易中单笔股票交易收取的最小手续费,对应的命令行参数为 --stock-min-commission 5

    • sys_account Mod 增加 future_forced_liquidation 参数,开启后期货账户在爆仓时会被强平。

  • 其他

    • Fix Issue 224 , 解决了展示图像时图像不能被保存的问题。

    • 策略运行失败时 return code 为 1。

    • 开启 force_run_init_when_pt_resume 参数时,策略启动前将会清空 universe。

    • 移除对 better-exceptions 库的依赖,可以通过安装并设置环境变量的方式获得更详细的错误栈。

    • 修复 StockPosition 类中股票卖空买回时计算平均开仓价格错误的 bug。

    • 修复画图时最大回撤计算错误的 bug。

    • 重构 Executor,现在 EventSource 不再需要发出 SETTLEMENT 事件,框架会在第二个交易日 BEFORE_TRAINDG 事件前先发出 SETTLEMENT 事件,如果 EventSource 未发出 BEFORE_TRAINDG 事件,该事件会在第一个行情事件到来时被框架发出。

    • 加入新 Mod rqalpha_mod_sys_incremental,启用该 Mod 可以增量运行回测,方便长期跟踪策略而不必反复运行跑过的日期,详情参考文档 sys_incremental Mod README

    • 加入新 Mod rqalpha_mod_sys_booking,该 Mod 用于从外部加载仓位作为实盘交易的初始仓位,详情参考文档 sys_booking Mod README

3.0.10

  • 支持期货合约:苹果(AP)、棉纱(CY)、原油(SC)

  • 限制 better-exceptionsbcolz 库的版本

  • 支持 pip 10.x

  • 修复 tick 回测中夜盘前 before_trading 无法获取白天数据的问题

  • force_run_init_when_pt_resume 开启时会清空 persist 的 universe

  • 增加资金风控中对佣金的考虑

  • 修复文档中若干 typo

3.0.9

  • 限制 pandas 的版本为 0.18 ~ 0.20 ,因为 0.21 和 matplotlib 有些不兼容。

3.0.8

  • 修复 rqalpha run --config 参数

  • 增加 ON_NORMAL_EXIT 的持久化模式,在 RQAlpha 成功运行完毕后进行 persist 。可以在盘后快速地根据昨日持久化数据继续运行回测来增量回测。

  • 增加 rqalpha run --logger 参数可以单独设置特定的 logger 的 level

  • 增加 persist_provider 的检查

  • 修复 get_prev_close

  • 打印 mod 的启动状态信息,方便 debug

  • 增加 is_valid_price 工具函数来判断价格是否有效

  • 修复期货账户因为保证金变化导致total_value计算错误

  • 重构股票账户 last_price 更新

  • 修复期货下单拒单是错误信息typo

  • 当启动LIVE_TRADING模式的时候,跳过simulation_mod的初始化

  • 增加 rqalpha run --position 来设置初始仓位的功能

3.0.6

  • import 修改相对引用为绝对引用

  • 重构配置文件读取功能,分为默认配置,用户配置,项目配置

  • 重构 main()tear_down 的调用

  • get_previous_trading_date(date, n=1) 增加参数 n

  • 增加公募基金数据处理相关逻辑

  • 修改 mod.tear_down ,如果单个 mod 在 tear_down 抛异常后,不影响其他 mod 继续 tear_down

  • scheduler bugfix

  • 处理 persist 遇到的异常

  • 修复 order get_state / set_state 缺失 transaction_cost, avg_price

  • 修复 mod_sys_stock_realtime

3.0.2

  • 取消在股票下单函数中对 order_book_id 类型的检查,现在您可以交易 ETF, LOF, FenjiMu, FenjiA, FenjiB, INDX

  • Merge PR 170 解决自定义 volume limit 时显示数值不正确的问题。

  • Fix Issue 148 get_dividend()方法返回的类型是numpy.ndarray,而非pandas.DataFrame

  • Fix Issue 169 执行 rqalpha mod install ctp==0.2.0dev0 时错误的记录了库信息的问题

  • Fix Issue 158 多次循环 run_file / run_code 时导致的内存泄漏的问题

  • Enhance Issue 166 启动参数支持 –no-stock-t1 来屏蔽股票 T + 1 导致今仓的限制

  • 性能提升: 使用 bisect_right 代替 searchsorted

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 来替代,具体用法如下

# 策略通过命令行运行,设置可交易类型是股票,起始资金为 10000
$ rqalpha run --account stock 10000
# 策略通过命令行运行,设置可交易类型为期货,起始资金为 50000
$ rqalpha run --account future 50000
# 策略通过命令行运行,设置可交易类型为期货和股票,起始资金分别为 股票 10000, 期货 50000
$ rqalpha run --account stock 10000 --account future 50000
# 如果您通过 Mod 扩展,自定义了一种可交易类型(假设是huobi),您也可以增加对于火币的支持和起始资金设置
$ 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 来替代,具体用法如下:

# 策略通过配置,设置可交易类型是股票,起始资金为 10000
config = {
  "base": {
    "start_date": "...",
    "end_date": "...",
    "frequency": "...",
    "matching_type": "...",
    "benchmark": "...",
    "accounts": {
      "stock": 10000
    }
  }
}
# 策略通过配置,设置可交易类型是期货,起始资金为 50000
config = {
  "base": {
    "start_date": "...",
    "end_date": "...",
    "frequency": "...",
    "matching_type": "...",
    "benchmark": "...",
    "accounts": {
      "future": 50000
    }
  }
}
# 策略通过配置,设置可交易类型为期货和股票,起始资金分别为 股票 10000, 期货 50000
config = {
  "base": {
    "start_date": "...",
    "end_date": "...",
    "frequency": "...",
    "matching_type": "...",
    "benchmark": "...",
    "accounts": {
      "stock": 10000,
      "future": 50000
    }
  }
}
# 如果您通过 Mod 扩展,自定义了一种可交易类型(假设是huobi),您也可以增加对于火币的支持和起始资金设置
config = {
  "base": {
    "start_date": "...",
    "end_date": "...",
    "frequency": "...",
    "matching_type": "...",
    "benchmark": "...",
    "accounts": {
      "stock": 10000,
      "future": 50000,
      "huobi": 20000
    }
  }
}

[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 中,通过如下方式注入:

from .account_model import *
from .position_model import *
from .api import api_future, api_stock


class AccountMod(AbstractMod):

    def start_up(self, env, mod_config):

        # 注入 Account
        env.set_account_model(DEFAULT_ACCOUNT_TYPE.STOCK.name, StockAccount)
        env.set_account_model(DEFAULT_ACCOUNT_TYPE.FUTURE.name, FutureAccount)
        env.set_account_model(DEFAULT_ACCOUNT_TYPE.BENCHMARK.name, BenchmarkAccount)

        # 注入 Position
        env.set_position_model(DEFAULT_ACCOUNT_TYPE.STOCK.name, StockPosition)
        env.set_position_model(DEFAULT_ACCOUNT_TYPE.FUTURE.name, FuturePosition)
        env.set_position_model(DEFAULT_ACCOUNT_TYPE.BENCHMARK.name, StockPosition)

        # 注入 API
        if DEFAULT_ACCOUNT_TYPE.FUTURE.name in env.config.base.accounts:
            # 注入期货API
            for export_name in api_future.__all__:
                export_as_api(getattr(api_future, export_name))
            # 注入 smart order
            env.set_smart_order(DEFAULT_ACCOUNT_TYPE.FUTURE.name, api_future.smart_order)
        if DEFAULT_ACCOUNT_TYPE.STOCK.name in env.config.base.accounts:
            # 注入股票API
            for export_name in api_stock.__all__:
                export_as_api(getattr(api_stock, export_name))
            # 注入 smart order
            env.set_smart_order(DEFAULT_ACCOUNT_TYPE.STOCK.name, api_stock.smart_order)

    def tear_down(self, code, exception=None):
        pass

2.2.7

  • 解决当存在无效 Mod 时,RQAlpha 崩溃无法启动的问题

  • 修复期货下单函数默认 style 为 None 导致报错退出的问题

2.2.5

  • 增加 IPython Magic 方便在 IPython 中运行回测 run-rqalpha-in-ipython.ipynb 。运行完回测后,会将所有的 mod 的输出结果保存在 results 变量中,并且会将回测报告存储在 report 对象中。

  • 修复系统异常、用户异常的区分判断

  • 增加 --source-code 参数可以直接在命令行中传入策略源代码进行回测,这个选项目前主要给 IPython 使用。

  • 对于 history_bars 当 fields 为 None 的时候,指定为 [“datetime”, “open”, “high”, “low”, “close”, “volume”] 。

  • 重构 rqalpha_mod_sys_funcat 的数据获取

  • 修复 order 的 set_state 的 bug

  • 优化分红计算

  • 提取 inject_mod_commands 给 click 参数注入

# 加载 rqalpha 插件
%load_ext rqalpha

# 运行回测
%% rqalpha -s 20160101 -e 20170101 -sc 100000

2.2.4

  • 所有的下单函数进行了扩展,扩展如下:

# 以 order_shares 举例,其他的下单函数同理。
# 原本的下单方式: 以 200 元的价格下单 100 股 000001.XSHE
order_shares("000001.XSHE", 100, style=LimitOrder(200))
# 下单的如下方式都OK:
order_shares("000001.XSHE", 100, 200)
order_shares("000001.XSHE", 100, LimitOrder(200))
order_shares("000001.XSHE", 100, price=200)
order_shares("000001.XSHE", 100, style=LimitOrder(200))
  • buy_closesell_close API 增加 close_today 参数,现在您现在可以指定发平今单了。

  • Breaking Change: 原本期货中的 buy_closesell_close API 返回的 Order 对象。但实际交易过程中,涉及到昨仓今仓的时候,可能会存在发单被拒单的情况,RQAlpha 进行平昨/平今智能拆单的处理,因此在一些情况下会生成多个订单,对应也会返回一个订单列表。期货平仓更新的内容请参考 Issue 116

  • Breaking Change: 取消 Order | Trade 对应的 __from_create__ 函数中 calendar_dttrading_dt 的传入,对接第三方交易源,构建订单和成交的 Mod 可能会产生影响,需要进行修改.

# 原先的构建方式
Order.__from_create__(
  calendar_dt,
  trading_dt,
  order_book_id,
  amount,
  side,
  style,
  position_effect
)
#修改为
Order.__from_create__(
  order_book_id,
  amount,
  side,
  style,
  position_effect
)
  • iPython 更新至 6.0 版本以后不再支持 Python 2.x 导致在 Python 2.x 下安装RQAlpha 因为 line-profiler 依赖 iPython 的缘故而报错。目前增加了在 Python 2.x 下依赖 iPython 5.3.0 版本解决此问题。

  • 不再提供 rqalpha-cmd 命令的扩展和注入,目前只有一个 entry point: rqalpha 第三方 Mod 可以扩展 rqalpha 命令。

  • 增加 from rqalpha import subscribe_event 来支持事件订阅(暂时不增加到API中,您如果想在策略里使用,也需要主动 import 该函数), 如下示例所示:

from rqalpha.api import *
from rqalpha import subscribe_event


def on_trade_handler(event):
    trade = event.trade
    order = event.order
    account = event.account
    logger.info("*" * 10 + "Trade Handler" + "*" * 10)
    logger.info(trade)
    logger.info(order)
    logger.info(account)


def on_order_handler(event):
    order = event.order
    logger.info("*" * 10 + "Order Handler" + "*" * 10)
    logger.info(order)


def init(context):
    logger.info("init")
    context.s1 = "000001.XSHE"
    update_universe(context.s1)
    context.fired = False
    subscribe_event(EVENT.TRADE, on_trade_handler)
    subscribe_event(EVENT.ORDER_CREATION_PASS, on_order_handler)


def before_trading(context):
    pass


def handle_bar(context, bar_dict):
    if not context.fired:
        order_percent(context.s1, 1)
        context.fired = True

# rqalpha run -f ./rqalpha/examples/subscribe_event.py -s 2016-06-01 -e 2016-12-01 --stock-starting-cash 100000 --benchmark 000300.XSHG
  • sys_stock_realtime 提供了一个行情下载服务,启动该服务,会实时往 redis 中写入全市场股票行情数据。多个 RQAlpha 可以连接该 redis 获取实时盘口数据,就不需要重复获取数据。详情参考文档 sys stock realtime mod README

  • 解决期货策略持仓到交割导致可用资金计算不准确的问题

  • 解决 –plot 时候会报错退出的问题

2.2.2

  • 增加 run_file | run_code | run_func API, 详情请参见 多种方式运行策略

  • Breaking Change: 更改 AbstractStrategyLoader:load 函数的传入参数,现在不需要 strategy 了。

  • 增加 UserFuncStrategyLoader

  • 根据 Issue 116 增加如下内容:

    • POSITION_EFFECT 增加 CLOSE_TODAY 类型

    • 增加调仓函数 order(order_book_id, quantity, price=None) API

      • 如果不传入 price 则认为执行的是 MarketOrder 类型订单,否则下 LimitOrder 订单

      • 期货

        • quantity > 0: 往 BUY 方向调仓 quantity 手

        • quantity < 0: 往 SELL 方向调仓 quantity 手

      • 股票

        • 相当于 order_shares 函数

    • 增加调仓函数 order_to(order_book_id, quantity, price=None) API

      • 基本逻辑和 order 函数一致

      • 区别在于 quantity 表示调仓对应的最终仓位

    • 现有所有下单函数,增加 price option,具体行为和 order | order_to 一致

  • Fix bug in all_instruments PR 123

  • Fix “运行不满一天的情况下 sys_analyser 报 KeyError” PR 118

  • sys_analyser 生成 report 对应的字段进行调整,具体调整内容请查看 commit d9d19f

2.2.0

  • 增加 orderorder_to 高阶下单函数

  • 更新数据源,现在使用原始数据和复权因子的方式进行回测

  • 不再使用 ruamel.yaml 该库在某些情况下无法正确解析 yml 配置文件

  • 解决 six 库依赖多次引用导致安装出错的问题

  • 解决 rqalpha run 的时候指定 -st | --kind 时报错的问题

  • --security / -st 现在支持多种模式,可以使用 -st stock -st future 也可以使用 -st stock_future 来设置security

  • 更新 BarDictPriceBoard Issue 115

  • 解决 print(context.portfolio) 时因为调用了 abandon property 会报 warning 的问题 Issue 114

  • 解决 rqalpha mod install xx 不存在的 Mod 也会导致 mod_config.yml 更新的问题 Issue 111

  • 解决 rqalpha plot 无法画图的问题 Issue 109

2.1.4

  • 解决 history_bars 在 before_trading 获取的是未来数据的问题

  • 解决 before_trading 获取结算价是当前交易日结算价的问题

  • 增加 RQAlpha 向前兼容(0.3.x) Issue 100

  • 期货增加强平机制: 及当前账户权益<=0时,清空仓位,资金置0 Issue 108

  • 解决回测时只有一个交易日时,只有回测数据显示的问题

2.1.3

  • Fix Issue 101

  • Fix Issue 105

  • 解决运行 RQAlpha 时缺少 six | requests 库依赖的问题

  • 解决安装RQAlpha时在某些情况下报错的问题

  • 解决第三方 Mod 安装后配置文件路径有误的问题

  • 现在可以通过 rqalpha mod install -e . 的方式来安装依赖 Mod 了

  • 现在运行策略时会检测当前目录是否存在 config.yml 或者 config.json 来作为配置文件

  • 解决股票下单就存在 position 的问题,现在只有成交后才会产生 position 了。

  • 修复 portfoliofuture_account 计算逻辑的一些问题

  • 修复 transaction_cost 在某个 position 清空以后计算不准确的问题

  • 在信号模式下 price_limit 表示是否输出涨跌停买入/卖出的报警信息,但不会阻止其买入/卖出

2.1.2

  • 提供 from rqalpha import cli 方便第三方 Mod 扩展 rqalpha command

  • history_bars 增加 include_now option

  • Fix Issue 90

  • Fix Issue 94

2.1.0

  • Fix Issue 87

  • Fix Issue 89

  • Fix 无法通过 env.config.mod 获取全部 mod 的配置信息

  • 增加 context.config 来获取配置信息

  • 提供 from rqalpha import export_as_api 接口,方便扩展自定义 API

2.0.9

2.0.8

  • Fix Issue 81

  • 解决 mod_config.yml 文件解析出错以后,所有的命令报错的问题

  • 默认在 Python 2.x 下 sys.setdefaultencoding(“utf-8”)

  • 优化 UNIVERSE_CHANGED 事件,现在只有在universe真正变化时才触发

2.0.7

  • Fix Issue 78

  • is_st_stock | is_suspended 支持 count 参数

  • 解决大量 Python 2.x 下中文乱码问题

2.0.6

  • 解决在 Python 2.x 下安装 RQAlpha 提示 requirements-py2.txt Not Found 的问题

  • 解决 Benchmark 无法显示的问题

  • 解决 rqalpha mod list 显示不正确的问题

  • 现在可以通过配置 base.extra_vars 向策略中预定义变量了。用法如下:

from rqalpha import run

config = {
  "base": {
    "strategy_file": "strategy.py",
    "start_date": "2016-06-01",
    "end_date": "2016-07-01",
    "stock_starting_cash":100000,
    "benchmark": '000300.XSHG'
  },
  "extra":{
    "context_vars":{
      "short":5,
      "middle":10,
      "long":21
    }
  }
}

result_dict = run(config)

# 以下是策略代码:

def handle_bar(context):
    print(context.short)    # 5
    print(context.middle)   # 10
    print(context.long)     # 21

2.0.1

  • 修改配置的读取方式,不再从 ~/.rqalpha/config.yml 读取自定义配置信息,而是默认从当前路径读取 config.yml,如果没找到,则会读取系统默认配置信息

  • 现在不再对自定义信息进行版本检查

  • rqalpha generate_config 现在会生成包含所有默认系统配置信息的 config.yml 文件。

  • RUN_TYPE 增加 LIVE_TRADING

  • 修复 history_bars 获取日期错误产生的问题

  • 修复执行 context.run_info 会报错的问题

  • 修复持久化报错的问题

  • 增加 Order Persist 相关内容

2.0.0

2.0.0 详细修改内容请访问:RQAlpha 2.0.0

Portfolio/Account/Position 相关

  • 重新定义了 Portfolio, AccountPosition 的角色和关系

  • 删除大部分累计计算的属性,重新实现股票和期货的计算逻辑

  • 现在只有在 Portfolio 层级进行净值/份额的计算,Account级别不再进行净值/份额/收益/相关的计算

  • 账户的恢复和初始化现在只需要 total_cash, positionsbackward_trade_set 即可完成

  • 精简 Position 的初始化,可以从 real_broker 直接进行恢复

  • Account 提供 fast_forward 函数,账户现在可以从任意时刻通过 orderstrades 快速前进至最新状态

  • 如果存在 Benchmark, 则创建一个 benchmark_portfolio, 其包含一个 benchmark_account

  • 策略在调用 context.portfolio.positions[some_security] 时候,如果 position 不存在,不再每次都创建临时仓位,而是会缓存,从而提高回测速度和性能

  • 不再使用 clone 方法

  • 不再使用 PortfolioProxyPositionProxy

Event 相关

  • 规范 Event 的生成和相应逻辑, 使用 Event object 来替换原来的 Enum

  • 抽离事件执行相关逻辑为 Executor 模块

Mod 相关

  • 规范化 Mod 命名规则,需要以 rqalpha_mod_xxx 作为 Mod 依赖库命名

  • 抽离 slippage 相关业务逻辑至 simulation mod

  • 抽离 commission 相关业务逻辑至 simulation mod

  • 抽离 tax 相关业务逻辑至 simulation mod

  • rqalpha mod list 命令现在可以格式化显示 Mod 当前的状态了

Environment 和 ExecutionContext 相关

  • 现在 ExecutionContext 只负责上下文相关的内容,不再可以通过 ExecutionContext 访问其他成员变量。

  • 扩展了 Environment 的功能,RQAlpha 及 Mod 均可以直接通过 Environment.get_instance() 来获取到环境中核心模块的引用

  • Environment 还提供了很多常用的方法,具体请直接参考代码

配置及参数相关

  • 重构了配置相关的内容,~/.rqalpha/config.yml 现在类似于 Sublime/Atom 的用户配置文件,用于覆盖默认配置信息,因此只需要增加自定义配置项即可,不需要全部的配置内容都存在

  • 将Mod自己的默认配置从配置文件中删除,放在Mod中自行管理和维护

  • 独立存在 ~/.rqalpha/.mod_conifg.yml, 提供 rqalpha mod install/uninstall/enable/disable/list 命令,RQAlpha 会通过该配置文件来对Mod进行管理。

  • 抽离 rqalpha run 的参数,将其中属于 Mod 的参数全部删除,取代之为Mod提供了参数注入机制,所以现在 Mod 可以自行决定是否要注入参数或者命令来扩展 RQAlpha 的功能

  • 提供了 rqalpha-cmd 命令,Mod 推荐在该命令下注入自己的命令来实现功能扩展

  • 不再使用 –strategy-type, 改为使用 –security 选项

  • –output-file | –report | –plot | –plot-save`参数 转移至 `sys_analyser Mod 中

  • plot | report 命令,转移至 sys_analyser Mod 中

  • –signal | –slippage | –commission-multiplier | –matching-type | –rid 转移至 sys_simulation Mod 中

Risk 计算

  • 修复 tracking error 计算错误

  • 修改 sharpe , sortino , information ratio , alpha 计算逻辑。参考 晨星 的方法, 先计算单日级别指标, 再进行年化。与原本直接基于年化值计算相比, 在分析时间较短的情况下, 新的指标计算结果会系统性低于原指标结果。

  • 引入单日无风险利率作为中间变量计算上述指标。单日无风险利率为通过 中国债券信息网 获取得到对应期限的年化国债到期收益率除以244得到

  • 修改指标说明若干

其他

  • 修改了 OrderTrade 的字段和函数,使其更通用

  • RqAttrDict 类增加 update 方法,现在支持动态更新了

  • arg_checker 增加 is_greater_or_equal_thanis_less_or_equal_than 函数

  • 删除 DEFAULT_FUTURE_INFO 变量,现在可以直接通过 data_proxy 获取相关数据

  • 通过 better_exceptions 提供更好的错误堆栈提示体验

  • 对字符串的处理进行了优化,现在可以正确在 Python2.x/3.x 下显示中文了

  • 修复 update_bundle 直接在代码中调用会报错的问题

  • 增加对于下单量为0的订单过滤,不再会创建订单,也不再会输出警报日志

  • 增加 is_suspendedis_st_stock API 的支持

0.3.14

  • Hotfix UnboundLocalError: local variable 'signature' referenced before assignment

0.3.13

  • 增加股票裸做空的配置参数 --short-stock

  • POSITION_EFFECT 增加 CLOSE_TODAY

  • ExecutionContext 增加 get_current_close_price get_future_commission_info get_future_margin get_future_info 函数

  • 增加 RQInvalidArgument 来处理用户策略代码异常的问题

  • 现在可以正确提示期货主力连续合约和指数连续合约在回测和模拟中的报错信息了

  • 现在以 handle_tick(context, tick) 的方式支持tick级别的API支持(未来可能会修改)

  • 现在回测时的 before_trading 函数输出的时间提前到开盘前半小时

0.3.12

  • 优化 setup.py 脚本,只有在 python 2 环境下才安装兼容性依赖库

  • 增加 rqalpha install/uninstall/list/enable/disable 命令

  • 增加 EVENT.POST_SYSTEM_RESTORED 事件

  • 增加 净值和份额的支持,现在的收益和Analyser的计算都是基于净值了。

  • 在 AnalyserMod 输出的 Trade 中增加 sideposition_effect

  • 修复 total_orders 计算错误

  • 修复 inpsect.signature 在 python 2.x 报错的问题。

0.3.11

  • 更新本地化翻译,修改系统提示,支持多语言

  • 增加 --locale 默认为 cn (中文), 支持 cn | en (中文 | 英文)

  • 修复 main.run 返回值中 stock_positionNone 的问题

  • 修复 Windows Python 2.7 下中文显示乱码的问题

0.3.10

  • 增加 config.yml 的版本号检查及相关流程

  • 增加 plot 关于中文字体的校验,如果系统没有中文字体,则显示英文字段

  • 修正 Benchmark 在不设置时某些情况下会导致运行失败的错误

  • 修正 inspect.unwrap 在 Python 2.7 下不支持的兼容性问题

  • 修正 numpy 在某些平台下没有 float128 引起的报错问题

0.3.9

  • 增加 --disable-user-system-log 参数,可以独立关闭回测过程中因策略而产生的系统日志

  • --log-level 现在可以正确区分不同类型的日志,同时增加 none 类型,用来关闭全部日志信息。

  • 在不指定配置文件的情况下,默认会调用 ~/.rqalpha/config.yml 文件

  • 支持 rqalpha generate_config 命令来获取默认配置文件

  • 指定策略类型不再使用 --kind 参数,替换为 --strategy-type 和配置文件呼应

  • 重构 events.py,现在可以更好的支持基于事件的模块编写了

  • 将风险指标计算独立成 analyser Mod

  • 将事前风控相关内容独立成 risk_manager Mod

  • 回测实盘模拟 相关功能独立成 simulation Mod

0.3.8

  • 增加几个 technical analysis 的 examples 和自动化测试

  • 修复一些在 Python 2 下运行的 bug

0.3.7

  • 增加 -mc / --mod-config 参数来传递参数到 mod 中

  • 增加了 simple_stock_realtime_trade, progressive_output_csv,funcat_api 几个 DEMO mod 供开发者参考开发自己的 mod

  • update_bundle 移到 main.py 中,方便直接从代码中调用 update_bundle

  • 增加了一些自动化的测试用例

0.3.6

  • support auto test with Travis [python 2.7 3.4 3.5 3.6]

  • rqalpha.run 现在支持直接传入 source_code

  • 支持 rqalpha.update_bundle 函数

0.3.5

  • 增加 from rqalpha import run 接口,现在可以很方便的直接在程序中调用RQAlpha 回测了。

0.3.4

  • 本地化模块更具有扩展性

  • 修改 rqalpha update_bundle 的目录结构,现在是在指定目录下生成一个 bundle 文件,而不再会直接删除当前文件夹内容了。

0.3.3

  • 解决 rqalpha examples -d . 无样例策略生成的问题

0.3.2

  • 解决 Windows 10 下 matplotlib 中文字体显示乱码的问题

  • 解决 Windows 下 set_locale error 的问题

0.3.1

  • 增加 Python 2 的支持

0.3.0

  • 支持多周期回测扩展(虽然只有日线数据,但是结构上是支持不同周期的回测和实盘的)

  • 支持期货策略

  • 支持混合策略(股票和期货混合)

  • 支持多种参数配置方式

  • 抽离接口层,数据源、事件源、撮合引擎、下单模块全部可以替换或扩展。

  • 完善事件定义,采取 pub/sub 模式,可以非常简答的在 RQAlpha 中添加 hook。

  • 增加 Mod 机制,极大的增加了 RQAlpha 的扩展性,使其可以轻松完成程序化交易过程中所产生的的特定需求。

0.0.53

  • 完善了回测结果显示

  • 修正了 Risk 计算和 Benchmark 计算

0.0.20

  • 增加会回测进度显示开关

  • 完善了回测结果显示

0.0.19

  • handle_bar 前用当前的数据更新 portfolio 和 position,因为 ricequant.com 是这样做的。

0.0.18

  • 修复了分红计算

0.0.16

  • 用户可以通过 context 设置 slippage/commission/benchmark

  • 增加了 scheduler

0.0.15

  • 修复 history 在 before_trading 调用

  • 增加 api 的 phase 检查

0.0.14

  • 修改支持 python2

0.0.12

  • 修正了 Risk 计算,使用合理的年化收益计算方法

  • 格式化代码符合 pep8

  • 更新 requirements.txt

0.0.9

  • 增加了数据下载

  • 修正了 Risk 计算

  • 增加了 instrument

  • 增加了 position 的 market_valuevalue_percent

0.0.2

  • 增加了日线回测

  • 去掉了涨跌停检查

  • 增加了分红处理

  • 运行参数如下:

# 生成sample策略
rqalpha generate_examples -d ./

# 运行回测
rqalpha run -f examples/simple_macd.py -s 2013-01-01 -e 2015-01-04 -o /tmp/a.pkl

0.0.1

  • 搭建基本的框架,增加基本的 unittest