Webull Exhaustion Lab — Does the Exhaustion Regime Carry a Debit-Spread Edge?NULL-HYPOTHESIS STUDY

Webull Exhaustion Lab · Phase 1 (paper mode) · 2026-06-17 · ~8 min read · N = 0 closed option-trades at publication · pre-registered protocol


Abstract. The Webull Exhaustion Lab is the options-rail successor to the binary Exhaustion Lab and its binary_exhaustion_engine.py regime detector. It tests one pre-registered null hypothesis, stated in full here and never softened downstream: H0 — the exhaustion regime, paired with an expected volatility contraction, does not produce a calibrated debit-spread edge that survives friction; the "exhaustion ↔ vol-contraction → debit-spread edge" claim is false. The prior leg established that exhaustion regimes contain regime information but did not yield an executable binary edge after costs (finding #4). This lab asks whether that same regime signal, re-expressed as a defined-risk debit spread sized for an expected fade-plus-contraction, finally clears break-even. We reject H0 only on the hard evidence of §3; a failure to reject is the lab's expected and fully successful outcome. No real order is placed this phase; every leg is a dry_run=True broker echo.
Contents
  1. Lineage — the regime that had information but no executable edge
  2. Method — classifier, selector, calibration, ergodic evaluation
  3. Null hypothesis & stop criterion
  4. What a failure to reject tells us
  5. Phase 2 — must-do / must-not
  6. References

1. Lineage — the regime that had information but no executable edge

This lab descends from the binary Exhaustion Lab (exhaustion_lab_service.py + binary_exhaustion_engine.py), whose methodology is documented in the Binary Exhaustion Lab — hybrid_v1 whitepaper. That engine runs a consecutive-candle counter, moving-average stacking (9/20/50/200), distance-from-mean in ATR units, ZigZag swing context, and Kaufman's Efficiency Ratio (ER) regime gate, then folds an optional vision vote and a PAV isotonic calibrator to emit a bull-probability in [0,1]. The binary lab even shipped a non-directional "straddle" variant and a CHOP-BUSTER addendum — early acknowledgements that the exhaustion signal is really a volatility statement dressed as a direction statement.

The binary phase's verdict on this regime is headline finding #4, quoted verbatim:

"The provider-divergence and exhaustion regimes do contain regime information, but in binary form they don't produce an executable edge after costs. They DO meaningfully shift implied-vol expectations — which is the bridge to options." — WEBULL_PIVOT_STUB_PROMPT.md §1.4, finding 4

That last clause is the entire reason this lab exists. An exhaustion print — price stretched many ATRs from its mean, consecutive same-color candles, MAs fanned — is a statement that a move is overextended and that realized volatility is likely to contract as the trend mean-reverts or stalls. A binary up/down bet cannot monetise "vol is about to contract while price fades"; a debit spread can — it caps risk, defines the fade direction, and pays as the underlying drifts the expected way while decay works with rather than against a tightly-bracketed structure. Finding #3 ("b ≈ 1 is a lie") and finding #1 (broken calibration) both warn that we must read the real payoff ratio off the spread geometry and size off p_lower, not the engine's stated confidence.

2. Method

2.1 The regime classifier — which forecast engine feeds it

The classifier is binary_exhaustion_engine.analyze_binary_exhaustion(), used unmodified as the forecast layer (WEBULL_PIVOT §1.2 — the engines feed the selector, they are not rewritten). Two of its outputs drive this lab specifically: the exhaustion score (how overextended the trend is, in ATR-stretch and consecutive-candle terms) and the Kaufman ER regime label (trending / mixed / choppy), which the selector reads as a volatility-regime proxy. The engine emits the §2.2 regime block with exhaustion populated and vol_regime ∈ {expansion, contraction, mid} derived from ER and ATR trend.

2.2 The strategy selector — the candidate set

The selector (options_strategy_mapper.select_strategy) is restricted, for this lab, to the defined-risk fade + contraction subset of the Periodic Table (WEBULL_PIVOT §3):

Regime readPrimary candidateAlternates
Exhaustion high at top, vol-contraction expectedbear_put_spread (debit)bear_call_spread, long_put_butterfly
Exhaustion high at bottom, vol-contraction expectedbull_call_spread (debit)bull_put_spread, long_call_butterfly
Exhaustion high, vol-contraction, no directional biaslong_iron_butterflylong_call_calendar_spread
Exhaustion low / ER trending stronglyfloor — regime not armed

The debit spread is the primary because it is the cleanest test of the null: a debit structure pays for the fade direction with strictly defined risk and a geometry-derived payoff ratio b = max_gain/max_loss. Butterflies and calendars are alternates that lean harder on the contraction (theta-positive) leg of the thesis. With defined_risk_only=true the selector never returns a naked short-vol leg — important here, because selling a strangle into an exhaustion print is exactly the fat-tail trap the hybrid_v1 CHOP-BUSTER section warned against (Merton 1969).

2.3 The calibration pipeline — reuse, do not reinvent

Closed trades persist on the existing paper_trade_service.py row (no parallel DB) with the §2.4 columns. theta_paid_usd and vega_at_entry matter most for this lab: the exhaustion thesis is partly a short-vega / positive-theta bet, so the calibration must show whether a "win" was the fade being right or merely carry being collected. /api/cv/paper/calibration?strategy_id= buckets per structure so a debit-spread edge is not averaged against a calendar drag. Wilson 95% lower bound per bucket as in the binary lab (Wilson 1927).

2.4 The ergodic Monte-Carlo evaluation (F7)

Break-even for a defined-risk spread is p* = 1/(1+b) with b read off the spread geometry. Sizing is fractional Kelly off p_lower (F7 README: never p_hat). The additive ergodic Monte Carlo (Peters 2019) reports time-average growth, not ensemble EV — and for a short-vol-flavoured structure the fat-tailed loss when a fade fails is exactly the kind of variance that makes ensemble EV and time-average growth diverge. A mildly positive EV with ≤ 0 growth rate remains a fail (finding #2).

3. Null hypothesis & stop criterion

H0 (pre-registered): the exhaustion-regime → debit-spread mapping does not produce a calibrated edge — across every webull_strategy_id bucket the lab funds, the Wilson lower-bound p_lower stays at or below the geometry break-even p* once friction is applied.

We reject H0 only if, over ≥ 100 closed paper option-trades in at least one webull_strategy_id bucket (the debit-spread buckets are the ones the null names explicitly), the Wilson lower bound exceeds break-even:

p_lower(bucket) > p* = 1 / (1 + b), b = max_gain_usd / max_loss_usd (bucket median)

and the edge is not an artifact of collected theta — i.e. the bucket's mean realized R stays positive after theta_paid_usd is attributed honestly. A bucket that "wins" only because decay was collected while the directional fade was a coin flip does not reject H0; it confirms the regime carried vol information (finding #4) without a directional edge.

The contraction confound. Exhaustion structures can profit from either the price fade or the vol contraction. The per-strategy bucketing plus the vega_at_entry / theta_paid_usd columns exist precisely to separate "the engine predicted direction" from "we sold vol that happened to contract." Only the former rejects the directional null; the latter is a different (and weaker) claim that needs its own ≥ 100-trade bucket to stand on.

4. What a failure to reject tells us

Per the lab's stance, a null-not-rejected result is a successful run. A sustained failure to clear p* teaches:

The invalidating failure (as opposed to a valid null) is any dry_run=false broker response, or any undefined-risk leg bundle booked while defined_risk_only=true — e.g. a bare short straddle slipping through the selector. Either breaks the instrument. The smoke-test sign-off proves neither occurred.

5. Phase 2 — must-do / must-not

Must-do:

Must-not:

References

  1. Cox, J. C., Ross, S. A., & Rubinstein, M. (1979). Option Pricing: A Simplified Approach. Journal of Financial Economics, 7(3), 229–263. (Binomial valuation of the debit spreads, butterflies and calendars the selector emits; alternative to Black & Scholes 1973.)
  2. Black, F., & Scholes, M. (1973). The Pricing of Options and Corporate Liabilities. Journal of Political Economy, 81(3), 637–654.
  3. Kelly, J. L. (1956). A New Interpretation of Information Rate. Bell System Technical Journal, 35(4), 917–926. (Payoff ratio b, break-even p* = 1/(1+b).)
  4. Wilson, E. B. (1927). Probable Inference, the Law of Succession, and Statistical Inference. Journal of the American Statistical Association, 22(158), 209–212.
  5. Peters, O. (2019). The Ergodicity Problem in Economics. Nature Physics, 15, 1216–1221. (Time-average vs ensemble growth — the F7 objective.)
  6. Merton, R. C. (1969). Lifetime Portfolio Selection under Uncertainty: The Continuous-Time Case. Review of Economics and Statistics, 51(3), 247–257. (Why fat-tailed short-vol downside justifies smaller-than-full Kelly and a hard defined-risk preference.)
  7. Taleb, N. N. (2007). The Black Swan: The Impact of the Highly Improbable. Random House. (Fragility of thin-sample edges; optional.)
  8. Lineage: Binary Exhaustion Lab — hybrid_v1 Methodology Whitepaper; binary exhaustion verdict: WEBULL_PIVOT_STUB_PROMPT.md §1.4, finding 4.