- 回测投研的业务规则
支持品种
- 股票(A股和B股)、期货、场内基金、可转债
撮合机制
市价单委托,成交价为下一根bar的开盘价。(在定时任务中下单则以下一交易日开盘价成交, tick回测用下个tick的price成交)
限价单委托,成交价为下单函数中指定的price参数数值 (设置滑点成交价会增加相应的滑点)
不考虑价格和成交量限制 (下单价格注意不要偏离当前价格,如果委托量较大,需要考虑对盘口的冲击,建议适当增加滑点)
股票没有限制T+0 (卖出时注意要用昨仓)
结算规则
交易结算,根据交易变动结算账户的资金和持仓数据
盘后结算,盘后校验账户全天交易数据
手续费规则
- 手续费按双边收取,不区分交易品种,只能设置佣金比例
分红配送
- 不支持分红配送,可设置前复权模式,回测的数据经过复权处理,不需要计算分红配送
委托校验
- 支持委托校验,开仓验资\平仓验券\标的代码\合法性校验, 不支持价格和成交量校验
资金调整
- 不支持对账户资金的转入转出
挂单冻结
- 不支持挂单冻结,下单会立刻成交
条件单
- 不支持条件单
- 不支持预埋单
- 回测模式市价单以什么价格成交?
有订阅行情
- 多频度行情订阅时,取最小频度行情撮合。
- match_mode = 0(默认)撮合规则:
- 以tick频度撮合时,取当前时间下一笔tick价格撮合;
- 以bar频度(包含日频), 取当前时间下一根bar开盘价撮合。
- match_mode = 1 撮合规则:
- 以tick频度撮合时,取当前时间点的tick价格撮合,如当前时间点没有tick, 取下一笔tick价格撮合;
- 以bar频度(包含日频), 取当前时间的bar收盘价撮合,如当前时间点没有bar, 取下一根bar收盘价撮合。
不订阅行情
- match_mode = 0 以下一天的开盘价撮合。
- match_mode = 1 以当天收盘价撮合。
- 回测模式下市价单,是复权还是不复权价格?
- 按照run中指定的复权方式计算,持仓均价计算亦如此。
- 复权回测模式下限价单,委托价格price如何设置合理?
- 回测限价单撮合是按照委托价格price撮合
- 建议使用订阅行情数据,tick的price或者bar的close。
- 没有订阅行情,限价单的委托价格price可以通过history,history_n接口获取时,需要将复权基点时间参数adjust_end_time设置为与run函数回测结束时间参数backtest_end_time一致,否则限价单的成交价为非统一口径复权价格,导致回测结果失真。
- 回测中股票今天买入的也能卖?
- 是的。回测目前不限制今昨仓,今天的买的今天可以卖,卖出需要计算下昨仓(position里的volume总仓减去volume_today今仓), 股票期货均是如此逻辑。仿真和实盘状态下会有限制。
- 回测中股票超过涨跌停价格也能成交?
- 回测对股票成交价格没有限制,策略需要保证下合法的委托价格。
- 回测时复权价格是如何计算得来的?
- 在回测模式下,当run()的backtest_adjust参数设置为 1 时,掘金推送的情行价格采用定点前复权,即以回测结束时间为基点,向前做复权。
- 假设回测中t时间点的真实价格为P[t], 复权因子为 A[t], 回测结束时间点的复权因子为A[end],那么t时刻复权后价格:P[t]_adj = P[t] * A[t] / A[end]
- 后复权价格根据复权因子计算公式:P[t]_adj = P[t] * A[t]
- 为什么回测时推送的复权价格和行情软件上看到的不一样?
- 回测时复权的时间基准是回测指定的结束时间(backtest_end_time,参见run),相当于行情软件中的定点复权,通常看行情时用的是前复权或不复权,因此有时侯会不一样。
- 回测缓存的订阅数据在哪里?
- 策略文件同一目录下的gmcache文件夹中。
- 如何提高回测效率?
- 使用订阅行情方式, 每次回测会缓存相应的行情数据,方便下次使用相同回测参数,效率会提升。
- 回测怎么跳过停盘日期呢?
- 停牌时是没有数据的,如果是订阅行情,用on_bar或者是on_tick事件的话就相当于跳过停牌日期了。
- 为什么回测订阅日线,成交时间是15:15?
- 国债期货是一直到15:15都可以交易,为了对齐时间,统一15:15成交。
- 收盘后可以回测当天的数据吗?还是当天只能实时模式?
- 收盘后可以回测当天,但是日线数据要5点左右才会更新,其他频率的可以。