Blog Details

CTP大坑小坑曝光

记录某些CTP开发过程中遇到的坑(持续更新)

tick数据中成交量这个数据是当日累加,隔日清零,所以使用tick数据合成bar的时候,成交量需要专门处理。期货的tick数据有ActionDay和TradingDay两个字段,用以区分是否为同一个交易日,但是不同交易所定义方式不同,各位同学要自己注意一下。

//大商所的ActionDay 提前一天,郑商所的TradingDay晚了一天,上期所的正常

//大商所和上期所 只要TradingDay(结算日)相同就是同一日bar的数据

//郑商所TradingDay相同 可能属于不同日的bar TradingDay不同 也有可能属于同一日的bar

if (tick.TradingDay == lastTick.TradingDay)

{

//同日tick

//Logger.Error("{0},{1},{2}", tick.InstrumentId, tick.Volume, lastTick.Volume);

long diffVolume = tick.Volume - lastTick.Volume;

//diffVolume<0 说明是郑商所夜盘的第一个tick

if (diffVolume >= 0)

{

tick.Volume = diffVolume;

}

}

else

{

//不同日tick

//Logger.Debug("tick.volume刷新:当前tick->" + tick.ToString() + " 前一个tick->" + lastTick.ToString() + " 发生时间:" + DateTime.Now);

if(ExchangeID == ExchangeType.CZCE.ToString() & tick.Date.Date != lastTick.Date.Date)

{

//说明是郑商所日盘的第一个tick

//有夜盘的品种直接相减 无夜盘的为真实成交量

if (FunDate.ToDateTime(lastTick.UpdateTime, "HH:mm:ss").Hour>=21)

{

tick.Volume = tick.Volume - lastTick.Volume;

}

}

}

平仓操作时,上期所(SHFE) 以及 上期能源(INE)有平今和平昨的区分,当账户只有今仓,但是发出平昨的单子,会报错。