CTP大坑小坑曝光

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

  1. 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;
        }
                       
    }


}
  1. 平仓操作时,上期所(SHFE) 以及 上期能源(INE)有平今和平昨的区分,当账户只有今仓,但是发出平昨的单子,会报错。
posted @ 2022-04-29 10:48  LazyTiming  阅读(493)  评论(0编辑  收藏  举报