/// <summary>
            /// Transform received data into BaseData object
            /// </summary>
            /// <param name="e">Received data</param>
            /// <param name="requestData">Request information</param>
            /// <returns>BaseData object</returns>
            private BaseData GetData(LookupEventArgs e, HistoryRequest requestData)
            {
                var isEquity = requestData.SecurityType == SecurityType.Equity;
                var scale    = isEquity ? 1000m : 1m;

                try
                {
                    switch (e.Type)
                    {
                    case LookupType.REQ_HST_TCK:
                        var t    = (LookupTickEventArgs)e;
                        var time = isEquity ? t.DateTimeStamp : t.DateTimeStamp.ConvertTo(TimeZones.NewYork, TimeZones.EasternStandard);
                        return(new Tick(time, requestData.Symbol, (decimal)t.Last * scale, (decimal)t.Bid * scale, (decimal)t.Ask * scale));

                    case LookupType.REQ_HST_INT:
                        var i = (LookupIntervalEventArgs)e;
                        if (i.DateTimeStamp == DateTime.MinValue)
                        {
                            return(null);
                        }
                        var istartTime = i.DateTimeStamp - requestData.Resolution.ToTimeSpan();
                        if (!isEquity)
                        {
                            istartTime = istartTime.ConvertTo(TimeZones.NewYork, TimeZones.EasternStandard);
                        }
                        return(new TradeBar(istartTime, requestData.Symbol, (decimal)i.Open * scale, (decimal)i.High * scale, (decimal)i.Low * scale, (decimal)i.Close * scale, i.PeriodVolume));

                    case LookupType.REQ_HST_DWM:
                        var d = (LookupDayWeekMonthEventArgs)e;
                        if (d.DateTimeStamp == DateTime.MinValue)
                        {
                            return(null);
                        }
                        var dstartTime = d.DateTimeStamp - requestData.Resolution.ToTimeSpan();
                        if (!isEquity)
                        {
                            dstartTime = dstartTime.ConvertTo(TimeZones.NewYork, TimeZones.EasternStandard);
                        }
                        return(new TradeBar(dstartTime, requestData.Symbol, (decimal)d.Open * scale, (decimal)d.High * scale, (decimal)d.Low * scale, (decimal)d.Close * scale, d.PeriodVolume));

                    // we don't need to handle these other types
                    case LookupType.REQ_SYM_SYM:
                    case LookupType.REQ_SYM_SIC:
                    case LookupType.REQ_SYM_NAC:
                    case LookupType.REQ_TAB_MKT:
                    case LookupType.REQ_TAB_SEC:
                    case LookupType.REQ_TAB_MKC:
                    case LookupType.REQ_TAB_SIC:
                    case LookupType.REQ_TAB_NAC:
                    default:
                        return(null);
                    }
                }
                catch (Exception err)
                {
                    Log.Error("Encountered error while processing request: " + e.Id);
                    Log.Error(err);
                    return(null);
                }
            }
            /// <summary>
            /// Method called when a new Lookup event is fired
            /// </summary>
            /// <param name="e">Received data</param>
            protected override void OnLookupEvent(LookupEventArgs e)
            {
                try
                {
                    switch (e.Sequence)
                    {
                    case LookupSequence.MessageStart:
                        _currentRequest.AddOrUpdate(e.Id, new List <BaseData>());
                        break;

                    case LookupSequence.MessageDetail:
                        List <BaseData> current;
                        if (_currentRequest.TryGetValue(e.Id, out current))
                        {
                            HandleMessageDetail(e, current);
                        }
                        break;

                    case LookupSequence.MessageEnd:
                        _inProgress = false;
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }
                }
                catch (Exception err)
                {
                    Log.Error(err);
                }
            }
Example #3
0
 protected virtual void OnLookupEvent(LookupEventArgs e)
 {
     if (LookupEvent != null)
     {
         LookupEvent(this, e);
     }
 }
            /// <summary>
            /// Put received data into current list of BaseData object
            /// </summary>
            /// <param name="e">Received data</param>
            /// <param name="current">Current list of BaseData object</param>
            private void HandleMessageDetail(LookupEventArgs e, List <BaseData> current)
            {
                var requestData = _requestDataByRequestId[e.Id];
                var data        = GetData(e, requestData);

                if (data != null && data.Time != DateTime.MinValue)
                {
                    current.Add(data);
                }
            }