// 请求历史数据 public void SendHistoricalDataRequestBar(HistoricalDataRequest request, string market) { Instrument inst = request.Instrument as Instrument; string altSymbol = inst.GetSymbol(Name); PeriodType pt = GetPeriodTypeFromDataType(request); if (pt == PeriodType.MAX_PERIOD_TYPE) { EmitHistoricalDataError(request, "不支持的时间周期!"); return; } string key = GetKeyFromSTKHISDATA(market, altSymbol, pt); // 先发请求再存下来 int nRet = QuotApi.QT_RequestHistory(m_pQuotApi, market, altSymbol, pt); ehlog.Info("-->RequestHistory:{0},{1} Return:{2}", market, altSymbol, nRet); if (0 == nRet) { SaveRequest(request, key, market, altSymbol, DateTime.MaxValue); } else { EmitHistoricalDataError(request, "API返回错误:" + nRet); } }
private void Disconnect_Quot() { lock (_lockQuot) { if (null != m_pQuotApi && IntPtr.Zero != m_pQuotApi) { QuotApi.QT_RegMsgQueue2QuotApi(m_pQuotApi, IntPtr.Zero); QuotApi.QT_ReleaseQuotApi(m_pQuotApi); m_pQuotApi = IntPtr.Zero; } _bQuotConnected = false; } }
//建立行情 private void Connect_Quot() { lock (_lockQuot) { if (_bWantQuotConnect && (null == m_pQuotApi || IntPtr.Zero == m_pQuotApi)) { m_pQuotApi = QuotApi.QT_CreateQuotApi(); QuotApi.ES_RegOnRspHistoryQuot(m_pMsgQueue, _fnOnRspHistoryQuot_Holder); QuotApi.ES_RegOnRspMarketInfo(m_pMsgQueue, _fnOnRspMarketInfo_Holder); QuotApi.ES_RegOnRspTraceData(m_pMsgQueue, _fnOnRspTraceData_Holder); QuotApi.QT_RegMsgQueue2QuotApi(m_pQuotApi, m_pMsgQueue); QuotApi.QT_Connect(m_pQuotApi, server.Address, server.Port, account.InvestorId, account.Password); } } }
private void SendRequest_Tick(string key) { DataRecord dr; if (!historicalDataRecords_key.TryGetValue(key, out dr)) { return; } // 移动到下一交易日 do { dr.date = dr.date.AddDays(1); if (dr.date.DayOfWeek == DayOfWeek.Saturday || dr.date.DayOfWeek == DayOfWeek.Sunday) { continue; } else { break; } }while(true); // 超出日期了,可以中止了 if (dr.date >= dr.request.EndDate) { EmitHistoricalDataCompleted(dr.request); historicalDataRecords_requestId.Remove(dr.request.RequestId); historicalDataRecords_key.Remove(dr.key); return; } // 发送请求 int nRet = QuotApi.QT_RequestTrace(m_pQuotApi, dr.market, dr.symbol, dr.date.ToString("yyyyMMdd")); ehlog.Info("-->RequestTrace:{0},{1},{2} Return:{3}", dr.market, dr.symbol, dr.date.ToString("yyyyMMdd"), nRet); if (0 == nRet) { } else { EmitHistoricalDataError(dr.request, "API返回错误:" + nRet); } }