Supported Models



This page explains the ZerodhaBrokerageModel, including the asset classes it supports, its default security-level models, and it's default markets.

SetBrokerageModel(BrokerageName.Zerodha, AccountType.Cash);
SetBrokerageModel(BrokerageName.Zerodha, AccountType.Margin);
self.set_brokerage_model(BrokerageName.ZERODHA, AccountType.CASH)
self.set_brokerage_model(BrokerageName.ZERODHA, AccountType.MARGIN)

To view the implementation of this model, see the LEAN GitHub repository.

Asset Classes

The ZerodhaBrokerageModel supports trading Indian Equities.


We model the Zerodha API by supporting several order types, order properties, and order updates.

Order Types

The following table describes the available order types for each asset class that the ZerodhaBrokerageModel supports:

Order TypeIndia Equity
Marketgreen check
Limitgreen check
Stop marketgreen check
Stop limitgreen check

Order Properties

The ZerodhaBrokerageModel supports custom order properties. The following table describes the members of the IndiaOrderProperties object that you can set to customize order execution:

PropertyData TypeDescriptionDefault Value
ExchangeexchangeExchangeSelect the exchange for sending the order to. The following instructions are available:
  • Exchange.NSE
  • Exchange.BSE
ProductTypeproduct_typestringstr A ProductTypeproduct_type instruction to apply to the order. The IndiaOrderProperties.IndiaProductType enumeration has the following members:
TimeInForcetime_in_forceTimeInForceA TimeInForce instruction to apply to the order. The following instructions are available:
  • DayDAY
  • GoodTilCanceledGOOD_TIL_CANCELED
  • GoodTilDategood_til_date
public override void Initialize()
    // Set default order properties
    DefaultOrderProperties = new IndiaOrderProperties(Exchange.NSE, IndiaOrderProperties.IndiaProductType.NRML)
        TimeInForce = TimeInForce.GoodTilCanceled,

public override void OnData(Slice slice)
    // Use default order order properties
    LimitOrder(_symbol, quantity, limitPrice);
    // Override the default order properties
    LimitOrder(_symbol, quantity, limitPrice, 
               orderProperties: new IndiaOrderProperties(Exchange.BSE, IndiaOrderProperties.IndiaProductType.MIS)
                   TimeInForce = TimeInForce.Day,
    LimitOrder(_symbol, quantity, limitPrice, 
               orderProperties: new IndiaOrderProperties(Exchange.BSE, IndiaOrderProperties.IndiaProductType.CNC)
                   TimeInForce = TimeInForce.GoodTilDate(new DateTime(year, month, day)),
def initialize(self) -> None:
    # Set the default order properties
    self.default_order_properties = IndiaOrderProperties(Exchange.NSE, IndiaOrderProperties.IndiaProductType.NRML)
    self.default_order_properties.time_in_force = TimeInForce.GOOD_TIL_CANCELED

def on_data(self, slice: Slice) -> None:
    # Use default order order properties
    self.limit_order(self._symbol, quantity, limit_price)
    # Override the default order properties
    order_properties = IndiaOrderProperties(Exchange.BSE, IndiaOrderProperties.IndiaProductType.MIS)
    order_properties.time_in_force = TimeInForce.DAY
    self.limit_order(self._symbol, quantity, limit_price, order_properties=order_properties)

    order_properties = IndiaOrderProperties(Exchange.BSE, IndiaOrderProperties.IndiaProductType.CNC)
    order_properties.time_in_force = TimeInForce.good_til_date(datetime(year, month, day))
    self.limit_order(self._symbol, quantity, limit_price, order_properties=order_properties)


The ZerodhaBrokerageModel supports order updates.

Handling Splits

If you're using raw data normalization and you have active orders with a limit, stop, or trigger price in the market for a US Equity when a stock split occurs, the following properties of your orders automatically adjust to reflect the stock split:

  • Quantity
  • Limit price
  • Stop price
  • Trigger price


The ZerodhaBrokerageModel uses the EquityFillModel.


The ZerodhaBrokerageModel uses the NullSlippageModel.


The ZerodhaBrokerageModel uses the ZerodhaFeeModel.

Buying Power

The ZerodhaBrokerageModel uses the SecurityMarginModel. If you have a margin account, the ZerodhaBrokerageModel allows up to 5x leverage.


The ZerodhaBrokerageModel uses the ImmediateSettlementModel for margin accounts and the DelayedSettlementModel with the default settlement rules for cash accounts.

// For cash accounts:
security.SetSettlementModel(new DelayedSettlementModel(Equity.DefaultSettlementDays, Equity.DefaultSettlementTime));

// For margin accounts:
security.SetSettlementModel(new ImmediateSettlementModel());
# For cash accounts:
security.set_settlement_model(DelayedSettlementModel(Equity.DEFAULT_SETTLEMENT_DAYS, Equity.DEFAULT_SETTLEMENT_TIME))

# For margin accounts:

Margin Interest Rate

The ZerodhaBrokerageModel uses the NullMarginInterestRateModel.

Default Markets

The default market of the ZerodhaBrokerageModel is Market.IndiaMarket.INDIA.

You can also see our Videos. You can also get in touch with us via Discord.

Did you find this page helpful?

Contribute to the documentation: