CHANGELOG
6.1.5
回测结果图片和 Excel 报告新增年化双边换手倍数
order_target_portfolio_smart API 性能优化
AbstractPosition 类新增 property: instrument
修复分红再投资未考虑交易费用的问题
修复获取结算价时,只允许期货获取的问题,将品种范围扩增为: 期货、期权、现货
6.1.4
下单接口变更: - order_target_portfolio_smart API 支持 ETF/LOF/REITs 品种 - order_target_portfolio API 支持 REITs 品种
涨跌停边界撮合修正: - 是否触及涨跌停判断修改为按 tick_size 做容差处理 - 获取到的涨跌停价为 NaN 时,认为标的没有涨跌停限制
6.1.3
修复 all_instruments 获取数据确实的问题
6.1.2
修复更新 bundle 数据时,由于数据量过大导致断开与 rqdata 的连接
6.1.0
- 本次迭代包含重大的架构基本假设变更:
旧版本隐含假设了 每个 order_book_id 只对应唯一的 Instrument 对象,这与实际业务逻辑不符;
新版本假设 instrument 是时序的,同一个 order_book_id 在不同时间点可能对应不同的 Instrument 对象;
[不兼容改动]
order 和 order_to 下单 API 的 order_book_id 参数名修改为 id_or_ins
get_position 不能传入还未上市的 order_book_id,传入此类代码会抛出异常
Instrument.listing_at 更名为 active_at,旧方法移除
[新增功能]
新增 active_instrument / active_instruments API,用于获取当前交易时点正在活跃(上市中、未退市)的合约对象
新增 instrument_history/ instruments_history API,用于获取合约历史记录列表(包含未上市或已退市合约)
[重构和改善]
API 参数校验支持自动转换(Instrument/symbol -> order_book_id),统一下单与查询路径
风控、下单、分析等模块统一基于交易时点的合约对象进行判断
[其他改进]
依赖调整:typing-extensions 版本提升至 >=4.5.0
更新翻译文件
[For Mod 开发者] 接口变更指引
DataProxy 增加合约历史/活跃合约相关接口(如 get_active_instrument(s)、get_instrument_history、get_instruments_history 等)
Environment.get_instrument 及 DataProxy 旧合约相关接口(因不符合新假设)标记为废弃
参数校验体系调整 - 新增 assure_that 支持参数自动转换(如 Instrument / symbol -> order_book_id),若 API 内部需要参数格式转换,推荐直接使用该功能将检验和转换合并 - 移除部分依赖 “全局唯一 Instrument” 假设的校验规则,如 is_valid_stock / is_valid_future / is_valid_instrument 等 - 新增 is_valid_order_book_id 用于 order_book_id 的基础合法性检验/转换
6.0.0
[新增功能]
mod_sys_accounts`新增 `dividend_tax_rate 配置项,支持固定股息税率配置,默认为 0
新增 order_target_portfolio_smart API,相比 order_target_portfolio 更加智能和精确
[问题修复]
修复分红情况下 position_pnl 的计算
修复 order_value 及关联 API 在算法单撮合场景下对可买股数估计不准的问题
[重构和改善]
重构测试框架,从自定义框架迁移到 pytest,提升测试灵活性和功能性,更好地与 IDE 集成
重构 BaseDataSource,改善代码质量和性能;废弃 InstrumentStore 和 AbstractInstrumentStore
重构更新 bundle 的部分代码,提升扩展性
修改 DataProxy 的部分接口,改进代码质量和类型安全性
重构 StockPosition 类,增强分红拆分计算的鲁棒性
重构 AnalyserMod,增加对部分非 A 股交易日历的 benchmark 的支持
重构 StockTransactionCostDecider 和 FutureTransactionCostDecider,适配新的接口、简化代码
改善 Instrument、Order 和 Trade 类,简化使用、提升性能
改善 Portfolio 和 Account 类,提升针对不同合约及多市场场景下的扩展性
改善类型提示
大幅改善进程内多次运行回测会出现的内存泄漏问题
[其他改进]
策略抛出异常时,RQAlpha 主函数或进程最终也会抛出异常(而不是仅打印错误日志)
更新翻译文件
[For Mod 开发者] 接口变更指引
本版本对接口进行了重大重构,主要目的是简化代码、提升类型安全性及提升针对多市场交易的扩展性
1. `interface.py` 变更
AbstractTransactionCostDecider 接口发生重大变更,多个方法合并为单一 calc 方法
DataSource 新增 get_exchange_rate 方法,对于单一货币的场景,简单返回全 1 的汇率结构即可(参考 BaseDataSource 的实现)
2. `BaseDataSource` 接口变更
register_xxx_store 增加 market 参数,register_instrument_store 替换为 register_instruments
InstrumentStore 和 AbstractInstrumentStore 已标记为废弃
3. `DataProxy` 接口变更
删除 get_dividend_by_book_date 和 get_split_by_ex_date 方法
get_prev_close 方法新增 adjust_type 参数
新增 instrument_not_none 和 multi_instruments 方法,提高类型安全性
新增 get_exchange_rate 方法,用于获取汇率数据
交易日历相关方法 trading_calendar_type 参数的默认值改为 TRADING_CALENDAR_TYPE.CN_STOCK
4. `Environment` 接口变更
简化税费计算相关接口,将功能重叠的多个接口合并精简为 calc_transaction_cost
变更多个组件属性的行为以提升类型安全,以下属性在未设置之前尝试访问会抛出 AttributeError`(而不是返回 `None): - data_proxy - data_source - price_board - event_source - broker - strategy_loader - portfolio - mod_dict - user_strategy
4. 各 model 和业务类
Instrument - 构造函数新增 market 参数,非中国市场标的需要传入该参数 - 新增 min_order_quantity 和 order_step_size 属性,改善原 round_lot 含义模糊的问题
Order - 新增 estimated_transaction_cost 属性,用于估算订单交易成本
Trade - 构造后不再需要显式设置 commission 和 tax,这一过程已集成至 __from_create__ 内部
Account - 增加 available_cash_for 方法,用于在多市场场景下获取指定标的的可用资金,风控场景应使用该方法而不是 cash 属性
5. 枚举类型变化
TRADING_CALENDAR_TYPE 新增 HK_STOCK 和 SOUTHBOUND 类型,原 EXCHANGE 类型重命名为 CN_STOCK
新增 MARKET 枚举 (MARKET.CN, MARKET.HK) 用于多市场支持
6. 重构测试框架
新的回测结果断言工具 - rqalpha.utils.testing 下新增 assert_result 工具函数,用于断言回测结果与文件中持久化的结果相一致 - 增加了专门用来持久化回测结果的自定义文件格式,兼顾了可读性和序列化能力
5.6.5
submit_order 支持 TWAPOrder、VWAPOrder 下单
修复 reits 合约没有进行分红处理的问题
修复 rqalpha –plot 偶发的无法正常运行的问题
5.6.4
适配 FutureArbitrage Instrument type
portfolio.csv 文件中的超额序列拆分为算术超额和几何超额
5.6.3
回测结果的 portfolio 文件中增加基准、超额序列
withdraw/deposit 支持盘前盘后执行
5.6.2
优化涨跌停判断逻辑
优化 numpy 版本限制
5.6.1
回测支持场内交易 REITs
5.6.0
instrument 兼容 REITs 类型合约
兼容 python==3.13
5.5.4
修复 get_securities_margin 传入 XSHE/XSHG、sz/sh 报错的问题
5.5.2
修复初始化持仓设置为’’的bug
修正接口定义
5.5.1
修复初始化持仓相关问题
5.5.0
修复复合基准收益率计算错误的bug:修复当使用多个标的作为基准(如 399370.XSHE:0.5,399371.XSHE:0.5)时,基准收益率计算错误的问题。该bug在5.4.0版本中引入,会导致基准总收益率被错误地放大。
支持负权重指数作为基准
支持NULL作为基准标的
修复order_target_portfolio由于交易费用导致资金不够用的问题
优化order_target_portfolio相关API
修复多线程和循环运行多个策略时rqdatac没有正常初始化问题
更新bundle数据支持将错误统一输出
修改算法单拒单原因
5.4.2
修复 order_target_portfolio 运行出现资金不足的问题
优化更新 bundle 数据的流程
5.4.1
调整拆分送股的逻辑(拆分时产生不足 1 股的情况,调整为四舍五入)
5.4.0
优化 bundle 数据过旧的提示
优化进行目标仓位调仓时下单失败的提示
修复开启多线程时抛异常的问题
5.3.11
修复增量回测报错的问题
5.3.10
下单 API 在创建订单失败时,新增发布 ORDER_CREATION_REJECT 事件
Excel 报告引入压力测试期表现
支持基准合约在上市前的行情(主要为指数)
5.3.9
Excel 报告的年度指标新增 alpha 和 beta
修复买入标的时资金可能为负的问题
5.3.8
修复部分期货获取 tick_size 报错的问题
修复期货在交割日期 trading_pnl 数值异常的问题
5.3.7
分红再投资产生交易流水事件
修复获取 tick_size 报错的问题
5.3.6
兼容 rqdata==3.0
修复 init_positions 设置空头仓位时数值出错的问题
5.3.5
期货回测支持使用 rqdatac 提供的时间序列费率和保证金费率数据
印花税费率新增 PIT 模式
兼容 python==3.12
5.3.3
修复平今数量的计算异常
5.3.2
修复导出的分析报告出现乱码的异常
5.3.1
新增检查基准上市时段是否满足回测时间范围
修复分钟回测中挂单在非交易时间内被拒单的异常
5.3.0
策略参数配置 extra 下 新增 log_file 用于将日志输出到文件
修复期货分钟回测open_auction拿到的最新价有误(signal模式)
5.2.1
修复期货分钟回测open_auction拿到的最新价有误
修复当日无成交量时算法单有误
5.2.0
report年度指标新增超额夏普比率
调整默认印花税为万5
order_target_portfolio支持可转债
修复bundle更新时进度条跟不上任务完成进度
修复合约交割时权益计算有误
修复current_snapshot在open_auction中获取时last为close,应为open
5.1.2
修复analyser中计算个股权重的异常
修复分钟回测中挂单在非交易时间内被拒单的异常
5.1.1
调整API参数;更新文档
5.1.0
新增个股权重检测, summary报告中新增了表格
新增api futures.get_dominant_price,支持动态复权
修复pandas1.5.0以下无法产生report
修复在日内回转交易时trading_pnl计算错误
5.0.0
适配pandas2.0
交易指数标的时,不检查上市日期,根据行情数据有无决定
撮合时屏蔽已完成的订单
修复get_prev_settlement取不到第一天的,采用prev_settlement字段
新增算法单:VWAPOrder 和 TWAPOrder
4.16.2
修复bundle更新异常
限制pandas版本为 < 2.0.0
sys_analyser检查基准合法性
sys_accounts支持分别设置股票、期货佣金倍率
4.16.1
修正文档
4.16.0
新增check-bundle检查日线bundle命令
report年度指标sheet新增指标
修复tick回测和获取无风险收益率的异常
改善order_target_portfolio并完善api文档
4.15.0
修复python3.10在Ubuntu和Centos下更新数据异常
期货回测支持使用结算价进行结算
修正报告中跟踪误差,使用年化跟踪误差
修改超额收益相关指标的计算,具体公式可参考rqrisk
4.14.1
ricequant报告图模版调整超额收益曲线,公式改为每日的超额收益率的累计
改善summary报告中数据的展示格式并新增部分指标
4.14.0
分析报告新增UlcerIndex(累计回撤深度)和UlcerPerformanceIndex(累计回撤夏普率)相关指标
修复多次输出plot图时水印异常
4.13.1
适配次主力合约(88A2)和次次主力合约(88A3)
4.13.0
analyser plot 新增报告图模版功能
account 弃用 equity 改为 position_equity
INSTRUMENT_TYPE 新增 Fund 类型
4.12.1
修正日志
4.12.0
调整分析指标中部分指标的显示格式为百分比
将分析指标中的超额收益波动率从日度改为年化
入金支持延迟到账
4.11.3
分析指标新增胜率和盈亏比,调整了作图中指标的布局
修复当本地语言为中文但无中文字体时基准名称显示的异常
修复输出report时账户未记录清仓手续费的异常
修复前一个交易日发生除息,当前交易日在before_trading时 position.last_price 未进行复权的异常
4.11.2
修复 physical_time api接口的导出,策略编写不在需要显式导出
修复 更新base数据时window系统下出现内存错误的异常
4.11.1
新增取消rqdatac init 开关, config base rqdatac_uri 可设置为 ‘disabled’ 或 ‘DISABLED’
修正关于888前复权合约的数据问题
调整默认撮合方式, matching_type 为 None 则表示根据回测频率自动选择。日/分钟回测下为 current_bar , tick 回测下为 last
修复性能分析
4.11.0
针对股票和ETF新增融资功能,新增 finance 和 repay API
Account 新增 cash_liabilities(现金负债) 属性
sys_account 新增 financing_rate(融资利率/年) 和 financing_stocks_restriction_enabled(是否开启融资可买股票池限制) 配置项
优化回测报告,在图例中显示基准的名称
4.10.1
优化回测报告及返回值输出情况,增加最长回撤持续期相关指标
4.10.0
将DefaultMatcher划分DefaultBarMatcher和DefaultTickMatcher
Tick回测支持成交量限制,成交量限制为两个tick的成交量之差乘以volume_percent
Tick回测handle_bar支持盘前的tick
Tick回测不再支持open_auction接口,集合竞价时段内成交一律使用last
修复get_open_auction_bar获取非交易日时的异常
4.9.2
修改get_pit_financials_ex接口中count参数的含义为当前标的已发布财报的数量
4.9.1
修复get_pit_financials_ex接口的bug
4.9.0
定时器新增期货应用场景
改善tick回测性能
4.8.1
改善回测输出的summary和净值图,新增超额累计收益指标
4.8.0
Position类移除了 _today_quantity 属性,新增 _quantity 属性
部分接口新增了缓存
Environment类新增submit_order接口
Interface中AbstractPosition移除了margin接口
order_target_portfolio接口支持 limit order
rqalpha_mod_sys_analyser组件报表新增excel格式
提升框架的整体性能
4.7.1
补全类型提示
优化翻译和错误提示
全面支持Python3.10
4.7.0
重构绘制策略收益图的逻辑。增加绘制买卖点的选项,周度收益曲线和指标改为通过配置项激活
调整 Signal 模式的逻辑。现在在 Signal 模式下开启 price_limit 选项时,超出涨跌停价格范围的订单将会被拒绝
重构国际化逻辑。现在 RQAlpha 将自动检测操作系统的语言设置从而在中英文间进行切换(而不是强制使用中文)
优化部分日志和错误信息的中文翻译
调整了部分在 Python3.10 下会报错的代码
4.6.0
策略运行结束后绘制的收益图中加入超额收益曲线、周度收益曲线,加入部分超额收益和周度风险指标
策略运行结束后输出的结果中加入部分超额收益和周度风险指标
4.5.2
放宽
BaseDataSource.get_open_auction_bar方法对于 bundle 数据字段的要求
4.5.1
Instrument对象增加trading_code字段,意为该标的在交易所的代码修复
get_pit_financials_ex的异常行为get_positions接口不再返回数量为 0 的持仓对象修复了在分红未到账时平仓会导致分红金额始终不到账的问题
修复了
get_open_orders取不到集合竞价阶段挂单的问题及其导致的冻结资金异常问题修复了个别情况下持仓盈亏和交易盈亏计算错误的问题
4.5.0
新增逐档撮合,该撮合方式会根据 tick 行情中的多档挂单信息逐步撮合订单。可在 tick 回测中设置 matching_type 为
counterparty_offer以启用。修复挂单进入终结状态时解冻资金金额异常的问题
4.4.2
RQAlpha 从该版本开始不再提供对 Python3.5 的支持
get_financials被标记为废弃,请使用get_pit_financials_ex修复了在未设置基准的情况下,部分不应产生结果的风险指标出现异常计算结果的问题
修复因浮点数精度问题导致的股票拆分数量错误
4.4.1
修复了调取
history_bars获取到错误的复权价的问题
4.4.0
DataSourceinterface 增加了get_open_auction_bar接口。通过实现该接口,模拟交易可提供在集合竞价阶段获取 bar 的功能。修复了 Windows 下导出 csv 报告格式异常的问题
修复了其他 bug
4.3.3
回测和模拟交易的
--matching-type参数支持传入vwap以启用成交量加权平均价撮合股票下单 API 中限制散股交易的逻辑针对科创板股票进行了适配
4.3.2
新增
history_bars的 frequency 参数支持传入 :code`’1w’` 以获取周线
修复
修复
Order对象从持久化中恢复出错的问题修复通过策略内配置项配置股票分红再投资参数无效的问题
修复合约在某些日期无行情导致基准收益曲线计算有误的问题
修复
Order对象avg_price字段计算有误的问题修复通过
order_target_portfolioAPI 发出的订单验资风控异常的问题
4.3.0
新增
新增出入金 API
withdraw和deposit,用于为指定账户出金/入金新增使用资产收益加权作为基准的功能,参数形如
--benchmark 000300.XSHG:0.5,510050.XSHG:-1新增按日簿记账户管理费用的功能,参数形如
--management-fee stock 0.0002Trade类的构造函数增加了关键字参数
重构
重构了
BaseDataSource所使用的InstrumentStore,使得通过 mod 扩展支持的资产品种变得更加容易重构了
AbstractDataSource中的 instruments 的相关接口不再支持在日级别回测中使用”下一个 bar 撮合”
4.2.5
修复了访问持仓对象
closable字段会抛出异常的 bug
4.2.4
rqalpha-mod-sys-simulation增加配置项inactive_limit,开启该选项可禁止订单在成交量为 0 的 bar 成交rqalpha-mod-sys-transaction-cost增加tax_multiplier配置项,用于设置印花税倍率Order类的构造函数增加关键字参数移除
AbstractAccount接口移动部分 module 至
rqalpha.corepackage
4.2.1
移除了
--disable-user-log及--disable-user-system-log命令行参数修复了
index_weights抛出异常的 bug修复了安装某些版本 rqdatac 时更新 bundle 出现异常的问题
移除了部分兼容 python2 的代码、重构了
BaseDataSource的部分代码
4.1.4
增加了通过环境变量 RQALPHA_PROXY 设置代理的功能
修复了设置初始仓位后会抛出异常的 bug
修复了股票拆分后持仓收益计算错误的 bug
4.1.3
修复了在部分 windows 计算机上打开 bundle 时报错的问题
4.1.2
修复了 base_data_source 导致的债券回测报错的问题
4.1.1
修复了部分期货下单 API 平今仓会报错的问题
回测输出的收益图改为使用结算后的累计收益绘制(之前版本为 after_trading 后的累计收益)
4.1.0
[For 开发/运行策略的用户]
移除了回测报告中的 Excel 文件,所有信息均可在 csv 文件中找到
使用 IDE 编写策略的用户可通过执行
from rqalpha.apis import *以获得大部分 API 的代码提示修复了若干 4.0.0 版本引入的 bug
[For Mod 开发者]
下单 API 加入了 “singledispatch” 功能,mod 可为这些 API 针对不同的合约类型注册不同的实现,用法可参考 sys_mod_accounts.api
SimulationBroker增加register_matcher方法,mod 可为不同类型的合约注册不同撮合器已实现多样化的撮合逻辑重构
rqalpha.portfolio.position.Position类,自定义的持仓类只要继承该类并重写__instrument_types__属性便可自动注册持仓类,可参考 sys_mod_accounts.position_model为
Instrument类添加account_typeproperty,Instrument 子类可通过重写该 property 标明该 Instrument 的持仓归属于哪个账户
4.0.0
[For 开发/运行策略的用户]
对于开发/运行策略的用户,RQAlpha 4.x 版本改动的核心是加强与 RQDatac 之间的联动,拥有 RQDatac license 的用户可以更及时地更新 bundle, 亦可以在开源的 RQAlpha 框架下直接调用从前在 Ricequant 网站或终端产品中才能使用的扩展 API。
新增
变更
rqalpha update-bundle命令的功能改为使用 RQDatac 更新已存在的数据 bundle,新增rqalpha download-bundle和rqalpha create-bundle命令用于下载和创建 bundle,详见 获取回测数据line-profiler库不再是 RQAlpha 的硬性依赖,如果您需要性能分析功能,则需要手动安装line-profiler,详见 FAQ配置项中股票和期货验券风控的开关
validate_stock_position和validate_future_position移动到了rqalpha_mod_sys_accounts,详见 rqalpha_mod_sys_accounts传入
--report参数后输出的策略报告文件将直接生成于--report参数值给定的目录下,不再在该目录下新建以策略名为名称的文件夹
废弃
[For Mod 开发者]
RQAlpha 4.x 相对于 3.x 版本进行了部分重构,重构的核心目标是 Mod 开发者可以更方便地对接不同品种的金融工具。
BaseDataSource新增register_day_bar_store、register_instruments_store、register_dividend_store、register_split_store、register_calendar_store方法,用于在不重载DataSource的情况下对接更丰富的行情及基础数据移除
rqalpha mod install/uninstall命令,您可以使用pip install/uninstall命令替代,详见 ModEnvironment移除set_account_model、get_account_model方法,默认的Account类现在可以支持挂载不同类型的金融工具持仓,大多数情况下无需重载Account类Environment移除set_position_model、get_position_model方法,重载的Position类型可以调用Portfolio.register_instrument_type注册重构了
AbstractPosition接口,现在的Position对象仅表征单个方向的持仓,而非包含多空两方向的持仓,详见 基本概念移除了
BenchmarkProvider接口,基准相关的逻辑转移到rqalpha_mod_sys_analyser内部BaseDataSource使用的 bundle 格式由 bcolz 替换为 hdf5移除 Mod:
rqalpha_mod_sys_funcat、rqalpha_mod_sys_benchmarkInstrument新增calc_cash_occupation方法,该方法被风控等模块用于计算订单需要占用的资金量,对接新品种的金融工具应重载该方法移除了以下冗余的 logger 对象:
user_detail_log、basic_system_log、std_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_period和rqalpha.utils.is_night_trading函数变更为DataProxy的方法调整下载 bundle 的 URL
新增
Instrument对象新增交易时间相关的trading_hours和trade_at_nightproperty
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_mode和extra.force_run_init_when_pt_resume,相关判断移交给PersistProvider实现去掉
Booking类,相关逻辑合并至持仓类
3.3.3
新增
对期货 NR、UR、RR 的支持
修复
Python2.7 环境下依赖的 numpy 版本不正确的问题
进程启动后初次触发 settlement 事件时框架内部时间可能不正确的问题
期货下单 API 未拒绝不足一手的下单请求的问题
3.3.2
新增
SelfTradeValidator模块,用于拦截策略可能产生自成交的订单buy_close、sell_closeAPI 将订单拆分成多个时给出 WARNING 提示对股票更换代码这一行为的支持
对期货 CJ 品种的支持
变更
不再支持 Python3.4
修复
Booking持久化逻辑错误的问题指数的
Bar对象获取limit_up、limit_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.py为 rqrisk 项目。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_simulationMod 中的税费计算逻辑,并加入了对港股税费计算的支持。移除
sys_bookingMod,booking 相关逻辑移入框架中,Booking与Portfolio类地位相当。移除
sys_stock_realtimeMod,该 Mod 被移到了单独的仓库 rqalpha-mod-stock-realtime ,不再与框架一同维护。移除
sys_stock_incrementalMod,该 Mod 被移到了单独的仓库 rqalpha-mod-incremental ,不再与框架一同维护。
类型和 Api
增加
SimulationBooking类,实现了Booking类相同的方法,用于在回测和模拟交易中兼容实盘Booking相关的 Api。增加 Api
get_position和get_positions,用来获取策略持仓的BookingPosition对象。增加 Api
subscribe_event,策略可以通过该 Api 注册回调函数,订阅框架内部事件。DEFAULT_ACCOUNT_TYPE枚举类增加债券BOND类型。history_bars在before_trading中调用时可以取到当日日线数据。重构
Instrument类,该类所需的字段现在以 property 的形式写明,方便对 Instrument 对象的调用及对接第三方数据源。Instrument类型新增字段market_tplus,用来标识合约对平仓时间的限制,例如有 T+1 限制的 A 股该字段值为1,港股为 0。
逻辑
更改 Benchmark 的买入逻辑,不再对买入数量进行取整,避免初始资金较小时 Benchmark 空仓的问题。
修正画图时最大回撤的计算逻辑。
修正年化收益的计算逻辑,年化的天数的计算使用
start_date、end_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 5sys_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-exceptions、bcolz库的版本支持 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 直接定义了 Account 和 Position 相关的 Model, 增加新的 account 和 position 变得非常的困难,想扩展更多类型是一件很麻烦的事情,因此我们决定重构该模块从而解决这些问题。
详情请查看: https://github.com/ricequant/rqalpha/issues/160
主要进行如下更改:
增加
AbstractAccount和AbstractPosition, 用户可以基于该抽象类进行扩展。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_modelAPI 来注入 自定义Model。Environment提供set_smart_orderAPI 来注入自定义账户类型的智能下单函数,从而通过通用的order|order_toAPI 便可以交易对应自定义账户类型。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_close和sell_closeAPI 增加close_today参数,现在您现在可以指定发平今单了。Breaking Change: 原本期货中的
buy_close和sell_closeAPI 返回的Order对象。但实际交易过程中,涉及到昨仓今仓的时候,可能会存在发单被拒单的情况,RQAlpha 进行平昨/平今智能拆单的处理,因此在一些情况下会生成多个订单,对应也会返回一个订单列表。期货平仓更新的内容请参考 Issue 116Breaking Change: 取消
Order|Trade对应的__from_create__函数中calendar_dt和trading_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_funcAPI, 详情请参见 多种方式运行策略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_instrumentsPR 123Fix “运行不满一天的情况下 sys_analyser 报 KeyError” PR 118
sys_analyser 生成 report 对应的字段进行调整,具体调整内容请查看 commit d9d19f
2.2.0
增加
order和order_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
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 了。
修复 portfolio 和 future_account 计算逻辑的一些问题
修复 transaction_cost 在某个 position 清空以后计算不准确的问题
在信号模式下 price_limit 表示是否输出涨跌停买入/卖出的报警信息,但不会阻止其买入/卖出
2.1.2
2.1.0
2.0.8
Fix Issue 81
解决 mod_config.yml 文件解析出错以后,所有的命令报错的问题
默认在 Python 2.x 下 sys.setdefaultencoding(“utf-8”)
优化 UNIVERSE_CHANGED 事件,现在只有在universe真正变化时才触发
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,Account和Position的角色和关系删除大部分累计计算的属性,重新实现股票和期货的计算逻辑
现在只有在
Portfolio层级进行净值/份额的计算,Account级别不再进行净值/份额/收益/相关的计算账户的恢复和初始化现在只需要
total_cash,positions和backward_trade_set即可完成精简
Position的初始化,可以从real_broker直接进行恢复Account提供fast_forward函数,账户现在可以从任意时刻通过orders和trades快速前进至最新状态如果存在 Benchmark, 则创建一个
benchmark_portfolio, 其包含一个benchmark_account策略在调用
context.portfolio.positions[some_security]时候,如果 position 不存在,不再每次都创建临时仓位,而是会缓存,从而提高回测速度和性能不再使用
clone方法不再使用
PortfolioProxy和PositionProxy
Event 相关
规范 Event 的生成和相应逻辑, 使用 Event object 来替换原来的 Enum
抽离事件执行相关逻辑为
Executor模块
Mod 相关
规范化 Mod 命名规则,需要以 rqalpha_mod_xxx 作为 Mod 依赖库命名
抽离
slippage相关业务逻辑至simulation mod抽离
commission相关业务逻辑至simulation mod抽离
tax相关业务逻辑至simulation modrqalpha 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得到
修改指标说明若干
其他
修改了
Order和Trade的字段和函数,使其更通用为
RqAttrDict类增加update方法,现在支持动态更新了arg_checker增加is_greater_or_equal_than和is_less_or_equal_than函数删除
DEFAULT_FUTURE_INFO变量,现在可以直接通过data_proxy获取相关数据通过 better_exceptions 提供更好的错误堆栈提示体验
对字符串的处理进行了优化,现在可以正确在 Python2.x/3.x 下显示中文了
修复
update_bundle直接在代码中调用会报错的问题增加对于下单量为0的订单过滤,不再会创建订单,也不再会输出警报日志
增加
is_suspended和is_st_stockAPI 的支持
0.3.14
Hotfix
UnboundLocalError: local variable 'signature' referenced before assignment
0.3.13
增加股票裸做空的配置参数
--short-stockPOSITION_EFFECT增加CLOSE_TODAYExecutionContext增加get_current_close_priceget_future_commission_infoget_future_marginget_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 中增加
side和position_effect修复
total_orders计算错误修复
inpsect.signature在 python 2.x 报错的问题。
0.3.11
更新本地化翻译,修改系统提示,支持多语言
增加
--locale默认为cn(中文), 支持cn | en(中文 | 英文)修复
main.run返回值中stock_position为None的问题修复 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,现在可以更好的支持基于事件的模块编写了将风险指标计算独立成
analyserMod将事前风控相关内容独立成
risk_managerMod将 回测 和 实盘模拟 相关功能独立成
simulationMod
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_value和value_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