コード例 #1
0
        private void OnRspTraceData(IntPtr pQuotApi, IntPtr pBuffer, ref STKTRACEDATA pTraceData)
        {
            ehlog.Info("<--OnRspTraceData:{0},{1},{2}条", pTraceData.Market, pTraceData.Code, pTraceData.nCount);
            string     key = GetKeyFromSTKTRACEDATA(ref pTraceData);
            DataRecord dr;

            if (historicalDataRecords_key.TryGetValue(key, out dr))
            {
                HistoricalDataRequest request = dr.request;

                int      day        = -1;
                float    volume     = 0;
                DateTime datetime   = DateTime.Now;
                DateTime updatetime = DateTime.Now;

                IntPtr ptrHead = (IntPtr)((int)pBuffer + Marshal.SizeOf(typeof(STKTRACEDATA)));
                for (int i = 0; i < pTraceData.nCount; ++i)
                {
                    IntPtr         ptr = (IntPtr)((int)ptrHead + Marshal.SizeOf(typeof(STOCKTRACEDATA)) * i);
                    STOCKTRACEDATA std = (STOCKTRACEDATA)Marshal.PtrToStructure(ptr, typeof(STOCKTRACEDATA));

                    DateTime dt = Convert.ToDateTime(std.time);
                    if (datetime == dt)
                    {
                        updatetime = updatetime.AddMilliseconds(250);
                    }
                    else
                    {
                        updatetime = dt;
                    }
                    if (day != updatetime.Day)
                    {
                        volume = 0;
                    }
                    day    = updatetime.Day;
                    volume = std.m_Volume - volume;

                    if (updatetime >= request.BeginDate && updatetime < request.EndDate)
                    {
                        if (BothTradeAndQuote)
                        {
                            Trade trade = new Trade(updatetime, std.m_NewPrice, (int)volume);
                            NewHistoricalTrade(this,
                                               new HistoricalTradeEventArgs(trade, request.RequestId, request.Instrument, this, -1));

                            if (std.m_BuyPrice == 0 && std.m_BuyVol == 0 &&
                                std.m_SellPrice == 0 && std.m_SellVol == 0)
                            {
                            }
                            else
                            {
                                Quote quote = new Quote(updatetime, std.m_BuyPrice, (int)std.m_BuyVol, std.m_SellPrice, (int)std.m_SellVol);
                                NewHistoricalQuote(this,
                                                   new HistoricalQuoteEventArgs(quote, request.RequestId, request.Instrument, this, -1));
                            }
                        }
                        else
                        {
                            if (request.DataType == HistoricalDataType.Trade)
                            {
                                Trade trade = new Trade(updatetime, std.m_NewPrice, (int)volume);
                                NewHistoricalTrade(this,
                                                   new HistoricalTradeEventArgs(trade, request.RequestId, request.Instrument, this, -1));
                            }
                            else
                            {
                                if (std.m_BuyPrice == 0 && std.m_BuyVol == 0 &&
                                    std.m_SellPrice == 0 && std.m_SellVol == 0)
                                {
                                }
                                else
                                {
                                    Quote quote = new Quote(updatetime, std.m_BuyPrice, (int)std.m_BuyVol, std.m_SellPrice, (int)std.m_SellVol);
                                    NewHistoricalQuote(this,
                                                       new HistoricalQuoteEventArgs(quote, request.RequestId, request.Instrument, this, -1));
                                }
                            }
                        }
                    }

                    datetime = dt;
                    volume   = std.m_Volume;
                }

                RemoveRequest(key);
                SendRequest_Tick(key);
            }
        }
コード例 #2
0
 string GetKeyFromSTKTRACEDATA(ref STKTRACEDATA pTraceData)
 {
     return(string.Format("{0}:{1}", pTraceData.Market, pTraceData.Code));
 }