Lab · ML Experiments

ML — Pattern Discovery

Inverted workflow: find conditional edges in BTC data first, build strategies second.
55 experiments

VRP Filter — Definitive Shuffle Test

Promoted
2026-05-19 validationshufflevrpfilter
Hypothesis
vrp_filter@p20 lift of +13.8% (BB_EXTREME_2) and +37.7% (DONCHIAN_50) from Exp D1 is genuine VRP signal — confirmed if real-source z-score vs 10 shuffled-source backtests > 1.5.
Verdict
**REAL SIGNAL — ADD TO MEGASWEEP** — all 2 strategies z > 1.5 vs shuffled. Add vrp_filter to BB_EXTREME_2, DONCHIAN_50 COMPATIBLE_FILTERS in megasweep.py.
n_signal
2
n_shuffles
10
n_strategies
2
DONCHIAN_50_z_score
+2.5304
BB_EXTREME_2_z_score
+1.5679
DONCHIAN_50_real_lift_pct
+37.7323
BB_EXTREME_2_real_lift_pct
+13.7545

VRP Filter — Definitive Shuffle Test

2026-05-19 · status: promoted · 106.6s

Hypothesis: vrp_filter@p20 lift of +13.8% (BB_EXTREME_2) and +37.7% (DONCHIAN_50) from Exp D1 is genuine VRP signal — confirmed if real-source z-score vs 10 shuffled-source backtests > 1.5.

Verdict: REAL SIGNAL — ADD TO MEGASWEEP — all 2 strategies z > 1.5 vs shuffled. Add vrp_filter to BB_EXTREME_2, DONCHIAN_50 COMPATIBLE_FILTERS in megasweep.py.

Key metrics

metric value
n_strategies 2
n_shuffles 10
n_signal 2
BB_EXTREME_2_real_lift_pct +13.7545
BB_EXTREME_2_z_score +1.5679
DONCHIAN_50_real_lift_pct +37.7323
DONCHIAN_50_z_score +2.5304

Approach

Real-backtest with 10 shuffled vrp_4h.parquet copies (random permutation of vrp + vrp_pct_90d columns). Each backtest runs the full runner including re-routing. If lift is genuine VRP signal, real-source pnl should sit > 1.5σ above the shuffled distribution's mean.

Results

strategy baseline_pnl real_pnl shuf_mean shuf_std shuf_p5 shuf_p95 real_lift_pct shuf_lift_pct_mean z_score
BB_EXTREME_2 17.66 20.09 14.08 3.831 8.54 18.9 +13.8% -20.3% 1.57
DONCHIAN_50 5.52 7.6 5.13 0.979 3.35 5.96 +37.7% -7.1% 2.53

comparison

Verdict

REAL SIGNAL — ADD TO MEGASWEEP — all 2 strategies z > 1.5 vs shuffled. Add vrp_filter to BB_EXTREME_2, DONCHIAN_50 COMPATIBLE_FILTERS in megasweep.py.