Webull Integration, Backtest Analysis, New Algorithm Statuses
These are the LEAN release notes for versions 17674 to 17685. We improved our CI and stub-generation pipeline by switching discovery to the GitHub REST API, parallelizing discovery, running it in-container, auto-detecting datasource repos, and tightening when full stubs discovery runs and how it authenticates. We also made object store API tests self-contained, reduced flaky failures by removing regex timeout validation, and ensured schedule universes consistently run at 8am New York time.
We shipped several platform enhancements, including richer backtest reporting by adding structured Analysis data to the backtest packet and a backtest-only ResultsAnalyzer that appends human-readable summaries. We expanded algorithm state modeling with new PendingInput and Idle statuses, enhanced SwissArmyKnife by exposing all tools as sub-indicators, and added Webull core brokerage integration.
We broadened market and data correctness with improved primary exchange detection for additional equity tape letters, new NASDAQ_SC/NASDAQ_INT mappings, safer options Greeks theta annualization, better OSI option parsing, cleaner daily QuoteBar subscriptions, improved downloader no-data warnings, Binance futures collateral aggregation for EU buying power, and a configurable CFD contract multiplier at runtime.
Thank you 0xpinara and aiSynergy37 for refactoring SwissArmyKnife into sub-indicators and adding Python dict header support to SubscriptionDataSource with validation and tests—exciting progress!
Features
- Shipped (#9422): feature: recognise equity tape letters S/V/H/U and add NASDAQ_SC: We updated 'GetPrimaryExchange' to recognize S/V/H/U tape letters, added 'NASDAQ_SC'/'NASDAQ_INT', fixed MEMX description, and expanded tests.
- Shipped (#9375): Add Analysis to Backtest packet: We added analysis data to the backtest packet, enabling richer, structured backtest result reporting.
- Shipped (#9374): Add new "Idle" AlgorithmStatus: We added a new “Idle” value to the AlgorithmStatus enum to represent inactive algorithm states more precisely.
- Shipped (#9370): Add all tools as sub-indicators to SwissArmyKnife: We refactored SwissArmyKnife to compute all tools simultaneously, exposing each as sub-indicators while keeping Current.Value compatible.
- Shipped (#9367): Add PendingInput algorithm status: We added a 'PendingInput' algorithm status to represent algorithms waiting for external input.
- Shipped (#9363): Add Python dict headers overload to SubscriptionDataSource: We added SubscriptionDataSource overload for Python dict headers, validating types, converting to managed key-value pairs, and testing inputs.
- Shipped (#9356): feature: add webull brokerage core integration: We added Webull core integration: brokerage enum, model/fee implementations, factory/config wiring, and comprehensive order/fee tests.
- Shipped (#9336): Results analyzer: We implemented a backtest-only ResultsAnalyzer to summarize key results into human-readable messages appended to the results file.
- Shipped (#9328): Add ContractMultiplier setter to Cfd via CfdSymbolProperties: We added a runtime setter for CFD ContractMultiplier via CfdSymbolProperties, enabling user corrections; validated with unit tests.
Bug Fixes
- Fixed issue (#9434): We switched to GitHub REST API, parallelized discovery, ran in-container.
- Fixed issue (#9433): We run stubs repo discovery only on tag-of-master builds.
- Fixed issue (#9432): We use QC_GIT_TOKEN for full stubs repo discovery.
- Fixed issue (#9427): We ensured schedule universes always run 8am NY, tested.
- Fixed issue (#9420): We made object store API tests self-contained via CI uploads.
- Fixed issue (#9399): We removed regex timeout validation to prevent race-condition failures.
- Fixed issue (#9379): We prevent invalid daily QuoteBar subscriptions, eliminating log spam.
- Fixed issue (#9373): We add Binance futures BNFCR collateral aggregation for EU buying power.
- Fixed issue (#9368): We improved Python dictionary null-key behavior to match CPython.
- Fixed issue (#9348): We added Greeks.GetSafeTheta to annualize theta without overflow errors.
- Fixed issue (#9343): We fixed OSI option parsing for tickers with dots.
Mia Alissi
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
To unlock posting to the community forums please complete at least 30% of Boot Camp.
You can continue your Boot Camp training progress from the terminal. We hope to see you in the community soon!