A python client library for the TD Ameritrade API.
The enums module provides comprehensive constants and enumerations for all TD Ameritrade API parameters. These values ensure valid API requests and provide validation for order parameters, streaming field IDs, and endpoint arguments.
from td.enums import *Trading session specifications for when orders should be executed.
class ORDER_SESSION:
NORMAL: str = 'NORMAL'
AM: str = 'AM'
PM: str = 'PM'
SEAMLESS: str = 'SEAMLESS'Values:
NORMAL: Regular trading hours (9:30 AM - 4:00 PM ET)AM: Pre-market session (4:00 AM - 9:30 AM ET)PM: After-hours session (4:00 PM - 8:00 PM ET)SEAMLESS: Extended hours trading sessionTime-in-force specifications for order validity periods.
class DURATION:
DAY: str = 'DAY'
GOOD_TILL_CANCEL: str = 'GOOD_TILL_CANCEL'
FILL_OR_KILL: str = 'FILL_OR_KILL'Values:
DAY: Order valid for current trading day onlyGOOD_TILL_CANCEL: Order remains active until filled or manually canceledFILL_OR_KILL: Order must be filled immediately and completely or canceledDefines the strategy type for single orders versus complex order combinations.
class ORDER_STRATEGY_TYPE:
SINGLE: str = 'SINGLE'
OCO: str = 'OCO'
TRIGGER: str = 'TRIGGER'Values:
SINGLE: Individual standalone orderOCO: One-Cancels-Other order pairTRIGGER: Conditional trigger orderSpecifications for how order quantities are interpreted.
class QUANTITY_TYPE:
ALL_SHARES: str = 'ALL_SHARES'
DOLLARS: str = 'DOLLARS'
SHARES: str = 'SHARES'Values:
ALL_SHARES: All available shares in the positionDOLLARS: Dollar amount rather than share countSHARES: Specific number of sharesAsset classifications for different instrument types.
class ORDER_ASSET_TYPE:
EQUITY: str = 'EQUITY'
OPTION: str = 'OPTION'
INDEX: str = 'INDEX'
MUTUAL_FUND: str = 'MUTUAL_FUND'
CASH_EQUIVALENT: str = 'CASH_EQUIVALENT'
FIXED_INCOME: str = 'FIXED_INCOME'
CURRENCY: str = 'CURRENCY'Values:
EQUITY: Common stocks and ETFsOPTION: Options contractsINDEX: Index instrumentsMUTUAL_FUND: Mutual fund sharesCASH_EQUIVALENT: Money market and cash equivalentsFIXED_INCOME: Bonds and fixed income securitiesCURRENCY: Foreign exchange instrumentsMulti-leg options strategies and complex order combinations.
class COMPLEX_ORDER_STRATEGY_TYPE:
NONE: str = 'NONE'
COVERED: str = 'COVERED'
VERTICAL: str = 'VERTICAL'
BACK_RATIO: str = 'BACK_RATIO'
CALENDAR: str = 'CALENDAR'
DIAGONAL: str = 'DIAGONAL'
STRADDLE: str = 'STRADDLE'
STRANGLE: str = 'STRANGLE'
COLLAR_SYNTHETIC: str = 'COLLAR_SYNTHETIC'
BUTTERFLY: str = 'BUTTERFLY'
CONDOR: str = 'CONDOR'
IRON_CONDOR: str = 'IRON_CONDOR'
VERTICAL_ROLL: str = 'VERTICAL_ROLL'
COLLAR_WITH_STOCK: str = 'COLLAR_WITH_STOCK'
DOUBLE_DIAGONAL: str = 'DOUBLE_DIAGONAL'
UNBALANCED_BUTTERFLY: str = 'UNBALANCED_BUTTERFLY'
UNBALANCED_CONDOR: str = 'UNBALANCED_CONDOR'
UNBALANCED_IRON_CONDOR: str = 'UNBALANCED_IRON_CONDOR'
UNBALANCED_VERTICAL_ROLL: str = 'UNBALANCED_VERTICAL_ROLL'
CUSTOM: str = 'CUSTOM'Trade instructions specifying buy/sell actions for different asset types.
class ORDER_INSTRUCTIONS:
BUY: str = 'BUY'
SELL: str = 'SELL'
BUY_TO_COVER: str = 'BUY_TO_COVER'
SELL_SHORT: str = 'SELL_SHORT'
BUY_TO_OPEN: str = 'BUY_TO_OPEN'
BUY_TO_CLOSE: str = 'BUY_TO_CLOSE'
SELL_TO_OPEN: str = 'SELL_TO_OPEN'
SELL_TO_CLOSE: str = 'SELL_TO_CLOSE'
EXCHANGE: str = 'EXCHANGE'Values:
BUY: Buy shares or long positionSELL: Sell shares or close long positionBUY_TO_COVER: Cover short positionSELL_SHORT: Create short positionBUY_TO_OPEN: Open long options positionBUY_TO_CLOSE: Close short options positionSELL_TO_OPEN: Open short options positionSELL_TO_CLOSE: Close long options positionEXCHANGE: Exchange or conversion transactionExecution type specifications for trade orders.
class ORDER_TYPE:
MARKET: str = 'MARKET'
LIMIT: str = 'LIMIT'
STOP: str = 'STOP'
STOP_LIMIT: str = 'STOP_LIMIT'
TRAILING_STOP: str = 'TRAILING_STOP'
MARKET_ON_CLOSE: str = 'MARKET_ON_CLOSE'
EXERCISE: str = 'EXERCISE'
TRAILING_STOP_LIMIT: str = 'TRAILING_STOP_LIMIT'
NET_DEBIT: str = 'NET_DEBIT'
NET_CREDIT: str = 'NET_CREDIT'
NET_ZERO: str = 'NET_ZERO'Values:
MARKET: Execute at current market priceLIMIT: Execute at specified price or betterSTOP: Stop loss order triggered at stop priceSTOP_LIMIT: Stop order with limit price executionTRAILING_STOP: Stop loss that trails the market priceMARKET_ON_CLOSE: Execute at closing auctionEXERCISE: Exercise options contractTRAILING_STOP_LIMIT: Trailing stop with limit priceNET_DEBIT: Multi-leg order with net debitNET_CREDIT: Multi-leg order with net creditNET_ZERO: Multi-leg order with no net costConstants for option chain API requests and filtering.
class OPTION_CHAIN_STRATEGY:
SINGLE: str = 'SINGLE'
ANALYTICAL: str = 'ANALYTICAL'
COVERED: str = 'COVERED'
VERTICAL: str = 'VERTICAL'
CALENDAR: str = 'CALENDAR'
STRANGLE: str = 'STRANGLE'
STRADDLE: str = 'STRADDLE'
BUTTERFLY: str = 'BUTTERFLY'
CONDOR: str = 'CONDOR'
DIAGONAL: str = 'DIAGONAL'
COLLAR: str = 'COLLAR'
ROLL: str = 'ROLL'
class OPTION_CHAIN_RANGE:
ITM: str = 'ITM'
NTM: str = 'NTM'
OTM: str = 'OTM'
SAK: str = 'SAK'
SBK: str = 'SBK'
SNK: str = 'SNK'
ALL: str = 'ALL'
class OPTION_CHAIN_EXP_MONTH:
JAN: str = 'JAN'
FEB: str = 'FEB'
MAR: str = 'MAR'
APR: str = 'APR'
MAY: str = 'MAY'
JUN: str = 'JUN'
JUL: str = 'JUL'
AUG: str = 'AUG'
SEP: str = 'SEP'
OCT: str = 'OCT'
NOV: str = 'NOV'
DEC: str = 'DEC'
class OPTION_CHAIN_OPTION_TYPE:
S: str = 'S'
NS: str = 'NS'
ALL: str = 'ALL'Dictionary containing validation rules and parameter requirements for API endpoints.
ENDPOINT_ARGUMENTS: Dict[str, Dict] = {
# Comprehensive validation dictionary for all API endpoints
# Contains required parameters, valid values, and constraints
}Valid combinations of parameters for historical price data requests.
VALID_CHART_VALUES: Dict[str, Dict] = {
# Valid period types, frequencies, and their combinations
# Used to validate get_price_history() parameters
}Field ID mappings for streaming data subscriptions.
STREAM_FIELD_IDS: Dict[str, Dict] = {
# Field ID mappings for different streaming services
# Maps human-readable field names to numeric IDs
}Field mappings for CSV output formatting of streaming data.
CSV_FIELD_KEYS: Dict[str, str] = {
# Level 1 data field mappings for CSV output
}
CSV_FIELD_KEYS_LEVEL_2: Dict[str, str] = {
# Level 2 data field mappings for CSV output
}from td.orders import Order, OrderLeg
from td.enums import ORDER_TYPE, ORDER_SESSION, DURATION, ORDER_INSTRUCTIONS, ORDER_ASSET_TYPE
# Create a limit order using enums
order = Order()
order.order_type(ORDER_TYPE.LIMIT)
order.order_session(ORDER_SESSION.NORMAL)
order.order_duration(DURATION.DAY)
order.order_price(150.00)
# Create order leg using enums
leg = OrderLeg()
leg.order_leg_instruction(ORDER_INSTRUCTIONS.BUY)
leg.order_leg_asset(ORDER_ASSET_TYPE.EQUITY, 'AAPL')
leg.order_leg_quantity(100)
order.add_order_leg(leg)from td.enums import COMPLEX_ORDER_STRATEGY_TYPE, ORDER_INSTRUCTIONS, ORDER_ASSET_TYPE
# Vertical spread using enums
vertical = Order()
vertical.order_type(ORDER_TYPE.NET_DEBIT)
vertical.complex_order_type(COMPLEX_ORDER_STRATEGY_TYPE.VERTICAL)
vertical.order_session(ORDER_SESSION.NORMAL)
vertical.order_duration(DURATION.DAY)
# Buy leg
buy_leg = OrderLeg()
buy_leg.order_leg_instruction(ORDER_INSTRUCTIONS.BUY_TO_OPEN)
buy_leg.order_leg_asset(ORDER_ASSET_TYPE.OPTION, 'AAPL_030724C150')
buy_leg.order_leg_quantity(1)
# Sell leg
sell_leg = OrderLeg()
sell_leg.order_leg_instruction(ORDER_INSTRUCTIONS.SELL_TO_OPEN)
sell_leg.order_leg_asset(ORDER_ASSET_TYPE.OPTION, 'AAPL_030724C155')
sell_leg.order_leg_quantity(1)
vertical.add_order_leg(buy_leg)
vertical.add_order_leg(sell_leg)from td.option_chain import OptionChain
from td.enums import OPTION_CHAIN_STRATEGY, OPTION_CHAIN_RANGE, OPTION_CHAIN_OPTION_TYPE
# Build option chain request with enum filters
chain = OptionChain()
chain.add_chain_key('symbol', 'AAPL')
chain.add_chain_key('strategy', OPTION_CHAIN_STRATEGY.SINGLE)
chain.add_chain_key('range', OPTION_CHAIN_RANGE.ITM)
chain.add_chain_key('optionType', OPTION_CHAIN_OPTION_TYPE.ALL)
# Get option chain data
option_data = client.get_options_chain(chain)from td.enums import STREAM_FIELD_IDS
# Subscribe to specific Level 1 fields
streaming_client.level_one_quotes(
symbols=['AAPL', 'MSFT'],
fields=['0', '1', '2', '3', '8', '9'] # Symbol, bid, ask, last, volume, last size
)
# Use field mappings for readable code (if available)
level1_fields = ['0', '1', '2', '3'] # Common Level 1 fields
streaming_client.level_one_quotes(['GOOGL'], fields=level1_fields)from td.enums import ENDPOINT_ARGUMENTS, VALID_CHART_VALUES
# Validate price history parameters
period_type = 'day'
frequency_type = 'minute'
if period_type in VALID_CHART_VALUES:
valid_frequencies = VALID_CHART_VALUES[period_type].get(frequency_type, [])
if 1 in valid_frequencies:
history = client.get_price_history(
symbol='AAPL',
period_type=period_type,
frequency_type=frequency_type,
frequency=1
)Install with Tessl CLI
npx tessl i tessl/pypi-td-ameritrade-python-api