Universes
Dataless Scheduled Universes
Introduction
A dataless scheduled universe let's you select a set of assets on a specific schedule.
You can control which days the other types of universe run by adjusting the Schedule universe setting.
However, the Schedule
schedule
universe setting doesn't accept a TimeRule
argument, so you can't control the time of the day they run.
In contrast, a dataless scheduled universe accepts a TimeRule
argument, but its selection function only receives the algorithm time.
Create Universes
To add a dataless scheduled universe, in the Initialize
initialize
method, call the AddUniverse
add_universe
method with a ScheduledUniverse
object.
public class MyUniverseAlgorithm : QCAlgorithm { private Universe _universe; public override void Initialize() { UniverseSettings.Asynchronous = true; _universe = AddUniverse(new ScheduledUniverse(DateRules.MonthStart(), TimeRules.At(8, 0), SelectSymbols)); } private IEnumerable<Symbol> SelectSymbols(DateTime dt) { return new[] { QuantConnect.Symbol.Create("SPY", SecurityType.Equity, Market.USA) }; } }
class MyUniverseAlgorithm(QCAlgorithm): def initialize(self) -> None: self.universe_settings.asynchronous = True self._universe = self.add_universe( ScheduledUniverse( self.date_rules.month_start(), self.time_rules.at(8, 0), self.select_symbols ) ) def select_symbols(self, dt): return [Symbol.create("SPY", SecurityType.EQUITY, Market.USA)]
The following table describes the arguments the model accepts:
Argument | Data Type | Description | Default Value |
---|---|---|---|
dateRule date_rule | IDateRule | Date rule that defines what days the universe selection function runs | |
timeRule time_rule | ITimeRule | Time rule that defines what times on each day selected by date rule the universe selection function runs | |
Func<DateTime, IEnumerable< Symbol>>
Callable[[datetime], List[Symbol]] | selector | Selector function that accepts the current date time and returns the universe's Symbol objects | |
settings | UniverseSettings | The universe settings. If you don't provide an argument, the model uses the algorithm.UniverseSettings algorithm.universe_settings by default. | null None |
Date Rules
The following table describes the supported DateRules
:
Member | Description |
---|---|
self.date_rules.set_default_time_zone(time_zone: DateTimeZone)
DateRules.SetDefaultTimeZone(DateTimeZone timeZone); | Sets the time zone for the DateRules object used in all methods in this table. The default time zone is the algorithm time zone. |
self.date_rules.on(year: int, month: int, day: int)
DateRules.On(int year, int month, int day) | Trigger an event on a specific date. |
self.date_rules.every_day()
DateRules.EveryDay() | Trigger an event every day. |
self.date_rules.every_day(symbol: Symbol)
DateRules.EveryDay(Symbol symbol) | Trigger an event every day a specific symbol is trading. |
self.date_rules.every(days: List[DayOfWeek])
DateRules.Every(params DayOfWeek[] days) | Trigger an event on specific days throughout the week. To view the DayOfWeek enum members, see DayOfWeek Enum in the .NET documentation. |
self.date_rules.month_start(daysOffset: int = 0)
DateRules.MonthStart(int daysOffset = 0) | Trigger an event on the first day of each month plus an offset. |
self.date_rules.month_start(symbol: Symbol, daysOffset: int = 0)
DateRules.MonthStart(Symbol symbol, int daysOffset = 0) | Trigger an event on the first tradable date of each month for a specific symbol plus an offset. |
self.date_rules.month_end(daysOffset: int = 0)
DateRules.MonthEnd(int daysOffset = 0) | Trigger an event on the last day of each month minus an offset. |
self.date_rules.month_end(symbol: Symbol, daysOffset: int = 0)
DateRules.MonthEnd(Symbol symbol, int daysOffset = 0) | Trigger an event on the last tradable date of each month for a specific symbol minus an offset. |
self.date_rules.week_start(daysOffset: int = 0)
DateRules.WeekStart(int daysOffset = 0) | Trigger an event on the first day of each week plus an offset. |
self.date_rules.week_start(symbol: Symbol, daysOffset: int = 0)
DateRules.WeekStart(Symbol symbol, int daysOffset = 0) | Trigger an event on the first tradable date of each week for a specific symbol plus an offset. |
self.date_rules.week_end(daysOffset: int = 0)
DateRules.WeekEnd(int daysOffset = 0) | Trigger an event on the last day of each week minus an offset. |
self.date_rules.week_end(symbol: Symbol, daysOffset: int = 0)
DateRules.WeekEnd(Symbol symbol, int daysOffset = 0) | Trigger an event on the last tradable date of each week for a specific symbol minus an offset. |
self.date_rules.today | |
self.date_rules.tomorrow |
Time Rules
The following table describes the supported TimeRules
:
Member | Description |
---|---|
self.time_rules.set_default_time_zone(time_zone: DateTimeZone)
TimeRules.SetDefaultTimeZone(DateTimeZone timeZone) | Sets the time zone for the TimeRules object used in all methods in this table, except when a different time zone is given. The default time zone is the algorithm time zone. |
self.time_rules.after_market_open(symbol: Symbol, minutesAfterOpen: float = 0, extendedMarketOpen: bool = False)
TimeRules.AfterMarketOpen(Symbol symbol, double minutesAfterOpen = 0, bool extendedMarketOpen = false) | Trigger an event a few minutes after market open for a specific symbol (default is 0). This rule doesn't work for Crypto securities or custom data. |
self.time_rules.before_market_close(symbol: Symbol, minutesBeforeClose: float = 0, extendedMarketOpen: bool = False)
TimeRules.BeforeMarketClose(Symbol symbol, double minutesBeforeClose = 0, bool extendedMarketOpen = false) | Trigger an event a few minutes before market close for a specific symbol (default is 0). This rule doesn't work for Crypto securities or custom data. |
self.time_rules.every(interval: timedelta)
TimeRules.Every(TimeSpan interval) | Trigger an event every period interval starting at midnight. |
self.time_rules.now TimeRules.Now | Trigger an event at the current time of day. |
self.time_rules.midnight TimeRules.Midnight | Trigger an event at midnight. |
self.time_rules.noon TimeRules.Noon | Trigger an event at noon. |
self.time_rules.at(hour: int, minute: int, second: int = 0)
TimeRules.At(int hour, int minute, int second = 0) | Trigger an event at a specific time of day (e.g. 13:10). |
self.time_rules.at(hour: int, minute: int, second: int, time_zone: DateTimeZone)
TimeRules.At(int hour, int minute, int second, DateTimeZone timeZone) | Trigger an event at a specific time of day in the given time zone (e.g. 13:10 UTC). |