IResultHandler has an Initialize method which accepts a job, so all instances should know
they job (algo id, proj id, user id) and so these methods shouldn't be requiring the field
Many places in the code used Log.Error(err.Message) or equivalent which
strips out all the really useful information, such as the stack trace
and inner exceptions. Using Log.Error(exception) is the correct way to
log an error as it will correctly write all the message details, also,
by passing the full Exception object we can improve the logging in this
one place and all call sites will automatically benefit from the improvements
The command queue provides external messaging into the algorithm.
It yields ICommand instances which are runnable against the algorithm.
This allows a user to exercise some control/change over the algorithm's
behavior while it's still running.
To show the pattern, I've implemented the Order, Liquidate, and Quit commands
The first emit from the live bridge can have more data than usual since
the first emit is dependent on when the Run method is actually called.
Inspect all data and make sure it's after the handover time
Cases can arise such that the data feed's first iteration includes data
for about 50ms before the feed time sync loop is actually started, so give
a 100ms buffer on the handoff time check
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
Includes changing FundamentalType to UniverseSelectionType
IDataFeed.Fundamental -> IDataFeed.UniverseSelection
FundamentalEventArgs -> UniverseSelectionEventArgs
All in preparation for another type of selection, hand-picked
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!
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.