/// <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;
            }
        }
Exemplo n.º 2
0
        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();
        }