77caa034e3231de2aaafafbbb09694bdbbfb5ebb
8 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
27de93f78f |
Market orders wait for fresh data instead of filling on stale prices (#9535)
Syntax Tests / build (push) Has been cancelled
API Tests / build (push) Has been cancelled
Benchmarks / build (push) Has been cancelled
Build & Test Lean / build (push) Has been cancelled
Regression Tests / build (push) Has been cancelled
Report Generator Tests / build (push) Has been cancelled
Research Regression Tests / build (push) Has been cancelled
Python Virtual Environments / build (push) Has been cancelled
* Market orders wait for fresh data instead of filling on stale prices A market order would previously fill immediately on the most recent available data even when that data was older than StalePriceTimeSpan (default one hour), only attaching a warning. This is unrealistic for a coarse resolution asset (hour/daily) where the latest bar is the stale previous close when the order is placed mid-bar or via an intraday scheduled event. The default fill models (FillModel, EquityFillModel, FutureFillModel) now wait for fresh data instead of filling on a stale price, but only for hour and daily resolutions; the order fills when the next bar closes. For minute/second/tick subscriptions the previous behavior is kept (fill on the stale price with a warning), since stale data there is a genuine gap rather than a bar still forming. Adds HourResolutionMarketOrderStalePriceRegressionAlgorithm, updates the FillOutsideHours daily expectation, and regenerates statistics for the hour/daily algorithms whose fills change. FutureOptionDaily buys and liquidates a day apart now (a same-day buy + liquidate cannot fill on daily data once stale fills are disabled). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Normalize and correct StalePriceTimeSpan XML docs The interface and class docs now match and reflect the actual behavior: the wait-for-fresh-data only applies to hour/daily resolutions, while minute/second/tick subscriptions still fill on stale data with a warning. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Fill resting market orders at the bar open instead of the close A hour/daily market order that was resting before the current bar opened (it predates the bar - placed after the previous close or while waiting for fresh data) now fills at the bar open, the price when trading resumed (like a MarketOnOpen), instead of the bar close. Orders placed during the bar still fill at the current/close price, so intraday mid-bar fills are unchanged. Equity fills are unchanged (resting equity orders are already converted to MarketOnOpen by QCAlgorithm.MarketOrder). Adds the shared FillModel.GetMarketFillPrice helper used by the base FillModel and FutureFillModel, a unit test, and regenerates statistics for the affected daily/hour futures, index and crypto regression algorithms (order counts unchanged, only fill prices). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add regression algorithm asserting resting market orders fill at the bar open RestingMarketOrderFillsAtBarOpenRegressionAlgorithm buys a daily future on the bar that delivers it (fills at that bar's close) and submits a liquidation while the market is closed (overnight pulse, no fresh bar). The liquidation rests and fills on a later bar at the bar open, not its close - asserting the new GetMarketFillPrice behavior. The in-bar buy is asserted to fill at the close, for contrast. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Carry the bar start time on Prices instead of re-reading the cache Add Prices.Time (the bar start, mirroring BaseData.Time/EndTime), populated from the source bar/tick in every GetPrices path. GetMarketFillPrice now uses prices.Time directly instead of a second asset.Cache.GetData() lookup. Behavior is unchanged (prices.Time equals the previously read cache time). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add regression algorithm asserting in-session hour orders fill at the latest close HourMarketOrderFillsAtBarCloseRegressionAlgorithm submits an hour resolution market order mid-bar (via an intraday scheduled event) while the market is open, using the default one hour StalePriceTimeSpan. It asserts the order fills immediately at the latest available bar's close - not waiting and not at the bar open - since the latest bar is within the stale window. Guards the resting-order open-fill behavior against affecting ordinary in-session fills. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Regenerate custom fill model algorithm statistics for the open-fill change CustomModelsAlgorithm and CustomPartialFillModelAlgorithm subscribe SPY at hour resolution and their custom fill models delegate to base.MarketFill, so resting orders now fill at the bar open. Regenerate their statistics (C#/Python) and the inline expected statistics of the PEP8StyleCustomModelsWork test. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
c81f5d7d1a |
Seed securities by default (#9045)
Build & Test Lean / build (push) Has been cancelled
Regression Tests / build (push) Has been cancelled
API Tests / build (push) Has been cancelled
Benchmarks / build (push) Has been cancelled
Report Generator Tests / build (push) Has been cancelled
Research Regression Tests / build (push) Has been cancelled
Syntax Tests / build (push) Has been cancelled
Python Virtual Environments / build (push) Has been cancelled
* Add SeedInitialPrices algorithm setting This is true by default and indicates that the engine will seed initial prices right after the security is added or selected * Update regression algorithms * Update regression algorithms * Update regression algorithms * Refactor default securities seeding * Minor fix * Minro fixes * Cleanup * Updated and add regression algorithms * Address peer review * Centralize logic to get last known data for multiple securities * Some cleanup * Minor build fix * Minor fixes * More logic centralization * Some more cleanup * Cleanup * Update regression algorithms and minor fixes * Update regression algorithms * Minor fix * More minor fixes * Update regression algorithms * Cleanup * Minor test fix * Address peer review * Minor fix and performance improvement * Fix to seed open interest data * Minor test fixes * Address peer review * Minor change * Minor revert * Minor fixes and improvements * Disable initial seeding by default * Minor fixes * Cleanup * Cleanup * Minor fix |
||
|
|
6916636e8e |
Remove Future expiry date from data & use Bank Holidays For Expirations (#8580)
Regression Tests / build (push) Has been cancelled
API Tests / build (push) Has been cancelled
Report Generator Tests / build (push) Has been cancelled
Benchmarks / build (push) Has been cancelled
Research Regression Tests / build (push) Has been cancelled
Build & Test Lean / build (push) Has been cancelled
Syntax Tests / build (push) Has been cancelled
Python Virtual Environments / build (push) Has been cancelled
* Use Futures Bank Holidays For Expirations * Minor improvements - Futures will be stored by their contract month, not expiry * Delete dairy future products * Minor test fixes |
||
|
|
496f210116 |
Fix start time calculation for daily requests (#8975)
Python Virtual Environments / build (push) Has been cancelled
API Tests / build (push) Has been cancelled
Build & Test Lean / build (push) Has been cancelled
Research Regression Tests / build (push) Has been cancelled
Syntax Tests / build (push) Has been cancelled
Benchmarks / build (push) Has been cancelled
Regression Tests / build (push) Has been cancelled
Report Generator Tests / build (push) Has been cancelled
* Fix start time calculation for daily request * Minor regression algorithm fix |
||
|
|
7008d17714 |
Add MaxDrawdownRecovery metric (#8865)
API Tests / build (push) Has been cancelled
Benchmarks / build (push) Has been cancelled
Build & Test Lean / build (push) Has been cancelled
Regression Tests / build (push) Has been cancelled
Report Generator Tests / build (push) Has been cancelled
Research Regression Tests / build (push) Has been cancelled
Syntax Tests / build (push) Has been cancelled
Python Virtual Environments / build (push) Has been cancelled
* Implement a prototype of the maximum recovery time function. * Add unit test skeletons. * Add failing test * Issue #4581: Implement MaxDrawdownRecoveryTime. * Issue 4581: Add DTO for Drawdown Percentage, Drawdown Enddate, and High Value * Issue 4581: Fix bgu for when lDrawdowns list is empty. * Issue 4581: Change names of tests. Change name of file. * Issue 4581: Make adjustements to flow of adding drawdowns to lDrawdowns. * Issue 4581: Add multiple unit tests. * Issue #4581: Change name of unit test * Issue #4581: Add to PerformanceMetrics * Issue #4581: Add Maximum Drawdown Recovery to PortolioStatistics class. * Issue #4581: Add to portolfio statistics class. * Issue #4581: Add to statistics builder. * Issue #4581: Add report key. * Case #4581: Convert to decimal. * Issue #4581: Correct comment. * Issue #4581: Correct performance metrics view model string. * Case #4581: Correct statistics builder view model string..again. * Issue #4581: Placed DradownDradownDateHighValueDTO at the end of the file for simpler diff. * Issue #4581: Add 2 new tests. * Issue #4581: Change algorithm so that when multiple maximum drawdowns occur, the longest of all recoveries is reported. * Issue #4581: Add unit test. * Issue #4581: Remove reportkey. Change dto name. * Issue #4581: Change summary. * Issue #4581: Change comment. * Add max drawdown recovery calculation with unit tests * Update regression algorithms with the new metric * Solve review comments * Update regression algorithms * Add TryGet to safely get the key: MaximumDrawdownRecovery * Ignore MaximumDrawdownRecovery metric in OptimizationBacktest Json * Revert changes in Messaging * Update regression algorithms * Add test case: TakesLongestRecoveryAmongMultipleDrawdowns * Use integer days for MaximumDrawdownRecovery * Add MaximumDrawdownRecoveryReportElement * Use more explicit names * Rename files and variables for consistency * Update regression algorithms --------- Co-authored-by: Alain Schaerer <aschaerer@pcatg.com> |
||
|
|
980cdeaa75 |
Remove fill warnings from order tags (#8668)
* Remove warnings from tags and tests * Fix bugs * fix bugs * Revert wrong updates in some stats * Fix bugs |
||
|
|
69d2f5ae82 |
Futures and Future Options file-based universes (#8480)
Report Generator Tests / build (push) Has been cancelled
Research Regression Tests / build (push) Has been cancelled
Python Virtual Environments / build (push) Has been cancelled
API Tests / build (push) Has been cancelled
Benchmarks / build (push) Has been cancelled
Build & Test Lean / build (push) Has been cancelled
Regression Tests / build (push) Has been cancelled
* Make FOPs selection universe file-based for backtesting * Make FOPs option chains universe file based * Make Future universe selection file-based like option universe * Make Future universe selection file-based like option universe * Abstraction cleanup * Add FuturesChains API to QC algorithm Also refactor future chain provider to use the new FutureUniverse instead of zip file names * Update regression algorithms stats * Refactor QuantBook option and future history to use new universes * Fix failing tests * Fix failing tests * Fix failing tests * Minor future chains unit test improvement * Add futures chains DataFrame property Also, remove IDerivativeSecurity interface from Future * Add DataFrame property to FuturesChains class * Add regression algorithms * Add regression algorithms * Replace QCAlgorithm.FutureChainProvider usages with new FuturesChain api * Minor fixes * Reduce number of universe files in repo * Minor data fixes * Regression algorithms updates * Add implicit conversion from FuturesContract to Symbol Modified algorithms to use futures contract objects directly instead of accessing their Symbol property. Removed unnecessary import statements and redundant lines in various files. * Improve resolution handling for history requests * Changed _auxiliaryData field to lazily-initialized AuxiliaryData property * Refactor data handling in BaseChain and TimeSliceFactory - Added `AddData` method to `BaseChain` for adding market data - Refactored `TimeSliceFactory` to use `BaseChain.AddData` method * Remove specific constructors and indexers from Chain classes Removed public indexers in `BaseChains` for getting or setting `BaseChain` instances by `ticker` or `Symbol`, which were used for Pythonnet compatibility. * Remove chain cache logic from FuturesChainUniverse * Refactor class and interface names for clarity Renamed `FileBasedUniverse` to `BaseChainUniverseData` and `IFileBasedUniverse` to `IChainUniverseData`. * Add base class for options and futures contracts - Introduced `BaseContract` as an abstract base class for contracts, consolidating common properties and methods. - Removed ISymbolInterface * Add minor fix for future options tickers parsing Added tests * Trigger Build * Trigger Build * Trigger Build * Trigger Build * Clean chain provider classes up * Remove ZipEntryName other classes and unused code Removed ZipEntryName class and references across various files. Removed DataQueueFuturesChainUniverseDataCollectionEnumerator and DataQueueOptionChainUniverseDataCollectionEnumerator classes. Removed OptionChainUniverseSubscriptionEnumeratorFactory class. Removed unused code for handling OptionChainUniverse and FuturesChainUniverse in FileSystemDataFeed.cs and LiveTradingDataFeed.cs. Removed several test files related to enumerator factories and universe data collection. * Minor changes and cleanup * Trigger Build * Trigger Build * Refactor FuturesContract data handling Forward price data from bars and ticks stored in private fields for improved memory usage * Fix: use universe data for market data in FuturesContract * Update regression algorithms stats after rebase Added HSI futures universe files * Sort configs by internal flag Internals go first * Throw from option universe data filters for future options Future options IV, Open interest and greeks are not supported for future options * Minor changes * Improve some regression algorithms * Minor fix for failing unit tests * Update FOPs universe file header Removed greeks and IV columns. Updated FOPs universe files: removed outdated columns. * Minor unit test fix * Trigger Build * Trigger Build * Trigger Build * Trigger Build * Trigger Build * Trigger Build * Trigger Build * Trigger Build * Trigger Build * Trigger Build * Trigger Build * Trigger Build * Trigger Build * Minor fix * Add history provider as constructor argument for chain providers * Update new regression algorithms data points count * Minor fix for FakeDataQueue * Add initialize method to chain providers classes * Minor changes * Trigger Build * Trigger Build * Trigger Build * Minor fix * Minor fix * Trigger Build * Trigger Build * Trigger Build * Trigger Build * Add logs to ProcessedDataProvider * Removed test logs * Minor fix * Support downloading options and futures universe files from api data provider |
||
|
|
0b1b72e921 |
Fix for multiple market closes in date (#8509)
- Fixes related to support assets with multiple daily market closes. Adding unit and regression tests |