public MarketData(TDFMarketData _mData) { ActionDay = _mData.ActionDay; AskPrice = _mData.AskPrice; AskVol = _mData.AskVol; BidPrice = _mData.BidPrice; BidVol = _mData.BidVol; Code = _mData.Code; High = _mData.High; HighLimited = _mData.HighLimited; IOPV = _mData.IOPV; Low = _mData.Low; LowLimited = _mData.LowLimited; Match = _mData.Match; NumTrades = _mData.NumTrades; Open = _mData.Open; PreClose = _mData.PreClose; Prefix = _mData.Prefix; SD2 = _mData.SD2; WindCode = _mData.WindCode; Time = _mData.Time; Status = _mData.Status; IOPV = 0; }
//获取股票市场信息 public static TDFMarketData GetSimMarketDate() { if (_simulate_trade_table.Count == 0) { return(null); } Random seed = new Random(); Sim_HQ_Struct unit = _simulate_trade_table[seed.Next(_simulate_trade_table.Count - 1)]; uint price = Convert.ToUInt32(unit.PRICE * 10000); double wave = seed.NextDouble(); //涨幅/跌幅 if (seed.Next(0, 1) == 0) { wave *= -1; } TDFMarketData data = new TDFMarketData() { AskPrice = new uint[5] { price - 100, price - 200, price, price + 100, price + 200 }, AskVol = new uint[5] { 100, 100, 100, 100, 100 }, BidPrice = new uint[5] { price - 100, price - 200, price, price + 100, price + 200 }, BidVol = new uint[5] { 100, 100, 100, 100, 100 }, Code = unit.CODE, High = price + 1, HighLimited = Convert.ToUInt32(price * 1.1), IOPV = 0, Low = price - 1, LowLimited = Convert.ToUInt32(price * 0.9), Match = price, Time = Convert.ToInt32(DateTime.Now.ToString("HHmmss")) * 1000, WindCode = "60000.SH" }; return(data); }
/// <summary> /// 刷新行情集合 /// </summary> private void UpdateMarkets() { while (ChinaMarketValue.isStartMarket) { try { object obj = ChinaMarketValue.blkMarketInfo.Take(); if (obj is TDFMarketData) { TDFMarketData data = (TDFMarketData)obj; MarketInfo market = null; if (ChinaMarketValue.dicMarketInfo.ContainsKey(data.WindCode)) { market = ChinaMarketValue.dicMarketInfo[data.WindCode]; } else { market = new MarketInfo(); ChinaMarketValue.dicMarketInfo.TryAdd(data.WindCode, market); } ConvertTDFMarketData(data, market); if (market.type == "2") { MarketInfo market2 = new MarketInfo(); market2.exchangeCode = market.exchangeCode; market2.code = market.code; market2.currNumber = market.currNumber; market2.currPrice = market2.currPrice; market2.time = market2.time; SendUDPPacket(market2.MyToString()); market.type = "Z"; } SendUDPPacket(market.MyToString()); } } catch (Exception ex) { ChinaMarketValue.exceptionLog.log(ChinaMarketValue.logLevel, ex.ToString()); } } }
/// <summary> /// 更新停盘列表 /// </summary> /// <param name="data"></param> public void updateStopList(TDFMarketData data) { if (data.Status != 68) { return; } if (stop_stocks.Count != 0) { var temp = (from item in stop_stocks where item.Code == data.Code select item); if (temp.Count() > 0) { //已经添加 return; } } lock (stop_stocks) { data.Match = data.PreClose; stop_stocks.Add(data); } }
/// <summary> /// TDFMarketData /// public int ActionDay; //业务发生日(自然日) YYMMDD /// public uint[] AskPrice; //申卖价 /// public uint[] AskVol; //申卖量 /// public uint[] BidPrice; //申买价 /// public uint[] BidVol; //申买量 /// public string Code; //原始代码 /// public uint High; //最高价 /// public uint HighLimited; //涨停价 /// public int IOPV; //IOPV净值估值 /// public uint Low; //最低价 /// public uint LowLimited; //跌停价 /// public uint Match; //最新价 /// public uint NumTrades; //成交笔数 /// public uint Open; //开盘价 /// public uint PreClose; //前收盘价 /// public byte[] Prefix; //证券信息前缀 /// public int SD2; //升跌2(对比上一笔) /// public int Status; //状态 /// public int Syl1; //市盈率1 /// public int Syl2; //市盈率2 /// public int Time; //时间(HHMMSSmmm) /// public long TotalAskVol; //委托卖出总量 /// public long TotalBidVol; //委托买入总量 /// public int TradingDay; // /// public long Turnover; //成交总金额 /// public long Volume; //成交总量 /// public uint WeightedAvgAskPrice; //加权平均委卖价格 /// public uint WeightedAvgBidPrice; //加权平均委买价格 /// public string WindCode; //万得代码,如:600001.SH /// public int YieldToMaturity; //到期收益率 /// /// Status状态 /// //0 首日上市 /// //1 增发新股 /// //2 上网定价发行 /// //3 上网竞价发行 /// //A 交易节休市 /// //B 整体停牌 /// //C 全天收市 /// //D 暂停交易 /// //E Start - 启动交易盘 /// //F PRETR - 盘前处理 /// //H Holiday - 放假 /// //I OCALL - 开市集合竞价 /// //J ICALL - 盘中集合竞价 /// //K OPOBB - 开市订单簿平衡前期 /// //L IPOBB - 盘中订单簿平衡前期 /// //M OOBB - 开市订单簿平衡 /// //N IOBB - 盘中订单簿平衡 /// //O TRADE - 连续撮合 /// //P BREAK - 休市 /// //Q VOLA - 波动性中断 /// //R BETW - 交易间 /// //S NOTRD - 非交易服务支持 /// //T FCALL - 固定价格集合竞价 /// //U POSTR - 盘后处理 /// //V ENDTR - 结束交易 /// //W HALT - 暂停 /// //X SUSP - 停牌 /// //Y ADD - 新增产品 /// //Z DEL - 可删除的产品 /// //d 集合竞价阶段结束到连续竞价阶段开始之前的时段(如有) /// //G DEL - 不可恢复交易的熔断阶段(上交所的N) /// //Q VOLA - 波动性中断 /// //q 可恢复交易的熔断时段(上交所的M) /// /// TDFIndexData /// public int ActionDay; //业务发生日(自然日)(YYMMDD) /// public string Code; //原始代码 /// public int HighIndex; //最高指数 /// public int LastIndex; //最新指数 /// public int LowIndex; //最低指数 /// public int OpenIndex; //今开盘指数 /// public int PreCloseIndex;//前盘指数 /// public int Time; //时间(HHMMSSmmm) /// public long TotalVolume;//参与计算相应指数的交易数量 /// public int TradingDay; // /// public long Turnover; //参与计算相应指数的成交金额 /// public string WindCode; //万得代码 /// /// /// TDFFutureData /// public int ActionDay; //业务发生日(自然日)(YYMMDD) /// public uint[] AskPrice; //申卖价 /// public uint[] AskVol; //申卖量 /// public uint[] BidPrice; //申买价 /// public uint[] BidVol; //申买量 /// public uint Close; //今收盘 /// public string Code; //原始代码 /// public int CurrDelta; //今虚实度 /// public uint High; //最高价 /// public uint HighLimited; //涨停价 /// public uint Low; //最低价 /// public uint LowLimited; //跌停价 /// public uint Match; //最新价 /// public uint Open; //开盘价 /// public long OpenInterest; //持仓总量 /// public uint PreClose; //昨收盘价 /// public int PreDelta; //昨虚实度 /// public long PreOpenInterest;//昨持仓 /// public uint PreSettlePrice; //昨结算 /// public uint SettlePrice; //今结算 /// public int Status; //状态 /// public int Time; //时间(HHMMSSmmm) /// public int TradingDay; //交易日 /// public long Turnover; //成交总金额 /// public long Volume; //成交总量 /// public string WindCode; //万得代码 /// /// /// /// TDFOrderQueue /// public int ABItems; //明细个数 /// public int[] ABVolume; //订单明细 /// public int ActionDay; //自然日(YYMMDD) /// public string Code; //原始代码 /// public int Orders; //订单数量 /// public int Price; //委托价格 /// public int Side; //买卖方向('B': Bid, 'A': Ask) /// public int Time; //时间(HHMMSSmmm) /// public string WindCode; //万得代码 /// /// /// TDFTransaction /// public int ActionDay; //成交日期(YYMMDD) /// public int AskOrder; //叫卖方委托序号 /// public int BidOrder; //叫买方委托序号 /// public int BSFlag; //买卖方向(买:'B', 卖:'A',不明:' ') /// public string Code; //原始代码 /// public byte FunctionCode;//成交代码 /// public int Index; //成交编号 /// public byte OrderKind; //成交类别 /// public int Price; //成交价格 /// public int Time; //成交时间(HHMMSS) /// public int Turnover; //成交金额 /// public int Volume; //成交数量 /// public string WindCode; //万得代码 /// /// TDFOrder /// public int ActionDay; //委托日期(YYMMDD) /// public string Code; //原始代码 /// public byte FunctionCode; //委托代码 /// public int Order; //委托号 /// public byte OrderKind; //委托类别 /// public int Price; //委托价格 /// public int Time; //委托时间(HHMMSSmmm) /// public int Volume; //委托数量 /// public string WindCode; //万得代码 /// </summary> /// <param name="msg"></param> private void OnRecvDataMsg(TDFMSG msg) { switch (msg.MsgID) { case TDFMSGID.MSG_DATA_MARKET: { //行情消息 TDFMarketData[] marketOldDataArr = msg.Data as TDFMarketData[]; for (int i = 0, length = marketOldDataArr.Length; i < length; i++) { TDFMarketData data = marketOldDataArr[i]; string code = data.Code; string windCode = data.WindCode; MarketData marketData = new MarketData { InstrumentID = windCode, LimitUpDownFlag = LimitUpDownFlag.Normal, }; char status = (char)data.Status; switch (status) { case 'B': { marketData.TradingStatus = TradingStatus.Suspend; marketData.SuspendFlag = SuspendFlag.Suspend1Day; } break; case 'C': { marketData.TradingStatus = TradingStatus.Close; marketData.SuspendFlag = SuspendFlag.NoSuspension; } break; case 'D': { marketData.TradingStatus = TradingStatus.Suspend; marketData.SuspendFlag = SuspendFlag.SuspendTemp; } break; case 'W': { marketData.TradingStatus = TradingStatus.Suspend; marketData.SuspendFlag = SuspendFlag.SuspendTemp; } break; case 'X': { marketData.TradingStatus = TradingStatus.Suspend; marketData.SuspendFlag = SuspendFlag.Suspend1Day; } break; default: { //正常交易 marketData.TradingStatus = TradingStatus.Normal; marketData.SuspendFlag = SuspendFlag.NoSuspension; } break; } if (data.Match == 0) { //TODO: fix the close period marketData.TradingStatus = TradingStatus.Suspend; marketData.SuspendFlag = SuspendFlag.Suspend1Day; } else if (data.Match >= data.HighLimited) { marketData.TradingStatus = TradingStatus.Normal; marketData.SuspendFlag = SuspendFlag.NoSuspension; marketData.LimitUpDownFlag = LimitUpDownFlag.LimitUp; } else if (data.Match <= data.LowLimited) { marketData.TradingStatus = TradingStatus.Normal; marketData.SuspendFlag = SuspendFlag.NoSuspension; marketData.LimitUpDownFlag = LimitUpDownFlag.LimitDown; } marketData.CurrentPrice = (double)data.Match / 10000; marketData.PreClose = data.PreClose / 10000; if (data.AskPrice != null && data.AskPrice.Length >= 5) { marketData.SellPrice1 = (double)data.AskPrice[0] / 10000; marketData.SellPrice2 = (double)data.AskPrice[1] / 10000; marketData.SellPrice3 = (double)data.AskPrice[2] / 10000; marketData.SellPrice4 = (double)data.AskPrice[3] / 10000; marketData.SellPrice5 = (double)data.AskPrice[4] / 10000; } if (data.BidPrice != null && data.BidPrice.Length >= 5) { marketData.BuyPrice1 = (double)data.BidPrice[0] / 10000; marketData.BuyPrice2 = (double)data.BidPrice[1] / 10000; marketData.BuyPrice3 = (double)data.BidPrice[2] / 10000; marketData.BuyPrice4 = (double)data.BidPrice[3] / 10000; marketData.BuyPrice5 = (double)data.BidPrice[4] / 10000; } marketData.HighLimitPrice = (double)data.HighLimited / 10000; marketData.LowLimitPrice = (double)data.LowLimited / 10000; marketData.BuyAmount = data.TotalBidVol; marketData.SellAmount = data.TotalAskVol; _quote.Add(windCode, marketData); } } break; case TDFMSGID.MSG_DATA_FUTURE: { //期货行情消息 TDFFutureData[] futureDataArr = msg.Data as TDFFutureData[]; foreach (TDFFutureData data in futureDataArr) { string windCode = data.WindCode; if (!windCode.EndsWith(".CF")) { continue; } MarketData marketData = new MarketData { InstrumentID = windCode }; char status = (char)data.Status; switch (status) { case 'B': { marketData.TradingStatus = TradingStatus.Suspend; marketData.SuspendFlag = SuspendFlag.Suspend1Day; } break; case 'C': { marketData.TradingStatus = TradingStatus.Close; marketData.SuspendFlag = SuspendFlag.NoSuspension; } break; case 'D': { marketData.TradingStatus = TradingStatus.Suspend; marketData.SuspendFlag = SuspendFlag.SuspendTemp; } break; case 'W': { marketData.TradingStatus = TradingStatus.Suspend; marketData.SuspendFlag = SuspendFlag.SuspendTemp; } break; case 'X': { marketData.TradingStatus = TradingStatus.Suspend; marketData.SuspendFlag = SuspendFlag.Suspend1Day; } break; default: { //正常交易 marketData.TradingStatus = TradingStatus.Normal; marketData.SuspendFlag = SuspendFlag.NoSuspension; } break; } if (data.Match == 0) { //TODO: fix the close period marketData.TradingStatus = TradingStatus.Suspend; marketData.SuspendFlag = SuspendFlag.Suspend1Day; } else if (data.Match >= data.HighLimited) { marketData.TradingStatus = TradingStatus.Normal; marketData.SuspendFlag = SuspendFlag.Suspend1Day; marketData.LimitUpDownFlag = LimitUpDownFlag.LimitUp; } else if (data.Match <= data.LowLimited) { marketData.TradingStatus = TradingStatus.Normal; marketData.SuspendFlag = SuspendFlag.Suspend1Day; marketData.LimitUpDownFlag = LimitUpDownFlag.LimitDown; } marketData.CurrentPrice = (double)data.Match / 10000; marketData.PreClose = (double)data.PreClose / 10000; if (data.AskPrice != null && data.AskPrice.Length >= 5) { marketData.SellPrice1 = (double)data.AskPrice[0] / 10000; marketData.SellPrice2 = (double)data.AskPrice[1] / 10000; marketData.SellPrice3 = (double)data.AskPrice[2] / 10000; marketData.SellPrice4 = (double)data.AskPrice[3] / 10000; marketData.SellPrice5 = (double)data.AskPrice[4] / 10000; } if (data.BidPrice != null && data.BidPrice.Length >= 5) { marketData.BuyPrice1 = (double)data.BidPrice[0] / 10000; marketData.BuyPrice2 = (double)data.BidPrice[1] / 10000; marketData.BuyPrice3 = (double)data.BidPrice[2] / 10000; marketData.BuyPrice4 = (double)data.BidPrice[3] / 10000; marketData.BuyPrice5 = (double)data.BidPrice[4] / 10000; } marketData.HighLimitPrice = (double)data.HighLimited / 10000; marketData.LowLimitPrice = (double)data.LowLimited / 10000; //BuyAmount, SellAmount _quote.Add(windCode, marketData); } } break; case TDFMSGID.MSG_DATA_INDEX: { //指数消息 TDFIndexData[] indexDataArr = msg.Data as TDFIndexData[]; foreach (TDFIndexData data in indexDataArr) { string windCode = data.WindCode; MarketData marketData = new MarketData { InstrumentID = windCode }; marketData.CurrentPrice = (double)data.LastIndex / 10000; marketData.PreClose = (double)data.PreCloseIndex / 10000; _quote.Add(windCode, marketData); } } break; //case TDFMSGID.MSG_DATA_TRANSACTION: // { // TDFTransaction[] tranDataArr = msg.Data as TDFTransaction[]; // } // break; //case TDFMSGID.MSG_DATA_ORDER: // { // TDFOrder[] orderDataArr = msg.Data as TDFOrder[]; // } // break; //case TDFMSGID.MSG_DATA_ORDERQUEUE: // { // TDFOrderQueue[] orderQueueDataArr = msg.Data as TDFOrderQueue[]; // } // break; default: break; } }
//获取股票市场信息 public static TDFMarketData GetSimMarketDate() { if (_simulate_trade_table.Count == 0) return null; Random seed = new Random(); Sim_HQ_Struct unit = _simulate_trade_table[seed.Next(_simulate_trade_table.Count - 1)]; uint price = Convert.ToUInt32(unit.PRICE * 10000); double wave = seed.NextDouble(); //涨幅/跌幅 if(seed.Next(0,1) == 0) { wave *= -1; } TDFMarketData data = new TDFMarketData() { AskPrice = new uint[5] { price - 100, price - 200, price, price + 100, price + 200 }, AskVol = new uint[5] { 100, 100, 100, 100, 100 }, BidPrice = new uint[5] { price - 100, price - 200, price, price + 100, price + 200 }, BidVol = new uint[5] { 100, 100, 100, 100, 100 }, Code = unit.CODE, High = price + 1, HighLimited = Convert.ToUInt32(price * 1.1), IOPV = 0, Low = price - 1, LowLimited = Convert.ToUInt32(price * 0.9), Match = price, Time = Convert.ToInt32(DateTime.Now.ToString("HHmmss")) * 1000, WindCode = "60000.SH" }; return data; }
/// <summary> /// 更新停盘列表 /// </summary> /// <param name="data"></param> public void updateStopList(TDFMarketData data) { if(data.Status != 68) { return; } if (stop_stocks.Count != 0) { var temp = (from item in stop_stocks where item.Code == data.Code select item); if (temp.Count() > 0) { //已经添加 return; } } lock (stop_stocks) { data.Match = data.PreClose; stop_stocks.Add(data); } }
private void ConvertTDFMarketData(TDFMarketData tdfdata, MarketInfo data) { if (ChinaMarketValue.dicTDFCode.ContainsKey(tdfdata.WindCode)) { string day = tdfdata.ActionDay.ToString().Substring(0, 4) + "-" + tdfdata.ActionDay.ToString().Substring(4, 2) + "-" + tdfdata.ActionDay.ToString().Substring(6, 2); string time = ""; if (tdfdata.Time < 100000000) { //10点以前 time = "0" + tdfdata.Time.ToString().Substring(0, 1) + ":" + tdfdata.Time.ToString().Substring(1, 2) + ":" + tdfdata.Time.ToString().Substring(3, 2); } else { time = tdfdata.Time.ToString().Substring(0, 2) + ":" + tdfdata.Time.ToString().Substring(2, 2) + ":" + tdfdata.Time.ToString().Substring(4, 2); } data.time = day + " " + time; if (!string.IsNullOrEmpty(data.time)) { //换一天的时候把成交量清掉 if (day.CompareTo(data.time.Substring(0, 10)) > 0) { data.filledNum = "0"; } } data.exchangeCode = ChinaMarketValue.dicTDFCode[tdfdata.WindCode].Market; data.code = tdfdata.WindCode; data.salePrice = FormatFracPrx(tdfdata.AskPrice[0]); data.saleNumber = (tdfdata.AskVol[0]).ToString(); data.buyPrice = FormatFracPrx(tdfdata.BidPrice[0]).ToString(); data.buyNumber = (tdfdata.BidVol[0]).ToString(); data.currPrice = FormatFracPrx(tdfdata.Match).ToString(); if (tdfdata.Volume > CommonFunction.StringToDecimal(data.filledNum) && tdfdata.Volume > 0) { //成交数据 data.currNumber = (tdfdata.Volume - (long)CommonFunction.StringToDecimal(data.filledNum)).ToString(); data.type = "2"; } else { data.currNumber = "0"; data.type = "Z"; } data.filledNum = tdfdata.Volume.ToString(); //data.currNumber = (Tdfdata.Match / 10000).ToString(); data.high = FormatFracPrx(tdfdata.High).ToString(); data.low = FormatFracPrx(tdfdata.Low).ToString(); data.open = FormatFracPrx(tdfdata.Open).ToString(); data.oldClose = FormatFracPrx(tdfdata.PreClose).ToString(); data.salePrice2 = FormatFracPrx(tdfdata.AskPrice[1]).ToString(); data.salePrice3 = FormatFracPrx(tdfdata.AskPrice[2]).ToString(); data.salePrice4 = FormatFracPrx(tdfdata.AskPrice[3]).ToString(); data.salePrice5 = FormatFracPrx(tdfdata.AskPrice[4]).ToString(); data.saleNumber2 = (tdfdata.AskVol[1]).ToString(); data.saleNumber3 = (tdfdata.AskVol[2]).ToString(); data.saleNumber4 = (tdfdata.AskVol[3]).ToString(); data.saleNumber5 = (tdfdata.AskVol[4]).ToString(); data.buyPrice2 = FormatFracPrx(tdfdata.BidPrice[1]).ToString(); data.buyPrice3 = FormatFracPrx(tdfdata.BidPrice[2]).ToString(); data.buyPrice4 = FormatFracPrx(tdfdata.BidPrice[3]).ToString(); data.buyPrice5 = FormatFracPrx(tdfdata.BidPrice[4]).ToString(); data.buyNumber2 = (tdfdata.BidVol[1]).ToString(); data.buyNumber3 = (tdfdata.BidVol[2]).ToString(); data.buyNumber4 = (tdfdata.BidVol[3]).ToString(); data.buyNumber5 = (tdfdata.BidVol[4]).ToString(); } }
//delegate String ToString(String[] args); /// <summary> /// 行情订阅主线程 /// </summary> static void MainThread() { TDFServerInfo[] theServers = new TDFServerInfo[4]; uint iServerNum = 1; theServers[0] = new TDFServerInfo() { //Ip = CHangQingPARA.IP, //Port = CHangQingPARA.PORT, //Username = CHangQingPARA.USERNAME, //Password = CHangQingPARA.PASSWORD //Ip = "114.80.154.34", //Port = "6231", //服务器端口 //Username = "******", //服务器用户名 //Password = "******" Ip = ip, Port = port, Username = userName, Password = password }; /******即使不用,也要初始化******/ theServers[1] = new TDFServerInfo(); theServers[2] = new TDFServerInfo(); theServers[3] = new TDFServerInfo(); //初始化行情模拟系统 simulate_trade.InitSimTable(simulate_trade.SimMarketCode); /************订阅的类型需要再确认***********/ var openSetting_ext = new TDFOpenSetting_EXT() { Servers = theServers, ServerNum = iServerNum, Markets = "", Subscriptions = subscribeList.Replace('\n', ';'), ConnectionID = 1, Time = 0, TypeFlags = 0 }; using (var dataSource = new TDFSourceImp(openSetting_ext)) { dataSource.SetEnv(EnvironSetting.TDF_ENVIRON_HEART_BEAT_INTERVAL, 0); //环境设置 dataSource.SetEnv(EnvironSetting.TDF_ENVIRON_MISSED_BEART_COUNT, 0); //环境设置 dataSource.SetEnv(EnvironSetting.TDF_ENVIRON_OPEN_TIME_OUT, 0); //环境设置 TDFERRNO nOpenRet = dataSource.Open(); if (nOpenRet == TDFERRNO.TDF_ERR_SUCCESS) { //连接成功 Queue_Data.Connected = true; } else { Queue_Data.Connected = false; MessageBox.Show(nOpenRet.ToString()); //连接失败,告警顶级日志 //GlobalErrorLog.LogInstance.LogEvent(String.Format("open returned:{0}, program quit", nOpenRet)); } while (true) { if (webservice.STOP) { break; } Thread.Sleep(1000); //每隔10s发送一次停盘信息 if ((DateTime.Now - RunningTime.CurrentTime).TotalSeconds > 10) { foreach (TDFMarketData data in stop_plate_stocks.GetInstance().GetStopList()) { EnQueueType obj = new EnQueueType() { Type = "S", value = (object)data }; if (simulate_trade.MarketRecorder) { MarketInfoQueue.EnQueueNew(data); } else { Queue_Data.GetQueue().Enqueue((object)obj); } } RunningTime.CurrentTime = DateTime.Now; } if ((simulate_trade.SimSwitch) && (Queue_Data.Suspend == false)) { for (int i = 0; i < simulate_trade.SimMarketPerSecond; i++) { TDFMarketData objs = simulate_trade.GetSimMarketDate(); new EnQueueType() { Type = "S", value = (object)objs }; if (Queue_Data.Suspend == false) { Queue_Data.GetQueue().Enqueue((object)(new EnQueueType() { Type = "S", value = (object)objs })); } TDFFutureData objf = simulate_trade.GetSimFutureData(); Queue_Data.GetQueue().Enqueue((object)(new EnQueueType() { Type = "F", value = (object)objf })); } } continue; } } }