/// <summary> /// Intializes the real time handler for the specified algorithm and job /// </summary> public void Setup(IAlgorithm algorithm, AlgorithmNodePacket job, IResultHandler resultHandler, IApi api) { //Initialize: _algorithm = algorithm; _resultHandler = resultHandler; // create events for algorithm's end of tradeable dates Add(ScheduledEventFactory.EveryAlgorithmEndOfDay(_algorithm, _resultHandler, _algorithm.StartDate, _algorithm.EndDate, ScheduledEvent.AlgorithmEndOfDayDelta)); // set up the events for each security to fire every tradeable date before market close foreach (var kvp in _algorithm.Securities) { var security = kvp.Value; if (!security.IsInternalFeed()) { Add(ScheduledEventFactory.EverySecurityEndOfDay(_algorithm, _resultHandler, security, algorithm.StartDate, _algorithm.EndDate, ScheduledEvent.SecurityEndOfDayDelta)); } } foreach (var scheduledEvent in _scheduledEventsSortedByTime) { // zoom past old events scheduledEvent.SkipEventsUntil(algorithm.UtcTime); // set logging accordingly scheduledEvent.IsLoggingEnabled = Log.DebuggingEnabled; } }
protected void AddAlgorithmEndOfDayEvent(DateTime start, DateTime end, DateTime?currentUtcTime = null) { // If the algorithm didn't implement it no need to support it. if (!_implementsOnEndOfDay) { return; } if (_algorithmOnEndOfDay != null) { // if we already set it once we remove the previous and // add a new one, we don't want to keep both Remove(_algorithmOnEndOfDay); } // add end of day events for each tradeable day _algorithmOnEndOfDay = ScheduledEventFactory.EveryAlgorithmEndOfDay( Algorithm, ResultHandler, start, end, ScheduledEvent.AlgorithmEndOfDayDelta, currentUtcTime); Add(_algorithmOnEndOfDay); }
/// <summary> /// Intializes the real time handler for the specified algorithm and job /// </summary> public void Setup(IAlgorithm algorithm, AlgorithmNodePacket job, IResultHandler resultHandler, IApi api) { //Initialize: _api = api; _algorithm = algorithm; _resultHandler = resultHandler; _cancellationTokenSource = new CancellationTokenSource(); _marketHoursDatabase = MarketHoursDatabase.FromDataFolder(); var todayInAlgorithmTimeZone = DateTime.UtcNow.ConvertFromUtc(_algorithm.TimeZone).Date; // refresh the market hours for today explicitly, and then set up an event to refresh them each day at midnight RefreshMarketHoursToday(todayInAlgorithmTimeZone); // every day at midnight from tomorrow until the end of time var times = from date in Time.EachDay(todayInAlgorithmTimeZone.AddDays(1), Time.EndOfTime) select date.ConvertToUtc(_algorithm.TimeZone); Add(new ScheduledEvent("RefreshMarketHours", times, (name, triggerTime) => { // refresh market hours from api every day RefreshMarketHoursToday(triggerTime.ConvertFromUtc(_algorithm.TimeZone).Date); })); // add end of day events for each tradeable day Add(ScheduledEventFactory.EveryAlgorithmEndOfDay(_algorithm, _resultHandler, todayInAlgorithmTimeZone, Time.EndOfTime, ScheduledEvent.AlgorithmEndOfDayDelta, DateTime.UtcNow)); // add end of trading day events for each security foreach (var kvp in _algorithm.Securities) { var security = kvp.Value; if (!security.IsInternalFeed()) { // assumes security.Exchange has been updated with today's hours via RefreshMarketHoursToday Add(ScheduledEventFactory.EverySecurityEndOfDay(_algorithm, _resultHandler, security, todayInAlgorithmTimeZone, Time.EndOfTime, ScheduledEvent.SecurityEndOfDayDelta, DateTime.UtcNow)); } } foreach (var scheduledEvent in _scheduledEvents) { // zoom past old events scheduledEvent.Value.SkipEventsUntil(algorithm.UtcTime); // set logging accordingly scheduledEvent.Value.IsLoggingEnabled = Log.DebuggingEnabled; } }