public List <CtpInfo> QueryMarketInfo(string instrument_id, int count) { List <CtpInfo> lists = new List <CtpInfo>(); try { sqlConnection.Open(); string sql = "SELECT * FROM market WHERE instrument_id = '" + instrument_id + "' ORDER BY m_data DESC LIMIT 0, " + count; //Console.WriteLine(sql); MySqlCommand cmd = new MySqlCommand(sql, sqlConnection); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read())//init index -1 { /*Console.WriteLine(reader.GetString("instrument_id") + " " + reader.GetString("m_data") + * " " + reader.GetDouble("m_open") + * " " + reader.GetDouble("m_high") + * " " + reader.GetDouble("m_low") + * " " + reader.GetDouble("m_close"));*/ string data = reader.GetString("m_data"); double m_open = reader.GetDouble("m_open"); double m_high = reader.GetDouble("m_high"); double m_low = reader.GetDouble("m_low"); double m_close = reader.GetDouble("m_close"); CtpInfo info = new CtpInfo(); info.date = Convert.ToDateTime(data); info.open = m_open; info.high = m_high; info.low = m_low; info.close = m_close; lists.Add(info); } } catch (MySqlException ex) { Console.WriteLine(ex.Message); } finally { sqlConnection.Close(); } return(lists); }
// public void AddContract(string instrumentID) { // TradeContractList.Add(instrumentID); // } public void ITick(FormTrade formTrade, ref CThostFtdcDepthMarketDataField pDepthMarketData) { if (which == pDepthMarketData.InstrumentID) { Console.WriteLine("strategy tick tradestrategy[0] = " + tradestrategy[0]); if (tradestrategy[0] == 1) { tickprice[3] = tickprice[2]; tickprice[2] = tickprice[1]; tickprice[1] = tickprice[0]; tickprice[0] = pDepthMarketData.LastPrice; //Console.WriteLine(tickprice[0] + "," + tickprice[1] + "," + tickprice[2]); if (tickprice[0] > tickprice[1] && tickprice[1] > tickprice[2] && tickprice[2] > tickprice[3]) { if (TradeHave[0] == 0) { //3 TICK up,buy formTrade.tradeApi.OrderInsert(pDepthMarketData.InstrumentID, EnumOffsetFlagType.Open, EnumDirectionType.Buy, pDepthMarketData.LastPrice + 10, //价格 1); buyprice[0] = pDepthMarketData.LastPrice; TradeHave[0] = 1; } } else if (tickprice[0] < tickprice[1] && tickprice[1] < tickprice[2] && tickprice[2] < tickprice[3]) { //3 TICK down,Sell if (TradeHave[0] == 1) { formTrade.tradeApi.OrderInsert(pDepthMarketData.InstrumentID, EnumOffsetFlagType.Open, EnumDirectionType.Sell, pDepthMarketData.LastPrice - 10, //价格 1); TradeHave[0] = 0; } } } else if (tradestrategy[0] == 2) { List <CtpInfo> lists = formTrade.dbConn.QueryMarketInfo(which, 1); //Console.WriteLine("database: " + lists.Count); CtpInfo ctpInfo = lists[0]; if (lists.Count == 0) { return; } double v1 = ctpInfo.high - ctpInfo.close, v2 = ctpInfo.close - ctpInfo.low; double mx = Math.Max(v1, v2); double offset = mx * 0.7; double todayOpen = pDepthMarketData.OpenPrice; //Console.WriteLine("LastPrice = " + pDepthMarketData.LastPrice + ", " + todayOpen + "+" + offset); if (TradeHave[0] == 0) { if (pDepthMarketData.LastPrice > todayOpen + offset) { // buy buyprice[0] = pDepthMarketData.LastPrice; formTrade.tradeApi.OrderInsert(pDepthMarketData.InstrumentID, EnumOffsetFlagType.Open, EnumDirectionType.Buy, pDepthMarketData.LastPrice + 10, //价格 1); TradeHave[0] = 1; } } else if (TradeHave[0] == 1) { if (pDepthMarketData.LastPrice < todayOpen - offset) { formTrade.tradeApi.OrderInsert(pDepthMarketData.InstrumentID, EnumOffsetFlagType.Open, EnumDirectionType.Sell, pDepthMarketData.LastPrice - 10, //价格 1); TradeHave[0] = 0; } else if (pDepthMarketData.LastPrice > buyprice[0] + winstoparr[0]) // 盈利大于预设 { formTrade.tradeApi.OrderInsert(pDepthMarketData.InstrumentID, EnumOffsetFlagType.Open, EnumDirectionType.Sell, pDepthMarketData.LastPrice - 10, //价格 1); TradeHave[0] = 0; } } } } }