/// <summary> /// Initializes a new instance of the <see cref="QuoteBarBuilderEnumerator"/> class /// </summary> /// <param name="barSize">The quote bar size to produce</param> /// <param name="timeZone">The time zone the raw data is time stamped in</param> /// <param name="timeProvider">The time provider instance used to determine when bars are completed and /// can be emitted</param> /// <param name="liveMode">True if we're running in live mode, false for backtest mode</param> /// <param name="newDataAvailableHandler">The event handler for a new available data point</param> public QuoteBarBuilderEnumerator(TimeSpan barSize, DateTimeZone timeZone, ITimeProvider timeProvider, bool liveMode, EventHandler newDataAvailableHandler = null) { _barSize = barSize; _timeZone = timeZone; _timeProvider = timeProvider; _queue = new ConcurrentQueue <QuoteBar>(); _liveMode = liveMode; _newDataAvailableHandler = newDataAvailableHandler ?? ((s, e) => { }); if (liveMode) { _realTimeScheduleEventService = new RealTimeScheduleEventService(timeProvider); _realTimeScheduleEventService.NewEvent += _newDataAvailableHandler; } }
public void Accuracy() { var scheduledEventService = new RealTimeScheduleEventService(RealTimeProvider.Instance); EventHandler handler = (_, __) => { Log.Trace($"{DateTime.UtcNow:O}"); var now = DateTime.UtcNow; var nextEventTime = now.RoundDown(TimeSpan.FromSeconds(1)).Add(TimeSpan.FromSeconds(1) + TimeSpan.FromMilliseconds(101)); scheduledEventService.ScheduleEvent(nextEventTime - now, now); }; scheduledEventService.NewEvent += handler; handler(this, null); Thread.Sleep(5000); scheduledEventService.DisposeSafely(); }