The research drives a trading bot. Every strategy module traces back to a vetted trader. The 11 modules live in bot/lib/setups/; each uses a shared precompute() hook so scan() is O(1) per bar — the runner walks ~2,700 bars × 25 symbols × 11 strategies in seconds.
Platform stack
| Layer | Choice | Why |
|---|---|---|
| Research / backtest / live | QuantConnect (LEAN, Python) | Same code runs backtest and live; 20+ years tick data included |
| Broker — equities / options | Interactive Brokers Pro | DMA, sub-penny commissions, full API |
| Broker — futures | Tradovate | Cheap micro-futures for Raschke / index-futures modules |
| Options / GEX data | SpotGamma or MenthorQ | Karsan's dealer-positioning feed |
| Second-source data | Polygon.io | Corroboration + news timestamping for Episodic Pivot |
| Dashboard | Vercel + static HTML | Human-facing cockpit — not the bot itself |
Strategy → trader mapping (all 11 implemented)
| Setup module | Trader | Side | Notes |
|---|---|---|---|
minervini_sepa | Mark Minervini | Long | Trend Template + VCP pivot break on volume surge |
kullamaggie_breakout | Kristjan Kullamägi | Long | 30–100%+ leader run, 2–8 week tight base, rising 10/20-EMA, volume breakout |
kullamaggie_episodic_pivot | Kristjan Kullamägi | Long | 10%+ catalyst-gap proxy, exceptional volume, sideways/neglected prior base |
kullamaggie_parabolic_short | Kristjan Kullamägi | Short | 50–100%+ climax run, 3–5+ up days, topping failure into 10/20-MA target |
shannon_avwap | Brian Shannon, CMT | Long | AVWAP reclaim from confirmed swing low + MTF alignment |
raschke_holy_grail | Linda Raschke | Both | ADX(14) > 30 + 20-EMA pullback + resumption |
raschke_turtle_soup | Linda Raschke | Both | Failed 20-day Donchian breakout — fade back into range |
raschke_80_20 | Linda Raschke | Both | Range-edge close + next-day probe-and-reverse |
brandt_classical | Peter L. Brandt | Both | Double bottom / double top neckline break (semi-auto in prod) |
bruzzese_rs | Vincent Bruzzese | Both | SPY-regime gate × cumulative RS vs SPY × prior-extreme break |
karsan_gex | Cem Karsan | Both | Realized-vol regime proxy → fade or continue large daily moves |
Meta-layers
Three traders don't generate signals but shape the infrastructure:
- Dr. Brett Steenbarger → the journal / report-card framework in
lib/journal/— auto-logged process score, rule violations, and the daily narrative. - Lance Breitstein & Tom Hougaard → the risk manager's hard-coded discipline rules (per-trade cap, daily loss cap, drawdown kill-switch) so the bot enforces what a human trader can't reliably enforce mid-session.
- Vincent Bruzzese's walk-away analysis — MFE / MAE vs actual exit, surfaced per trade.
Deliberately NOT automated
- Breitstein's A+ capitulation fades. Pure tape-reading; attempting to code it produces the canonical "bot shorts the bottom tick" disaster.
- Hougaard's discretionary size-ups. His edge is psychological — coding "when I feel conviction, 3x size" cannot work.
System flow
┌─────────────────────────────┐
│ DATA LAYER │
broker feeds ──────► │ - price (QC + Polygon) │
SpotGamma ─────────► │ - fundamentals │
news APIs ─────────► │ - options chain / GEX │
└──────────────┬──────────────┘
▼
┌─────────────────────────────┐
│ UNIVERSE + REGIME │
│ - Minervini Trend Template │
│ - Bruzzese RS table │
│ - SPY regime + GEX regime │
└──────────────┬──────────────┘
▼
┌───────────────── SETUP MODULES ────────────────┐
│ Minervini · Kullamägi · Shannon · Raschke │
│ Brandt · Bruzzese · Karsan │
└──────────────┬──────────────────┬──────────────┘
▼ ▼
┌──────────────────┐ ┌────────────────────┐
│ RISK MANAGER │ │ STRATEGY ALLOCATOR │
│ (Hougaard/ │◄►│ (regime-weighted) │
│ Breitstein) │ └────────────────────┘
└─────────┬────────┘
▼
┌──────────────────┐
│ EXECUTION ENGINE │ → IBKR / Tradovate
└─────────┬────────┘
▼
┌──────────────────┐ ┌────────────────────┐
│ JOURNAL │─►│ DASHBOARD │
│ (Steenbarger) │ │ (live cockpit) │
└──────────────────┘ └────────────────────┘
Promotion pipeline
A strategy doesn't reach live capital by decree. Three gates:
- Backtest vetting. The per-config YAML (
bot/backtests/configs/) defines CAGR / Sharpe / max-drawdown / profit-factor thresholds, tuned to each trader's known characteristics — lower Sharpe for Kullamägi's asymmetric method, higher for Minervini's systematic one. A backtest that fails regime-conditional expectancy (positive in only one of three SPY regimes) is rejected as a single-regime overfit. - Paper trading. Passed strategies run on IBKR paper for 90 days without intervention before live capital.
- Live capital. Starts at $10k per strategy. Expands only on evidence.