Alexandre Catarino 35b32b401e
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
Add margin-aware option strategy match selection (#9639)
* Add margin-aware option strategy match selection

OptionStrategyMatcher.MatchOnce greedily matched definitions in
descending leg-count order, never consulting the objective function
hook. Books of overlapping debit spreads were carved into ladders
whose uncovered short leg is charged naked option margin, producing
phantom margin deltas, inconsistent accept/reject decisions and
TotalMarginUsed churn on fully covered, defined-risk books.

MatchOnce now evaluates a second candidate solution that deprioritizes
definitions leaving a short leg uncovered, and selects the best
solution via the objective function. The new default objective
function minimizes the quantity of uncovered short contracts, a
deterministic proxy for the margin required to hold the positions.
Ties preserve the previous grouping, so behavior only changes where
the greedy carve left a short uncovered that another grouping of the
same positions covers.

Fixes #9638

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Cache strategy definition ordering and skip redundant match pass

Materialize the definition enumerations once per matcher options instead of
re-sorting them on every MatchOnce call, and only evaluate the second candidate
solution when some short contract can actually be covered by a long of the same
right or by the underlying lots held. A book of naked shorts, by far the most
common one reaching that point, now runs a single matching pass.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Bound credit-side short coverage and add overlapping spreads regression

The uncovered short proxy treated any same-right long as covering a
short leg. A long on the credit side (higher strike for calls, lower
for puts) caps the risk at the strike width, which for a distant long
can exceed the naked short margin, so preferring it could raise the
margin required instead of lowering it.

Coverage from the debit side stays free, while credit-side coverage
only counts within 10% of the short strike, the price-free stand-in
for the naked short margin floor of the option margin model. Beyond
that width the short counts as uncovered, the candidate solutions tie
and the previous grouping is preserved, so the selection can only ever
lower the margin required to hold the positions.

Also adds a regression algorithm for the reported defect: two
overlapping bull call debit spreads with interleaved strikes resolve
into two margin free spreads instead of a bull call ladder charging
naked call margin plus an unmatched long.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Skip provably useless match passes and drop scoring allocations

Matching again cannot help once the first solution already leaves no
more shorts uncovered than the positions can possibly cover, since a
long contract covers at most its own quantity of shorts of the same
right, and so does an underlying lot. Checking that bound generalizes
the naked shorts precondition it replaces and removes the second pass
from books holding fewer longs than shorts, such as a plain ladder,
which measured 2.2x slower than a single pass before and is now level
with it.

The credit side width test also subsumes the debit side one, whose
width is never positive, so coverage collapses into a single predicate
and one pass over the legs. Strategies with a single short leg, which
is every spread, butterfly, condor, backspread and covered call, now
take a fast path that needs neither ordering nor allocation, and the
remaining ladders and short butterflies sort a small array in place
instead of allocating lists, objects and sort closures per score.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Require a covering long to outlive the short it covers

The coverage proxy compared strikes only, so a short calendar spread,
long the near expiration and short the far one at the same strike, read
as fully covered on a zero strike width. The margin models disagree:
once the long expires the short is naked for the rest of its life, and
short calendar spreads are charged the stand-alone naked short margin
while ordinary calendar spreads, whose long outlives the short, require
none. Requiring the covering long to expire no earlier than the short
makes the proxy mirror that distinction exactly, and leaves same expiry
books untouched.

The skip added for provably useless second passes reads the score as a
quantity of uncovered contracts, which only the default objective
function guarantees, so a custom one now always gets both candidates.

Also documents that the definition ordering is cached, freezing the
first output of a user supplied enumerator, and drops the stale claim
that nothing in the options type is consulted by the matcher.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Apply the uncovered short bound to the default objective function only

A function deriving from the default one is free to score by different
rules, so taking its score for a quantity of uncovered contracts could
skip a second candidate it would have preferred. Match the type exactly
instead, which leaves derived functions always evaluating both.

Also documents that the legacy objective function scores are not
bounded above by zero, so configuring it ends candidate evaluation and
preserves the single matching pass, and describes the regression
algorithm strikes by their order in the chain rather than as the
highest ones, which only held for a chain of exactly four strikes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Martin Molinero <martin.molinero1@gmail.com>
2026-08-04 12:01:40 -03:00
2021-03-09 18:25:31 -03:00
2017-10-21 02:34:19 -04:00
2021-03-09 18:25:31 -03:00
2025-12-29 09:53:37 -03:00
2025-12-29 09:53:37 -03:00
2020-06-15 18:18:37 -03:00
2021-04-30 18:45:27 -03:00
2021-05-06 17:23:51 -03:00
2024-07-15 16:05:31 -03:00
2015-07-10 09:20:01 -04:00

lean-header

Build Status     Regression Tests     LEAN Forum     Discord Chat

Lean Home | Documentation | Download Zip | Docker Hub | Nuget

features-header

LEAN is an event-driven, professional-caliber algorithmic trading platform built with a passion for elegant engineering and deep quant concept modeling. Out-of-the-box alternative data and live-trading support.

feature-list

modular-header LEAN is modular in design, with each component pluggable and customizable. It ships with models for all major plug-in points.

modular-architecture

cli-header lean-animation

QuantConnect Lean CLI is a command-line interface tool for interacting with the Lean algorithmic trading engine, which is an open-source platform for backtesting and live trading algorithms in multiple financial markets. It allows developers to manage projects, run backtests, deploy live algorithms, and perform various other tasks related to algorithmic trading directly from the terminal. The CLI simplifies the workflow by automating tasks, enabling seamless integration with cloud services, and facilitating collaboration with the QuantConnect community. It's designed for quant developers who need a powerful and flexible tool to streamline their trading strategies. Please watch the instructions videos to learn more.

Installation

pip install lean

Commands

Create a new project containing starter code

lean project-create

Run a local Jupyter Lab environment using Docker

lean research

Backtest a project locally using Docker

lean backtest

Optimize a project locally using Docker

lean optimize

Start live trading a project locally using Docker

lean live

Download the LEAN CLI Cheat Sheet for the full list of commands.

modular-architecture

diagram

modular-architecture

This section will cover how to install lean locally for you to use in your environment. For most users we strongly recommend the LEAN CLI which is prebuilt and runs on all platforms. Refer to the following readme files for a detailed guide regarding using your local IDE with Lean.

To install locally, download the zip file with the latest master and unzip it to your favorite location. Alternatively, install Git and clone the repo:

git clone https://github.com/QuantConnect/Lean.git
cd Lean

macOS

NOTE: Visual Studio for Mac has been discontinued, use Visual Studio Code instead

  • Install Visual Studio Code for Mac
  • Install the C# Dev Kit extension
  • Install dotnet 10 SDK:
  • To build the solution, either:
    • choose Run Task > build from the Panel task dropdown, or
    • from the command line run
      dotnet build
      
  • To run the solution, either:
    • choose Run and Debug from the Activity Bar, then click Launch, or
    • click F5, or
    • from the command line run
      cd Launcher/bin/Debug
      dotnet QuantConnect.Lean.Launcher.dll
      

Linux (Debian, Ubuntu)

dotnet build QuantConnect.Lean.sln
  • Run Lean:
cd Launcher/bin/Debug
dotnet QuantConnect.Lean.Launcher.dll

Windows

  • Install Visual Studio
  • Open QuantConnect.Lean.sln in Visual Studio
  • Build the solution by clicking Build Menu -> Build Solution (this should trigger the NuGet package restore)
  • Press F5 to run

Python Support

A full explanation of the Python installation process can be found in the Algorithm.Python project.

Local-Cloud Hybrid Development.

Seamlessly develop locally in your favorite development environment, with full autocomplete and debugging support to quickly and easily identify problems with your strategy. Please see the CLI Home for more information.

Issues and Feature Requests

Please submit bugs and feature requests as an issue to the Lean Repository. Before submitting an issue, please read the instructions to ensure it is not duplicated.

Mailing List

The mailing list for the project can be found on LEAN Forum. Please use this to ask for assistance with your installation and setup questions.

Contributors and Pull Requests

Contributions are warmly welcomed, but we ask you to read the existing code to see how it is formatted and commented on and ensure contributions match the existing style. All code submissions must include accompanying tests. Please see the contributor guidelines. All accepted pull requests will get a $50 cloud credit on QuantConnect. Once your pull request has been merged, write to us at support@quantconnect.com with a link to your PR to claim your free live trading. QC <3 Open Source.

A huge thank you to all our contributors!


Acknowledgements

The open sourcing of QuantConnect would not have been possible without the support of the Pioneers. The Pioneers formed the core 100 early adopters of QuantConnect who subscribed and allowed us to launch the project into open source.

Ryan H, Pravin B, Jimmie B, Nick C, Sam C, Mattias S, Michael H, Mark M, Madhan, Paul R, Nik M, Scott Y, BinaryExecutor.com, Tadas T, Matt B, Binumon P, Zyron, Mike O, TC, Luigi, Lester Z, Andreas H, Eugene K, Hugo P, Robert N, Christofer O, Ramesh L, Nicholas S, Jonathan E, Marc R, Raghav N, Marcus, Hakan D, Sergey M, Peter McE, Jim M, INTJCapital.com, Richard E, Dominik, John L, H. Orlandella, Stephen L, Risto K, E.Subasi, Peter W, Hui Z, Ross F, Archibald112, MooMooForex.com, Jae S, Eric S, Marco D, Jerome B, James B. Crocker, David Lypka, Edward T, Charlie Guse, Thomas D, Jordan I, Mark S, Bengt K, Marc D, Al C, Jan W, Ero C, Eranmn, Mitchell S, Helmuth V, Michael M, Jeremy P, PVS78, Ross D, Sergey K, John Grover, Fahiz Y, George L.Z., Craig E, Sean S, Brad G, Dennis H, Camila C, Egor U, David T, Cameron W, Napoleon Hernandez, Keeshen A, Daniel E, Daniel H, M.Patterson, Asen K, Virgil J, Balazs Trader, Stan L, Con L, Will D, Scott K, Barry K, Pawel D, S Ray, Richard C, Peter L, Thomas L., Wang H, Oliver Lee, Christian L..

S
Description
QuantConnect 开发的 Lean 算法交易引擎,支持 Python 和 C#。|GitHub 镜像 21.4k · 🍴 5.2k
https://github.com/quantconnect/lean Readme 580 MiB
Languages
C# 94.2%
Python 5.6%
Jupyter Notebook 0.1%