金数源1分钟数据,主力拼接程序 数据来源于金数源,2014-2019 不做非活跃品种(如LR等) 注意郑商所代码为3位数
主力拼接方法: 假设对于某品种S,某天DAY_N的主力合约代码为MF
- 每个交易日下午15:00收盘时,进行如下检查
① 通过CTP接口查询,对于品种S的所有合约持仓Openinterest量进行排序。
如果发现最大持仓的合约代码 NOT MF,则需要启动换月;
② 通过线上/线下1分钟数据库查询,对于15:00时已订阅的品种S的所有合约的持仓量Openinterest进行排序。
如果发现最大持仓的合约代码 NOT MF,则需要启动换月;
上述两者决定的主力合约应当一致,如果不一致,应当立刻检查二者的数据,暂停换月或者暂停交易,等查明原因修复后,再进行换月与交易。
- 假设第一步中的新主力合约代码为MF_NEW
① 计算复权系数
PRICE_NEW = DAY_N 15:00时 MF_NEW的CLOSE_PRICE
PRICE_OLD = DAY_N 15:00时 MF 的CLOSE_PRICE
COEF = PRICE_NEW/PRICE_OLD
② 复权 将所有线上交易用数据库online_mf_nogap_1min中,DAY_N 15:00及之前(包括,且之前到第一个值)品种S的open, high, low, close四个价格数据(注意Volume和Openinterest不要乘),全部乘以COEF并覆盖原数据。
从而实际上,换月当天DAY_N 15:00之前的主力连续数据,仍然是老合约的复权数据;当晚9点或第二天开始候,才是新合约MF_NEW的数据(与回测数据拼接方法一致)
③ 下次实盘开始时的处理
I. 如果S品种有夜盘,则从当日DAY_N晚上9点(包括)开始,online_mf_nogap_1min直接写入MF_NEW的1分钟数据(直接从CTP压制的1分钟数据,无任何复权处理)。DAY_N晚上9点(不包括)之前的,则使用上一步中复权后的数据。
II. 如果S品种无夜盘,则从第二天DAY_N+1早上9点(包括)开始,online_mf_nogap_1min直接写入MF_NEW的1分钟数据(直接从CTP压制的1分钟数据,无任何复权处理)。所有日期Date在DAY_N(包括)之前的,则使用上一步中复权后的数据。
III. 实际操作中,需要重启策略,从数据库online_mf_nogap_1min(或直接从文件中)读取复权处理后的新数据作为cache,并在之后使用MF_NEW的1分钟数据生成交易信号。