Install
openclaw skills install ibkr-trader-toolkitInteractive Brokers options & stock trading assistant. Provides real-time portfolio Greeks, option chain analysis, McMillan/Overby strategy recommendations, P&L statistics, Wheel strategy tracking, earnings warnings, risk simulation, and a complete toolkit for options traders. Use this skill whenever the user asks about specific options trades, position risk, buy/sell recommendations, IV environment, P&L, wheel strategy, earnings impact on options, or any IBKR account data — even if they don't explicitly mention "IBKR". For stock price queries, always use market_quote.py instead of web search.
openclaw skills install ibkr-trader-toolkitReal-time data, options analysis, and portfolio risk for Interactive Brokers — all via JSON-emitting CLI scripts.
Core rule: Scripts produce data. You (the model) produce the analysis.
| User asks about... | Example phrasing |
|---|---|
| Stock / ETF prices | "What's SPY at?" "Current AAPL price" |
| Option chains, Greeks, IV | "Show me AAPL puts for next month" |
| Strategy ideas | "Should I sell a put on MU?" |
| Position risk | "Am I too long delta?" |
| P&L, win rate, history | "How are my wheel trades doing?" |
| Earnings risk | "Does ARM report before my call expires?" |
| Alerts / monitoring | "Warn me if SPY IV > 80%ile" |
Fire even if the user doesn't mention IBKR — if they're asking about their positions or P&L, this skill is the source of truth.
Critical: For stock prices, always use market_quote.py. Never web-search a stock price — the web is minutes-to-hours stale.
Run these in order, then synthesize:
| Step | Command | Why |
|---|---|---|
| 1 | portfolio_positions.py | Know existing exposure first |
| 2 | earnings_calendar.py SYM --days 60 | Avoid earnings inside DTE |
| 3 | options_analyzer.py SYM --outlook bullish --risk-profile conservative --iv-context | Get IV environment + candidate strikes |
| 4 | options_chain.py SYM --dte-min 25 --dte-max 45 | Live mid prices for chosen strikes |
Your recommendation must include: strike • delta • premium • breakeven • annualized yield • earnings/IV warnings.
| Step | Command |
|---|---|
| 1 | portfolio_positions.py → positions + Greeks |
| 2 | options_daily.py → expiry warnings + IV summary |
| 3 | pnl_analytics.py --days 7 → recent realized P&L |
risk_simulator.py --add "SYM STRIKE EXPIRY R ACTION QTY"
Flag any of:
wheel_tracker.py --summary
Returns per-symbol: stage (short_put / assigned / covered_call / called_away), cumulative premium, days in cycle, annualized return.
| Script | When to use |
|---|---|
market_quote.py SYM [SYM2 ...] | Any stock/ETF price question |
portfolio_positions.py | What do I own? Portfolio Greeks |
options_chain.py SYM | Strikes survey + IV by expiry |
options_analyzer.py SYM --outlook X --risk-profile Y --iv-context | Strategy ideas given outlook |
options_daily.py | Morning/EOD options report (start here) |
pnl_analytics.py [--days N] | Realized P&L, win rate, best/worst |
risk_simulator.py --add "..." | Pre-trade Greeks impact |
earnings_calendar.py SYM ... | Earnings within N days |
technical_indicators.py SYM | RSI / MA / BB / ATR |
wheel_tracker.py --summary | Wheel cycle status |
alerts_monitor.py | Threshold rules (cron-friendly) |
All scripts:
--output FILE)IBKR_HOST, IBKR_PORT, IBKR_CLIENT_ID_BASE, IBKR_MARKET_DATA_TYPE)Before suggesting any options trade, verify all three:
options_analyzer.py --iv-context. Don't sell premium in low-IV; don't buy premium in high-IV.earnings_calendar.py. IV crush after earnings flips the math.portfolio_positions.py. If already +5000 delta, adding more is wrong direction-of-thesis or not.State each check explicitly:
"IV environment: low (ratio 0.7); earnings: none in next 45 days; current net delta: +1,200."
This lets the user audit the reasoning.
| Constraint | What it means |
|---|---|
| JSON in, judgement out | The script's recommendations list is candidate data, not a final answer. Re-rank against the user's situation. |
| Real-time by default | IBKR_MARKET_DATA_TYPE=1. If quotes look frozen, check market hours + subscriptions. |
| One clientId per script | If you see clientId already in use, wait a few seconds or bump IBKR_CLIENT_ID_BASE. |
| Cache chains across calls | options_chain.py --output /tmp/chain.json then options_analyzer.py --chain-file /tmp/chain.json saves IBKR roundtrips. |
Read on demand when the user's question warrants it:
references/strategies.md — full McMillan/Overby strategy library + selection matrixreferences/greeks_primer.md — practical Delta/Gamma/Vega/Theta interpretationreferences/wheel_strategy.md — strike/DTE selection, roll-vs-assign decision treereferences/troubleshooting.md — connection errors, subscription issues