Example #1
0
 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));
 }
Example #2
0
        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, "");
            }
        }