36 Commits

Author SHA1 Message Date
Martin-Molinero 9cdb4a91c5 Refactor live data feed (#4636)
* Live Coarse universe refactor

- Live trading will source Coarse and Fine fundamental data directly
  from disk. Updating unit tests.

* Adds ILiveDataProvider interface

  * Adds wrapper for IDataQueueHandler implementations

  * Replaces IDataQueueHandler with ILiveDataProvider in
    LiveTradingDataFeed

  * Edits IDataQueueHandler documentation

* Maintains aggregation for current IDQH impls and skips for ILDF impls

  * Note: No unit test was created for this method, go back and TODO

* Protobuf Market data

- Adding protobuf support for Ticks, TradeBars and QuoteBars. Adding
  unit tests.

* Adds unit tests for LiveDataAggregator changes

  * Fixes bug where custom data was not handled as it was before
  * Fixes race condition bug because of variable reuse in class

* Add protobuf extension serialization

* Fixes for protobuf serialization

* Refactor

* Fix OptionChainUniverse

* replace BaseDataExchange pumping ticks with consolidators

* AlpacaBrokerage

* BitfinexBrokerage

* GDAXBrokerage

* OandaBrokerage

* InteractiveBrokers

* TradierBrokerage

* FxcmBrokerage

* PaperBrokerage

* etc

* WIP fixes for existing LTDF unit tests

* Fixes more LTDF unit tests

* make IDataAggregator.Update recieving Generic BaseData rather than Tick

* Change IDataQueueHandler.Subscribe method

* Some fixes after adding new commits

* Adds protobuf (de)serialization support for Dividend and Split

* Serialize protobuf with length prefix

* Fix missing LTDF unit tests

* Adds TiingoNews protobuf definitions

* fix comments

* more fixes on IQFeedDataQueueHandler

* disallow putting ticks into enumerator directly

* ScannableEnumerator tests

* fix OandaBrokerage

* AggregationManager unit tests

* fix AlpacaBrokerage tests

* fix InteractiveBrokers

* fix FxcmBrokerage tests

* call AggregationManager.Remove method on unsubscribe

* fix GDAX existing tests

* Fixes, refactor adding more tests for AggregatorManager

* Adds BenzingaNews protobuf definitions and round trip unit test

* Adds missing TiingoNews unit test to Protobuf round trip tests

* Improve sleep sequence of LiveSynchronizer

* need start aggregating first, and then can subscribe

* More test fixes and refactor

- Refactoring AggregationManager and ScannableEnumerator so the last is
  the one that owns the consolidator
- Adding pulse on the main LiveSynchronizer

* Improve performance of LEquityDataSynchronizingEnu

* Add missing Set job packet method

* Minor performance improvements

* Improvements add test timeout

- Improvements adding test timeout to find blocking test in travis

* Improve aggregationManager performance

* Testing improvements for travis

* Remove test timeouts

* More test fixes

- Adding more missing dispose calls and improving determinism

* fix IEXDataQueueHandler and tests

* Final tweaks to LTDF tests

* more AggregationManager tests

* consume and log ticks

* fix test: couldn't subscribe to Forex tickers

* change Resolution for all bar configs

* Improve RealTimeScheduleEventServiceAccuracy

* refactoring: move common code to base class

* fixed bug; unsubscribe SubscriptionDataConfig

* Small performance improvement

* Minor fixes

* Avoid Symbol serialization

* Fixes coarse selection in live mode

* Fix for live coarse

* Adds protobuf (de)serialization support for Robintrack

  * Adds round-trip unit test

* Minor performance improvements

* More minor performance improvements

* pass LiveNodePacket through to OandaBrokerage

* Fixes empty list becoming null value when deserializing with protobuf

* Reverts BZ live trading exception removal and fixes tests

* Refactor WorkQueue making it abstract

* Add try catch for composer

* Adds optional data batching period to LiveFillForwardEnumerator

* Override data-queue-handler with config

* Improve PeriodCountConsolidator.Scan performance

* Move batching delay to main Synchornizer thread

* Reverts addition of Robintrack protobuf definitions

* Give priority to config history provider if set

* Add Estimize protobuffing

- Add Estimize protobuffing support. Adding unit tests

* Always dispose of data queue handler

Co-authored-by: Gerardo Salazar <gsalaz9800@gmail.com>
Co-authored-by: Adalyat Nazirov <aenazirov@gmail.com>
2020-08-18 20:21:10 -03:00
Martin Molinero 3aa745ee42 Add StreamReader BaseData.Reader
- Add `BaseData.Reader` implementation which consumes the `StreamReader`
directly, avoiding in between substrings and parsing improving
performance and reducing resource consumption
- Adding unit tests, including performance unit test showing a >50%
improvement
2019-11-18 17:03:27 -03:00
Martin Molinero 68ad2f51b6 Address reviews
- Replacing `BaseData.AdjustResolution` for `DefaultResolution` and
`SupportedResolutions`
- Making `Resolution` nullable for `Algorithm.AddData` methods
- The `ISubscriptionDataConfigService` will set the default resolution
if none was provided and assert it is supported
- Fix bug with `PythonData` `IsSparseData` and `RequiresMapping`
resolution
2019-11-04 20:42:30 -03:00
Martin Molinero 1d43dcd601 Add BaseData.AdjustResolution
- Adding `BaseData.AdjustResolution()` that should return a valid
resolution for the given data and security type.
This allows us to set a limitation which is useful to avoid invalid data
requests or unnecessary fill forward situations. The user will be
notified through a console message.
- Adding unit and regression test
- Updating example algorithms custom data resolution
- Some performance improvements. Wont change console color if
`SelectedOptimization` is defined
2019-11-04 20:38:26 -03:00
Martin Molinero af6cc80b48 Adding BaseData.DataTimeZone()
- Adding `BaseData.DataTimeZone()` with the objective of allowing custom
data types to determine their data time zone.
2019-09-30 23:59:36 -03:00
Michael Handschuh 7807ae7af6 Add BaseData.IsSparseData
Flags a particular data type as having a sparse data set, meaning,
we don't expect it to have data for every single day. We'll use
this to prevent spamming log messages
2019-09-27 14:24:08 -04:00
Michael Handschuh c1ee66e26d Use auto-properties in BaseData
See #3618
2019-09-27 14:24:08 -04:00
Michael Handschuh d709d1c4e0 Update Common to respect CA1304 and CA1305
Updates all occurrences of parsing/ToString-ing to go through the new
StringExtensions methods that use CultureInfo.InvariantCulture

See #3045
2019-09-12 14:13:24 -04:00
Martin Molinero 24527e0cc2 Address reviews - Renaming 2019-08-21 16:30:03 -03:00
Martin Molinero 73d780daae Moving UsesMapFiles to DataType
- Custom data types will know whether or not Lean should use map files
- Updating regression test with sample custom data using map files,
which can run locally
- Adding unit tests for the `SubscriptionDataReaderHistoryProvider`,
checking it mappes equities and options correctly
2019-08-20 17:33:41 -03:00
Stefano Raggi db942e0d2e Zero volume out in fill forward TradeBars 2018-09-25 22:29:53 +02:00
Michael Handschuh 57affafdc2 Implement 'live' factor files
Adds reference price to dividend/split
Adds GetSplitsAndDividends to FactorFile
Adds Apply methods to FactorFile/FactorFileRow
Updates factor files to include reference prices
2018-08-14 17:58:44 -04:00
Stefano Raggi 508e63af4d Update Bar types Volume and Bid/AskSize from long to decimal
This PR is another required step towards crypto-currency support.
2017-06-26 21:14:55 +02:00
Andrew Hart 4121856e80 Handle subscription errors from server in ApiWebSocketConnection 2016-11-30 08:27:35 -05:00
Andrew Hart 505ebb947a ApiWebSocketConnection does not use seperate thread for websocket 2016-11-07 18:37:15 -05:00
snugs d854769e9b Convert raw data time to exchange time in Reader methods 2015-12-01 12:20:06 -05:00
snugs ef4e3f5ab5 Clean up warnings from bad pragma comments 2015-11-19 19:46:36 -05:00
snugs d9dcd9b9aa Clean up Obsolete compiler warnings 2015-11-18 13:31:29 -05:00
snugs b2d96bdfa0 Fixes bug in TradeBar.Update and QuoteBar.Update
The issue here was if we initialized with a default instance (all zeros) then
the Low would be forever zero.

In it's new form we use an initialized flag to determine whether or not the bar
has been seeded, and if it hasn't been seeded yet, seed OHLC with the current
data
2015-11-05 13:30:51 -05:00
snugs f4c3e5746f BaseData.Update now includes bidSize and askSize
Removed copied functions from TradeBar.cs - replaced with NotImplementedException
    - These functions relied on QuoteBar.OHLC being writeable, now they're read only

QuoteBar.Clone - fix object reference bug
2015-10-31 18:48:07 -04:00
snugs e1938baafe Clean up using directives 2015-09-01 22:17:35 -04:00
snugs df79ce30c2 Adds the Symbol type
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.
2015-09-01 22:17:10 -04:00
snugs 4bc2092d8c Adds OnData(SymbolChangedEvents) handler 2015-08-25 21:22:43 -04:00
snugs bbacf2b674 Remove remaining /** banners 2015-07-09 16:18:17 -04:00
QuantConnect fde0cbed3a Strip out block quote section header comments 2015-06-13 16:04:27 -04:00
snugs 44a38f3e1d Updates LiveTradeDataFeed to allow custom data with remote files 2015-06-11 17:34:54 -04:00
snugs 96396c676a OBSOLETES:: BaseData.Reader and BaseData.GetSource
The existing method signatures have been made obsolete in favor of something slightly simpler and more deterministic.
The new methods accept a bool isLiveMode flag instead of the DataFeedEndpoint.
The GetSource method returns a new type: SubscriptionDataSource, which combines the source string and the SubscriptionTransportMedium.

Existing sub-types of BaseData have been updated with the new signatures.  IBaseData has not been touch as it is mostly unused by LEAN infrastructure.
2015-06-11 17:34:53 -04:00
snugs 89b6e98af8 Fixes warnings mostly relating to xml comments
Also cleans up some block comments

Via PR#72 - thanks @ammachado!
2015-05-13 10:56:47 -04:00
bizcad bed1941b77 issue-79/Assure-Sell-quantity-is-negative 2015-05-09 19:18:30 -07:00
snugs 49b398f8ff DataStream sync by end of bar
Adds EndTime to BaseData
Adds Period to TradeBar
Now filling data forward on days missing files/data
Some performance enhancements
Removed sorted dictonary in DataStream/AlgorithmManager

We round down fill forward data in the data stream since if we were to perform this in the data feed we would continually produce data at the same time and it would all go into the algorithm at once.
2015-05-01 19:23:57 -04:00
snugs 6fd357b710 Adds support for dividends and splits
Updates SubscriptionDataReader to use IStreamReader
Adds FactorFile and MapFile helpers
Adds support for Raw, Adjusted, and TotalReturn data normalization and portfolio application
2015-04-23 20:39:59 -04:00
snugs 3af7d5ed43 Adds firing of dividend events 2015-04-23 14:31:15 -04:00
snugs 4078d805fb Allows fill forward custom data-testing
Includes new AddData<T> overload to accept fillforward and leverage parameters
Moved the clone implementation in BaseData to ObjectActivator
Added some test BaseData types that can be used as custom data but just patch through to default data locations
2015-01-30 13:11:33 -03:00
snugs 522d5591be Adds FakeLiveQueueHandler to make for easier local live debugging
Also includes some performance tweaks to sleep certain tight looped threads
Also includes changes to mark data as fill-forward via Clone(bool fillForward), BaseData.IsFillForward property
2015-01-29 22:37:16 -05:00
snugs 733cf998c6 Remove is qc data
Removing the isQcData flags allowed better support for consistency between different data types. This has a knock-on effect of allowing custom data to be fillforward and loaded from a file system.
2015-01-25 22:47:38 -03:00
Jared Broad b3de520915 Initial commit 2015-01-12 12:03:33 -03:00