2026-05-18 - The put side is structurally unprofitable, and we found the mechanism
The corpus number (settled, not anecdote)
Realized outcomes.pnl_dollars, full corpus, split by side:
| Side | n | Win rate | Net P&L | Avg/trade |
|---|---|---|---|---|
| CALL / BULL | 217 | 62% | +$5,600 | +$26 |
| PUT / BEAR | 151 | 57% | -$15,411 | -$102 |
The call book is net positive. The put book has lost more than the call book has ever made. System-wide flatness is the put book. Win-rate gap is small (62 vs 57); the killer is per-trade asymmetry (+102). Puts win often enough but losers dwarf winners. Consistent with 2026-05-14-impulse-vs-composite-empirical-tier-analysis and the prior finding “lowering the BEAR threshold makes win rate worse.”
The live archetype: trade #531, SPY 739P, 2026-05-18
Morning: clean down-leg ~09:20–09:35. Gates blocked entry on the real move
(meta take_prob 0.31, “flow PASS-THROUGH insufficient flow data 250k”,
SKIPPED_NO_CHANGE). Then at 09:48, after the leg was over and price was basing
on the lower Bollinger band, the engine entered 79x 739P @ $2.61 via the
IMPULSE TRIGGER ... bypass=True path with:
- meta take_prob = 0.27 - lower than the 0.31 it skipped on the real move
- options positioning call-heavy: stack_call 31M
- composite score 32, conv=0.60 strike_stack, bypass=True
- 3 minutes later the engine read BULLISH score=62. It shorted the bottom.
- PRICE_STOP @ 09:51, **-2,751; the outcomes/partial P&L-divergence trap, separate issue 2026-05-15-trailing-day1-and-the-partial-exits-undercount).
Same morning: winner #529 BULL 739C capped at **+4.7% / +6k → ~flat. Winner +4.7% in 4 min, loser -29.4%. The geometry is inverted and it is worst on puts.
Mechanism (why puts specifically bleed)
- Downmoves are violent and V-snap back. Latency that is survivable on the call side (uptrends grind, forgive late entry) is fatal on puts: the engine fires at climax/exhaustion (conv=1.00 = documented anti-signal, climax-reversal-pattern) and buys the put into the bounce.
bypass=Trueoverrides the meta-gate. meta 0.27 should have blocked it; the impulse-trigger bypass punched it through anyway.- Against-flow entry. Bought puts while the option stack was call-heavier.
- Inverted payoff geometry, concentrated on the short side: put winners trailed/scaled out fast for small gains, put losers ride to the -25/-30% stop into the V-bounce. See 2026-05-14-sl-and-peak-stop-corpus-validation (V-recovery winners dip 28% past -15% - the same snapback that kills late puts).
Also surfaced: the broker-truth disease, live
At 09:51–10:14 the dashboard showed “No open positions” while the broker held
two untracked positions (SPY 740P x50 and 738P x83) for ~23 minutes,
unmanaged (no TP/SL/trail), alert-only (ORPHAN_BROKER_POSITION CRITICAL,
never acted). Flattened manually via scripts/flatten_all.py (clientId=2,
no engine kill): 740P@3.36, 738P@2.05, broker verified flat. This is the
GH #46 invariant violation and the structural reason MK3 must derive position
- P&L from broker
OrderFilledevents (Nautilus), not a parallel ledger.
MK3 SPY Hunter implications (carried into the spine)
- Puts and calls are not symmetric instruments on 0DTE SPY. Model the short side separately: earlier entry (leg start, never exhaustion), stronger confirmation, tighter invalidation, faster profit-take, and a hard “do not hold a put through a V-bounce” rule.
- No entry at/after a completed leg at a band/range extreme (exhaustion exclusion). This one rule kills today’s -$6k.
- No
bypassoverride on the put side - puts must respect the meta gate. - Directional-flow agreement required for puts - never buy puts into a call-heavier stack.
- Payoff-geometry-first is the master objective, not win rate.
- Strategic option: SPY Hunter may be call-biased until a specific, OOS-validated bearish setup exists. “Figuring out puts” may mean default-flat on the short side rather than firehosing -$102-EV puts - consistent with the SPY Hunter selectivity thesis 2026-05-15-mk3-setup-hunter-architecture.