Supported Models
TD Ameritrade
Introduction
This page explains the TDAmeritradeBrokerageModel
, including the asset classes it supports, its default security-level models, and it's default markets.
SetBrokerageModel(BrokerageName.TDAmeritrade, AccountType.Cash); SetBrokerageModel(BrokerageName.TDAmeritrade, AccountType.Margin);
self.set_brokerage_model(BrokerageName.TD_AMERITRADE, AccountType.CASH) self.set_brokerage_model(BrokerageName.TD_AMERITRADE, AccountType.MARGIN)
To view the implementation of this model, see the LEAN GitHub repository.
Asset Classes
The TDAmeritradeBrokerageModel
supports trading US Equities.
Orders
The TDAmeritradeBrokerageModel
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 TDAmeritradeBrokerageModel
supports:
Order Type | Equity |
---|---|
Market | |
Limit | |
Stop market | |
Stop limit |
Time In Force
The TDAmeritradeBrokerageModel
supports the following TimeInForce instructions:
Day
DAY
GoodTilCanceled
GOOD_TIL_CANCELED
GoodTilDate
good_til_date
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 TDAmeritradeOrderProperties { TimeInForce = TimeInForce.Day }); LimitOrder(_symbol, quantity, limitPrice, orderProperties: new TDAmeritradeOrderProperties { TimeInForce = TimeInForce.GoodTilDate(new DateTime(year, month, day)) }); }
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 = TDAmeritradeOrderProperties() order_properties.time_in_force = TimeInForce.DAY self.limit_order(self._symbol, quantity, limit_price, order_properties=order_properties) 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)
Updates
The TDAmeritradeBrokerageModel
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
Fills
The TDAmeritradeBrokerageModel
uses the EquityFillModel.
Slippage
The TDAmeritradeBrokerageModel
uses the NullSlippageModel.
Fees
The TDAmeritradeBrokerageModel
uses the TDAmeritradeFeeModel.
Settlement
The TDAmeritradeBrokerageModel
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: security.set_settlement_model(ImmediateSettlementModel())
Margin Interest Rate
The TDAmeritradeBrokerageModel
uses the NullMarginInterestRateModel.