Vol-clustering forecast
PromotedVol-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:
- Position size — at low predicted vol: larger position (same $ risk, more contracts). At high vol: smaller position. Classic vol targeting.
- Stop-loss distance — instead of just a naive ATR multiplier, the stop scales with the expected vol.
- Entry filter — if the next 4h turns very calm, trend followers are not worth it (no movement = no profit). If extremely wild, whipsaw looms.
- 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 |

