/// <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(); 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 security in _algorithm.Securities.Values.Where(x => x.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; } }
/// <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 security in _algorithm.Securities.Values.Where(x => x.IsInternalFeed())) { Add(ScheduledEventFactory.EverySecurityEndOfDay(_algorithm, _resultHandler, security, algorithm.StartDate, _algorithm.EndDate, ScheduledEvent.SecurityEndOfDayDelta)); } foreach (var scheduledEvent in _scheduledEvents) { // zoom past old events scheduledEvent.Value.SkipEventsUntil(algorithm.UtcTime); // set logging accordingly scheduledEvent.Value.IsLoggingEnabled = Log.DebuggingEnabled; } }