Webull Divergence Lab — Does Provider Disagreement Carry a Long-Vol Edge?NULL-HYPOTHESIS STUDY

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


Abstract. The Webull Divergence Lab is the first executable successor to the binary Provider Divergence Lab — an instrument that deliberately placed zero bets and only measured how often two data providers disagree about the same chart. It tests one pre-registered null hypothesis, stated in full here and never softened downstream: H0 — provider divergence does not carry a long-volatility edge; buying a straddle or strangle when feeds disagree does not produce a calibrated, friction-surviving edge. The prior leg found that divergence regimes shift implied-vol expectations but yielded no executable binary edge (finding #4). A straddle/strangle is the natural vehicle for "I expect a bigger move than the market is pricing" — so this lab is the cleanest test of whether disagreement is tradeable vol information or just noise. We reject H0 only on the §3 evidence; 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 lab that measured but never bet
  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 lab that measured but never bet

This lab descends from the binary Provider Divergence Lab (divergence_lab_service.py), documented in the Provider Divergence Lab whitepaper. That instrument answered one narrow, falsifiable question — given an LLM trained to read candlestick charts, how often do two providers of the same underlying yield different verdicts? — using a per-tick Discrepancy Index (d_direction, d_confidence, d_pattern) and session-cumulative agreement corrected by Cohen's κ (1960) and Fleiss' κ (1971), interpreted on the Landis & Koch (1977) scale.

Crucially, the binary divergence lab declared placing trades explicitly out of scope: "The lab makes zero bets. That isolation is intentional." It was a pure measurement of disagreement. The Webull Divergence Lab is therefore not a re-skin — it is the first time the divergence signal is wired to an executable structure at all. That makes the lineage finding the pivot's headline #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

The thesis is intuitive: when two competent readers of the same instrument disagree on direction, the future is genuinely more uncertain than a single confident reader implies — and elevated uncertainty is, in options terms, elevated realized volatility relative to the implied volatility currently priced into the chain. A long straddle (or strangle) is the textbook expression of "I expect realized to exceed implied." If divergence predicts that gap, the structure pays regardless of which way price ultimately breaks. Findings #1 (broken calibration) and #3 (b ≈ 1 is a lie) still bind: we read the real b off the straddle's cost-vs-payoff geometry and size off p_lower, never the engine's stated confidence.

2. Method

2.1 The regime classifier — which forecast engine feeds it

The classifier is divergence_lab_service.py, used unmodified as the forecast layer. Its divergence score — a function of the per-tick Discrepancy Index and the running κ — is mapped to a volatility-regime expectation: high disagreement ⇒ vol_regime="expansion" (realized likely to exceed implied), strong agreement ⇒ vol_regime="contraction". The engine emits the §2.2 regime block with divergence populated and direction="neutral" in the high-divergence case — because the entire point is that direction is unknown; only the magnitude expectation is informative.

2.2 The strategy selector — the candidate set

The selector is restricted, for this lab, to the long-volatility / defined-debit subset of the Periodic Table (WEBULL_PIVOT §3):

Regime readPrimary candidateAlternates
High divergence, IV-rank low (implied cheap)long_straddlelong_strangle
High divergence, IV-rank midlong_stranglelong_call_calendar_spread
High divergence + slight directional leanlong_strangle (skewed strikes)bull_call_spread/bear_put_spread
Strong agreement / low divergencefloor — regime not armed

A long straddle/strangle is defined-risk by construction (max loss = net debit paid), so it satisfies defined_risk_only=true without special handling — a clean fit. The payoff ratio b = max_gain/max_loss for a long straddle is large but the win probability is correspondingly low (both legs paid for, only large moves pay), which is exactly why the geometry-derived break-even p* = 1/(1+b) and the Wilson lower bound matter so much here: a straddle can look cheap and still be a negative-expectancy bet if realized rarely clears the doubled premium.

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. iv_rank_entry / iv_rank_exit and vega_at_entry are central here: a long straddle is a long-vega bet, so the calibration must show whether a "win" came from realized exceeding implied (the thesis) or merely from IV-rank rising after entry (a vega tailwind unrelated to divergence). /api/cv/paper/calibration?strategy_id= buckets long_straddle separately from long_strangle. Wilson 95% lower bound per bucket (Wilson 1927).

2.4 The ergodic Monte-Carlo evaluation (F7)

Break-even is p* = 1/(1+b) off the straddle geometry; sizing is fractional Kelly off p_lower (F7 README — never p_hat). The long straddle's payoff distribution is the mirror image of the exhaustion lab's: it wins rarely and large, loses often and small (theta bleed) — positive skew with a high break-even probability. The additive ergodic Monte Carlo (Peters 2019) is essential here precisely because a positively-skewed bet can show a tempting ensemble EV while the time-average growth path stalls under the steady theta drag between the rare paydays. A positive EV with ≤ 0 growth rate is a fail (finding #2).

3. Null hypothesis & stop criterion

H0 (pre-registered): provider divergence does not predict a realized-over-implied volatility gap large enough to fund a straddle/strangle after friction — across every funded webull_strategy_id bucket, the Wilson lower bound p_lower stays at or below the geometry break-even p*.

We reject H0 only if, over ≥ 100 closed paper option-trades in at least one webull_strategy_id bucket (long_straddle or long_strangle being the buckets the null names), 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 attributable to divergence rather than to a generic long-vega tailwind — i.e. the same straddle bucket, entered on low-divergence ticks as a control, does not also clear p*. If straddles pay regardless of divergence, the signal is "vol was cheap," not "feeds disagreed," and H0 stands. The κ-bucketed divergence score plus the IV-rank columns are what make that separation auditable.

The high-break-even trap. A long straddle's b can be 3–5, which drops p* to 0.17–0.25 and makes it tempting to declare an edge on a thin sample. We hold to ≥ 100 closed trades per bucket anyway, because positive-skew payoffs are exactly where small samples lie most — a handful of lucky large winners can lift p_hat far above the truth, which is the entire reason the F7 discipline sizes off p_lower and not p_hat.

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 (vs. a valid null) is any dry_run=false broker response or any leg bundle that is not defined-risk while defined_risk_only=true. 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 straddles/strangles 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. (Implied vs realized volatility framing of the long-straddle thesis.)
  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 on positively-skewed payoffs — the F7 objective.)
  6. Taleb, N. N. (2007). The Black Swan: The Impact of the Highly Improbable. Random House. (Positive convexity / long-vol structures and the danger of estimating their edge from thin samples; optional.)
  7. Lineage: Provider Divergence Lab — Whitepaper (Cohen 1960; Fleiss 1971; Landis & Koch 1977); binary divergence verdict: WEBULL_PIVOT_STUB_PROMPT.md §1.4, finding 4.