Execution
Supported Models
Introduction
This page describes the pre-built Execution models in LEAN. The number of models grows over time. To add a model to LEAN, make a pull request to the GitHub repository. If none of these models perform exactly how you want, create a custom Execution model.
Null Model
The NullExecutionModel
doesn't place any trades.
SetExecution(new NullExecutionModel());
self.SetExecution(NullExecutionModel())
To view the implementation of this model, see the LEAN GitHub repositoryLEAN GitHub repository.
Immediate Model
The ImmediateExecutionModel
is the default Execution model. It uses market orders to immediately fill portfolio targets. It's similar to placing market orders in line with your algorithm logic.
SetExecution(new ImmediateExecutionModel());
self.SetExecution(ImmediateExecutionModel())
To view the implementation of this model, see the LEAN GitHub repositoryLEAN GitHub repository.
Spread Model
The SpreadExecutionModel
executes trades with market orders if the exchange is open and the bid-ask spread is within a threshold percentage. The model only works if the security subscription provides QuoteBar data. The spread percentage is calculated as
where $a$ is the ask price, $b$ is the bid price, and $p$ is the price.
SetExecution(new SpreadExecutionModel());
self.SetExecution(SpreadExecutionModel())
The following table describes the arguments the model accepts:
Argument | Data Type | Description | Default Value |
---|---|---|---|
acceptingSpreadPercent | decimal float | Maximum spread accepted comparing to current price in percentage | 0.005 (0.5%) |
To view the implementation of this model, see the LEAN GitHub repositoryLEAN GitHub repository.
Standard Deviation Model
The StandardDeviationExecutionModel
seeks to fill orders when the price is more than 2 standard deviations lower than the average price over a trailing period. The intent is to find dips in the market to place trades. In strongly trending markets, this procedure can result in delayed trade placement since it might be a while before the next price spike or dip.
SetExecution(new StandardDeviationExecutionModel());
self.SetExecution(StandardDeviationExecutionModel())
The following table describes the arguments the model accepts:
Argument | Data Type | Description | Default Value |
---|---|---|---|
period | decimal float | Period of the standard deviation indicator | 60 |
deviations | int | The number of deviations away from the mean before submitting an order | 2 |
resolution | Resolution | The resolution of the STD and SMA indicators | Resolution.Minute |
To view the implementation of this model, see the LEAN GitHub repositoryLEAN GitHub repository.
VWAP Model
The VolumeWeightedAveragePriceExecutionModel
works to fill your orders at or better than the volume-weighted average price (VWAP) for the trading day. This is a best-effort algorithm, so no guarantee can be made that it will reach the VWAP.

The model uses market orders and it only works if the security subscription provides intraday data. It sets a maximum order size of 1% of the current bar's volume, but you can update the maximum order size through the MaximumOrderQuantityPercentVolume
member.
SetExecution(new VolumeWeightedAveragePriceExecutionModel());
self.SetExecution(VolumeWeightedAveragePriceExecutionModel())
To view the implementation of this model, see the LEAN GitHub repositoryLEAN GitHub repository.