Async non-market orders, Schwab StopLimit, CME FOPs

These are the LEAN release notes for versions 17282 to 17286. We expanded trading capability and developer ergonomics. We added StopLimit support to the CharlesSchwabBrokerageModel for Day and GoodTilCanceled orders, introduced Eze OrderProperties AccountType, and enabled asynchronous non-market orders and SetHoldings, with MarketOrder returning before brokerage submission. We made DataQueueHandlerSubscriptionManager.Subscribe overridable and added CME currency futures options support (6A, 6B, 6C, 6E, 6J, 6S). We also unified brokerage tests with a global OrderProperties.

Across stability and correctness, we refactored tests to cut data and speed runs, made Brokerage.ConcurrencyEnabled virtual for custom concurrency control, stabilized Python package CI, broadened Python syntax checks and tuned thresholds, and disabled cross-zero MOO/MOC execution. We fixed Lean data writer merge policy, improved tick-resolution continuous futures history and OpenInterest, normalized OutOfSampleMaxEndDate serialization, and updated the Market Hours Database with US futures halts, pre/post sessions, and 2026 CFE holidays. These changes strengthen reliability and performance.

Thank you contributors for fixing data pipeline bugs, optimizing backtests, enhancing docs, and adding new broker and indicator features—your work drives LEAN forward!

Features

  • Shipped (#8968): feat: support 'StopLimit' in 'CharlesSchwabBrokerageModel': We added StopLimit order support to CharlesSchwabBrokerageModel, limited to Day and GoodTilCanceled TimeInForce, expanding trading flexibility.
  • Shipped (#8967): Feature: new property 'AccountType': We added EzeOrderProperties.AccountType to specify Eze EMS account type (e.g., margin=119), enabling correct order submission and retrieval.
  • Shipped (#8947): Feat: make virtual 'Subscribe()' in 'DataQueueHandlerSubscriptionManager': We made DataQueueHandlerSubscriptionManager.Subscribe() virtual to support overriding and logic reuse in derived implementations.
  • Shipped (#8946): Support asynchronous non-market orders: We add asynchronous parameter to non-market orders and SetHoldings, returning immediately; MarketOrder asynchronous now returns before brokerage submission.
  • Shipped (#8939): Add support for some CME currencies FOPs: We now support CME currency futures options: 6A, 6B, 6C, 6E, 6J, 6S, validated by unit tests.
  • Shipped (#8938): Feat: global property 'OrderProperties' in abstract class BrokerageTest: We added a global OrderProperties property to abstract BrokerageTest, improving consistency in brokerage order testing.

Bug Fixes

  • Fixed issue (#8962): We stabilize Python package CI by isolating failing tests.
  • Fixed issue (#8959): We disable cross-zero execution for MOO/MOC across supported brokerages.
  • Fixed issue (#8952): We fix lean data writer merge policy; enhance tests.
  • Fixed issue (#8936): We fix tick-resolution continuous futures history, improve OpenInterest handling.

Updates

  • Fixed issue (#8970): We refactored tests, reducing data requirements and improving speed.
  • Fixed issue (#8966): We made Brokerage.ConcurrencyEnabled virtual enabling custom brokerage concurrency control.
  • Fixed issue (#8944): We update Python syntax check script's accepted success threshold.
  • Fixed issue (#8943): We extended MHDB with US futures halts, pre/post sessions.
  • Fixed issue (#8942): We updated MHDB with 2026 CFE futures holiday schedule.
  • Fixed issue (#8937): We expanded Python syntax checks and improved error detection.
  • Fixed issue (#8935): We normalize OutOfSampleMaxEndDate datetime serialization with tests.