13708
309 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
c4a2d6eef4 |
Crypto base currency fees handled correctly (#6166)
Regression Tests / build (push) Has been cancelled
Build & Test Lean / build (push) Has been cancelled
* Binance fees deducted from fill quantity accordengly - For Binance cash accounts while buying, if fees are from the base currency of leans virtual position, we need to deduct the fee from the fill quantity, else we can end with a position bigger that it actually is and not be able to liquidate * Refactor solution - Refactor solution into a more generic approach solving fees in base currency at the BrokerageTransactionHandler level, covering all brokerages that require it. Adding regression algorithm reproducing issue. - Update Bitfinex and Binance fee models to correctly reflact reality * Log fill quantity adjusment once |
||
|
|
b698641c90 |
Minor tweak for ApiDataProvider to support India (#6169)
Regression Tests / build (push) Has been cancelled
Build & Test Lean / build (push) Has been cancelled
- Minor tweaks for the ApiDataProvider to better support India market |
||
|
|
30d7fb042b |
Always reuse aggregator instance if any (#6161)
Regression Tests / build (push) Has been cancelled
Build & Test Lean / build (push) Has been cancelled
* Always reuse aggregator instance if any - When fetching a IDataAggregator instance from the composer, do not enfore type name on existing instances * Fix unit tests |
||
|
|
e1d1e28bb8 |
Fix for Tick subscription history requests (#6156)
Build & Test Lean / build (push) Has been cancelled
Regression Tests / build (push) Has been cancelled
- Fix for history requests != Tick for existing subscriptions with Tick resolution. Adding unit test reproducing issue |
||
|
|
e2de241c2b |
Feature 5090 add api optimization methods (#6108)
Build & Test Lean / build (push) Has been cancelled
Regression Tests / build (push) Has been cancelled
* Move Optimizer-related DTOs and JSON converters into Common/Optimizer * Add REST methods for Optimization * Move OptimizationStatus into Common * Change optimizationId parameter type to string * Update Optimization and add lightweight optimization object * Rename lightweight optimization to BaseOptimization and remove unneccessary properties * Remove snapshotId from Optimization, add ParameterSet to Backtest * Add missing IApi.cs method signatures * Move ParameterSet into Common * Replace Backtest with OptimizationBacktest * Update UpdateOptimization to not include null or empty name and layout params in the request * Change Objective targetTemplate regex pattern from ['(.+)'] to (.+) to prevent escaping target strings without whitespace * Return Estimate object when calling EstimateOptimization * Use DefaultNamingStrategy when serializing constraint operators * Revert "Change Objective targetTemplate regex pattern from ['(.+)'] to (.+) to prevent escaping target strings without whitespace" This reverts commit fbe7de0fd77dccc62e8c52c42a4ec9c18347acb2. * Update Api method signatures * Add unit tests * Fix XML comment referring to the old class name * Fix XML summary for OptimizationResponseWrapper * Address review feedback - Remove unused testOrganizationId - Change NodeType from string to NodeType enum - Clarify unit types for Estimate time and balance - Simplify JsonConverter classes * Add accessors to Common/Api classes * Define performance metrics names in PerformanceMetrics class * Remove unnecessary branching logic from GetSeriesValues method * Add crefs and examples to XML comments in the Api class * Revert "Change NodeType from string to NodeType enum" * Remove layout param from UpdateOptimization method * Backtest property ParameterSet should be of type ParameterSet * Add asserts for deserialization in OptimizationBacktestJsonConverterTests * Replace the three target-related properties with Criterion * Add serialization and deserialization tests for Optimization * Remove Optimization Serialization test * Add EstimateDeserialization test * Add asserts for integration tests * Address self review * Revert test case * Update Nodes.cs * Update Nodes.cs * Set Aborted status when Optimization fails to start * Add ParameterSetJsonConverter and ParameterSetJsonConverterTests Co-authored-by: Martin-Molinero <martin@quantconnect.com> |
||
|
|
abbb50e209 |
Minor improvements for data reading and caching (#6113)
Build & Test Lean / build (push) Has been cancelled
Regression Tests / build (push) Has been cancelled
* Minor improvements for data reading and caching * Address reviews * Adjust zip cache error check |
||
|
|
264c3c8374 |
Composite IDQH - Support multiple live data feeds (#6047)
* initial commit * Follow IDQH implementation * Expect a list of data handlers from LiveNodePacket * Return null if can not subscribe * refctor to add check for subscription * initialze null * Add tests * Check subscribe retuns null/not-null * cleanup * Read all required IDQH credentails to job * Use CDQH to handle all IDQH instances * constructor abstraction to call from setjob * use flag * remove redundant because derived will call initialize on it * abstract and initialize from setjob * handle null enumerators * get creds from data handlers * handle single data handler value from data-queue-handler * Fix to support a json array * Fix missed constructor call * change access modifier to access from Tests files * Add test to get brokerageFactory from dataQueueHandler * Fix init flag to handle all conditions * Add docs * initialize from setjob * Check if websocket open before using * change defination of initialzie to include tradier * clean up * change defination * fix wrong api key name * return empty enumerator * check websocket open before sending request * check connection before subscribing * fix to include more cases * check websocket open before sending request * Minor refactoring * reafctor and use IsConnected * remove unused * clean up * Fix test cases * reverse change * include config changes * connect to websocket from setjob * check websocket connection from setjob * clean up * include condition for IDQH that are not brokerage * Address review * Add market check condition before subscribe * Remove deprecated * Minor fix for deserializing data queue handler Co-authored-by: Martin-Molinero <martin@quantconnect.com> |
||
|
|
1358bd8115 |
Future and FutureOption low res support (#6069)
Regression Tests / build (push) Has been cancelled
Build & Test Lean / build (push) Has been cancelled
* Fixes for FutureOptions support in LeanData * Add CreateCanonicalOption() utility function for Symbol.cs * Add aggregated Futures/FuturesOptions data to Lean * Add FutureOptions regressions for daily/hourly data * Allow Futures to be added with low resolution * Add Future regressions using hour/daily data * Nit - Python Class names * Add reviews * Add alias into CreateCanonicalOption |
||
|
|
b8b0d18993 |
Continuous futures (#6034)
* Continuous Future Contracts * Mapping approach * Tweaks WIP * Live mapping * Live mapping - Add support for live mapping, refreshing mapfiles - Fix future expiration functions - Adding unit tests * Update moq test package * Continuous futures price scaling * Refactor price factors scaling * Factor file related renames * Address reviews |
||
|
|
dd4da7ba95 |
Feature Daily/Hourly Options Support (#6017)
Build & Test Lean / build (push) Has been cancelled
Regression Tests / build (push) Has been cancelled
* Create generic writing for LeanDataWriter, + notes on todos * Make Options Daily/Hourly data store by year * Refactor Generic Write * Permit hour and daily resolutions for options * Refactor writer to merge when needed with other files * Cleanup redundancies, run write tasks in parallel * Make needed classes/vars available * Update tests to reflect new naming convention for daily hourly options data * Add Byte[] overloads for ZipData functions in compression * Implemented Store() for ZipDataCacheProvider * Have LeanDataWriter use a DataCacheProvider * ZipDataCacheProvider cleanup * ZipDataCacheProvider tweaks, doesn't support storing non-zips * Test adjustments * Update LeanDataWriter to use Write instead of SaveDailyHourly/SaveMinuteSecond * Implement tests to verify DownloadAndSave behavior * Nit cleanup on DownloadAndSave tests * Fix for options daily/hourly underlying equity subscription read * Add daily/hourly options data and regressions * Add missing open interest for hourly * Fix writing of OpenInterest Daily/Hourly data * Update data * Fix Date typo in regression * Use daily algorithm to test delisting * Revisions part 1 * Expand test for DataCacheProviders; refactor DiskDataCacheProvider * nit - test adjustments * ZipDataCacheProvider test setup refactor * Adjust multithreaded read/write test; fixes for ZipDataCacheProvider * Move DiskDataCacheProvider to its own file and add write test * Remove _appendToZips; always overwrite entry or create zip * Add mapping regression for daily options * nit - add license to regression * Fix Tick write case where more than one data point for a DateTime * Fix data issue * Address review * Tweaks for tests * Stop Store() early if no entry name is given |
||
|
|
9f29e3bf4e |
Some performance improvements for IndexOptions (#6025)
Regression Tests / build (push) Has been cancelled
Build & Test Lean / build (push) Has been cancelled
- Some performance improvements for IndexOptions specially affects debugging C# algorithms. |
||
|
|
3fc042af33 |
Move bar aggregators to utils, add time overloads & add check of orderType for Kraken (#5969)
Build & Test Lean / build (push) Has been cancelled
Regression Tests / build (push) Has been cancelled
* Move Aggregate Quote and Trade Bars to utils * Add decimal and long overload to UnixTimeStampToDateTime * Add Kraken OrderType check in CanSubmitOrder * PR !5969 review fixes |
||
|
|
d2d99b1f10 |
Algorithm Sampling and Statistics Fixes (#5936)
Regression Tests / build (push) Has been cancelled
Build & Test Lean / build (push) Has been cancelled
* Implement scheduled event sampling solution * Use UTC time, only update daily portfolio value once a day * For daily resolutions sample chart always * Cleanup * Drop resample daily all together * Force final sample * Regression updates * FIx LiveResultHandler to update portfolio and benchmark values outside of sampling event * Name the daily sampling event * Address review pt 1 * Drop force and use reference wrapper * Adjust tests * Fix warning for Benchmark Timezone Misalignment and also add test * Fix for daily resolution orders and test adjustments * Also warn on universe settings with daily resolution * Update missed regression * Fix reference wrapper use * Update regression after rebase * Add values back in for Daylight Algo * Have statistics builder skip day 1 performance * Regression adjustments * Test adjustments * Update regression unit test * Adjust some regressions starts to show performance values * Add hourly algorithm for beta comparison * Address missing Python regression changes * Remove null comment |
||
|
|
4e6e0c85c6 |
Lean exchange improvements (#5932)
Regression Tests / build (push) Has been cancelled
Build & Test Lean / build (push) Has been cancelled
* Lean exchanges improvements - Adding new Exchange class to avoid exchange code clash. Adding and updating unit test * Add Market for MapFile API * Self review |
||
|
|
b77f0122b2 |
Improve python exception parsing (#5831)
Regression Tests / build (push) Has been cancelled
Build & Test Lean / build (push) Has been cancelled
* Improve python exception parsing - Improve python exception parsing adding support for line shift. Adding unit tests * PythonException revert change * Centralized and normalize algorithm runtime handling * Adding support for C# line and file exception report |
||
|
|
e5a50109b4 |
DownloaderDataProvider improvements (#5730)
Regression Tests / build (push) Has been cancelled
Build & Test Lean / build (push) Has been cancelled
- Ignore margin files requests. Only provided by ApiDataProvider - Reduce noise by LeanData.TryParse() call on failure |
||
|
|
66552b49bd |
Add new DownloaderDataProvider (#5709)
Regression Tests / build (push) Has been cancelled
Build & Test Lean / build (push) Has been cancelled
* Add new DownloaderDataProvider - Moving LeanDataWrite and IDataDownloader to common project - Add new BaseDataDownloaderDataProvider with concurrency helper method - Add new DownloaderDataProvider which will use a IDataDownloader or IBrokerage implementation as data source * Add support for downloading symbol chains data |
||
|
|
a882aadeef |
Research Fixes and Doc Updates (#5649)
Build & Test Lean / build (push) Has been cancelled
* Updates to default notebooks * Update readme * Notebook adjustments * Drop launch script support * Use our cwd if no QC dlls are in AppDomain directory * Modify Intialize.csx to use parent directory only if QC files are detected there * Clean up some details after testing * Adjustments * nit, NullOrWhiteSpace |
||
|
|
0f0eeaff82 |
DataProvider Updates & Refactoring (#5641)
* Use DataProvider for fetching Shortable and FutureMargins files * Use data provider for AllShortableSymbols * Refactor of NeedToDownload logic * Adjustments * nit - cleanup * Expand test cases * Create the directory if it doesn't exist |
||
|
|
42c58d6e53 |
Ensure data is downloaded only once (#5635)
Build & Test Lean / build (push) Has been cancelled
- Ensure data is downloaded only once with the ApiDataProvider. Adding unit test - Log invalid securityType ApiDataProvider requests once - Assert Factor file and map file providers are compatible with the ApiDataProvider |
||
|
|
94fb9293dc |
Adds filtering of negative ticks in CoinAPI converter consolidation (#5597)
Build & Test Lean / build (push) Has been cancelled
* Adds filtering of negative ticks in CoinAPI converter
* Tick data will remain the same, only aggregated data
will have changes reflected in its output as a result
* Adds suspicious tick filtering to ticks
* Address review: Add Crypto Trade Tick suspicious test case
|
||
|
|
bb8bd27fe5 |
Support 2-leg currency conversions (#5552)
Build & Test Lean / build (push) Has been cancelled
* Apply changes from #2146 on current master Credit for most of these changes goes to https://github.com/viliwonka. Rebasing three years of changes didn't go so well, so I manually applied the changes in #2146 on the current master branch. This commit attempts to represent the changes in #2146 as closely as possible, no cleanup has been performed yet. Despite this, some changes were inevitable because part of #2146 has been implemented another way in the past three years. * Clean up * Process review comments * Add tests * symbol -> potentialConversionRateSymbol * Ensure regression tests run/get data * Fix broken test * Process review comments * Process review comments * Simplify currency conversion logic * Performance improvement, doc updates and test rename * Rebase fixes * Remove obsolete properties Co-authored-by: Martin-Molinero <martin@quantconnect.com> |
||
|
|
82c9b6ccb7 |
Updates and improvements to ToolBox projects (#5537)
Build & Test Lean / build (push) Has been cancelled
* Adds processed data directory to read price data from
* Make coarse universe generator look at data directory before failing to find daily data
* Set coarse generator output of missing daily file to debug log
* Add CoarseUniverseGenerator logs
* Fixes 100 nanosecond increment lookahead bias when parsing large numbers
* Whenever we parse a number that is has precision greater than
DateTime ticks (sub-100 nanoseconds), if we have nanoseconds
between [0, 1000), excluding numbers divisible by 100,
we will have leftover nanoseconds between [0, 100) nanoseconds, but
they won't be factored in to the DateTime calculation, since casting
to `long` only takes the integer component of the number, so we lose
the extra nanoseconds that came with the decimal, and time is set to
the "floored" value without those nanoseconds.
Since .NET `DateTime` type has a limitation of only being able
to represent time in increments of 100 nanoseconds, by not
considering the sub-100 nanoseconds, we introduce a look-ahead
bias of at most 100 nanoseconds/1 tick
* Misc adjustment to make method use `decimal` instead of `double`
for increased precision when parsing large numbers
* Changes CoinAPI data converter to support processing raw files in original directory structure and file name
* Removes Market requirement from CoinAPI data converter
* Remove timeout on decompression of raw AlgoSeek futures data
* Updates SEC downloader to use HttpClient where requests were failing
* For some unknown reason, valid requests to a valid URL were
failing when using WebClient. Changing our requester to
HttpClient fixes the issue, and enables us to leverage
async capabilities where applicable.
* Added fault tolerance to index file downloads, including a
rate limit in case we've been rate limited
* Further refactoring; catches 429 errors, adds missing rategate calls
* Replace all usage of WebClient, force retry for all failures
* Adds optional config value for Benzinga News API key in downloader
* Modifies Estimize Downloader api config name and fixes directory not found bug
* Refactor Estimize to speed up processing time
* Adds ticker limits if desired
* Misc. bug fixes, performance improvements, code cleanup
* Remove debug log statements leftover from previous commit
* Add support for non-tick Index resolutions in LeanDataWriter
* Empty commit
* Empty commit
* Empty commit
* Empty commit
* Empty commit
* Empty commit
* Lower requests/second for SEC downloader, add missing rategate call
Co-authored-by: Martin-Molinero <martin@quantconnect.com>
|
||
|
|
f3c386663b |
Feature .net 5 (#5505)
* Update projects to use .NET 5.0, the successor to .NET Core
* Fix ambiguous errors. Add IBAutomator net5
* Remove FXCM
* Upgrade IBAutomater to v1.0.51
ignored, and an empty message aborts the commit.
* Fix rebase
- Fix ambiguous Index
- Remove StrategyCapacity.cs
- Update System.Threading.Tasks.Extensionsy
* Remove unrequired references
* Fixes
- Travis will use dotnet, not nunit nor mono
- Remove mono from foundation image
- Fix python setup in research
- Fix unit tests
* Don't call ReadKey when input is redirected
* Fix ConsoleLeanOptimizer
* Research fixes
* Update comment
* Add vsdbg to Dockerfile
* Fixes
- Revert dockerfile FROM custom changes
- Adjust and fix regression algorithms
- Option assignment will be deterministic in the order
- 'Rolling Averaged Population' is calculated using doubles, updating
expected values.
- Update readme, removing references to mono
- Add missing Py.Gil lock
* Replace ICSharp with .NET Interactive
* Fixes after rebase
* CSharp research fixes
- Adding new Initialize.csx that pre loads all assemblies
- Adjusting template research file
- Moving steps in dockerfilejupyter
- Fix unit tests and regression tests after rebase
Co-authored-by: Gerardo Salazar <gsalaz9800@gmail.com>
Co-authored-by: Stefano Raggi <stefano.raggi67@gmail.com>
Co-authored-by: Jasper van Merle <jaspervmerle@gmail.com>
|
||
|
|
83f9499b4a |
Option Margin Strategies (#5511)
* Refactor HasSufficientBuyingPowerForOrder implementations Adds Sufficient and Insufficient helper methods to HashSufficientbuyingPowerForOrderParameters enabling syntax like: return paraeeters.Sufficient() returnparameters.Insufficient(reason) The next change will add the initial margin required which will simply require updating both of these helper methods to accept the value. * IBuyingPowerModel: Add margin functions Maintenance/Initial/ForOrder These were originally hidden in an effort to only expose what's necessary for the engine to perform its work. Additionally, we encapsulated all of the method arguments into parameters classes to prevent having to break anyone in the future. Not including these foundational methods turns out to be an oversight. These methods are not required by the engine, but rather by other models. Another possible solution here is to add an additional abstraction and include these methods on this new abstraction. BuyingPowerModel would then explicitly implement these methods and models that depend on them would require two code paths, one for when the buying power model implements this interface and another for when it doesn't. Tests were additionally updated to remove test model implementations created for the sole purpose of exposing these private methods. * Add ConstantBuyingPowerModel Provides an implementation of IBuyingPowerModel that returns the same constant value * Update BuyingPowerModelPythonWrapper to use reflection for method names Having a bunch of hard-coded strings is a sure fire way for someone to overlook when changing methods. This change ensures that noone needs to remember that this code exists :) Cleans up the syntax around verifying a python object implements a particular C# interface via the ValidateImplementationOf<T> method by having it return a value since the only use cases are in constructors when setting the models. I was initially going to update ALL python wrappers to validate the passed in models, but such a change could break many things that are 'working' right now. Such an effort should be saved for its own dedicated PR. * Add Parameters/Result types for new buying power model methods * Support computing maintenance margin for arbitrary quantities The existing GetMaintenanceMargin function assumes that we're only interested in the maintenance margin for the entirety of the provided security's holdings. This makes it impossible to perform what-if analysis or to even ask how much maintenance margin is devoted to a particular subset of the security's holdings. This change adds the quantity to the MaintenanceMarginParameters class. Futures and Options models also depend on holdings cost and holdings value, so they have also been added to the parameters type. Finally, static factory methods were added to improve discernment of intent: ForCurrentHoldings provides the existing behavior and then ForQuantityAtCurrentPrice to support what-if scenarios where we're looking for the change in maintenance margin if we were to execute an order for the securiy at the current time step. Obviously a constructor is provided to set all of the values explicitly, using any price metric the caller desires. * Address review - Fix BPM xml documentation - Fix python unit tests and PythonWrapper validate method * Add SecurityHolding.QuantityChanged event Adding event handlers will allow us to orchestrate complex events from distant parts of the codebase through wiring them up. If we continue down this path, it will move us away from the current, very 'mechanical' data flows expressed in LEAN and towards a more modern, event processing based system. This is but a baby step in that direction and the initial use case is using this QuantityChanged event to trigger resolution of the algoritm's positions groups. This is part of an effort to improve the fidelity of options margin modeling where we'll model an OptionStrategy as an IPositionGroup. This will allow us to compute the margin requirements of an OptionStrategy as a unit instead of computing margin of each security individually in isolation. See #4065 * PortfolioManager: Group fields and remove unused field This codebase generally places fields as the first members, but this class had some fields at the top, then some properties, and then some more fields. This change brings all the fields together at the top of the file and also removes pointless comments placed directly above some of the fields. Additionally, an unused field was removed. * Remove unused _currencyConverter from Security Looks like at some point the only code using this member variable was removed and the necessary clean up was overlooked. * Add Parse.Enum functions * Support disabling regression algorithms by language via config.json Adds 'regression-test-languages' to config.json and filters regerssion algorithms to run based on this value. When cycling on a particular feature, it's nice to be able to run the entire regression set while ignoring the python algorithms. Once the C# algorithms are all passing, one can then go back and run C# and Python in a final run, since 99% of feature work doesn't impact python specifically. * Implement IComparable in SecurityIdentitfier This can be used to deterministically sort securities and symbols * Add .editorconfig to enforce common formatting for json/sh files * Fix typo in IBuyingPowerModel.GetBuyingPower xml docs * Add ListEquals/GetListHashCode and OrderDirection.Closes(PositionSide) ListEquals and GetListHashCode are designed to be used together as they complement each other according to C#'s requirements for Equals and GetHashCode functions. PositionSide.ToOrderDirection() extension simply converts a PositionSide to its logical equivalent OrderDirection. Long->Buy, Short->Sell, None->Hold OrderDirection.Closes(PositionSide) determines if a particular OrderDirection would have the effect of reducing a position's absolute size. This function greatly improves the readability of buying power functions that must provide adjustments when an order/contemplated trade reduces/closes an existing position. OrderDirection.Buy.Closes(PositionSide.Short) OrderDirection.Sell.Closes(PositionSide.Long) All other combinations return false Adds ToArray/ToImmutableArray convenience functions that combine a call to Select followed by To(Immutable)Array all in one function call. * Add decimal.DiscretelyRoundBy extension method Supports rounding a decimal value by an arbitrarily chosen maximum precision, or 'quanta' * Update FutureMarginBuyingPowerModelTests to respect the security's lot size * Add core position group classes and abstractions * Add initial/maintenance margin support, buying power model consistency tests * Add SufficientBuyingPower and GetReservedBuyingPower to position group model Includes update to BrokerageTransactionHandler to use position group BPM for sufficient buying power checks. * Resolve position groups on each fill We need to update the state of our position groups on each fill so that we can properly handle multiple orders within the same time step. We also limit the number of positions sent into the resolver by removing securities without any holdings. * fixup! Add SufficientBuyingPower and GetReservedBuyingPower to position group model * Add GetMaximumLotsFor{Target|Delta}BuyingPower Instead of computing order quantity, these functions compute the maximum number of position group lots, which is the position group quantity, and is guaranteed to be a whole number, for the provided target/delta buying power parameters. The SecurityPositionGroupBuyingPowerModel delegates to the security's IBuyingPowerModel by applying a scaling factor equal to the security's lot size. This change also updates references to IBuyingPowerModel.GetMaximum... to use the new position group model methods. * Convert remaining IBuyingPowerModel call sites to position groups * Rename PositionManasger.CreateDefaultGroup -> GetOrCreateDefaultGroup Better describes its behavior * Add Position Groups readme.md * Add Option Strategy BuyingPowerModel - Adding CompositePrositionGroupResolver and OptionStrategyPositionGroupResolver - Adding OptionStrategyPositionGroupBuyingPowerModel handling option strategies based on IBs margin table. Adding regression algorithms - Few changes so that option strategies executed by multiple orders are detected - Adjust OptionStrategyDefinitionMatch to include equity legs in the matching result - Minor tweaks fixing previous rebase - Minor fixes for existing option strategies definitions, adding new missing strategies. - Fixing minor bugs in option strategy matcher. Adding more unit tests * Address self reviews - Fixing bug in 'PositionGroupCollection' - Few minor simplificaitons - Adding BasicTemplateOptionEquityStrategyAlgorithm * Address reviews - Improve regression algorithms margin remaining and used assert logic to be exact. Taking into account spread and fees Co-authored-by: Michael Handschuh <mhandschuh@gmail.com> |
||
|
|
1c3d849ad5 |
Fix Warnings V2 (#5436)
* Reconcile duplicated code * Add License header * CS0219 Fixes: Value assigned, but never used * CA1507: Use nameof in place of string literals * CS0108 : Hides Inherited Member; Use new keyword to overwrite formally * CS0114: Hides inherited member; use override keyword * CS0168: Variable is declared but never used * Tests CS1062; using obsolete implicit Symbol -> String; fix via .ToString() * CS0472: Non Nullable Obj getting Null Checked * CS0067 Member not used; ignore all cases for future use * CS00162 : Unreachable code; either removed or ignored for debugging and test cases * CS0169 Remove non-used fields; ignore those that may be used in future * CS0414; Field is assigned but never used. * CS0618; Obsolete properties and members; Only fixes simple ones, rest will have to broken up * CS0649; Field never assigned too * CS0659 & CS0661 ; Overwrite operators and equals but not hashcode; I don't really override it but just call base * Small comment fix * Cleanup pragma statement |
||
|
|
e2a0873b7c |
Fix Lean Warnings V1 (#5408)
Cleanup all non-breaking warnings |
||
|
|
4c085ff853 |
Adds Indexes and Index Options asset types (Backtesting/Live, IB only) (#5379)
* Add support for Index SecurityType 🚀 (#5364) * Add Index SecurityType 🚀 * Extend SecurityIdentifier & Lean Data classes with Index support * Add Index SecurityType 🚀 * Extend SecurityIdentifier & Lean Data classes with Index support * Fixes * Added index cross basic template demonstration * WIP: Prototype index security type for LEAN as non tradable asset * Re-adds Index entries to MHDB after rebase * First steps to getting Index Options running * Looks at any instance where we pattern match for an option type and replaces it with a generic call to `.IsOption()` for easier extensibility in the future for additional option security types * Adds IndexOption security and misc. classes * Misc. changes, mainly related to any sort of special casing of equity options and made index options take the same path * Enables index options data for backtesting * Adds new index options market hours to MHDB * Misc. bug fixes for index options * WIP: add live support for index options and indexes * Use OptionMarginModel for Index Options because they both use the same calculation for margin requirements * Fixes contract not found errors on SPX index options and SPX index in IB * Turns out index options' last trading day is the day before expiry, which IB was expecting the last trading day. * Add index option test cases (temp) * LiveOptionChainProvider fix, use Symbol vs. ticker * Description updates to regression algorithms * Fixes bug in live trading for indexes and index options * Adds overridable minimum price variation symbol property * Adds variable sized minimum price variation for index options * Adjusts symbol properties for index options * Misc. bug fixes * Fixes option assignment simulation for European options * Updates index options regression algorithms (WIP) * Fixes bug where index option exercise would trade index underlying * Fixes bugs where SecurityType.Index was getting flagged as tradable * Regression algorithms updates and addresses review * Misc. style fixes and refactoring + a few bug fixes * Updates regression algorithms to run without runtime errors * Adds data for regression algos * Sets DefaultOptionStyle on Canonical and support index options * Update regression algos statistics * Removes bad line in regression algorithm causing build to fail * Minor tweaks * Address review add comment about quoteBar parse scale Co-authored-by: Balamurali Pandranki <balamurali@live.com> Co-authored-by: Jared Broad <jaredbroad@gmail.com> Co-authored-by: Martin-Molinero <martin@quantconnect.com> |
||
|
|
561aa3cf25 |
Adds backwards compatibility for MHDB and SPDB for new SecurityTypes (#5373)
* Adds backwards compatibility for MHDB and SPDB for new SecurityTypes * Skip invalid SecurityTypes in MHDB and SPDB * One time log invalid SecurityTypes in MHDB/SPDB * Moves logging of SecurityType into new extension method * Adds TryParseSecurityType to Extensions |
||
|
|
9cde4344fc | Re-apply changes from #4870 to fix ThreadAbortException in ToolBox (#5339) | ||
|
|
ba4c45d729 | Remove version checking (#5315) | ||
|
|
17dbadea5b |
Remove cross-platform incompatible Thread.Abort() + ThreadAbortException (#5274)
* Remove cross-platform incompatible Thread.Abort() + ThreadAbortException * Retrigger build * Refactor thread abort logic into call to StopSafely() |
||
|
|
472896c2d0 |
Update JSON Library (#5218)
* Update NewtonSoft.Json from 10.0.3 to 12.0.3 * Remove JsonSerializer.Populate(), values are already populated |
||
|
|
9c89e8d403 |
Fix backtest result packet deserializing (#5084)
* added test covering minValue / maxValue issue with JsonRoundingConverter * change namespaces * JsonRoundingConverter fix decimal.Min and MaxValues (cannot deserialize) * remove dependency on 3rd party library * c# 6 compatible code (remove pattern matching) * Fixes BacktestResultPacket deserializing - Serializing decimals as strings to avoid precision loss, since json convert will use floating point precision. Updating unit tests. - Fix logging unit test failing to delete file being used. Co-authored-by: Mark Virchenko <mark.virchenko@calienteam.com> |
||
|
|
eb1181f5f7 |
Adds Futures Options Asset Class w/ IB Support (#4928)
* Adds preliminary universe selection for Future Options
* Fixes scaling issues with Future Options
* Fixes scaling multiplying by 10000x instead of using _scaleFactor
* Fixes scaling for Tick
* Revert changes to Tick since it divides the scaling factor
* Changes stale method name to new method name after rebase
* Fixes selection bugs, adds new methods, and adds unit tests
* Fixes bug where Equity Symbol was created for an underlying
non-equity Symbol, resulting in equity data trying to be loaded
* Adds unit tests covering changes to Tick, QuoteBar, TradeBar and
LeanData
* Adds regression test for AddUniverseOption filter contract selection
for Future Options
* Addresses review - modifies the AddFutureOption signature
* Adds new AddUniverseOptions method overload
* Removes and adds a new unit test
* Misc. modifications to account for new changes
* Fixes bug where futures were loaded using default SID Date
* Refactors and removes unnecessary work
* Fixes regression algorithm, which previously made no trades
* Adds future option data
* Adds the corresponding underlying data, in this case, futures data
to enable usage of future options data
* Replaces data with new data (ES18Z20)
* Improves Future chain filtering and updates regression stats
* Add AddFutureOptionContract API
* Expands regression and unit tests to test in finer detail
* Adds Python regression algorithms for AddFutureOption[Contract] methods
* Adds new unit test for BacktestingOptionChainProvider
* Fixes bug with BacktesingOptionChainProvider where we
attempted to load the Trades option chain first, resulting
in breakage of backwards compatibility and limitation of the
option chain.
* Adds new regression algorithms (Py) to Algorithm.Python project
* Adds FutureOptionMarginBuyingPowerModel
* Modifies code paths used to select margin model
* Adds related unit tests for margin model
* Fixes issue with unit test and MHDB/SPDB lookup for Future Options
* Preliminary regression algorithm testing ITM call/put option buying
* Fixes bug where fee model used did not find non-US market
options fee model. We now use the futures fee model for future
options because IB charges the same commissions per contract
between futures and futures options
* Adds proper regression algorithm for ITM future options expiration
* Pushing broken algorithm for review
* Currently, algorithm does not fill forward, causing
a single future option to not get exercised when it is delisted.
* Adds FutureOptionPutITMExpiryRegressionAlgorithm
* Improves existing regression algorithm for call side
* Fixes bug in existing regression algorithm
* Adds AAPL daily data to advance enumerator for ^^^ fix
* Adds additional future option regression algorithms
* Adds Buy OTM expiration regression algorithms
* Adds Sell ITM/OTM expiration regression algorithms
* Adds missing Python regression algorithms
* Adds remaining Python regression algorithms and fixes issues
* Fixes naming issues and statistics
* Adds short option OTM regression algorithms (Py)
* Add license header and class comments to python algorithms
* Cleans up comments and docstrings
* Create Buy/Sell call intraday regression algo
* Redirects future options symbol properties to futures symbol properties
* Asserts exercise/assignment price and updates stats in regression algos
* Adds new unit test covering changes to SecurityService
* Adds comments and fixes failing test
* Partially fixes future option mis-calculated profit/loss
* Adjusts portfolio model to calculate FOP as a no upfront pay asset class
* Updates regression algorithm statistics
* Begin IB FOP support
* Initial support for FOP IB data streaming, live í¾
* Adds additional functionality to LiveOptionChainProvider
- Allows querying CME API to retrieve option chains for CME products
- Ultimately, it's also the groundwork for the CME
LiveFutureChainProvider
* Edits IDataQueueUniverseProvider interface to provide greater
control to implementors of it
* Misc. bug fixes required to get FOP data streaming through IB
* Adds comments, adds missing rategate call, and cleans up code
* Force exchange for FOP and Futures when no exchange is provided
* Fixes bug with Portfolio modeling across all asset classes
* Adds LiveOptionChainProvider tests for Future Options
* IB brokerage option symbol bug fixes and improvements
* Fixes contract multiplier lookup bug
* Fixes issue where we attempted to subscribe to IB data feed with canonical security
* Adds ES MHDB entry
* Reverts portfolio modeling changes for Futures Options
* Since IB eats into our account's cash balance when
a new FOP contract is purchased, we must model by applying funds
to our cash whenever a new purchase/sell occurs.
If we choose to model FOPs exactly as we do with futures, we
will end up with an invalid TotalPortfolioValue on algorithm
restart. By all means and purposes, FOPs are modeled exactly
the same as equity options with respect to the portfolio.
* Adds comments clarifying portfolio modeling and clarifies
existing portfolio modeling comments with additional context.
* Fixes IB symbol lookup for future options
* Fixes LiveOptionChainProvider looping 5 times per option chain
request, even on success
* Sets OptionChainedUniverseSelectionModel to produce a canonical
future/future option/option Symbol to avoid creating two Symbols
* Adds GLOBEX future option symbol mapping from future -> fop
* Fixes LiveOptionChainProvider loading wrong contract option chains
* Fixes loading of futures options ZIP files when backtesting
* Adds a string -> decimal JSON converter
* Additional fixes/refactoring to the LiveOptionChainProvider
* Adds tests for changes to Symbol and LeanData
* Reverts changes to IB-symbol-map
* Fixes Value for mapped future options tickers
* Fixes Symbol test
* Changes path of future options to future's expiry date
* Extra changes made to remove scaling from writing CSV
* Added method to map from FOP Globex -> FUT Globex
* Fixes MOO and MOC orders for future options
* Note: this order type might not be supported by IB or CME.
* Bug fixes and updates unit tests
* Update regression tests and data format
* Rebase changes
* 1. Multiple bug fixes for LiveOptionChainProvider, reverts IQFeed changes
2. Address review (partial): Code reuse and cleanup
1.
* Modifies check in
`AddFutureOptionShort(Call|Put)ITMExpiryRegressionAlgorithm`
to ensure no buys have negative quantity
* Code reuse changes in IB brokerage
* Bug fix in IB brokerage where we assigned the FOP expiry
as the futures expiry (requires verification)
* Doc changes and adds missing summaries/license banners
* Disposes of HTTP client resources in LiveOptionChainProvider
* Renames classes and adds FutureOption folder in Common/Securities
2.
* We revert back to the quotes API for the option chain,
since the settlement API sometimes had missing strikes.
* Fixes future option expiry being set as future's expiry
in LiveOptionChainProvider
* Fixes bug where wrong option chain was selected because of bad
expiry lookup in the futures expiries returned from CME
* Fixes multiple looping bug in LiveOptionChainProvider
* Adds strike price scaling for LiveOptionChainProvider
* Reverts IQFeed changes and simplifies interface upgrade changes
Some additional challenges we'll have to solve as part of FOPs:
- The `OptionSymbol.IsStandard` method makes the assumption that
weeklies contracts follow the pattern equities follows, which
does not apply to Futures Options
- The Subscription created in:
`OptionChainUniverseSubscriptionEnumeratorFactory`
...adds a Trade config. For illiquid contracts, this
will delay universe selection for the option symbol
until we get a trade. However, if we add a quote config,
the data would instead be loaded based on the first quote
we received from the brokerage.
But since we're currently using a trade config, illiquid
contracts won't start streaming data until it receives a trade.
NOTE: this commit is a WIP to addressing the reviews received in the PR,
but has been committed early for efficiency in the review process
* Fixes regression algorithms and misc. bugs
* Fixes map file lookup for non-equity options
* Adds extra assertion at end of algorithm to ensure no holdings are
left when the algorithm ends.
* Adds FutureOptionSymbol, allowing all contracts through as standard
* Changes SPDB to allow defaulting to underlying future symbol
properties if no entry is found for the given FOP
* Fixes calls to SPDB in SecurityService, IBBrokerage
* Reverts AAPL daily ZIP file to fix majority of regression algorithms
* Adds FOPs symbol properties
* Fixes existing symbol properties for a few futures
* Adds tests for changes to Symbol Properties Database
* Removes string SPDB lookup method
* Updates tests and misc callees of previous method
* Updates all regression tests to use data of already expired contracts
* Adds Futures Options Expiry Functions tests
* Adds required futures data for 2020-01-05
* Address review (partial): Expands test coverage and fixes tests
* Set option chain tests parallelism to fixture only
* Fixes broken test for contract month delta for FuturesOptionsExpiryFunctions
* Changes delisting date logic for Futures Options
* Address review: removes duplicate code, misc code fixes
* Bug fix in MarketHoursDatabase.GetDatabaseSymbolKey() where
we would use the underlying's Symbol for lookup in the MHDB
* Adds missing license banner
* Removes Futures Options entries from MHDB
* Adds new tests
* Adds SecurityType.FutureOption
* Converts any underlying comparisons and uses SecurityType directly
instead for FOP specific behavior
* Extra code modifications to acommodate new SecurityType
* Addresses review: fixes order fee bug on exercise
* Additional bug fixes and adding of SecurityType.FutureOption
* Updates regression algorithms OrderListHash
* Fixes various bugs in IB live implementation
* Fixes bug setting the right contract expiration date for FOP
generated by LiveOptionChainProvider
* Adds new function to FuturesOptionsExpiryFunctions
* Clarifies parameter names better in some functions/methods
* Fixes bugs in IB brokerage for FOPs
* Address review - code cleanup and refactor
* Remove MappingEventProvider, SplitEventProvider, and
DividendEventProvider for Futures Options in
CorporateEventEnumeratorFactory
* Address review: Use MHDB key resolver in SPDB
* Makes regression tests pass and adds comment for expiry issue
* Fixes MHDB lookup on string symbol method
* Adds Futures Options greeks regression algorithm (C# only)
* Adds explanitory comment on MHDB FOP lookup
* Remove python from FutureOptionCallITMGreeksExpiryRegressionAlgorithm
|
||
|
|
a4f66628fd |
Lean Optimization interface in QCAlgorithm (#4923)
* initial commit * run parametrized algorithm with command line parameters * skeleton: top level structure * OptimizationNodePacket scheme * pass parameters as HashSet * run Lean and read results * call method on optimization completion * refactor public interfaces - close ParameterSet collection; allow only get operations - explicit method to start LeanOptimizer * synchronize RunLean method; the result could come in before the backtest id is set in the collections * another portion of refactoring and interface changes * comments * comments & tests for Extremum, Minimization and Maximization classes * unify optimization paramater values (min, max, step) & mode GridSearch tests - swap min&max if necessary - iterate left => right (negate step value if necessary) & provide default step value if step == 0 - no StackOverflow Exception - parameterSet Id should be global for current generator and retain between steps - test signle point boundary (min == max) * BruteForceStrategy tests * more comments * Update Optimizer assembly information - Update Optimizer projects assembly information to match behavior of the other projects * Tweaks - Adding comments - Replace OnComplete for Ended event - Replace Abort for Dispose - ConsoleLeanOptimizer will keep track of running processes - Each backtest will store results in a separated directory, so they don't fight for the log.txt file. - Adding cmdline option for lean to close automatically - Adding concurrent execution backtest limit - Console optimizer will start Lean minimized - Escape spaces in Json path * remove parameter set generator abstraction layer we don't need this flexibility now. * refactor public methods; Step shouldn't be public * constraints: wip * define contract * comparison operators and tests * specify JsonProperty values * Move SafeMultiply100 to extensions * Throw exception on failed Optimizer.Start * constraints: wip * change finish & dispose process * minor fixes - handle force lean abort - notify consumer if target has been reached * target & constraints; adapt unit tests * Minor Tweaks and fixes - Some logging improvements - Remove Public since not required * Ignore empty ParameterValue * simplify condition * avoid reinitialization * reduce type; force immutable * unit tests for constraints and target value * parse & normalize percent values, i.e. 20% => 0.2 * fixup * Target & Constraint & OptimizationNodePacket unit tests * Add more json unit tests - Adding more json conversion unit tests. Fix bug for Extremum which wasn't using the converter. * LeanOptimizer tests * Estimation results * User thread safe counters * LeanOptimizer unit tests; push OptimizationResult on Ended event * more unit tests * Minor tweaks -Estimate ToString in a single line. -Typos and missing header file * Add base SendUpdate method - Add base SendUpdate method for LeanOptimizer * fix LeanOptimizer test; rely on internal Update rather than timer * Add OptimizationStatus - Add missing commments and OptimizationStatus * EulerSearch implementation: wip * OptimizationParameter custom converter * change the type * make step optional * change folder structure * enumerate optimization parameter using IEnumerable & IEnumerator * unit tests: parameters & objectives * unit tests: strategies * remove redundant TODO * change Euler search boundaries * more Euler tests * prevent race condition * Add account/read endpoint - Adding account/read endpoint. Adding unit test * Add status check before running lean * Minor self review - Adding missing comments, minor changes * remove array parameters * minor changes - tidy up config file, rename variable - accept min less or equal than max * move OptimizationParameter methods to strategies * Minor improvements for BaseResultHandler derivates * minor changes - strict requirements for Step and MinStep values - strategy specific settigs * Add TotalRuntime to estimate Co-authored-by: Martin Molinero <martin.molinero1@gmail.com> |
||
|
|
b9974e6f54 |
Add OptionStrategyMatcher (#4924)
* Reformat/cleanup OptionStrategies This file was breaking pretty much every style convention in LEAN. There are other things that should be addressed in here that weren't, such as passing non-argument names as argument names for ArgumentException, as well as preferring constructors over property initializer syntax, but such changes aren't being made to keep this commit strictly reformatting instead of refactoring. Added braces and reformatted long lines to make code more legible. * Add abstract base class for OptionStrategy Option/UnderlyingLegData This allows us to create either or and later use the Invoke method to push it into the appropriate list on OptionStrategy. * Replace O(n) option contract search with 2 O(1) TryGetValue calls A better improvement would be resolving the correct symbol in the strategy, but this immediate change is instead just focused on removing the O(n) search inside a loop. * Add BinaryComparison and supporting methods in ExpressionBuilder We're going to use these binary comparisons to make it possible to create ad-hoc queries against a collection of symbols. Using these expressions, along with type supporting composition of these expression, we'll be able to define predicates that can declaratively define how to match an option strategy with an algorithms current holdings. * Make GetValueOrDefault defaultValue optional Was receiving ambiguous invocations leading to neading to invoke this method explicitly (LinqExtensions.GetValueOrDefault) instead of being able to use it as an extension method. Making the default value optional seems to have resolved this ambiguity, leading to cleaner code in the OptionPositionCollection (forthcoming) * Add OptionPosition and OptionPositionCollection OptionPositionCollection aims to provide a single coherent interface for querying an algorithm's option contract positions and the underlying equity's position in a performant, immutable way. The immutability of the type is necessary for how the options matcher will operate. We need to recursively evaluate potential matches, each step down the stack removing positions from the collection consumed by each leg matched. This will enable parallelism of the solution as well as simplifying the mental model for understanding due to not needing to track mutations to the collection instance. * Add Option test class for easily creating option symbol objects * Add OptionStrategyLegPredicate and OptionStrategyLegDefinition The definition is a composition of predicates, and each predicate supports matching against a set of pre-existing legs and a current position being checked for the next leg (this leg). In addition to the matching functionality, it also supports filtering the OptionPositionCollection, which is where much of the work for resolving potential option strategies is done. By successively filtering the OptionPositionCollection through successive application of predicates, we wil end up with a small set of remaining positions that can be individually evaluated for best margin impacts. All of this effectively unrolls into a giant evaluation tree. Because of this inherent structure, common in combinatorial optimization, the OptionPositionCollection is an immutable type to support concurrent evaluations of different branches of the tree. For large position collections this will dramatically improve strategy resolution times. Finally, the interface between the predicate and the positions collection is purposefully thin and provides a target for future optimizations. * Add OptionStrategyDefinition and OptionStrategyDefinitions pre-defined definitions The OptionStrategyDefinition is a definitional object provided a template and functions used to match algorithm holdings (via OptionPositionCollection) to this definition. The definition defines a particular way in which option positions can be combined in order to achieve a more favorable margin requirement, thereby allowing the algorithm to hold more positions than otherwise possible. This ties into the existing OptionStrategy classes and the end result of the matching process will be OptionStrategy instances definiing all strategies matched according to the provided definitions. * Add OptionStrategyMatcher and Options class, w/ supporting types OptionStrategyMatcherOptions aims to provide some knobs and dials to control how the matcher behaves, and more importantly, which positions get prioritized when matching. Prioritization is controlled via two different enumerators, one controller which definitions are matched first and the other controller which positions are matched first. Still unimplemented, is computing multiple solutions and running the provided objective function to determine the best match. When this gets implemented, we'll also want to implement the timer. For anyone looking to implement these features, please talk with Michael Handschuh as there's a particular way of representing these types of combinatorial solutions (a 3D tree) that can be used as a variation of the linear simplex method for optimizing combinatorial problems. * OptionStrategyMatcher: Address PR review comments * Ensure created OptionStrategy legs all have the same multiplier Each leg definition match gets it's own multiplier which indicates the maximum number of times we matched that particular leg. When we finish matching all legs, we pick the smallest multiplier from all the legs in the definition and use that as the definition's multiplier. When we go to create the OptionStrategy object we MUST make sure we're using the multiplier from the definition and not from the individual legs. This change fixes this issue and also provides a guard clause to ensure that we're not trying to use a multiplier larger than what was matched. * Add XML docs for OptionStrategyDefinitions from OptionStrategies |
||
|
|
0f0a2bc9a8 |
Fixes weeklies parsing, causing certain futures to be inaccessible in QCAlgorithm (#4936)
* Fixes weeklies parsing, causing certain futures to be inaccessible in Algorithm
The FuturesExpiryFunction expects the contract month of the Future,
not the expiration. As a result, the contract gets filtered as a
weekly contract, rather than as a standard due to the discrepancy
between the expiry dates when the contract month differs from the
expiry date's month.
A very important fact to note is that futures can and do expire prior
to the contract month. BZ,(brent crude financial futures) expire two
months prior to the contract month, CL one month prior, etc.
There has been an addition that contains a "reverse" futures expiry function
lookup table. We use this to lookup the contract month to re-calculate
the Future expiry.
This PR also fixes dairy and adds extra expiry dates. Dairy can have
an expiry *after* the contract month, so a new path was added to the
SymbolRepresentation to ensure that these contracts are loaded
correctly.
* Address review: Adds tests and fixes bug in SymbolRepresentation
* Updates SID comment on `Date` property to reflect fact that we use
future expiry for its value
* Fixes bug in SymbolRepresentation where expiration day would always
be 01 when parsing a contract with an expiration after the contract
month
* Fixes bug in SybmolRepresentation where expiration year would be
four digits long when parsing a contract with an expiration after
the contract month
* Fixes some bad dairy expiry dates
* Adds tests for SymbolRepresentation and the futures filtering for
standard contracts
* Renames method used to extract delta between contract month and
expiry date
* Removes GH comment and restores Futures contract month expiry param
|
||
|
|
29e9d678f2 |
Bug 4815 iex web socket library (#4914)
* Fixes 4815 by loading the requested assembly from different folder. # Conflicts: # ToolBox/Program.cs * Upgrades System.Collections.Immutable to Version=1.2.5.0 * Creates a prototype for SSE streaming in IEXDataQueueHandler. * Revert the changes in Tick.cs * Implements a logic in IEXDataQueueHandler that updates the data-feed subscription after Subscribe/Unsubscribe * Implements IEXCouldSubscribeMoreThan100Symbols - which fails and other small fixes. * Implements DoForEach LinqExtensions * Implements IEXEventSourceCollection that wraps all logic that is SSE-subscriptions and symbol-limits-per-connection concerned. * Changes: 1) Fixes to address review. 2) Makes IexMarketPercent in QuoteSSE nullable as null values are assigned to in this field in data object received before the traing session start. 3) Deprecates helper Subscribe/Unsubscribe in IEXDataQueueHandler and IEXCouldSubscribe test. * Fixes: 1) _refreshEvent.Reset() order was not correct - should be called before UpdateSubscription 2) ProcessJsonObject- leaves only the functionality to emit ticks. 3) IEXEventSourceCollection - replaces int counter with CountdownEvent to improve the logic - in particular, need a mechanism that would not allow the repeated call to continue until the first one is completed * Refines the logic with parsing a data snapshot. * Fixes few more bugs: 1) Logic in ProcessJsonObject 2) Logic in UpdateSubscription - need to introduce additional ManualResetEvent to implement the intended logic - otherwise the logic is not suitable for general case * Introduce rate-gate limit in IEXEventSourceCollection: because when subscribing to a bunch of shares (more than 200 for example) the violation of rate gate policy may occur, which described in API docs asRequest Limits IEX Cloud only applies request limits per IP address to ensure system stability. We limit requests to 100 per second per IP measured in milliseconds, so no more than 1 request per 10 milliseconds. SSE endpoints are limited to 50 symbols per connection. You can make multiple connections if you need to consume more than 50 symbols.: * Few additional fixes done after real time testing * Adds xml-docs in stream response object + renaming a file. * Fixes: 1) Additional StreamResponseStocksUS parsing issues, that can happen outside of regular exchange hours. 2) Cancel clientUpdateThread by means of CancellationTokenSource 3) Replace BuildSymbolsQuery by string.Join * Fixes: 1) Changing Log Trace -> Debug 2) Adds ConfigureAwait(false) to async method call 3) Removes direct reference to System.Net.Http * Removes a task and manual reset event in IEXEventSourceCollection * Additions: 1) IEXEventSourceCollectionSubscribes test 2) GetSnpStocksArray() helper method 3) Installs packages in QC.tests : HtmlAgilityPack & LaunchDarkly.EventSource * IEX history provider fixes : 1) Tiny bug in ProcessJsonObject - use continue instead of return as execution is inside the for-each block) 2) Adds period variable for the historical data retrieved 3) Fixing from if (date.Date < start.Date || date.Date > end.Date) conditional check --> if (date < start || date > end) for more precise sorting. * Changes: 1) Removes HtmlAgilityPack and SNP scraper 2) Uses hard coded symbols instead * Bug fix: - at certain hours (example: before pre-market open or on holidays) IEX may send no data on subscription - when trying to connect during those hours Message handler may not be fired - need to place the counter signal to client.Opened to be informed of successful connect. * Implements: 1) IEXEventSourceCollectionSubscriptionThoroughTest and MockedIEXEventSourceCollection 2) Makes changes to IEXEventSourceCollection accordingly to allow the thorough testing. * Fixes formatting issue in StreamResponseStocksUS * Small fix for a new tests: - Change RemovedClientSymbols to keep not clients itself, but symbols array, because clients are being disposed right further * Enables extended logging in Toolbox. * Fixing IEX historical data fetcher bugs: 1) Bug in IEXDataDownloader.cs - HistoryRequest not precisely correct. 2) Enables day-by-day daily bar downloading in IEXDataQueueHandler. Motivation: Suppose we need data for some interval in the past - from-date=20170915-00:00:00 --to-date=20171103-00:00:00. With current behavior IEX would have to download all the historical data from =20170915-00:00:00 up to this day. 3) Extends SynchronizingHistoryProvider * Enables async fashion historical data download * More fixes to IEXCouldGetHistory test. * Reverts day-by-day daily bar downloading and other fixes. * Removes needless packages & references * Fix package reference * To address review * Sort out zero price ticks: after testing on real-time algo 30 min before the market open now - IEX may send updates for many securities with zero lastPrice, lastSize - fix to sort such entries out * Workaround for missing QuoteTicks timestamps: Since we don't have a stamp for quote tick updates (only for trades) we calculate the average delay between trade tick's time stamp and local time, and assuming that delay in average is the same for quote updates - just assign the local machine time adjusted for this average * Simplifies the things. * Changes: 1) Deprecates quote updates for IEX stocks. 2) Reduce the stream updates to reduce costs to -> # Stock Quotes every 1 second (per symbol? ) # Can be up to 54,000 messages per symbol per day https://iexcloud.io/docs/api/#how-messages-work * Fixes: 1) IEXDataQueueHandler: give an error message on extended market hours or tick resolution subscription request. As they are not really well supported by IEX. 2) Few small fixes in IEXEventSourceCollection, including additional condition for when the subscription remains irrevocable. |
||
|
|
cbb40dfa43 |
Ignore composer ThreadAbort Exception (#4870)
- Composer inner task will not log exception if it's of type Thread abort, which means we are shutting down. |
||
|
|
fb2f846159 |
Bug 4722: Prevent Repetitive Factor File Numerical Precision Warnings (#4742)
* Add DataProviderEventArgs base class for IDataProviderEvents event args This base class includes a Symbol property. This will empower event listeners to make decisions based on which security (symbol) raised the event. The immediate use case is preventing multiple numerical precision messages for the same security. This pattern can equally be applied to other error messages that are raised each time a security is added to a universe. See: #BUG-4722 * Update ConcurrentSet.Add to use ISet<T>.Add returning bool It's a very common pattern to use if (set.Add(item)) which is enabled via bool ISet<T>.Add(item) but not enabled via void ICollectiont<T>.Add(item). This change simples changes the default Add implementation to use the ISet<T> overload and relegates the ICollection<T>.Add implementation to be explicit. See: #BUG-4722 * Prevent multiple numerical precision messages for same symbol If a security is continually added/removed from a universe, then the user will see this message each time the security is added. This results in some spam. This change simply remembers for which symbols we've notified the user about the numerical precision issue. Fixes: #BUG-4722 |
||
|
|
b8033c496c |
Bug 4487 Get Fundamental for CSharp (#4703)
* Add unit tests * Refactor Py and create C# function * Update readme to include local * Refactor solution; fix python cases * Update tests * Don't accept null selector for python; Create SelectedData class * Fix Testing * Pre review * Fix tests for Travis * Test fix V2 * Test fix V3 * Refactor quantbook and fix tests * Sort list by date * Move ConvertToSymbols to Python Util * Address review * Order dataframe columns by Security ID * Address review V2 * header for PythonUtilTests |
||
|
|
400a0d42d9 |
Add internal subscription manager (#4678)
* Add internal subscription manager - Add InternalSubscriptionManager that will handle internal Subscription. Replaces the realtime updates - Fix thread race condition in the TimeTriggeredUniverseSubscription, we have one thread injecting data points, the main algorithm thread, and the base exchange is pulling from it - Fixes for FakeDataQueue - Adding unit tests * Address reviews and fixes - Internal subscription will use extended market hours - Only sample charts accordingly - Get api-url once |
||
|
|
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>
|
||
|
|
eb5d380f5a |
Merge pull request #4356 from QuantConnect/bug-4338-value-type-thread-safety
Adding new ReferenceWrapper for structs |
||
|
|
3e09d2f3c9 |
Adding new ReferenceWrapper
- Adding new ReferenceWrapper for structs, value types, to avoid thread race conditions while reading and writting. In C# reference type assignments are atomic, so it allows us avoid using locks. |
||
|
|
4712b3ea24 |
Fix MHDB json round trip
- Fix MarketHoursDataBase Json round trip, updating unit test |
||
|
|
5625acbd6f |
Merge pull request #4328 from QuantConnect/refactor-future-symbol-market
Refactor Future Market |
||
|
|
cd2ef13d38 |
Update FuturesExpiryFunctions
- Update FuturesExpiryFunctions to be keyed by symbol. Updating unit tests |
||
|
|
a8173589c7 |
Add StreamReader for Tick
- Add StreamReader Reader for Tick data type. - Adding stream reader GetString extension, adding tests. - BacktestingBrokerage will not create unnecessary order events |