private void OnRtnDepthMarketData(object sender, CtpDepthMarketData data) { var market = new DepthMarketDataField(); market.InstrumentID = data.InstrumentID; market.ExchangeID = data.ExchangeID; market.Exchange = CtpConvert.GetExchangeType(data.ExchangeID); switch (market.Exchange) { case ExchangeType.CZCE: CtpConvert.SetCzceExchangeTime(data, market); break; case ExchangeType.DCE: CtpConvert.SetDceExchangeTime(data, market); break; default: CtpConvert.SetExchangeTime(data, market); break; } market.LastPrice = CtpConvert.IsMax(data.LastPrice) ? 0 : data.LastPrice; market.Volume = data.Volume; market.OpenInterest = data.OpenInterest; market.Turnover = data.Turnover; market.AveragePrice = data.AveragePrice; if (CtpConvert.IsMax(data.OpenPrice)) { market.OpenPrice = 0; market.HighestPrice = 0; market.LowestPrice = 0; market.TradingPhase = TradingPhaseType.BeforeTrading; } else { market.OpenPrice = data.OpenPrice; market.HighestPrice = data.HighestPrice; market.LowestPrice = data.LowestPrice; market.TradingPhase = TradingPhaseType.Continuous; } if (CtpConvert.IsMax(data.ClosePrice)) { market.ClosePrice = 0; } else { market.ClosePrice = data.ClosePrice; market.TradingPhase = TradingPhaseType.Closed; } market.SettlementPrice = CtpConvert.IsMax(data.SettlementPrice) ? 0 : data.SettlementPrice; market.UpperLimitPrice = data.UpperLimitPrice; market.LowerLimitPrice = data.LowerLimitPrice; market.PreClosePrice = data.PreClosePrice; market.PreSettlementPrice = data.PreSettlementPrice; market.PreOpenInterest = data.PreOpenInterest; if (!CtpConvert.IsMax(data.AskPrice1)) { market.Asks = new[] { new DepthField { Price = data.AskPrice1, Size = data.AskVolume1 } }; } else { market.Asks = new DepthField[0]; } if (!CtpConvert.IsMax(data.BidPrice1)) { market.Bids = new[] { new DepthField { Price = data.BidPrice1, Size = data.BidVolume1 } }; } else { market.Bids = new DepthField[0]; } _spi.ProcessDepthMarketData(market); }