609 Commits

Author SHA1 Message Date
nazbrok 6885fd130b fix decimal conversion for exponential number (#4750) 2020-09-28 21:50:58 -03:00
Stefano Raggi 934128cfa0 Binance Brokerage implementation (#4688)
* Binance Brokerage skeleton

* Market hours

* Implement Symbol Mapper

- known symbols available on /api/v1/exchangeInfo
- fiat currencies are pegged

* Implement GetCashBalance

* Implement GetAccountHoldings

- there are no pre-existing currency swaps
- cash balances are pulled and stored in the cashbook

* Implement GetOpenOrders

* Manage orders: PlaceOrder

* Manage orders: UpdateOrder

Update operation is not supported

* Manage orders: CancelOrder

* Messaging: order book

* Messaging: trades

* Messaging: combine streams

- connect to fake /ws/open channel on init
- case by channel name, but not event type

* Messaging: order depth updates

- ticker symbol is not enough as it pushes updates only once a second, this would be a very incomplete data stream
- fetch ticker snapshot if lastUpdateId == 0
- follow Binance instructions for keeping local orderbook fresh

* Messaging: user data streaming

- Request userDataStream endpoint to get listenKey
- keep listenkey alive
- handle order close event
- handle order fill event

* DataDownloader: get history

- we can aggregate minute candles for higher resolutions

* fix data stream

* Tests: FeeModel tests

* Tests: base brokerage tests

* Tests: download history

* Tests: symbol mapper

* Support StopLimit andd StopMarket orders

* StopMarket orders disabled

Take profit and Stop loss orders are not supported for any symbols (tested with BTCUSDT, ETHUSDT)

* Tests: StopLimit order

* Tests: crypto parsing

* Reissue user data listen key

* comment custom currency limitation

* rework websocket connections

* implement delayed subscription

* adapt ignore message

* add license banner

* use better suited exception type

* avoid message double parsing

* support custom fee values

* extract BinanceApiClient to manage the request/response between lean and binance

* use api events to invoke brokerage events

* do not allow to terminate session if it wasn't allocated.

* update binance exchange info

* tool to add or update binance exchange info

* ExchangeInfo basic test

* Rebase + Resharp

* Binance brokerage updates

- Fix sign bug in sell order fills
- Fix bug in GetHistory
- Remove duplicate symbol from symbol properties db

* Remove unused code

* Revert removal of account currency check

* Update symbols properties database

* Address review

* Address review

- Upgrade API endpoints from v1 to v3
- Updated sub/unsub for new subscription manager
- Subscribe best bid/ask quotes instead of full order book
- Added handling of websocket error messages
- Cleanup + refactor

* Update symbol properties database

* Remove list from symbol mapper

* Fix symbol mapper tests

* Address review

- Fix resubscribe after reconnect
- Fix quote tick edge case

* Fix EnsureCurrencyDataFeed for non-tradeable currencies

* Fix check in EnsureCurrencyDataFeed

* Reuse base class subscribe on reconnect

Co-authored-by: Adalyat Nazirov <aenazirov@gmail.com>
Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2020-09-28 15:57:10 -03:00
Adalyat Nazirov 75eac27795 Bug 4600 brokerage unsubscribe symbol granular (#4640)
* bitfinex unsubscribe impl

* IB implementation

* Alpaca Brokerage

* Fxcm Brokerage

* Bitfinex remake

* GDAX Brokerage

* move & rename DataQueueHandler subscription manager to better place for using in ToolBox

* performance tuning

use unified Channel class everywhere
BaseWebsocketBrokerage.GetSubscribed method relies on DQHSubscriptionManager

* TradierBrokerage implementation

* OandaBrokerage implementation

* FakeDataQueue subcription manager

* Fake SubscriptionManager for testing

* CoinApi implementation

* IEXDataQueueHandler implementation

* IQFeed Implementation

* unit tests

* fix SubscribeSymbols params

* thread safe subscribed symbols

* don't need to lock Keys prop, because it's thread safe

* accurate PolygonDataQueueHandler subscribe/unsubscribe methods

* Alpaca isnt DataQueueHAndler anymore

* remove unused variable

* remove redundant hashset

* fix coin api subscribe method

* disclaimer

* prettify code

* race condition?

* fix symbol conversion

* log if unsubscribed; change Channel Id type

* requested changes

* pass GetChannelName func as required parameter

* centralized logs

* use single name for all idqh with no difference in tick type

* change Oanda resubscribe method

* CanSubscribe doesn't change instance state - can be marked as static.

* change Oanda Subscription tracking

* style changes

* bitfinex fix

* fix spelling
2020-09-14 20:11:44 -03:00
Stefano Raggi 60b8cf76ba Bitfinex Brokerage updates (#4584)
* Upgrade Bitfinex brokerage to API v2

* Fix rebase

* Address review

- use te instead of tu messages for trades
- add missing orderMap removals
- ClientOrderId is now time-based instead of a counter
- minor cleanup

* Trigger build
2020-09-10 17:14:10 -03:00
Adalyat Nazirov ae11e9ce43 allow Composer to create IDataQueueHandler instances (#4677) 2020-09-01 11:23:08 -03:00
Martin-Molinero f4ed48fce2 Always use AlgorithmHandler.DataProvider (#4658)
- `UniverseSelection` and `Research` will always use
  `AlgorithmHandler.DataProvider` instance instead of
  `DefaultDataProvider`
- Remove Compression at test/app.config since the dll isn't required
- Add missing license header
2020-08-27 16:07:56 -03:00
Stefano Raggi 375f192f07 Add PolygonDataQueueHandler (#4604)
* Add PolygonDataQueueHandler

* Add history provider and downloader for Polygon

* Add aggregator to PolygonDataQueueHandler

* Address review

- Removed duplication in message classes
- Added public Subscribe/Unsubscribe methods in PolygonWebSocketClientWrapper
- Added history requests for Forex and Crypto

* Address review

- Add security type and market arguments to downloader
- Fix time zone bug in downloader

* Remove unnecessary locks

* Add Polygon history for all resolutions

- Equity: trades and quotes
- Forex: quotes only
- Crypto: trades only
2020-08-27 12:09:20 -03:00
Mathieu Paquette 46e10c0a27 feat(ToolBox/IQFeed): remove memory pressure from GroupBy when fetching Tick (#4646)
#4645
2020-08-26 17:46:34 -03:00
Mathieu Paquette 2d46674fb7 feat(Toolbox\IQFeed): optimized download history for IQFeed (#4302)
* feat(Toolbox\IQFeed): optimized download history for IQFeed

Fixes #4301

* feat(IQFeed/ToolBox): code review comments

* feat(IQFeed/ToolBox): add support for quotes and trades

* feat(IQFeed/ToolBox): trade constructor change

* feat(IQFeed/ToolBox): always apply timezone conversion

* feat(IQFeed/ToolBox): fix interval start
2020-08-21 11:26:46 -03:00
Mathieu Paquette 554b7345bb feat(IQFeed/ToolBox): add IQFeed support for docker (#4632)
* feat(IQFeed/ToolBox): add IQFeed support for docker

#4631

* feat(IQFeed/ToolBox): add IQFeed documentation for docker

#4631

* feat(IQFeed/ToolBox): code review comments

#4631
2020-08-19 18:14:37 -07:00
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
michael-sena a128f8bb2e Allow LeanDataWriter to create zip files for futures data (#4569)
* Allow LeanDataWriter to append to zip data files

* Use the data directory provided to the writer instead of the global value

* Disregard the time-portion of an input date

* Overwrite zip entries when creating futures data files

* Minor tweak and adding unit test

Co-authored-by: Martin Molinero <martin.molinero1@gmail.com>
2020-08-18 17:44:02 -03:00
Stefano Raggi bc41b4461e Add logging for missing IEX api key 2020-07-31 08:49:03 +02:00
Stefano Raggi 036d8684c0 IEX DataQueueHandler updates
- Add parameterless constructor (for usage in LEAN config)
- Added config setting for IEX Cloud api key (required for history requests)
2020-07-30 17:32:00 +02:00
Stefano Raggi 38ce10c723 Remove unused references to WebSocketSharpFork 2020-07-30 14:06:22 +02:00
JJD d7bb8a2018 CoinAPI converter will only process SPOT files. 2020-06-24 12:17:43 -03:00
Stefano Raggi 0a046699fc Consolidate SharpZipLib library usage 2020-05-28 11:18:44 +02:00
Stefano Raggi cfb3329f33 Update System.Net.Http to latest version
- also removed unused references
2020-05-22 22:55:18 +02:00
Martin-Molinero 34f5e6d427 Merge pull request #4439 from QuantConnect/bug-smartinsider-history-dropped-points
Updates Smart Insider transactions and intentions to use different time index
2020-05-22 11:12:07 -03:00
Martin-Molinero 1d0d4f4d7b Add assembly descriptions (#4442)
Add assembly descriptions
2020-05-21 09:35:12 -07:00
Gerardo Salazar f610b3a4fb Updates Smart Insider transactions and intentions to use different time index
* We now use the time at which Smart Insider added a given event to
   their database. Because time indexes for Smart Insider are now
   non-duplicated per symbol, the History request will properly work.
2020-05-20 14:55:28 -07:00
Martin Molinero 891cf4d69b Update to .Net 4.6.2 2020-05-15 17:32:46 -03:00
Martin-Molinero 7bcd648f86 Merge pull request #4409 from QuantConnect/bug-3936-tiingonews-data-points-drop-v2
Fix TiingoNews Time
2020-05-15 10:13:49 -03:00
Gerardo Salazar 9ad876ff31 Fixes data destination issue in BenzingaNewsDataConverter 2020-05-14 13:01:29 -07:00
Stefano Raggi bef8011327 Address review 2020-05-14 01:14:19 +02:00
Stefano Raggi 541421f290 Fix extended market hours flag 2020-05-13 11:38:53 +02:00
Stefano Raggi d7ca05c541 Save future/option daily/hourly data in LeanDataWriter 2020-05-13 11:38:53 +02:00
Stefano Raggi 880afae4b7 Add futures download and save to IBDataDownloader 2020-05-13 11:38:53 +02:00
Stefano Raggi 0831f2052d Add future/option support to LeanDataWriter 2020-05-13 11:38:53 +02:00
Stefano Raggi b3cf6315de Add IncludeExpired flag to IDataQueueUniverseProvider.Lookup
This flag was added to enable history requests for expired futures and options contracts.
2020-05-13 11:38:53 +02:00
Martin Molinero 6009e3ffeb Fix TiingoNews Time
- Fix TiingoNews time for backtesting, converter will store and organize
  data based on the 'QC time' which is crawldate or publish data plus an
  offset
2020-05-12 16:15:26 -03:00
Martin-Molinero 8511235bcd Merge pull request #4401 from gsalaz98/bug-estimize-estimates-reader-crashing
Fix Estimize processing issues that prevented two downloaders from completing
2020-05-11 20:18:07 -03:00
Gerardo Salazar 7036a3e99c Address review - add missing continue statement and extends unit tests 2020-05-11 15:14:43 -07:00
Martin Molinero 269b8ba204 Remove PsychSignal data
- Remove PsychSignal data since it's no longer available
2020-05-11 18:48:13 -03:00
Gerardo Salazar 4a923e3e43 Address review - add tests and reduce code duplication
* Refactors the delimiter detection method to make adding new
    values quick and easy.
2020-05-11 13:46:08 -07:00
Gerardo Salazar 5d6c5c6235 Fix processing issue that stopped Estimize from completing successfully
* We made an assumption that all tickers marked as "defunct" from
    Estimize would have a dash '-' separating the defunct indicator
    from the ticker. However, there was a ticker where the defunct
    separator was actually an underscore '_'. There are now
    additional checks in place to ensure that we do not pass the
    Substring method an invalid 'length' value.
2020-05-11 12:22:06 -07:00
Martin Molinero c226914322 Value types thread safety changes
- Refactor ZipDataCacheProvider to avoid value types thread issues, it
  will now use a timer. Add missing dispose calls.
- Synchronizer won't share the `SubscriptionFrontierTimeProvider`
  instance since it's not thread safe and shouldn't be called
- Fix BacktestingResultHandler `_daysProcessed` thread safety
- Fixing `RealTimeScheduleEventService` thread safety
2020-05-01 16:58:29 -03:00
Jared c939c68f21 Merge pull request #4350 from QuantConnect/feature-4348-extend-idqh
Add Dispose and IsConnected to IDataQueueHandler
2020-04-30 11:24:50 -07:00
JJD 13f54e7ffe Remove exchange from tick files 2020-04-28 16:29:17 -03:00
JJD eff06b86eb Look for exchange on SPDB instead of the raw filename 2020-04-28 16:29:17 -03:00
Martin Molinero 07f36ad3e9 Update IQFeedDataQueueHandler future market check 2020-04-28 16:29:16 -03:00
JJD 9ecc6b008b Fix issue in AlgoSeekFuturesReader 2020-04-28 16:29:16 -03:00
JJD cbcc20a22b Remove all references to Market.USA in AlgoSeek futures converter 2020-04-28 16:29:15 -03:00
Juan José D'Ambrosio 41955297f0 Parse the exchange from raw data filename 2020-04-28 16:29:14 -03:00
Martin Molinero cd2ef13d38 Update FuturesExpiryFunctions
- Update FuturesExpiryFunctions to be keyed by symbol. Updating unit
  tests
2020-04-28 16:29:14 -03:00
Martin Molinero 88d4719327 Fixes for future market users
- Update consumers using Market.USA for future symbols
- Fix for SymbolPropertiesDatabase changes
2020-04-28 16:29:14 -03:00
JJD d2e42409d3 Update Futures converter for new exchanges 2020-04-28 16:29:14 -03:00
Stefano Raggi 7554babad8 Add Dispose and IsConnected to IDataQueueHandler 2020-04-28 17:39:13 +02:00
Michael Sena fce5d9d2e6 Remove references to IKVM.Reflection in Brokerages and ToolBox 2020-04-22 01:31:53 +10:00
ScalpTrader f0147e38ff Ignore symbols with the new continuous contract symbol 2020-04-14 16:25:09 -10:00