No need to kill the algorithm if there's no open exchanges, wait
at least 15 minutes before killing algo (same as before with IB)
This logic is now centralized via an IBrokerageMessageHandler
Includes two new BrokerageMessageType
Disconnect
Reconnect
These messages should be used when a disconnect happens and again when we're reconnected
to tell the message handler the current state
Removed ISetupHandler.SetErrorHandler, this is replaced by
brokerage.Message += (sender, message) => algorithm.BrokerageMessageHandler.Handle(message)
allowing algorithm direct access to managing the brokerage messages
This places all security subscriptions within a universes
Subscriptions generated via calls to AddSecurity are place in a UserDefinedUniverse
UserDefinedUniverse will serve up a predetermined list of symbols on a requested interval
LiveTradingDataFeed - reworked custom enumerators to use RefreshEnumerator as wrapper for rate limitting
Set Start/EndDate in live mode properly
Adds helper to create CoarseFundamental symbols
Dispose of removed subscriptions properly
Remove time slice rounding
Subscribe to the coarse symbols to get data into the exchange
This is a scaffolding step in that live will only use the first in the list
Also, there's no API helpers for doing this and it's assumed it's only coarse
fundamental data, the next change removes the coarse fundamental assumptions
Added Trade and TradeBuilder classes
Added UtcTime and OrderFee property to OrderEvent class
Added AlgorithmPerformance class with a few metrics + tests
Added portfolio statistics + rolling statistics
Closes#30 via PR #164
Thanks @SteffanoRaggi!
Fixes bug in backtest history provider
Requests for bar counts were always incorrect because the history provider
was emitting bars whose end time is equal to the start time.
Implemented a FilterEnumerator<T> privately so he can filter those out
when using non-tick data
Add dynamic data flag to config
Remove dynamic data flag from Security
Rename dynamically loaded flag to IsCustomData
Remove Security from SubscriptionDataReader ctor
This includes updating all usages of symbol as a security identifier to use the new type.
The type includes a unique field, SID, as well as the current ticker's value. This allows
for consistent addressability while also allowing the ticker to evolve over time with the
mapping changes.
Effort was made to maintain compile and runtime backwards compatibility.
Algorithms can now use syntax like the following to define events:
Schedule.Event(name).{DateRuleMethod}.{TimeRuleMethod}.Run( lambda )
For example: Schedule.Event(tues).Every(DayOfWeek.Tuesday).AfterMarketOpen(SPY, 20).Run(MyTuesdayHandler);
Adds the ScheduleManager which allows an algorithm to add/remove scheduled events
Check out the ScheduledEventsAlgorithm for syntax
ScheduledEvents are at their core an IEnumerator<DateTime> that defines the event times coupled with a callback
IDateRule defines dates for events
ITimeRule defines time(s) on a given date for events