private string BarFieldToString(BarField field, DateTime dt) { return(string.Format("{0},{1},{2},{3},{4},{5},{6}", dt.ToString("yyyy-MM-dd HH:mm:ss.fff"), field.Open, field.High, field.Low, field.Close, field.Volume, field.OpenInterest)); }
private void OnRspQryHistoricalBars_callback(object sender, IntPtr pBars, int size1, ref HistoricalDataRequestField request, int size2, bool bIsLast) { int size = Marshal.SizeOf(typeof(BarField)); (sender as XApi).GetLog().Info("<--OnRspQryHistoricalBars:{0},{1},{2},{3}条", request.CurrentDate, request.InstrumentID, request.ExchangeID, size1 / size); HistoricalDataRecord record; if (!historicalDataRecords.TryGetValue(request.RequestId, out record)) { return; } List <Bar> list = new List <Bar>(); for (int i = 0; i < size1 / size; ++i) { IntPtr ptr = (IntPtr)(pBars + size * i); BarField obj = PInvokeUtility.GetObjectFromIntPtr <BarField>(ptr); int Millisecond = 0; DateTime dt = GetDateTime(obj.Date, obj.Time, Millisecond); // 这地方应当加历史数据另存的地方才好 if (SaveToCsv) { LogEventInfo logEvent = new LogEventInfo(NLog.LogLevel.Trace, tickLog.Name, BarFieldToString(obj, dt)); // 用户可能需要按收到数据的合约与时间分目录或文件 logEvent.Properties[Symbol] = record.Request.Instrument.Symbol; logEvent.Properties[Date] = request.CurrentDate.ToString(); logEvent.Properties[BarSize] = request.BarSize.ToString(); barLog.Log(logEvent); } if (FilterDateTime) { if (FilterDateTime_(record.Request, dt)) { Bar b = new Bar(dt, dt.AddSeconds(record.Request.BarSize.Value), record.Request.Instrument.Id, record.Request.BarType.Value, record.Request.BarSize.Value, obj.Open, obj.High, obj.Low, obj.Close, (long)obj.Volume, (long)obj.OpenInterest); list.Add(b); } } } if (EmitHistoricalData) { HistoricalData data = new HistoricalData { RequestId = record.Request.RequestId, Objects = list.ToArray(), TotalNum = list.Count, }; base.EmitHistoricalData(data); } if (bIsLast) { EmitHistoricalDataEnd(record.Request.RequestId, RequestResult.Completed, ""); } }