private void sqlitedb(object s) { MainForm cMainForm = (MainForm)s; ThostFtdcDepthMarketDataField pDepthMarketData = new ThostFtdcDepthMarketDataField(); QueueSendData Data = new QueueSendData(); bool bCommit=false; while (Queue_SQLite.bUse) { if (Queue_SQLite.DataQ.Count == 0) { Queue_SQLite.Are.WaitOne(); Queue_SQLite.Are.Reset(); if(bCommit) MemDB.Commit(); } else { Data = Queue_SQLite.DataQ.Dequeue(); Queue_SQLite.m_lReceiveNum++; #region 这里写策略 switch (Data.QueueType) { case EnumQueueType.DepthMarketData: pDepthMarketData = (ThostFtdcDepthMarketDataField)Data.QueueData; if (pDepthMarketData.TradingDay == "" || pDepthMarketData.InstrumentID == "") { Queue_SQLite.m_lDropNum++; Queue_SQLite.Are.Reset(); } #region 数据入内存数据库 if (sTradingDay != pDepthMarketData.TradingDay || sTableName == string.Empty) { sTableName = "TIP_" + pDepthMarketData.TradingDay; sTradingDay = pDepthMarketData.TradingDay; if (!MemDB.existTable(sTableName)) { string vSQL = string.Format(sDeepRspTableSql, sTableName); MemDB.setSQL(vSQL); MemDB.Execute(); MemDB.Commit(); } } string sSql = "insert into " + sTableName + "(ActionDay,BidPrice1,BidPrice2,BidPrice3,BidPrice4,BidPrice5,BidVolume1,BidVolume2,BidVolume3,BidVolume4,BidVolume5,AveragePrice,AskPrice1,AskPrice2,AskPrice3,AskPrice4,AskPrice5,AskVolume1,AskVolume2,AskVolume3,AskVolume4,AskVolume5,ClosePrice,CurrDelta,ExchangeID,ExchangeInstID,HighestPrice,InstrumentID,LastPrice,LowerLimitPrice,LowestPrice,OpenInterest,OpenPrice,PreClosePrice,PreDelta,PreOpenInterest,PreSettlementPrice,SettlementPrice,TradingDay,Turnover,UpdateMillisec,UpdateTime,UpperLimitPrice,Volume) values ('" + pDepthMarketData.ActionDay + "','" + pDepthMarketData.BidPrice1 + "','" + pDepthMarketData.BidPrice2 + "','" + pDepthMarketData.BidPrice3 + "','" + pDepthMarketData.BidPrice4 + "','" + pDepthMarketData.BidPrice5 + "','" + pDepthMarketData.BidVolume1 + "','" + pDepthMarketData.BidVolume2 + "','" + pDepthMarketData.BidVolume3 + "','" + pDepthMarketData.BidVolume4 + "','" + pDepthMarketData.BidVolume5 + "','" + pDepthMarketData.AveragePrice + "','" + pDepthMarketData.AskPrice1 + "','" + pDepthMarketData.AskPrice2 + "','" + pDepthMarketData.AskPrice3 + "','" + pDepthMarketData.AskPrice4 + "','" + pDepthMarketData.AskPrice5 + "','" + pDepthMarketData.AskVolume1 + "','" + pDepthMarketData.AskVolume2 + "','" + pDepthMarketData.AskVolume3 + "','" + pDepthMarketData.AskVolume4 + "','" + pDepthMarketData.AskVolume5 + "','" + pDepthMarketData.ClosePrice + "','" + pDepthMarketData.CurrDelta + "','" + pDepthMarketData.ExchangeID + "','" + pDepthMarketData.ExchangeInstID + "','" + pDepthMarketData.HighestPrice + "','" + pDepthMarketData.InstrumentID + "','" + pDepthMarketData.LastPrice + "','" + pDepthMarketData.LowerLimitPrice + "','" + pDepthMarketData.LowestPrice + "','" + pDepthMarketData.OpenInterest + "','" + pDepthMarketData.OpenPrice + "','" + pDepthMarketData.PreClosePrice + "','" + pDepthMarketData.PreDelta + "','" + pDepthMarketData.PreOpenInterest + "','" + pDepthMarketData.PreSettlementPrice + "','" + pDepthMarketData.SettlementPrice + "','" + pDepthMarketData.TradingDay + "','" + pDepthMarketData.Turnover + "','" + pDepthMarketData.UpdateMillisec + "','" + pDepthMarketData.UpdateTime + "','" + pDepthMarketData.UpperLimitPrice + "','" + pDepthMarketData.Volume + "')"; MemDB.setSQL(sSql); MemDB.Execute(); bCommit = true; Queue_SQLite.m_lRunNum++; #endregion break; case EnumQueueType.OnRtnOrder: break; case EnumQueueType.StopSign0: Queue_PolicySample.bUse = false; return; default: break; } } #endregion } }
private void PolicySampleRUN(object s) { MainForm cMainForm = (MainForm)s; ThostFtdcInputOrderField sInputOrder = new ThostFtdcInputOrderField(); ThostFtdcDepthMarketDataField pDepthMarketData = new ThostFtdcDepthMarketDataField(); QueueSendData Data = new QueueSendData(); while (Queue_PolicySample.bUse) { if (Queue_PolicySample.DataQ.Count == 0) { Queue_PolicySample.Are.WaitOne(); Queue_PolicySample.Are.Reset(); } else { Data = Queue_PolicySample.DataQ.Dequeue(); #region 这里写策略 switch (Data.QueueType) { case EnumQueueType.DepthMarketData: Queue_PolicySample.m_lReceiveNum++; pDepthMarketData = (ThostFtdcDepthMarketDataField)Data.QueueData; if (pDepthMarketData.InstrumentID == "IF1309") { Queue_PolicySample.m_lRunNum++; Queue_PolicySample.add_log("插入报单!触发单:" + pDepthMarketData.InstrumentID + " \n时间:" + pDepthMarketData.UpdateTime); // cMainForm.TDReqOrderInsert(sInputOrder); } else { Queue_PolicySample.m_lDropNum++; } break; case EnumQueueType.OnRtnOrder: break; case EnumQueueType.StopSign0: Queue_PolicySample.bUse = false; return; default: break; } #endregion } } Queue_PolicySample.bUse = false; }
/// <summary> /// 行情接口->获取深度行情 /// </summary> /// <param name="s">行情结构体,需强转</param> private void SetMDDepthMarketData(object s) { if (this.InvokeRequired) { SetCallback d = new SetCallback(SetMDDepthMarketData); this.BeginInvoke(d, new object[] { s }); } else { ThostFtdcDepthMarketDataField pDepthMarketData = (ThostFtdcDepthMarketDataField)s; QueueSendData sQueueSend = new QueueSendData(); sQueueSend.QueueType = EnumQueueType.DepthMarketData; sQueueSend.QueueData = s; List_QueueSend.Add(sQueueSend); SignMainQueueSend.Set(); DataRow DR_Find = this.DT_DeepInstrumentRSP.Rows.Find(pDepthMarketData.InstrumentID); DataRow dr = this.DT_DeepInstrumentRSP.NewRow(); #region 实时行情更新赋值 dr["叫买价"] = (pDepthMarketData.BidPrice1 != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.BidPrice1, 2).ToString() : null; dr["叫买价2"] = (pDepthMarketData.BidPrice2 != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.BidPrice2, 2).ToString() : null; dr["叫买价3"] = (pDepthMarketData.BidPrice3 != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.BidPrice3, 2).ToString() : null; dr["叫买价4"] = (pDepthMarketData.BidPrice4 != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.BidPrice4, 2).ToString() : null; dr["叫买价5"] = (pDepthMarketData.BidPrice5 != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.BidPrice5, 2).ToString() : null; dr["叫买量"] = pDepthMarketData.BidVolume1.ToString(); dr["叫买量2"] = pDepthMarketData.BidVolume2.ToString(); dr["叫买量3"] = pDepthMarketData.BidVolume3.ToString(); dr["叫买量4"] = pDepthMarketData.BidVolume4.ToString(); dr["叫买量5"] = pDepthMarketData.BidVolume5.ToString(); dr["当日均价"] = (pDepthMarketData.AveragePrice != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.AveragePrice, 2).ToString() : null; dr["叫卖价"] = (pDepthMarketData.AskPrice1 != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.AskPrice1, 2).ToString() : null; dr["叫卖价2"] = (pDepthMarketData.AskPrice2 != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.AskPrice2, 2).ToString() : null; dr["叫卖价3"] = (pDepthMarketData.AskPrice3 != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.AskPrice3, 2).ToString() : null; dr["叫卖价4"] = (pDepthMarketData.AskPrice4 != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.AskPrice4, 2).ToString() : null; dr["叫卖价5"] = (pDepthMarketData.AskPrice5 != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.AskPrice5, 2).ToString() : null; dr["叫卖量"] = pDepthMarketData.AskVolume1.ToString(); dr["叫卖量2"] = pDepthMarketData.AskVolume2.ToString(); dr["叫卖量3"] = pDepthMarketData.AskVolume3.ToString(); dr["叫卖量4"] = pDepthMarketData.AskVolume4.ToString(); dr["叫卖量5"] = pDepthMarketData.AskVolume5.ToString(); dr["收盘价"] = (pDepthMarketData.ClosePrice != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.ClosePrice, 2).ToString() : null; dr["虚实度"] = (pDepthMarketData.CurrDelta != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.CurrDelta, 2).ToString() : null; dr["最高价"] = (pDepthMarketData.HighestPrice != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.HighestPrice, 2).ToString() : null; dr["最新价"] = (pDepthMarketData.LastPrice != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.LastPrice, 2).ToString() : null; dr["跌停板价"] = (pDepthMarketData.LowerLimitPrice != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.LowerLimitPrice, 2).ToString() : null; dr["最低价"] = (pDepthMarketData.LowestPrice != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.LowestPrice, 2).ToString() : null; dr["持仓量"] = (pDepthMarketData.OpenInterest != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.OpenInterest, 2).ToString() : null; dr["开盘价"] = (pDepthMarketData.OpenPrice != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.OpenPrice, 2).ToString() : null; dr["昨收盘"] = (pDepthMarketData.PreClosePrice != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.PreClosePrice, 2).ToString() : null; dr["昨虚实度"] = (pDepthMarketData.PreDelta != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.PreDelta, 2).ToString() : null; dr["昨持仓"] = (pDepthMarketData.PreOpenInterest != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.PreOpenInterest, 2).ToString() : null; dr["上次结算价"] = (pDepthMarketData.PreSettlementPrice != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.PreSettlementPrice, 2).ToString() : null; dr["结算价"] = (pDepthMarketData.SettlementPrice != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.SettlementPrice, 2).ToString() : null; dr["成交金额"] = (pDepthMarketData.Turnover != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.Turnover, 2).ToString() : null; dr["毫秒"] = pDepthMarketData.UpdateMillisec.ToString(); dr["时间"] = pDepthMarketData.UpdateTime.ToString(); dr["涨停板价"] = (pDepthMarketData.UpperLimitPrice != Double.MaxValue) ? Function.GetRoundNum(pDepthMarketData.UpperLimitPrice, 2).ToString() : null; dr["数量"] = pDepthMarketData.Volume.ToString(); dr["交易日"] = pDepthMarketData.TradingDay.ToString(); dr["品种名称"] = pDepthMarketData.InstrumentID; dr["自然日"] = pDepthMarketData.ActionDay.ToString(); #endregion if (DR_Find != null) { DR_Find.ItemArray = dr.ItemArray; } else { this.DT_DeepInstrumentRSP.Rows.Add(dr); } } }