A multi-strategy options bot for put credit spreads, call credit spreads, and iron condors. EM-based strike placement, Monte Carlo probability, Kelly sizing — every trade scored before a single leg is placed. Crypto today, forex next.
Each strategy targets a specific volatility regime with dedicated strike placement, probability modelling, and exit logic. The regime engine routes signals automatically — bullish to puts, bearish to calls, neutral to condors.
Sells a put below spot, buys a further put for protection. Collects premium while price stays above the short strike. The core income engine — defined max loss, theta works in your favour every day.
Sells a call above spot, buys a further call for protection. Activates when the regime turns mean-reverting — RSI overbought, extended rally, sector caution. Captures premium on the fade.
Put spread plus call spread on the same name. Profits when price stays inside a range through expiry. Built when the regime is neutral — moderate IV, no strong directional bias either way.
Set SignalType: "All" and the regime engine routes automatically: bullish reads fire put spreads, overbought reads fire call spreads, neutral reads build condors. A put and call on the same name simply become an iron condor — no conflicting signals, ever.
Every trade starts with a graded signal. Expected-move strike placement, a 10,000-path Monte Carlo for probability of profit, and a credit-to-risk gate — only signals that clear every threshold reach Grade A.
| Spread | Type | POP | C/R | Grade |
|---|---|---|---|---|
| BTC 62k/60k | Put | 84% | 22% | A |
| ETH 2400/2300 | Put | 81% | 18% | A |
| SOL 145/150 | Condor | 78% | 16% | B |
| BTC 72k/74k | Call | 76% | 20% | B |
| ETH 2100/2000 | Put | 71% | 11% | C |
| Asset | IV Rank | EM 7d | Regime |
|---|---|---|---|
| BTC | 0.62 | 7.2% | SELL |
| ETH | 0.58 | 8.1% | SELL |
| SOL | 0.71 | 11.4% | SELL |
| BNB | 0.34 | 5.0% | NEUTRAL |
| XRP | 0.22 | 4.1% | SKIP |
The infrastructure underneath the strategies. Protection-first leg execution, dual-database history, Kelly calibration, contagion detection, and a live dashboard — all part of the same Rust core, none of it bolted on.
The long protective leg always fills before the short premium leg. If the second leg fails inside the timeout, the first is cancelled and the spread aborts. No naked short exposure, ever.
LegOrder: "ProtectionFirst" LegFillTimeout: 30s MaxSpreadSlippage: 10%
Half-Kelly position sizing recalibrated at 50 / 100 / 200 trade milestones. Win rate and win-loss ratio read straight from your live trade log. Size expressed as max risk, never notional.
Mode: "kelly" Fraction: 0.5 Recalibrate: [50,100,200]
When a sector bellwether reports earnings inside your DTE window, every correlated position is flagged and auto-sized down. The config-driven bellwether map encodes the lesson once and applies it forever.
BellwetherMap: BTC: [ETH, SOL, BNB] ETH: [SOL, BNB]
Caution flags reduce position size automatically. One flag holds full size, two flags halve it, three or more quarter it. Negative gamma regimes halve again on top. No manual judgement at the desk.
1 flag → full 2 flags → half 3+ flags→ quarter
PostgreSQL for production, SQLite for local — same codebase, driver-detected at startup. Sharpe, Sortino, Calmar, max drawdown, and close-reason breakdown computed from day one.
Driver: sqlite | postgres
Metrics: Sharpe · Sortino
Calmar · Drawdown
Trade cards, position-monitor signals, and risk alerts on separate channels. Each card shows grade, POP, EV, credit-to-risk, distance, dynamic size, and any contagion warning — automatically.
#tfb-trade-card #tfb-position-monitor #tfb-manage-alerts
One YAML line switches the bot between scan-only, auto-trade, monitor-only, and full automation. Run two instances — a put bot and a call bot — for live A/B testing of each signal type.
BotMode: "Scanner"
| "AutoTrade"
| "Monitor" | "Full"
A Tokio interval loop checks every open spread every two hours — distance to short strike, capture percentage, days to expiry. Auto-closes at the dynamic capture target or fires a MANAGE signal.
MonitorInterval: 7200s CaptureTarget: dynamic ManageAt: 5% distance
Three independent exit layers — distance, capture, and event — operate concurrently on every open spread. Any layer can close both legs. The defined-risk structure caps the worst case before a single check runs.
Monitors how close spot is to the short strike. When price moves within the configured distance band, the position is flagged for management and reduced or closed before the strike is breached.
Closes winners at the capture target instead of holding to expiry. Healthy positions in calm regimes run to 65%; stressed positions take profit at 40%. The options analogue of a smart trailing exit.
Integrates with the market-watch crash detector. When a compound BTC/ETH/SOL crash exceeds threshold in real time, exposed positions close before the move completes — no waiting for the next monitor cycle.
Paper mode runs every strategy on real option chains — no order placement, no capital risk. Two weeks of paper data builds the conviction, and the Sharpe/Sortino track record, to justify your first live position size.
Run BotMode: "Scanner" and review reports in /paper-trading/. Validate grade quality, expected vs realised capture, and timing against real chains.
Switch to AutoTrade with minimum contracts. Compare real fills and slippage vs paper estimates. Tune capture targets and credit-to-risk thresholds against live data.
Each milestone recalibrates Kelly sizing from your own track record. Sharpe, Sortino, and drawdown — objective data, not gut feel — justify each step up in size.
ThetaFlowBot doesn't poll exchanges — RedisMarketBridge does that once, for the whole bot family. Option chains, implied vol surfaces, and pre-scored signals land in Redis. The bot reads structured opportunity data and executes.
Paper trading is always free. Pay only when you switch to live execution. License key delivered instantly — the bot goes live on the next restart, no config rewrite, no reinstall.
ThetaFlowBot v1.0 — paper trading free forever. Go live when the analytics tell you you're ready. No credit card to start, no lock-in if you continue.