Headline stack confirmed · unfiltered base negative ORB + IVA + orderflow factors Bybit perps (546 symbols) 12 months · 169,512 events

ORB IVA — Opening Range
+ Initial Value Area

A 12-month, 546-symbol Bybit backtest of opening-range-break trades conditioned on value-area, volatility and CVD factors. The published headline finding: short-only + vol/CVD confluence trades at avg R +0.042 (95% CI [+0.002, +0.085], n=4,893) — confirmed by block-bootstrap, beats random-entry and buy-and-hold baselines.

Headline stack: real but thin · CONFIRMED factors vs UNSTABLE factors
+0.042
Headline avg R / trade
short_only + vol/CVD confluence · CI [+0.002, +0.085] · n=4,893
+0.148
Diff vs random entry
95% CI [+0.109, +0.188] — beats the null
+0.015
Diff vs buy-and-hold
CI [+0.005, +0.025] — beats B&H short
4
CONFIRMED factors
va_width, vol_sma_ratio, CVD-delta signed, CVD significant

Verdict

On the audited 12-month / 546-symbol dataset, the raw opening-range-break event base is negative (unfiltered avg R ≈ −0.21 to −0.24). The published edge only appears after the short-only + vol/CVD confluence stack: +0.042 avg R (CI [+0.002, +0.085], n=4,893 events), which beats random-entry-same-exit by +0.148 and buy-and-hold-short by +0.015.

Block-bootstrap re-verification confirms four single factors — va_width_pct, vol_sma_ratio, cvd_delta_signed_with_direction, cvd_significant — while atr_pct_percentile, body_ratio and weekday are UNSTABLE and cvd_confirms shows NO_EFFECT. The screened base (A_current_fixed_screener) is where the positive confirmation-set numbers come from; the unfiltered universe has no edge.

Reproduction is env-var sensitive: the published numbers require ORB_SUFFIX=_12mo and ORB_DISCOVERY_DAYS=244. Running with the bare defaults produces a materially different split — a documented real incident in this project.

What was tested

Event base

Opening-range-break trades across 546 Bybit perps over 12 months (169,512 events after filtering tick-size artifacts). Unfiltered base is negative — the ORB event alone has no edge.

Confluence stack

The headline finding is the short_only leg plus vol/CVD confluence: value-area width, volume-vs-SMA ratio, CVD delta signed with direction, and CVD significance as entry conditions.

Factor audit

A block-bootstrap (session-date blocked, 1,000 draws) re-verification classified every single factor: CONFIRMED / UNSTABLE / NO_EFFECT, on discovery (n=8,713+) vs confirmation (n=4,893+) splits.

Execution reality

Funding-rate and mark-price rescoring scoped to the headline event set (W6/W7); market-impact/slippage assumptions reported alongside the avg R. The 12-month dataset is the canonical one — the original 90-day set is superseded.

The headline stack (short_only + vol/CVD confluence)

ComponentRuleEvidence
DirectionShort onlyLong leg negative in the audited dataset
Value-area widthva_width_pct factorCONFIRMED (disc +0.037/+0.273, conf +0.183/+0.458 CI)
Volatility vs SMAvol_sma_ratioCONFIRMED (stable CIs across splits)
CVD delta signedcvd_delta_signed_with_directionCONFIRMED
CVD significancecvd_significantCONFIRMED (weak but real)
ScreenerA_current_fixed_screener baseConfirmation-set avg R +0.067, CI [−0.065, +0.198]
Repro envORB_SUFFIX=_12mo · ORB_DISCOVERY_DAYS=244Required for the published numbers

Headline vs baselines (confirmation set, matched subset)

MeasureAvg R95% CI
Headline (short_only + vol/CVD confluence)+0.0420[+0.0008, +0.0837]
Random-entry-same-exit (N=200/event)−0.1062[−0.1220, −0.0898]
Buy-and-hold-short+0.0269[−0.0180, +0.0716]
Headline − random entry+0.1483[+0.1092, +0.1881]
Headline − buy & hold+0.0151[+0.0046, +0.0250]
Entry-trigger detail: within the screened base, wick_touch entries are positive (disc +0.259, conf +0.158 avg R) while retest_hold is not (disc −0.036, conf +0.060) — the way price touches the trigger level matters.

How it was tested

Dataset

ORB_SUFFIX=_12mo: 546 symbols, 365 session dates, 169,512 events after dropping 875 tick-size artifacts (risk < 0.02% of price).

Discovery/confirmation split

ORB_DISCOVERY_DAYS=244 → cutoff 2026-04-27/28; discovery n=106,747 / confirmation n=62,765 rows (headline event set n=4,893).

Re-verification

Block bootstrap (session-date blocked, n_boot=1000) on every single-factor verdict; funding-rate and mark-price refetch + rescoring of the headline set; random-entry and B&H baseline simulations.

Honesty

The unfiltered base is published alongside the headline (avg R −0.21 to −0.24) — the edge is conditional, not unconditional. Env-var pitfalls documented in RUN_CONFIG.md.

Run it yourself

# canonical env for the published numbers
export ORB_SUFFIX=_12mo
export ORB_DISCOVERY_DAYS=244
cd backtest
python backtest_v3.py   # ORB event backtest (12mo / 546 symbols)
python factor_analysis.py && python composite_filter.py
python block_bootstrap_reverify.py   # single-factor verdicts
python baseline_comparison.py        # random-entry + B&H baselines