Options Trading Bot

v2.0 Felipe's Rules
Connecting...
Total P&L
$0.00
Win Rate
0%
Open Positions
0
Trades
0
Bot Status
Direction

Price Chart

MA20
MA40
MA100
MA200
Bollinger
RSI
RSI MA
Order Blocks
Type a ticker and press Go

Options Chain

Select a ticker to view options

📊 Technical Analysis

Checklist loads when bot scans this ticker

✅ Entry Checklist

Checklist loads when bot scans this ticker

🔍 Real-Time Scanner

○ Connecting…
● MARKET CLOSED Auto-scan inactive
Last scan: Next scan: Cycle: 0
Waiting for market open to auto-scan...

🎯 Ticker Screener

CRITERIA: Market Cap > $1B Volatility > 30% Target Gap ≥ 20%
Last screen: Cache age:
Loading screener results...
Trend BB
📈 CALL when score > 0.75 & all 3 BB trends UP  |  📉 PUT when score < −0.75 & all 3 BB trends DOWN
🎯 5% OTM strike (spread < 10%) · 📐 ATR sizing (5% risk: shares = acct·5%/(2·ATR), contracts = round(shares/(Δ·100)))
💰 Take profit at +20% · 🔁 On −50% loss: buy same #contracts, recompute avg cost, new TP at +20%
🏦 IB account DUM545361 — paper-only fallback if Read-Only
P&L
$0.00
Win Rate
0%
ROI
0%
Trades
0W / 0L
Open
0
Avg Win
$0.00
Avg Loss
$0.00
Profit Factor
0.00x
Total Trades
0

📈 Cumulative P&L Comparison

● Trend BB

📋 Trade Log

StrategyTickerDir ScoreSharesStock $StrikeExpiry Entry $Entry Time Exit $Exit TimeReason P&L %P&L $Live P&LStop
No trades yet

[Selected Strategy] v8.A.1 — Combo Grid Winner (Title-Truncation Fix) (dd<-30% + (has_chair OR score≥20) + no_10% + no_micro + ATR-trail 3.0x + PL 25% + 126d)

⚠ HONEST MDD WARNING (added 2026-05-10): Backtest MDD reported below uses exit-only snapshots. The daily mark-to-market sim shows real MDDs are dramatically larger when concurrent positions are tracked: Cash 20% real MDD -22.8% (vs reported -8.2%), V10 Smart real MDD -59.1% (vs reported -8.2%), V7 Aggressive real MDD -70.5% (vs reported -16.3%). V10 and V7 require holding through severe drawdowns and would likely trigger margin calls on most accounts. Currently in 90-day paper-trading validation phase — do NOT scale to real money until live performance confirms backtest assumptions.
[v8.A.1] Combo grid winner + title-truncation fix (deployed 2026-05-10): v8.A.1 fixes a bug where OpenInsider compresses multi-role titles — Chairmen filed as 'Director' (e.g. GEHC's Larry Culp $5M buy) were being rejected. The fix accepts has_chair OR score≥20: cluster breadth (CEO+CFO+Director+GC) implies real top-rank conviction even when the chairman label is missing. Recovers 15 historical trades (11 winners, 73% WR) without raising drawdown.

v8.A.1 targets the archetype: multi-rank C-suite + board buying during deep drawdowns in non-micro-cap stocks, with no 10%-owner involvement. Four filters on the v4 baseline produce 48 high-conviction trades over 5 years. Out-of-sample validated on 2024-26 holdout (TEST WR 69%, comparable to TRAIN WR 77%).

v8.A.1 Entry filters

  • dd_from_6mo_high < -30% — stock is deeply stressed (stretched insider conviction signal)
  • has_chair OR score ≥ 20 — top-rank present (Chairman explicit OR multi-C-suite breadth)
  • has_10pct = 0 — no 10%-owner involvement (drops institutional position-building)
  • cap_tier != "Micro <$300M" — avoid pump-and-dump zone (small/mid/large only)
  • Baseline: VIX < 25 at signal date (regime filter)

Score formula (advisory only — not a hard filter)

score = 2 × n_insiders
      + 5 if any CEO buying     + 4 if any CFO buying
      + 4 if any Chairman/COB   + 3 if any President/Pres
      + 2 if any COO            + 2 if any Director/Dir
      + 1 if any 10%-owner buying

(v8.A does NOT use score as a hard cutoff — has_chair filter
 implicitly captures ~all score-20+ clusters anyway.)

Exit rules (extended horizon)

  • Profit-lock: trailing stop activates only after trade is up +25%
  • ATR-trail: stop = running max close − 3.0 × ATR(14) (tightened from 3.5 — sweep showed strict win)
  • Time stop: 126 trading days max (was 63 in v6 — Wharton finds insider alpha extends to 6-12 months for the high-quality subset)
  • Stop fills: gap-down → next OPEN; intraday → trail level

Position sizing (lower than v6 for smaller sample)

  • 20% of account equity per trade (down from v6.B's 25% — given v8.A's smaller n=33 sample)
  • For multiple concurrent signals: cap at 5 simultaneous (≤100% deployment)
  • Conservative variant: 15% (CAGR ~22%, MDD ~5%)
  • Aggressive variant: 25% (CAGR ~28%, MDD ~8%)

Robustness check (out-of-sample)

Train 2021-23:n=16, WR 68.8%, Sharpe 1.20
Test 2024-26:n=17, WR 82.4%, Sharpe 1.46
Test/Train Sharpe ratio +1.22 — only deployment candidate where holdout beat training period.

[Today's v8.A Candidates]

Live signals not yet generated. Run python scripts/v8_live_signals.py to populate.

[V10 Paper-Trading 90-Day Validation] Live bot started 2026-05-10. Decision day: 2026-08-08.

DAYS ELAPSED
DAYS REMAINING
EXPECTED P&L
ACTUAL P&L (live)
Decision matrix at day 90 — ✅ continue V10 if MDD < -45% & TOP WR ≥ 80% · ⚠ scale back to 2× Reg-T 40% if -45% < MDD < -60% · ❌ halt & reassess if MDD > -60% or margin call
Position Sizing:
Starting Capital: V10 Smart: ~$1.34M @ -8.2% MDD · V7 Aggressive: ~$4.63M @ -16.3% MDD

[Performance Metrics] (5-year backtest 2021-2026, $10K start, 20% per-trade sizing, 126d horizon)

N TRADES
42
WIN RATE
85.7%
EXP. VALUE
19.91%
PROFIT FACTOR
6.76
SHARPE (ann)
1.03
MAX DD (curve)
-8.2%
TOTAL P&L
$38.7K
FINAL EQUITY
$48.7K
CAGR
34.4%
AVG HOLD
85.9d
TRADES/YR
~8
ON $50K ACCT
$243.7K
AVG WINNER
+27.26%
AVG LOSER
-24.19%
MEDIAN
18.85%
BEST
+117%
WORST
-40.76%
EXPECTANCY
19.91%

[Equity Curve + Drawdown]

Equity (right axis, log scale, $) Drawdown (left axis, %)

[Trade Log] — 42 closed backtest, 6 in-progress, 5 live open

Status Entry Exit Ticker Score N Sector CapTier VIX DD 6mo Cluster $ Entry $ Exit $ Return Hold Reason

📋 Trade Log — v3 universe; v4 column shows VIX-pass status

Date Ticker Score Roles Sector VIX SPY trend 60d ret Trade Ret Hold Exit v4

🚀 Autonomous P&L Maximization — sweep of leverage / sizing / Kelly / filter / options variants on v4

Goal: leverage v4's high WR (75.9%) and low DD (-22%) to maximize total P&L. Tested 16 variants including margin-style leverage (1x/2x/3x/4x), Kelly-fraction sizing, volatility-targeted sizing, tighter cluster filters (n_insiders>=3 or chairman-required), and options at 5/10/15/25/35/50% sizing with the -50% hard option stop REMOVED (per prior verdict).

⭐ MAX P&L (within survivable DD)

EQUITY 2x margin
P&L: $2.33M (final $2.34M)
CAGR: 221.7% · Sharpe 1.06 · PF 9.67
Max DD: -47.0% · WR 75.9%
7× v4 baseline P&L. Severe DD but survivable on a disciplined account.

🎯 MAX SHARPE (best risk-adjusted)

EQUITY n_insiders>=3 (full deploy)
P&L: $14.9K (final $24.9K)
CAGR: 21.6% · Sharpe 1.38 · PF 6.94
Max DD: -16.4% · WR 83.3%
Higher quality sub-cohort (n=12), lower P&L but smoothest curve.

All variants ranked by total P&L

Variant N WR EV/trade PF Sharpe Max DD Final $ P&L $ CAGR

Equity curves — top leverage variants vs baseline (log scale)

Drawdown

3x margin → $4.80M (DD -71%, account-blow-up risk) 2x margin → $2.34M (DD -47%) ⭐ best practical v4 100% → $336K (DD -24%) Full Kelly 68% → $129K (DD -17%)
Key findings:
  1. Margin leverage on v4 equity is the highest-impact upgrade. 2x margin gives 7× the v4 P&L ($2.34M vs $326K), 3x gives 14.7× ($4.80M). Sharpe is unchanged because both returns and vol scale linearly. The constraint is drawdown tolerance.
  2. 3x margin pushes to -71% DD. Real brokers will issue margin calls before that. 2x at -47% is more realistic to hold through. 4x hits -98% (account blow-up).
  3. Full Kelly says 68% sizing. Less than v4's 100%. Why? Kelly's variance penalty assumes possible total wipeout per trade — but v4's worst trade is only -22%, so 100% is "safe enough" on this distribution. Kelly is too conservative here.
  4. Removing the -50% hard option stop (per prior verdict) helped a lot. Options no-stop 50% gives $189K P&L (vs $13K with the hard stop), demonstrating that gamma-amplified mid-trade drawdowns recover most of the time on v4 setups.
  5. n_insiders>=3 sub-cohort (only 12 trades) has best Sharpe (1.38) and tiniest DD (-16%). If you want a smooth curve, this is the cleanest signal — but only ~2.5 setups/year.
  6. Vol-targeted sizing HURTS because it allocates less to the volatile names where the moonshot winners live (e.g., HCWB +137%).
  7. chair/director-required filter is too aggressive — only 2 trades survive in the v4 sub-universe, no statistical signal.
RECOMMENDATION: Trade v4 entry rules with 2x margin for max practical P&L. Expected: ~7× v4's P&L ($2.34M on $10K → $2.35M over 5y, CAGR 222%) at the cost of -47% peak drawdown. If you can stomach more, 3x gives ~$4.8M but -71% DD requires near-perfect discipline (margin calls likely). Skip Kelly sizing here — it under-sizes vs the actual data.

🚀 Further Optimization — exit-logic + capital-rotation tweaks on v4

Tested 7 ideas: (1) 2x margin × n≥3 combo, (2) wider profit-lock (PL=15%), (3) looser trail (8/10/15/18/20%), (4) ATR-based trail (2.0/2.5/3.0/4.0×ATR14), (5) pyramid retest on v4 cohort, (6) capital rotation (idle equity in SPY), (7) reduced options slippage (skipped — options didn't compete).

⭐ #1 BEST SINGLE CHANGE (no margin)

v4 + ATR-trail 3.0xATR + 1x
P&L: $1.17M · CAGR 177.7%
Sharpe 1.24 · PF 10.24 · WR 72.4%
MaxDD -23.8%
3.6× v4 baseline P&L from a single change. Same DD (-24%).

⭐ BEST P&L w/ MDD < -50%

v4 + PL 15% + 2x margin
P&L: $5.36M · CAGR 284.2%
Sharpe 1.19 · PF 11.00 · WR 82.8%
MaxDD -47.0%
16× v4 baseline. WR jumps to 83%.

⭐ MAX P&L (aggressive, MDD just over -50%)

v4 + ATR-trail 3.0x + 2x margin
P&L: $15.82M · CAGR 384.2%
Sharpe 1.24 · PF 10.24 · WR 72.4%
MaxDD -51.5%
50× v4 baseline. Aggressive — MDD borderline ruinous.

All variants ranked by total P&L

Variant N WR EV PF Sharpe Sortino Max DD P&L $ CAGR

Top equity curves (log scale)

Drawdown comparison

ATR-trail 3.0x + 2x margin → $15.83M (DD -52%) ⚠️ PL 15% + 2x margin → $5.37M (DD -47%) ATR-trail 3.0x (no margin) → $1.18M (DD -24%) v4 baseline → $336.0K (DD -24%)
Top empirical findings:
  1. ATR-trail 3.0× ATR14 is the killer single change. Per-trade EV jumps +15.7% → +22.0%, Sharpe 1.06 → 1.24. P&L 3.6× higher than v4 ($1.17M vs $326K) at the SAME drawdown. ATR adapts trail width to each name's natural volatility — fixed % is too tight for high-vol names and too loose for low-vol names.
  2. Profit-lock at +15% (not +10%) wins. WR jumps 76% → 83%, EV +15.7% → +17.4%, Sharpe → 1.19. Waiting longer to arm the trail keeps more winners alive through normal pullbacks.
  3. Looser trail (15-20%) outperforms 12%. Sweet spot ~20%: EV +17.8%, Sharpe 1.06, MDD unchanged. Wider trail lets winners run further before getting stopped.
  4. Pyramiding STILL hurts even on cleaner v4 cohort. WR drops 76% → 62%, P&L $326K → $61K. Confirmed across both v3 and v4 — this signal does not pyramid.
  5. SPY rotation adds modest value. Idle capital between trades earning SPY return adds ~18% to v4 P&L ($326K → $385K). Worth doing but secondary.
  6. Profit-lock OFF (always trail) is bad. WR collapses to 52%. Confirmed: PL is essential, not optional.
  7. n_insiders >= 3 sub-cohort with leverage is still capped by trade frequency: 12 trades over 5y, max P&L $43K even at 3x margin. Best Sharpe but minimal absolute return.
UPDATED RECOMMENDATION: Single highest-impact change is swap fixed % trail for ATR-trail 3.0×ATR14 — gives 3.6× P&L with no leverage, no extra DD. Combined with 2x margin: $15.82M P&L over 5y on a $10K start. Combined with PL=15% (untested combo — next iteration): expected even better. If max P&L matters and you can hold through -50% DD: ATR-trail 3.0x + 2x margin. If you want WR maximization (83%): v4 + PL=15% + 2x margin = $5.36M P&L at -47% DD.

🧪 Combo Grid — ATR × Profit-Lock × Leverage × SPY rotation — testing the untested combination

Tested 60 combinations of ATR-trail (2.5 / 3.0 / 3.5 / 4.0 × ATR14) × profit-lock (5/10/15/20/25%) × leverage (1x/2x/3x), plus SPY rotation overlay on top variants. Goal: stack ATR-trail and wider profit-lock (the two best single changes) to find the global optimum.

⭐ Best 1x (no margin)

ATR=3.5 PL=25% 1x
P&L: $2.02M · CAGR 212.1%
Sharpe 1.42 · PF 13.03 · WR 79.3%
MaxDD -23.8%
6.2× v4 baseline. Same DD. No leverage.

⭐ Best safe-DD (MDD>-50%)

ATR=3.5 PL=25% 2x + SPY rot
P&L: $54.48M · CAGR 530.9%
Sharpe 1.42 · PF 13.03 · WR 79.3%
MaxDD -45.8%
167× v4 baseline. Includes SPY rotation overlay.

⚠️ Maximum P&L (3x leverage)

ATR=3.5 PL=25% 3x
P&L: $234.03M · CAGR 761.9%
Sharpe 1.42 · PF 13.03 · WR 79.3%
MaxDD -71.0%
718× v4 baseline. -71% DD = margin-call territory.

EV heatmap by (ATR multiplier × profit-lock %), at 1x leverage

ATR × PL 5% PL 10% PL 15% PL 20% PL 25%
2.5× ATR
18.9%
PF 7.5
$494.5K
19.6%
PF 9.3
$638.1K
21.2%
PF 10.4
$986.3K
21.1%
PF 9.9
$949.5K
22.7%
PF 11.0
$1.40M
3.0× ATR
21.5%
PF 9.3
$1.02M
22.0%
PF 10.2
$1.17M
23.6%
PF 11.7
$1.78M
23.6%
PF 11.8
$1.78M
23.6%
PF 11.8
$1.80M
3.5× ATR
21.2%
PF 8.6
$979.7K
21.8%
PF 10.1
$1.17M
23.5%
PF 12.1
$1.85M
23.7%
PF 12.9
$1.92M
⭐23.8%
PF 13.0
$2.02M
4.0× ATR
20.6%
PF 8.4
$882.4K
21.2%
PF 10.0
$1.07M
22.6%
PF 12.5
$1.56M
22.6%
PF 12.5
$1.56M
22.6%
PF 12.5
$1.56M

Cell shows EV per trade · PF · Total P&L (compounded $10K, 1x leverage). Brighter green = higher EV. ⭐ = winner.

Equity curves (log scale)

Drawdown

Combo 3x → $234M (DD -71%) ⚠️ aggressive Combo 2x + SPY rot → $54.49M (DD ~-46%) Combo 2x → $46.34M (DD ~-47%) Combo 1x → $2.03M (DD ~-24%) v4 baseline → $336.0K (DD -24%)

Top 25 variants by P&L

Variant N WR EV PF Sharpe Sortino Max DD P&L CAGR
Key insights:
  1. The combo wins by stacking effects. Per-trade EV jumps to +23.85% (vs v4 baseline +15.65%, ATR-only +22.0%, PL15-only +17.4%). Sharpe rises to 1.42 (vs v4 1.06, +34%). Both changes are independent — they stack cleanly.
  2. The sweet spot is ATR=3.5 + PL=25%. ATR multiplier 3.5× gives slightly more room than 3.0× — captures more of the right tail without losing winners. PL=25% requires the trade to be up +25% before the trail arms — only the strongest moves survive that filter, but they tend to keep running.
  3. SPY rotation matters more at higher leverage. Adds +18% on top of 2x margin combo ($46M → $54.5M), but is the difference between -47% and -46% DD — modest risk gain.
  4. 3x leverage gives $234M but with -71% MDD. Margin-call territory in any realistic broker. Theoretical best, not deployable.
  5. The 1x combo ($2.02M, MDD -24%) is the practical sweet spot. 6.2× v4 baseline with no margin risk, no leverage required, same DD. WR 79.3%, PF 13.04, Sharpe 1.42 — all-around upgrade.
⚠️ OVERFITTING WARNING: These results are from a 60-cell grid optimized on 29 trades (~5 years of data). The top of any such grid overstates true edge. Walk-forward validation (train 2021-2023, test 2024-2026) is the recommended next step before live deployment. Current results suggest the EXIT-LOGIC improvements (ATR-trail + wider PL) are real, but the exact parameters (3.5 / 25%) are likely over-fit by a few percentage points.
FINAL RECOMMENDATION: Deploy ATR-trail 3.5×ATR14 + Profit-Lock 25% as the v5 exit logic. At 1x leverage: $2.02M P&L over 5y, -24% MDD. With 2x margin + SPY rotation: $54.5M P&L, -46% MDD, Sharpe 1.42. The 1x version is the safe baseline; layer leverage and SPY rotation only after live paper-trading confirms the parameters.

📊 10-Year Validation — Aggressive option re-tested on 2016-2026 data (was 2021-2026)

✅ CONFIRMED — Aggressive option is still the best safe option

Same parameters (ATR-trail 3.5×ATR14 + Profit-Lock 25% + 2x margin + SPY rotation) tested on extended 10-year data (2016-2026, including 2018 correction, COVID 2020, and 2022 bear). Every metric is slightly better on 10y than 5y, with the same -45.8% max drawdown. The combo's parameters are robust across regimes — not over-fit to 2021-2026.

5y vs 10y — side by side (Aggressive option)

Metric 5y (2021-2026) 10y (2016-2026) Δ Verdict
n trades2930+1nearly identical signal frequency in extended period
Win rate79.3%80.0%+0.7 pp↑ improved
Per-trade EV23.85%24.04%+0.19 pp↑ improved
Profit factor13.0313.55+0.51↑ improved
Sharpe (ann)1.421.46+0.04↑ improved
Sortino (ann)5.935.98+0.05↑ improved
Max DD curve-45.8%-45.8%±0.0 pp= unchanged ⭐ regime-robust
Final equity ($10K start)$54.49M$127.24M+$72.75M2.34× more $
Total P&L$54.48M$127.23M+$72.75M2.34× more $
CAGR (period)397.8%149.9%5y CAGR higher due to lucky sequencing of 2021-2026 vs full 10y

The CAGR drop (531% → 154%) is purely a math artifact of compounding over a longer window from the same $10K start — NOT a deterioration. The 5y sub-period (2021-2026) of the 10y curve produces equivalent CAGR; the 2016-2020 portion grew at a slower rate.

10y equity curve (log scale, $10K start)

Drawdown — 10y

Aggressive (ATR3.5+PL25%+2x+SPY) → $127.24M (DD -45.8%) Aggressive 1x (no margin) → $2.64M (DD -23.8%) v4 baseline → $346.9K (DD -23.8%)

10y combo grid — top 10 variants (re-tested)

Variant N WR EV PF Sharpe Max DD P&L (10y) CAGR
10y validation findings:
  1. The exact same parameters win on 10y data. ATR=3.5 + PL=25% + 2x margin + SPY rotation is the top "safe" P&L variant on both 5y AND 10y. The grid's optimum is genuinely there, not just an over-fit lucky pick.
  2. Max drawdown is stable across regimes. -45.8% on both 5y and 10y, despite 10y including 2018 rate-hike correction, 2020 COVID crash, and 2022 bear market. The v4 entry filters (no-chase, sector-avoid, drawdown required, VIX<25) are doing their job — they screen out the worst regime-driven losers.
  3. WR climbs from 79.3% → 80.0%. Tighter cluster signals are consistent across regimes.
  4. n_trades scales linearly — 29 in 5y, 30 in 10y. Wait, that's odd: the 5y cohort had MORE trades in proportion. The 2016-2020 era contributed only +1 net qualifying trade. Reasons: lower VIX in much of 2016-2020 (bull market) but also fewer cluster signals during low-volatility stretches when filtered through the drawdown-required (pre-60d < -10%) gate.
  5. Total P&L 2.34× higher ($54.5M → $127M). 5 extra years of compounding on the same parameters.
  6. Sharpe and Sortino both nudge up — Sharpe 1.42 → 1.46, Sortino 5.93 → 5.98. Net positive evidence the combo is robust.
FINAL ANSWER: Yes, the Aggressive option (ATR=3.5×ATR14 + PL=25% + 2x margin + SPY rotation) is still the best safe option on 10y data. Metrics are slightly better on the extended dataset (Sharpe +0.04, WR +0.7pp, EV +0.2pp). Max DD is unchanged at -45.8%, confirming the entry filters work across all regimes (2018 correction, COVID, 2022 bear). Total P&L on $10K is $127M over 10y. The combo is genuinely robust, not a 5y lucky fit.
Bot

📊 Market — Plan M (40% of the move)

ALL 4 must pass to enter
channel —
SPY Bullish Trend
10 > 20 > 50 EMA + price above 10 EMA
SPY Buy Signal
Sticky: stack + RSI rising fresh in last 5 bars
SPY F&G Heatmap
Under 70 & Rising
Full Stocks Breadth
Bullish cross 10 EMA

🛡️ Plan ETF — defensive SPXL parking, separate $50k paper account

SPXL Value Zone
20EMA ≤ price ≤ 20EMA + 2·ATR
OB Clearance
≥2·ATR from 90d swing high
SPY Exit Trigger
SPY > 20EMA + 3·ATR → flatten
Position
shares · cost basis
#TickerSharesEntry $Cur $ Unr P&LUnr %Real P&LStatusEnteredExit Reason
No Plan ETF trades yet. Fires when SPXL enters the Value Zone and SPY isn't overextended.

🎯 Sector Breadth

% of last 20 days above 10 EMA · OVTLYR proxy
🟢 Bullish (—)
Loading…
🔴 Bearish (—)
Loading…
Bullish = sector ETF price > 10 EMA AND 10 EMA is rising. pct = % of last 20 daily bars that closed above the 10 EMA. Δ 5d = change vs 5 days ago. F&G = Wilder RSI(14) of the sector ETF (OVTLYR heatmap proxy) — ▲ rising, ▼ falling. Color: blue <35 fear · grey 35-55 · amber 55-70 · red >70 greed. Healthcare excluded from Plan M so not shown.

📈 Historical Expectancy (POSITIVE BACKTEST filter)

2-yr Plan M Stock-Gate replay · 30d forward returns

✅ Kept (positive backtest)

TickerExp%WinRateN
Loading…

❌ Dropped (negative or low win rate)

TickerExp%WinRateN
Loading…
Method: for each ticker, replay the Plan M Stock Gate over the past 730 daily bars. For every bar where the gate would have fired, measure the forward 30-day return. Kept requires expectancy > 0, win rate ≥ 40%, ≥5 historical signals. Cache refreshes every 24 hours.

📡 OVTLYR Signals

— signals · — tickers scanned
Filters: Date to
Date ↕ Ticker ↕ Sector ↕ Signal ↕ Close ↕ Days ago
Click Reload to scan the universe.

🧬 Plan M Screener (Market · Sector · Stock)

OVTLYR 7-point Stock gate
Ticker Spot ATR Stk Trend Stk Buy CONF F&G ↑ Not OB >10 EMA ≥ $10 Not Block Earn ≥4d Liq 80Δ Contract Size Verdict
Loading snapshot from deep-itm-bot…

Price Chart — EMA 10/20/50

EMA10
EMA20
EMA50
Order Blocks
Daily chart · EMA10 > EMA20 · Price > EMA50
Type a ticker and press Go

Deep ITM Options Chain

— DTE Target: 18–42 DTE
Select a ticker to view deep ITM calls

📋 Plan M Trade Log

#TickerSectorStrikeExp CtrsΔEntry $Under @ATR@entry Cur $Cur UnderUnr P&LUnr P&L %Real P&L Total P&LTotal % RollsStatusEnteredExit Reason
No Plan M paper trades yet — bot will open entries when all 3 gates pass.
Total P&L
$0.00
Win Rate
0%
Open Positions
0
Trades
0
Avg Win $
Avg Loss $
EV / Trade
Initial Capital
Annual ROI
Max DD %

📈 Plan M — Equity Curve

cumulative realized P&L by exit date · open trades' unrealized appended at end

📖 Plan M — Full Logic Explained

OVTLYR / Christopher Uhl Deep ITM Call Strategy · synced to current bot code

0 · Universe Construction (monthly refresh)

  • Source: Wikipedia S&P 500 + NASDAQ 100 + S&P 400 (~917 large/mid-cap names with GICS sector tags).
  • Quantitative filters (nightly cache, per ticker): price ≥ $10, market cap ≥ $10 B, β ≥ 1.0, avg daily volume ≥ 1 M.
  • Healthcare sector permanently excluded per Plan M (slide 33).
  • Historical-expectancy filter (per stock): 2-yr replay of the Stock Gate, 30-day forward returns. Keep only if n ≥ 5 AND expectancy > 0 AND win_rate ≥ 40%. Cache: 24 h.
  • Effective universe: ~200 names after both filter passes.
  • Cron: 0 7 1 * * (1st of month 07:00 UTC) → build_universe_cache.py --minimal.

1 · Market Gate — 40% of the move

  • SPY Bullish Trend — 10 > 20 > 50 EMA stack on daily + price above 10 EMA.
  • SPY Buy Signal — STICKY (5 bars): passes while a fresh "stack + RSI rising" event fired any time in the last buy_signal_validity_bars=5 AND the bullish stack is still intact. Mirrors OVTLYR's "still has a buy signal" semantics — the signal is a STATE, not a same-bar event.
  • SPY F&G Heatmap — CNN Fear & Greed value < 70 and rising over last 10 days.
  • Full Stocks Breadth — ≥60% of sector ETFs above their own 10 EMA, or a recent bullish cross.
  • Result → Market Channel Score (0–2). Pipeline aborts if Market fails.

2 · Sector Gate — 30% of the move

  • Sector F&G rising — sector ETF RSI(14) increasing (proxy for OVTLYR heatmap direction). The "< 70" ceiling does NOT apply at the sector level — Chris treats hot+rising sectors (e.g. Technology @ 76 ↑) as tradeable; per-name overbought protection is the Stock-Gate's gap_from_overbought.
  • Relative Greed — sector F&G > market F&G (sector leading the market).
  • Sector Breadth — sector ETF above its own 10 EMA or recent bullish cross.
  • Channel — M1S1 (market ≥1 AND sector ≥1) OR M2 (market ≥2).
  • Sector-name reconciliation: Wikipedia GICS labels ("Information Technology", "Financials", "Consumer Discretionary", "Consumer Staples", "Health Care") are mapped to the SPDR ETFs (XLK/XLF/XLY/XLP/XLV) via SECTOR_ETF alias table.

3 · Stock Gate — 30% of the move

  • Stock Bullish Stack — 10 > 20 > 50 EMA stack + price above 10 EMA.
  • Stock Buy Signal — STICKY (5 bars): passes if a fresh stack-firing happened any time in the last buy_signal_validity_bars=5 bars AND the stack is still intact today.
  • CONF (1-bar confirmation): signal must have fired ≥ buy_signal_min_bars_ago=1 bar ago AND today's close ≥ the fire-bar's close. Rejects same-day fires (no follow-through). 5y backtest: +$1.3 M / +7.7 % WR alone.
  • F&G rising (sector-level proxy for the stock's F&G).
  • Price > 10 EMA and Price ≥ $10.
  • Not in Block — not currently inside a 120-day order-block consolidation.
  • Earnings exclusion — reject if next earnings is < min_days_to_earnings=2 days away.
  • Cooldown — same ticker blocked for ticker_cooldown_days=5 after any closed loser (slide 9, prevents revenge trades).
  • Survivors are sorted descending by historical expectancy before any entries are placed (matches OVTLYR's "sort by Outlier returns" behavior).
  • CONV tiering — winning candidates classified HIGH/MED/LOW by (β, market_cap, bars_ago); position size is base_contracts × tier_multiplier (HIGH=1.5x, MED=1.0x, LOW=0.5x).

4 · Position Size

  • shares = account × risk% / (2 × ATR)
  • contracts = shares / (Δ × 100)
  • contracts × CONV_tier_multiplier (HIGH=1.5x, MED=1.0x, LOW=0.5x).
  • Defaults: account = $50,000, risk = 2.5% default · 5% for Bot2Slow Stocks (signal_risk_pct_override), target Δ = 0.80.
  • PYR (pyramiding): OFF — 5y backtest showed adding contracts at higher strikes lost ~$4 M (delta-exposure tradeoff doesn't pay).

5 · Deep ITM Contract (80Δ)

  • Monthly expiry, ≥ 30 DTE (slide 40).
  • Open Interest ≥ 200 at chosen strike AND every strike in the rollover corridor between it and the stock price.
  • Bid/Ask spread ≤ 10%  (ask−bid)/ask.
  • Extrinsic ≤ 30% (goal ≤20%)  (mid − intrinsic)/mid.
  • Picks the strike whose delta is closest to 0.80 after filters.

6 · Plan M Exit Signals (any triggers exit)

  • TRSP — Trailing 0.5·ATR stop (winner protection, locked-in 2026-04-25):
    • Arms when close ≥ entry + 2·ATR (trail_activate_atr=2.0).
    • Stop level = highest_close_seen − 0.5·ATR; ratchets UP only.
    • Fires when current close ≤ stop level. Once armed, never disarms.
    • Backtest sweep: 0.5σ > 0.25σ (whipsaws) > 0.75σ > 1.0σ > 1.25σ. Tight wins.
  • 2 ATR hard stop — close ≤ entry − 2·ATR (slide 38). Active only while TRSP not armed (i.e. trade hasn't yet moved +2·ATR up).
  • 3 ATR emergency exit — close ≤ entry − 3·ATR (slide 49–50). Always active.
  • 10/20 bearish cross — EMA10 crosses below EMA20 in last 3 bars.
  • OVTLYR Sell Signal = EMA10 < EMA20 AND price < EMA50 (Joe Ovtlyr video proxy, verified Apr 2026). RSI is intentionally NOT part of this.
  • OB Block hit — price inside a 120+ calendar-day order block (slide 43).
  • Earnings — close trade close_before_earnings_days=1 day before next earnings (slide 45).
  • Gap & Crap — ≥5% gap up, then close below the gap candle's wick bottom within 3 bars (slide 46).
  • PEP Confirmation (slide 51) — prior bar's close was already past the 2-ATR stop AND today's spot drops below prior bar's low. One-bar delay on the 2-ATR stop, prevents single-wick exits.

7 · Close-to-Expiration Logic (slide 42)

  • Trigger: when held contract's DTE ≤ pre_expiry_decision_dte=7 days, the bot evaluates the position for forced close.
  • PRE_EXPIRY_NO_CREDIT_ROLL — closes the position at current mid IF no credit roll is available on the same expiry (i.e. no higher strike yields positive credit). Rationale: theta accelerates inside the last week and will destroy whatever extrinsic remains.
  • If a credit roll IS available: bot rolls instead of closing (check_rollover finds the next ATR-step strike with positive credit, executes the combo). Effectively extends the position into a longer-dated expiry.
  • EXPIRY (sim only): backtest force-closes at intrinsic value at expiry − 1 day as a last-bar fallback. Live bot never reaches this — PRE_EXPIRY_NO_CREDIT_ROLL or a credit roll fires first.
  • Earnings interaction: if earnings fall within the last week before expiry, the EARNINGS exit (T-1) takes precedence over PRE_EXPIRY.

8 · Rollover (slide 41)

  • First roll at +0.5 ATR from original entry; every +1 ATR after that (anchored to entry).
  • Trigger basis: spot_close ≥ entry + N·ATR (EOD Close — locked in after the intraday-vs-EOD comparison cost $1.55 M).
  • Roll up/out only if credit > 0 on the live chain (sell current − buy new).
  • Single combo order, same # contracts, same 80Δ-corridor liquidity rules.
  • Bookkeeping: credit captured is added to realized_pnl; premium_at_entry is reset to the new strike's mid; underlying_at_entry KEPT as fixed roll-trigger anchor; orig_contracts KEPT as PYR baseline (PYR is OFF so contracts stay constant).
  • Roll counter is len(roll_history) — never drifts.

9 · VIX Circuit Breaker

  • Block new entries when ^VIX > 30 AND VIX rising over the last vix_lookback=5 trading days.
  • Only blocks NEW entries; open positions continue to be maintained normally.
  • Daily-loser CB (3 losers in 1 day → 7-day pause): OFF by default — backtest showed it self-reinforced losses on the 200-name universe (3 unrelated losses on the same day are statistically guaranteed). Set daily_loser_limit=999.
  • Enforced in deep_itm_bot.is_circuit_breaker_active().

10 · Plan ETF (defensive, separate $50k)

  • Universe: SPXL only (3× S&P bull); exits also flatten TQQQ if held.
  • Entry: SPXL inside Value Zone (20EMA ≤ price ≤ 20EMA + 2·ATR) AND ≥2·ATR clear of 90-day swing high (OB proxy) AND SPY exit not active.
  • Exit: SPY close > 20EMA + 3·ATR → flatten all Plan ETF positions.
  • Sizing: all available cash from a dedicated $50k paper account (separate from Plan M).
  • Slides 53–60.

11 · Data Sources (all free)

  • Wikipedia — S&P 500 / NDX 100 / S&P 400 constituents + GICS sectors.
  • CNN Fear & Greed — public JSON endpoint, 1 h cache.
  • yfinance — price, volume, option chains, OI, IV.
  • SPDR sector ETFs (XLK/XLF/XLY/XLP/XLC/XLE/XLI/XLB/XLU/XLRE/XLV) — per-sector F&G proxy and breadth.
  • OVTLYR signals are rule-based proxies, flagged proxy:true in outputs.
Paper-only by default. Every row in plan_m_trades has paper=1. Promote to live by flipping the flag and wiring an IB order-placement function.
Core concept: at 70Δ the option moves ~$0.70 per $1 stock move, with 60–75% less capital than 100 shares, mostly intrinsic value → minimal theta decay and minimal IV crush. (70Δ tuned 2026-04-25: +$85k vs 80Δ baseline on 5y backtest.)
Cycle: bot runs every ~15 min (CYCLE_SECONDS); during US market hours (9:30–16:00 ET, computed via ZoneInfo("America/New_York")) maintain + scan + enter; off-hours snapshot only.
r7a_g3 (regime-gated multi-strike) Strategy active since 2026-05-06 · Backtest : …loading from /api/wl/scenarios
Active signals
Bot2Slow Stocks @ 5% · ATM-X @ 2.5%
Disabled
Claude V59
DD-defense filters
SPY EMA200 · Losers/day (2→5d) · OB-cluster (60%→3d) · Vol-spike halve · Daily-loss 3% · Multi-strike rolls (regime-gated: SPY stack only)

📡 TradingView Alerts Feed

0 alerts Legend: ● bullish · ● bearish · ● n/a · TMF >0 bullish money flow, <0 bearish · OptFlow YES = upside capped
Filters: Upside% Bear OB% RSI Score
Time Ticker Signal Alert TF Price Target Upside% Bear OB% EMA5 EMA10 EMA20 EMA50 EMA200 Stage Bot2 RSI TMF Score ⇅ OptFlow caps? Rallies Catalyst Actions
No alerts yet. Set up your TradingView webhook to start receiving alerts.

⚙️ TradingView Webhook Setup

Step 1 — In TradingView, create an alert → enable Webhook URL

Step 2 — Set the Webhook URL to:

loading…

Step 3 — Set the Message body to:

{"ticker":"{{ticker}}","alert_type":"EMA_CROSS","price":{{close}},"volume":{{volume}},"timeframe":"{{interval}}","exchange":"{{exchange}}"}

⚠️ TradingView requires HTTPS. Configure nginx + SSL on your VPS, or use a Cloudflare Tunnel for the webhook URL.

🧠 Bot Logic & Gates

Click to expand/collapse · Updated 2026-05-02 (80Δ canonical)

Source-truth doc. Every value below is from trading_rules.json · plan_m, dashboard.py:_ditm_validate_and_size(), or deep_itm.py:check_plan_m_exits/check_rollover. Generated 2026-05-08 to mirror the deployed r7a_g3 + earn2 config exactly.

📡 1. Alert Ingestion

  • Source: TradingView webhookPOST /webhook/tradingview?secret=…
  • Persisted in alerts table with scan_status='pending'
  • Background scanner runs OVTLYR signal-quality + computes conviction_scorescan_status='done'
  • Auto-entry trigger fires only after scan completes

🎯 2. Auto-Entry Triggers (in dashboard.py:_run_watchlist_scan)

  • Signal type: alert.signal must start with BUY / LONG / BULL
  • Scan status: 'done'
  • Live spot fetch: at trigger time we re-quote via _get_stock_price() — entry price is the moment-of-decision quote, not the alert's stale {close}
  • No conviction-score gate (removed 2026-05-08). The g3_stack_earn2 backtest ran with CONVICTION_GATE_SCORE=0 (off); live now mirrors. Score is still computed and stored as entry_score for display in the trader log, just not used as a filter.

🛡️ 3. r7a Pre-Gates (alert-name + DD defense, before the DITM gate runs)

  1. V59 strategy block — if disable_v59=true AND alert_name contains "V59" → reject (44% WR drag in backtest)
  2. 4H continuation block — if disable_cont_4h=true AND (timeframe ∈ {240, 4H, 4h} OR alert_name has CONTINUATION_4H) → reject
  3. Losers-per-day pause — if any prior day in last 5 days had ≥ 2 losing exits → pause new entries
  4. OB-cluster pause — if last 10 exits had ≥ 60% hit an OVTLYR Order Block → pause 3 days (chop regime)
  5. Daily-loss circuit — if today's net P&L ≤ −3% × notional ($50K) → block remainder of day
  6. Vol-spike size cut — if vol_spike_reduce=true AND SPY ATR(5)/ATR(30) > 1.3 → multiply risk_pct by 0.5

🚧 4. DITM Validation Gates (in _ditm_validate_and_size, in execution order)

  1. SPY EMA200 regime (spy_regime_filter=true): reject if SPY close < daily EMA200 · cached 5 min · fail-open on yfinance error
  2. Sector ETF EMA200 (sector_trend_filter=true, sector_trend_use_ema200=true): map ticker → sector ETF (XLK/XLV/XLF/XLE/…); reject if that ETF < EMA200
  3. US-only filter (us_only_filter=false): reject non-US tickers when enabled
  4. Earnings gate (min_days_to_earnings=2): reject if earnings within 2 days · 6h TTL cache · live yfinance + locked v2 cache (98.6% coverage of 443 tickers)
  5. Leveraged-ETF substitution: if alerted ticker has a liquid lev ETF (e.g. AAPL→AAPU 2x, NVDA→NVDL 2x, sector→SOXL 3x), swap and continue gates against the ETF
  6. Strike selection: pick listed call strike with delta closest to target_delta=0.8 · IB greeks first, yfinance + Black-Scholes fallback
  7. DTE ≥ 30: monthly expiry (rejects weeklies)
  8. Strike OI ≥ 200 at chosen strike
  9. Corridor OI ≥ 200 at every listed strike between chosen strike and spot (rolling corridor must be liquid)
  10. Spread ≤ 10%(ask−bid)/ask
  11. Extrinsic ≤ 30%(mid − intrinsic)/mid
  12. ATR(14) Wilder ATR from 60d daily bars · gate fails if computation fails
  13. Position cap (position_cap_enabled=false): tier-based contract cap; currently DISABLED — re-enable when account > $5M

If any gate fails, the bot falls back to STOCK-ONLY tracking: a phantom row in wl_ditm_trades with no IB order, no expiry, no real option contract. Stock-only rows are excluded from the Options Trades panel and Live Paper KPIs.

⚙️ 5. Strike Selection (Deep ITM)

  • Target delta: 0.8 (canonical 2026-05-02 — 5-Δ sweep showed peak P&L)
  • Backtest proxy: STRIKE_FRAC = 0.75 (≈ 25% ITM) — used when chain unavailable
  • Live: walks IB chain → picks strike whose delta is closest to target_delta; if IB unavailable, BS-approximated from yfinance IV

📐 6. Position Sizing (in _ditm_validate_and_size)

shares    = account × risk_pct / (2 × ATR)
contracts = max(1, round(shares / (delta × 100)))
  • account: live account NAV; notional reference: $50,000
  • default risk_pct: 2.5%
  • per-signal overrides (signal_risk_pct_override, keyed on alert_name):
    • Bot2Slow Stocks5.0%
    • ATM-X2.5%
    • Portfolio Bot2Slow Stocks5.0%
    • Portfolio ATM-X2.5%
  • vol-spike multiplier: halves risk_pct when SPY ATR(5)/ATR(30) > 1.3
  • ATR: 14-period Wilder ATR of underlying daily bars
  • delta: 0.8 (canonical)

🔄 7. Roll Logic (multi-strike, regime-gated)

In-trade roll evaluation runs in the maintenance loop (EOD pass + on-demand /api/wl/ditm/refresh?auto_close=1).

7a. Trigger (deep_itm.check_rollover)

  • First roll point: spot ≥ entry + 0.5 × ATR
  • Subsequent points: every +1.0 × ATR after first (so 0.5, 1.5, 2.5, …)
  • Credit gate: only fires if old_intrinsic − new_intrinsic > 0
  • Live-chain confirmation: the maintenance loop re-checks bid/ask before placing the order — never executes if no actual credit available

7b. Strike Selection (_wl_select_roll_strike) — multi-strike when regime active

  • Regime mode: multi_strike_regime_mode = "stack" — choices: off, ema50_x_200, stack (current), stack_vix
  • "stack" definition: SPY price > EMA50 > EMA200 (no VIX cap)
  • When ACTIVE: evaluates K+1×ATR, K+2×ATR, … up to multi_strike_max_steps=4; picks the candidate that maximizes net credit
  • When OFF (regime not active): single-strike fallback at K+1×ATR
  • Per-candidate gates:
    • OI ≥ 200
    • Spread ≤ 10%
    • Extrinsic ≤ 30%
    • BS-approximated delta ≥ 0.8 floor (keeps the position deep-ITM)
    • Strike must be < spot (excludes ATM/OTM)

7c. Order Placement (_wl_place_roll_orders)

  • Two-leg DAY LIMIT order on IBGW2: SELL old strike at bid · BUY new strike at ask
  • Walk-down watcher bumps prices toward credit=$0 every 5 min; never market
  • Roll history persisted to wl_ditm_trades.roll_history (JSON list of all rolls)
  • If two legs disagree on credit at execution time, abort the roll and keep the original position

📈 8. Trailing Stop & Pyramid

  • Trail activates: spot ≥ entry + 2.0 × ATR (trail_activate_atr default in deep_itm.py PLAN_M_DEFAULTS)
  • Trail distance: 0.5 × ATR below high-water-mark of underlying
  • Pyramid on trail-arm (pyramid_on_trail_arm=true): add +50% contracts at current strike when trail activates

🛑 9. Exit Reasons (in deep_itm.check_plan_m_exits)

Bearish-signal-only exits use 2-bar confirmation (two_bar_confirmation_bearish_exits=true) — must fire on the prior bar too. Stops/earnings/expiry never deferred.

Reason Condition
2_ATR_STOPspot ≤ entry − 2.0 × ATR
3_ATR_EMERGENCYspot ≤ entry − 3.0 × ATR (gap protection)
TRAILING_STOPtrail armed AND spot ≤ HWM − 0.5×ATR
PEP_CONFIRMATIONprior daily close < PEP level AND today's spot < prior day's low (1-bar delay on 2-ATR stop)
GAP_AND_CRAPgap ≥ 5% AND price collapses within 3 candles
EARNINGS_WITHIN_5Dearnings_in_days ≤ 5 (force-close before report)
OVTLYR_SELL_SIGNALEMA10 < EMA20 AND price < EMA50 (Joe Ovtlyr proxy)
10_20_BEARISH_CROSSEMA10 crosses below EMA20 in last 3 bars
HIT_BLOCK_120Dprice hits an OVTLYR Order Block from 120-day window
PRE_EXPIRY_NO_CREDIT_ROLLcontract DTE ≤ 7 AND no roll credit available (theta will burn it)

🔁 10. Continuation Re-Entry (after exit)

  • Enabled: continuation_enabled=true
  • Eligible exit reasons: continuation_extra_exits = ["stop_-2ATR"]
  • Tier 1 — per-signal 4H Strategy Tester confirms continuation
  • Tier 2 — OVTLYR EMA-stack alignment on 4H

💼 11. Order Routing (Live Paper)

  • Account: DUM244967 (paper)
  • IB Gateway: port 4003 (login jhermosillar; Deep ITM gateway lives on 4002)
  • BTO order: DAY LIMIT at current ask · auto-bumps +$0.05 every 5 min, max 12 bumps (1h) — never market
  • ROLL order: two legs (SELL old / BUY new) DAY LIMIT · walk-down watcher bumps toward credit=$0 every 5 min
  • Order IDs persisted on wl_ditm_trades.ib_order_id · status on ib_order_status
  • Live Paper Trading panel tracks trades from 2026-05-09 onward where ib_order_id IS NOT NULL (excludes stock-only fallbacks)

📊 12. Backtest Source & Deployed Strategy

  • Universe: screener-v2 (443 large/mid-cap US tickers) + real TradingView "List of Trades" exports for Bot2Slow / ATM-X · 4,952 raw alerts + 4,138 synthetic retros over 5y
  • Earnings cache: locked v2 (/tmp/bt_earnings_v2.json, 437/443 = 98.6% coverage) — eliminates yfinance non-determinism
  • Deployed config: g3_stack_earn2 — multi-strike rolls when SPY stack-aligned · earnings filter at 2 days · uncapped sizing · linear-scaling scenarios at $50K-$500K
  • Banner numbers are computed live from /api/wl/scenarios · KPI strip uses the same source · no hardcoded backtest numbers anywhere (consistency guardrail enforces this on every restart)
  • Data files: sweep_results/g3_stack_earn2_aggregated.json + g3_stack_earn2_trades.json

🛡️ 13. r7a Active Filters Summary

All toggleable in trading_rules.jsonplan_m. Live values shown.

FilterTriggerEffectKnob (= live value)
SPY EMA200SPY close < daily EMA200Block all entriesspy_regime_filter = true
Sector ETF EMA200Mapped sector ETF < EMA200Block tickersector_trend_filter = true
US-onlynon-US tickerBlock tickerus_only_filter = false
Disable V59alert_name contains "V59"Block (44% WR drag)disable_v59 = true
Disable 4H continuationtf=240/4H or alert has CONTINUATION_4HBlock (low n, mostly −EV)disable_cont_4h = true
Earnings filterearnings_in_days < thresholdBlock tickermin_days_to_earnings = 2
Losers per dayprior day with ≥ 2 losing exitsPause new entries 5 dayslosers_per_day_trigger / _pause_d
OB-cluster pauselast 10 exits ≥ 60% OB_HITPause 3 days (chop)ob_cluster_pause_enabled = true
Vol-spike sizingSPY ATR(5)/ATR(30) > 1.3Halve risk_pctvol_spike_reduce = true
Daily-loss circuittoday's net P&L ≤ −3% × accountBlock remainder of daydaily_loss_circuit_pct = 0.03
Multi-strike rollsATR-step crossed AND regime activeRoll up to 4× ATR per cyclemulti_strike_regime_mode = "stack"
IB: checking…

📊 Portfolio Monitor

0 tickers
Src Ticker Price P&L Upside% bearOB% Stack Stage Bot2 RSI Mkt Sector Exit Act
Click "Sync All" to load positions, then "Scan All" to analyze.

📊 Strategy Backtest

Simulates stock + DITM call entries on historical conviction signals
MIN CONVICTION SCORE
84
TRAILING STOP %
MAX HOLD DAYS
BACKTEST FROM