* Oanda default forex Market
- Use Oanda as default forex Market since it has more pairs.
- Remove FXCM data add Oanda equivalente data.
- Update unit and regression tests
* Address reviews
- Revert FXCM data removal
- Remove unrequired commented code
* Fix rebase
- Completly move `DataManager` in front of `DataFeed`. Specifically
`AddSubscription()` and `RemoveSubscription()` implementations. Also
removing IDataFeed.Subscriptions
- Creating new `Synchronizer` which will consolidate and combine `TimeSlice`
streaming for both live and backtests modes. Will live in front of the
`DataManager`
- `SubscriptionSynchronizer` will be the `FrontierTimeProvider` exposed,
and owned, by the new `Synchronizer`
- Updating existing tests
We recently disabled dividend application in live mode because
it was more accurate to rely on the brokerage's daily cash sync
to pick up when the distribution was actually made. Before that
change we were applying dividends on the ex-date, and then it was
un-applied via the cash sync and then re-applied when the funds
finally hit the brokerage account. By making that change we failed
to ensure that dividends were still applied in live paper mode.
Dividends are detected via the PaperBrokerage's Scan method which
is called at least once every time loop. IAlgorithm.CurrenctSlice
is used to check for dividends and then the total distribution is
computed and applied directly to the portfolio's cash book.
Since we now support universe selection and by convention never remove a security
object, we can't rely on the counts of the security manager to perform limits on
data subscriptions, this logic was moved deeper into the engine, where we perform
UniverseSelection, which is the path taken to add new data subscriptions
This refactor was an effort to bring into line the various concepts between the
FileSystemDataFeed and the LiveTradingDataFeed. The former works using enumerators
and a time sync loop that uses the concept of a frontier to decide when to 'pull-off'
data that's at or before the frontier. This makes the feed uninterested in how the
data (via enumerators) is provided, and only concerns itself with things at the
subscription level, that is, time syncing and universe selection invocation.
These concepts were brought over to the LiveTradingDataFeed with some modification.
This change heavily uses object composition of enumerators to handle the various
concerns that were previously within the enumerator loops in the LiveTradingDataFeed.
Some enumerator types that help accomplish these concerns:
FastForwardEnumerator - fast forwards an enumerator that contains old data
RateLimitEnumerator - prevents an enumerator from being invoked too frequently
TradeBarBuilderEnumerator - Builds trade bars from tick data
FrontierAwareEnumerator - Emits the underlying when the frontier is on or after Current
EnqueableEnumerator - Acts as a liason between a push/pull system using a queue