Lab · ML Experiments

ML — Pattern Discovery

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

Vol-clustering forecast

Promoted
2026-05-17 volatilitypersistencecore
Hypothesis
Trailing realized volatility predicts forward realized volatility — i.e. vol persists. Tested at 1h, 4h, 24h horizons walk-forward.
Verdict
**PROMOTE** — vol persistence is strong (4h IC = +0.736, positive in every walk-forward window). Build a vol-forecasting model and use it for position sizing or entry filtering.
IC_1d
+0.7225
IC_1h
+0.8140
IC_4h
+0.7359
IC_4h_CI
[+0.7265, +0.7453]
windows_pos
21
total_windows
21

Vol-clustering forecast

2026-05-17 · status: promoted · 12.5s

Hypothesis: Trailing realized volatility predicts forward realized volatility — i.e. vol persists. Tested at 1h, 4h, 24h horizons walk-forward.

Verdict: PROMOTE — vol persistence is strong (4h IC = +0.736, positive in every walk-forward window). Build a vol-forecasting model and use it for position sizing or entry filtering.

Key metrics

metric value
IC_1h +0.8140
IC_4h +0.7359
IC_1d +0.7225
IC_4h_CI [+0.7265, +0.7453]
windows_pos 21
total_windows 21

In plain terms

Think of BTC like the weather. We cannot reliably predict whether it will rise or fall tomorrow — direction is almost pure noise. But we can predict how wild it will move. If the last 4 hours were calm, the next 4 hours are highly likely to be calm too. If it is raging right now, it keeps raging.

Our measurement: the relationship between past vol and future vol is +0.74 on a scale from -1 (perfectly inverse) to +1 (perfect). That is huge for financial data — and above all: it holds in every single one of the 21 walk-forward windows of the last 6 years, not just on average.

How we use this in practice

We do not build a "vol strategy" that bets on volatility directly. Instead, the forecast is a dial for our existing strategies:

  1. Position size — at low predicted vol: larger position (same $ risk, more contracts). At high vol: smaller position. Classic vol targeting.
  2. Stop-loss distance — instead of just a naive ATR multiplier, the stop scales with the expected vol.
  3. Entry filter — if the next 4h turns very calm, trend followers are not worth it (no movement = no profit). If extremely wild, whipsaw looms.
  4. Strategy routing — trend strategies (EMA crossover) need movement, mean reversion (RSI) needs range. The forecast picks between them.

This is a reliable foundation for the strategies to stand on — not a gamble.

Approach

For each horizon h we compute the trailing rv_h (std of 1-bar log returns over the past h bars) and forward rv_h (the same over the next h bars). We sample every h bars to avoid heavy autocorrelation, then compute Spearman IC per walk-forward test window (12mo train / 3mo test, 1-day embargo).

Walk-forward windows: 21

  • train 2020-01-01 -> 2021-01-01 (527,040 bars) | test 2021-01-02 -> 2021-04-02 (129,600 bars)

  • train 2020-04-01 -> 2021-04-01 (525,600 bars) | test 2021-04-02 -> 2021-07-02 (131,040 bars)

  • train 2020-07-01 -> 2021-07-01 (525,600 bars) | test 2021-07-02 -> 2021-10-02 (132,480 bars)

  • train 2020-10-01 -> 2021-10-01 (525,600 bars) | test 2021-10-02 -> 2022-01-02 (132,480 bars)

  • train 2021-01-01 -> 2022-01-01 (525,600 bars) | test 2022-01-02 -> 2022-04-02 (129,600 bars)

  • train 2021-04-01 -> 2022-04-01 (525,600 bars) | test 2022-04-02 -> 2022-07-02 (131,040 bars)

  • train 2021-07-01 -> 2022-07-01 (525,600 bars) | test 2022-07-02 -> 2022-10-02 (132,480 bars)

  • train 2021-10-01 -> 2022-10-01 (525,600 bars) | test 2022-10-02 -> 2023-01-02 (132,480 bars)

  • train 2022-01-01 -> 2023-01-01 (525,600 bars) | test 2023-01-02 -> 2023-04-02 (129,600 bars)

  • train 2022-04-01 -> 2023-04-01 (525,600 bars) | test 2023-04-02 -> 2023-07-02 (131,040 bars)

  • train 2022-07-01 -> 2023-07-01 (525,600 bars) | test 2023-07-02 -> 2023-10-02 (132,480 bars)

  • train 2022-10-01 -> 2023-10-01 (525,600 bars) | test 2023-10-02 -> 2024-01-02 (132,480 bars)

  • train 2023-01-01 -> 2024-01-01 (525,600 bars) | test 2024-01-02 -> 2024-04-02 (131,040 bars)

  • train 2023-04-01 -> 2024-04-01 (527,040 bars) | test 2024-04-02 -> 2024-07-02 (131,040 bars)

  • train 2023-07-01 -> 2024-07-01 (527,040 bars) | test 2024-07-02 -> 2024-10-02 (132,480 bars)

  • train 2023-10-01 -> 2024-10-01 (527,040 bars) | test 2024-10-02 -> 2025-01-02 (132,480 bars)

  • train 2024-01-01 -> 2025-01-01 (527,040 bars) | test 2025-01-02 -> 2025-04-02 (129,600 bars)

  • train 2024-04-01 -> 2025-04-01 (525,600 bars) | test 2025-04-02 -> 2025-07-02 (131,040 bars)

  • train 2024-07-01 -> 2025-07-01 (525,600 bars) | test 2025-07-02 -> 2025-10-02 (132,480 bars)

  • train 2024-10-01 -> 2025-10-01 (525,600 bars) | test 2025-10-02 -> 2026-01-02 (132,480 bars)

  • train 2025-01-01 -> 2026-01-01 (525,600 bars) | test 2026-01-02 -> 2026-04-02 (129,600 bars)

Pooled results

horizon pooled_IC pooled_CI_low pooled_CI_high pooled_n windows_min_IC windows_max_IC windows_mean_IC stable_pos total_windows
1h 0.814 0.8105 0.8171 55,438 0.5571 0.8433 0.732 21 21
4h 0.7359 0.7265 0.7453 13,858 0.4281 0.7455 0.6073 21 21
1d 0.7225 0.7004 0.7434 2,308 0.2575 0.7047 0.4962 21 21

Per-window IC

1h horizon

window n IC ci_low ci_high p_value
2021-01-02 → 2021-04-02 2160 0.7382 0.7165 0.7642 0
2021-04-02 → 2021-07-02 2184 0.7465 0.7227 0.7676 0
2021-07-02 → 2021-10-02 2208 0.5571 0.527 0.5905 0
2021-10-02 → 2022-01-02 2208 0.5609 0.5275 0.5935 0
2022-01-02 → 2022-04-02 2160 0.669 0.6473 0.6965 0
2022-04-02 → 2022-07-02 2184 0.7727 0.7512 0.7921 0
2022-07-02 → 2022-10-02 2208 0.6263 0.5957 0.6538 0
2022-10-02 → 2023-01-02 2208 0.7675 0.7445 0.7878 0
2023-01-02 → 2023-04-02 2160 0.7745 0.7532 0.793 0
2023-04-02 → 2023-07-02 2184 0.6593 0.6333 0.686 0
2023-07-02 → 2023-10-02 2208 0.7567 0.7354 0.7755 0
2023-10-02 → 2024-01-02 2208 0.7462 0.7263 0.7645 0
2024-01-02 → 2024-04-02 2184 0.7915 0.765 0.8085 0
2024-04-02 → 2024-07-02 2184 0.7642 0.7404 0.7819 0
2024-07-02 → 2024-10-02 2208 0.7101 0.6842 0.7331 0
2024-10-02 → 2025-01-02 2208 0.798 0.7807 0.8142 0
2025-01-02 → 2025-04-02 2160 0.8433 0.8254 0.856 0
2025-04-02 → 2025-07-02 2184 0.7696 0.7514 0.7906 0
2025-07-02 → 2025-10-02 2208 0.7461 0.7249 0.7659 0
2025-10-02 → 2026-01-02 2208 0.7876 0.7702 0.807 0
2026-01-02 → 2026-04-02 2160 0.787 0.7658 0.8078 0

4h horizon

window n IC ci_low ci_high p_value
2021-01-02 → 2021-04-02 540 0.7048 0.6499 0.75 0
2021-04-02 → 2021-07-02 546 0.7455 0.7048 0.7868 0
2021-07-02 → 2021-10-02 552 0.4938 0.4338 0.563 0
2021-10-02 → 2022-01-02 552 0.4298 0.3571 0.499 0
2022-01-02 → 2022-04-02 540 0.5847 0.5253 0.6389 0
2022-04-02 → 2022-07-02 546 0.6671 0.6003 0.725 0
2022-07-02 → 2022-10-02 552 0.5051 0.4329 0.5682 0
2022-10-02 → 2023-01-02 552 0.6876 0.6341 0.7308 0
2023-01-02 → 2023-04-02 540 0.6278 0.5751 0.6767 0
2023-04-02 → 2023-07-02 546 0.4281 0.3484 0.5043 0
2023-07-02 → 2023-10-02 552 0.6169 0.5522 0.6778 0
2023-10-02 → 2024-01-02 552 0.5688 0.508 0.6384 0
2024-01-02 → 2024-04-02 546 0.7 0.6524 0.742 0
2024-04-02 → 2024-07-02 546 0.649 0.5864 0.7013 0
2024-07-02 → 2024-10-02 552 0.5242 0.4655 0.5801 0
2024-10-02 → 2025-01-02 552 0.6396 0.5809 0.686 0
2025-01-02 → 2025-04-02 540 0.723 0.6787 0.7682 0
2025-04-02 → 2025-07-02 546 0.6031 0.5444 0.6535 0
2025-07-02 → 2025-10-02 552 0.5902 0.5261 0.6513 0
2025-10-02 → 2026-01-02 552 0.6289 0.566 0.6858 0
2026-01-02 → 2026-04-02 540 0.6356 0.5733 0.6825 0

1d horizon

window n IC ci_low ci_high p_value
2021-01-02 → 2021-04-02 90 0.6714 0.5075 0.7731 0
2021-04-02 → 2021-07-02 91 0.7047 0.5606 0.8114 0
2021-07-02 → 2021-10-02 92 0.4895 0.3237 0.6657 0
2021-10-02 → 2022-01-02 92 0.2787 0.093 0.4765 0.0071
2022-01-02 → 2022-04-02 90 0.4782 0.3399 0.6282 0
2022-04-02 → 2022-07-02 91 0.6108 0.4097 0.7412 0
2022-07-02 → 2022-10-02 92 0.3492 0.1478 0.5361 0.0006
2022-10-02 → 2023-01-02 92 0.5766 0.4295 0.7048 0
2023-01-02 → 2023-04-02 90 0.6169 0.4649 0.7321 0
2023-04-02 → 2023-07-02 91 0.2575 0.0512 0.441 0.0137
2023-07-02 → 2023-10-02 92 0.3808 0.1437 0.5473 0.0002
2023-10-02 → 2024-01-02 92 0.3651 0.1538 0.5281 0.0003
2024-01-02 → 2024-04-02 91 0.6035 0.4335 0.7133 0
2024-04-02 → 2024-07-02 91 0.553 0.4007 0.6948 0
2024-07-02 → 2024-10-02 92 0.3833 0.1763 0.5163 0.0002
2024-10-02 → 2025-01-02 92 0.4654 0.2786 0.634 0
2025-01-02 → 2025-04-02 90 0.5396 0.3479 0.673 0
2025-04-02 → 2025-07-02 91 0.5514 0.3885 0.6966 0
2025-07-02 → 2025-10-02 92 0.3599 0.1497 0.5528 0.0004
2025-10-02 → 2026-01-02 92 0.5039 0.3326 0.6519 0
2026-01-02 → 2026-04-02 90 0.6805 0.5437 0.8007 0

per-window IC

scatter 4h