been using both IB and tastyworks for 4 months now. the thing is matters for algo trading.
background #
started with interactive brokers in january when i went live. added tastyworks in march specifically for options premium selling.
both have python APIs. both work. neither is perfect.
interactive brokers (IB) #
what i use it for:
- primary execution for spreads
- futures trading (ES, NQ)
- portfolio margin account
API: ib_insync
from ib_insync import IB, Stock, Option, MarketOrder
ib = IB()
ib.connect('127.0.0.1', 7497, clientId=1)
# Get option chains
contracts = ib.reqContractDetails(Option('SPX', '20230519', 4100, 'C'))
# Place order
order = MarketOrder('BUY', 1)
trade = ib.placeOrder(contract, order)
pros:
- covers everything (stocks, options, futures, forex, crypto)
- real-time data included if you meet activity requirements
- portfolio margin = way better capital efficiency
- TWS gateway runs 24/7, auto-reconnects
- mature API, tons of examples on github
cons:
- API is complex AF (took me 2 weeks to fully understand)
- TWS required (java application, resource heavy)
- order rejection messages are cryptic
- must maintain $100k minimum for portfolio margin
- paper trading environment often has different behavior than live
cost:
- $0.65 per contract for options
- $0.25 per contract for futures
- tiered pricing reduces cost at volume
- $10/month market data (waived if you trade enough)
tastyworks #
what i use it for:
- options-focused strategies
- premium selling plays
- backup execution if IB has issues
API: tastytrade (unofficial python wrapper)
from tastytrade import Session, Account
from tastytrade.instruments import get_option_chain
session = Session('username', 'password')
account = Account.get_accounts(session)[0]
# Get option chains (way easier than IB)
chain = get_option_chain(session, 'SPX')
# Place spread order
order = {
'order-type': 'Limit',
'time-in-force': 'Day',
'price': 0.42,
'legs': [...]
}
pros:
- API designed for options traders (easier to use)
- spreads are native orders (not leg-by-leg like some brokers)
- commission-free stock trades
- mobile app is actually good
- fast order fills on spreads
- great for premium selling strategies
cons:
- no futures support (options only + stocks)
- no portfolio margin (reg-t only)
- API documentation is sparse
- unofficial python library (could break)
- paper trading environment doesn’t exist
- must test everything live with small size
cost:
- $1.00 per contract to open
- $0 to close if under $0.65
- no monthly fees
- free real-time data
which is better? #
depends what you’re doing.
for algo traders who need:
- everything: IB wins (stocks, options, futures, global markets)
- portfolio margin: IB only option
- futures: IB only option
- options premium selling: tastyworks easier API, better fills
- beginners: tastyworks simpler to code
- advanced strategies: IB more flexible
my setup #
i use both:
-
primary execution: IB
- futures trades
- complex multi-leg options
- anything requiring portfolio margin
-
secondary execution: tastyworks
- simple credit spreads
- premium selling strategies
- backup if IB has downtime
-
data source: polygon.io
- neither broker for market data
- polygon is cleaner, faster, more reliable
code comparison #
placing a credit spread:
IB (more complex):
# IB requires leg-by-leg contract definition
short_leg = Option('SPX', '20230519', 4100, 'P', 'SMART')
long_leg = Option('SPX', '20230519', 4050, 'P', 'SMART')
# Create combo order
combo = ib.ComboLeg()
# ... 20 more lines of setup code
tastyworks (simpler):
# Tastyworks handles spread as single order
spread = {
'symbol': 'SPX',
'expiration': '2023-05-19',
'legs': [
{'strike': 4100, 'type': 'put', 'action': 'sell'},
{'strike': 4050, 'type': 'put', 'action': 'buy'}
]
}
for credit spreads, tastyworks is way easier to code.
reliability #
IB:
- 99.5% uptime in my experience
- occasional disconnects during high volatility
- TWS gateway needs restart every few days
- order rejections rare but cryptic
tastyworks:
- 99.8% uptime
- faster order fills on spreads
- API occasionally rate-limits (no warning)
- mobile app works when API is down
support #
IB:
- phone support exists but slow
- chat support hit or miss
- community forums helpful
- documentation full but dense
tastyworks:
- chat support is fast
- phone support good
- API support non-existent (unofficial library)
- documentation is sparse
for new algo traders #
start with tastyworks if you’re only trading options. simpler API, easier to learn.
switch to IB when you need:
- portfolio margin
- futures
- global markets
- more complex strategies
i started with IB because i knew i’d need everything eventually. would’ve been easier to learn on tastyworks first.
relevant discussions #
been following the trading reviews and vendor discussions on NexusFi. good place to see what other algo traders are using and why.
cost comparison (my actual costs) #
april 2023:
- IB commissions: $284 (438 contracts)
- tastyworks commissions: $89 (89 contracts)
- total: $373 in commissions
at my volume, IB is slightly cheaper per contract but tastyworks has better fills which offset the higher commission.
recommendation #
if you’re starting out: tastyworks for options-only algo trading
if you’re serious: IB for everything, tastyworks for options backup
if you’re broke: IB has $0 minimum, tastyworks needs $2k
i’m keeping both. redundancy matters when your code is placing real orders with real money.
2:38am. spent way too long writing this but these broker choices matter. wrong API can cost you hours of dev time.
-AK