Supported Models

Public

Introduction

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

SetBrokerageModel(BrokerageName.Public, AccountType.Cash);
SetBrokerageModel(BrokerageName.Public, AccountType.Margin);
self.set_brokerage_model(BrokerageName.PUBLIC, AccountType.CASH)
self.set_brokerage_model(BrokerageName.PUBLIC, AccountType.MARGIN)

For more information about this model, see the class reference and implementation.

For more information about this model, see the class reference and implementation.

Asset Classes

The PublicBrokerageModel supports the following asset classes:

Orders

The PublicBrokerageModel supports several order types, order properties, and order updates.

Order Types

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

Order TypeEquityEquity OptionsIndex OptionsCrypto
Marketgreen checkgreen checkgreen checkgreen check
Limitgreen checkgreen checkgreen checkgreen check
Stop marketgreen checkgreen checkgreen checkgreen check
Stop limitgreen checkgreen checkgreen checkgreen check
Combo limitgreen checkgreen check

Order Properties

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

PropertyData TypeDescriptionDefault Value
TimeInForcetime_in_forceTimeInForceA TimeInForce instruction to apply to the order. The following instructions are supported:
  • DayDAY
  • GoodTilCanceledGOOD_TIL_CANCELED
  • GoodTilDategood_til_date
Public natively supports only day and good-til-date orders, so LEAN sends good-til-canceled orders as good-til-date orders that expire 90 days out.
TimeInForce.GoodTilCanceledTimeInForce.GOOD_TIL_CANCELED
OutsideRegularTradingHoursoutside_regular_trading_hoursboolIf set to true, allows the order to trigger or fill outside of regular trading hours. This property applies to Equity limit orders with a day time-in-force only, since Public only accepts limit orders in the extended session.falseFalse
UseMarginuse_marginbool?Controls the buying power the order uses. If set to true, the order uses margin buying power when the account allows it. If set to false, the order uses cash-only (settled cash) buying power. If you don't set it, orders on margin accounts use margin buying power and orders on cash accounts always use cash-only buying power.nullNone
public override void Initialize()
{
    // Set the default order properties
    DefaultOrderProperties.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 PublicOrderProperties
               {
                   TimeInForce = TimeInForce.Day,
                   OutsideRegularTradingHours = true,
                   UseMargin = false
               });
}
def initialize(self) -> None:
    # Set the default order properties
    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 = PublicOrderProperties()
    order_properties.time_in_force = TimeInForce.DAY
    order_properties.outside_regular_trading_hours = True
    order_properties.use_margin = False
    self.limit_order(self._symbol, quantity, limit_price, order_properties=order_properties)

Updates

The PublicBrokerageModel supports order updates for single-leg orders. Public doesn't support updating combo (multi-leg) orders.

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

Fills

The PublicBrokerageModel uses the EquityFillModel for Equity trades and the ImmediateFillModel for Equity Options, Index Options, and Crypto trades.

Slippage

The PublicBrokerageModel uses the NullSlippageModel.

Fees

The PublicBrokerageModel uses the PublicFeeModel.

Buying Power

The PublicBrokerageModel uses the SecurityMarginModel for Equity trades and the OptionMarginModel for Equity Option and Index Option trades. For Crypto trades, it uses the CashBuyingPowerModel for cash accounts and the SecurityMarginModel for margin accounts.

If you have a margin account, the PublicBrokerageModel allows up to 2x leverage for Equity trades. The UseMarginuse_margin order property selects the buying power each order uses at the brokerage.

Settlement

The PublicBrokerageModel uses the ImmediateSettlementModel for margin accounts and the DelayedSettlementModel with the default settlement rules for cash accounts with Equity and Equity Options.

// For US Equities with a cash account:
security.SetSettlementModel(new DelayedSettlementModel(Equity.DefaultSettlementDays, Equity.DefaultSettlementTime));

// For Equity Options with a cash account:
security.SetSettlementModel(new DelayedSettlementModel(Option.DefaultSettlementDays, Option.DefaultSettlementTime));

// For remaining cases:
security.SetSettlementModel(new ImmediateSettlementModel());
# For US Equities with a cash account:
security.set_settlement_model(DelayedSettlementModel(Equity.DEFAULT_SETTLEMENT_DAYS, Equity.DEFAULT_SETTLEMENT_TIME))

# For Equity Options with a cash account:
security.set_settlement_model(DelayedSettlementModel(Option.DEFAULT_SETTLEMENT_DAYS, Option.DEFAULT_SETTLEMENT_TIME))

# For remaining cases:
security.set_settlement_model(ImmediateSettlementModel())

Margin Interest Rate

The PublicBrokerageModel uses the NullMarginInterestRateModel.

Default Markets

The default market of the PublicBrokerageModel is Market.USA for Equity, Equity Options, and Index Options. It's Market.CoinbaseMarket.COINBASE for Crypto.

Account Currency

The PublicBrokerageModel doesn't set a default currency. To change the algorithm's currency from USD to a different currency, see Set Account Currency.

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: