Skip to content

Regime characterisation — Tier 1

Replayed 4278 trading days, 2009-09-18 .. 2026-09-22. 4231 carry both a regime label and a forward outcome.

  • excluded, no forward outcome (last 30 trading days): 27
  • excluded, no regime label (fail-closed days, kept in features.jsonl): 20

Outcome is vrp_realised = vix_t/100 - rv_fwd_30: positive means implied exceeded what was realised.

By raw regime label

group n mean median p10 p25 p75 p90 hit rate worst
calm-backwardation-vrp+ ⚠ thin 1 0.1005 0.1005 0.1005 0.1005 0.1005 0.1005 1.0 0.1005
calm-contango-vrp+ 1503 0.0227 0.0386 -0.0383 0.0116 0.0571 0.0738 0.804 -0.6517
calm-contango-vrp- 1242 0.0288 0.0354 -0.0055 0.0169 0.0533 0.0681 0.878 -0.2622
calm-flat-vrp+ 201 0.0206 0.0539 -0.0645 -0.002 0.0759 0.0892 0.746 -0.6279
calm-flat-vrp- ⚠ thin 23 0.038 0.0677 -0.0227 0.0454 0.0773 0.0803 0.87 -0.2185
normal-backwardation-vrp+ 44 0.0117 0.0648 -0.1714 0.0146 0.1192 0.1391 0.818 -0.5645
normal-contango-vrp+ 489 0.0662 0.0689 0.0028 0.0397 0.1021 0.1232 0.912 -0.0991
normal-contango-vrp- 156 0.0534 0.052 -0.0195 0.0307 0.0983 0.1146 0.885 -0.117
normal-flat-vrp+ 293 0.0511 0.0767 -0.0484 0.0251 0.1031 0.1256 0.833 -0.2303
normal-flat-vrp- 38 0.0482 0.0587 -0.0093 0.0142 0.0945 0.1138 0.868 -0.1907
stressed-backwardation-vrp+ 41 0.0517 0.1311 -0.3917 0.0719 0.1753 0.2104 0.78 -0.4669
stressed-backwardation-vrp- ⚠ thin 15 0.0797 0.1077 0.0109 0.0195 0.171 0.2314 0.933 -0.4703
stressed-contango-vrp+ 36 0.1102 0.114 0.0385 0.0629 0.1606 0.1754 0.972 -0.007
stressed-contango-vrp- ⚠ thin 1 0.0339 0.0339 0.0339 0.0339 0.0339 0.0339 1.0 0.0339
stressed-flat-vrp+ 132 0.0954 0.0889 0.0244 0.0576 0.1294 0.1585 1.0 0.0069
stressed-flat-vrp- ⚠ thin 16 0.0896 0.0738 0.0237 0.0367 0.1404 0.1695 1.0 0.0112

By ex-ante VRP size (vol points)

group n mean median p10 p25 p75 p90 hit rate worst
[-inf, 0) 1485 0.0331 0.0375 -0.0056 0.0188 0.057 0.0811 0.879 -0.4703
[0, 1) 610 0.0313 0.0416 -0.0247 0.0195 0.0611 0.083 0.849 -0.6354
[1, 2) 555 0.024 0.0407 -0.0459 0.0108 0.0631 0.0895 0.813 -0.6464
[2, 3) 457 0.0319 0.0451 -0.0378 0.0136 0.069 0.0951 0.792 -0.6517
[3, 4) 331 0.0387 0.0539 -0.0264 0.0237 0.0772 0.1039 0.813 -0.6426
[4, 6) 385 0.0392 0.0573 -0.0332 0.0124 0.0817 0.1041 0.808 -0.6279
[6, inf) 408 0.0746 0.0821 0.0146 0.0497 0.1207 0.1585 0.929 -0.5645

By regime x VRP bucket

group n mean median p10 p25 p75 p90 hit rate worst
calm-backwardation-vrp+ | [1, 2) ⚠ thin 1 0.1005 0.1005 0.1005 0.1005 0.1005 0.1005 1.0 0.1005
calm-contango-vrp+ | [0, 1) 477 0.0265 0.0373 -0.0167 0.0199 0.0538 0.0701 0.862 -0.6354
calm-contango-vrp+ | [1, 2) 410 0.0178 0.0376 -0.0443 0.0101 0.056 0.0718 0.81 -0.6464
calm-contango-vrp+ | [2, 3) 312 0.0187 0.0399 -0.0508 0.0064 0.0559 0.0745 0.763 -0.6517
calm-contango-vrp+ | [3, 4) 169 0.0267 0.0449 -0.035 0.0053 0.0664 0.0806 0.757 -0.6426
calm-contango-vrp+ | [4, 6) 120 0.0293 0.0461 -0.0339 -0.0016 0.0613 0.0794 0.742 -0.113
calm-contango-vrp+ | [6, inf) ⚠ thin 15 0.0244 0.022 -0.0214 -0.0167 0.0679 0.073 0.667 -0.0337
calm-contango-vrp- | [-inf, 0) 1239 0.0288 0.0354 -0.0056 0.0169 0.0533 0.0683 0.877 -0.2622
calm-contango-vrp- | [0, 1) ⚠ thin 3 0.0326 0.0283 0.0091 0.0091 0.0602 0.0602 1.0 0.0091
calm-flat-vrp+ | [0, 1) ⚠ thin 16 0.0133 0.057 -0.2346 -0.0227 0.077 0.0809 0.688 -0.2377
calm-flat-vrp+ | [1, 2) ⚠ thin 26 0.0263 0.0536 0.0037 0.034 0.071 0.0948 0.923 -0.5363
calm-flat-vrp+ | [2, 3) 31 0.0361 0.0414 -0.0216 -0.002 0.0671 0.0863 0.71 -0.0542
calm-flat-vrp+ | [3, 4) 40 0.0309 0.0571 -0.0172 0.0371 0.0717 0.0969 0.825 -0.3611
calm-flat-vrp+ | [4, 6) 63 -0.0067 0.0497 -0.105 -0.0198 0.0762 0.0869 0.603 -0.6279
calm-flat-vrp+ | [6, inf) ⚠ thin 25 0.0527 0.0687 -0.0221 0.0472 0.0782 0.0909 0.88 -0.0892
calm-flat-vrp- | [-inf, 0) ⚠ thin 23 0.038 0.0677 -0.0227 0.0454 0.0773 0.0803 0.87 -0.2185
normal-backwardation-vrp+ | [1, 2) ⚠ thin 3 0.0183 0.0893 -0.1714 -0.1714 0.1371 0.1371 0.667 -0.1714
normal-backwardation-vrp+ | [2, 3) ⚠ thin 3 0.0104 0.1018 -0.1875 -0.1875 0.1168 0.1168 0.667 -0.1875
normal-backwardation-vrp+ | [3, 4) ⚠ thin 2 -0.0293 -0.0293 -0.1709 -0.1709 0.1123 0.1123 0.5 -0.1709
normal-backwardation-vrp+ | [4, 6) ⚠ thin 7 0.042 0.0334 0.0095 0.0182 0.0694 0.0951 1.0 0.0095
normal-backwardation-vrp+ | [6, inf) ⚠ thin 29 0.0067 0.0666 -0.5314 0.0146 0.1207 0.1462 0.828 -0.5645
normal-contango-vrp+ | [0, 1) 76 0.0627 0.0647 -0.0162 0.0409 0.1054 0.1174 0.842 -0.097
normal-contango-vrp+ | [1, 2) 83 0.0442 0.0605 -0.0435 0.0037 0.0986 0.1166 0.783 -0.0991
normal-contango-vrp+ | [2, 3) 83 0.0741 0.0752 0.0113 0.0505 0.1151 0.1309 0.928 -0.0637
normal-contango-vrp+ | [3, 4) 75 0.0652 0.062 0.0065 0.0383 0.1007 0.1244 0.933 -0.0657
normal-contango-vrp+ | [4, 6) 97 0.0731 0.0776 0.0319 0.0557 0.0951 0.1161 0.99 -0.029
normal-contango-vrp+ | [6, inf) 75 0.0776 0.0678 0.0238 0.0386 0.1092 0.1606 0.987 -0.0198
normal-contango-vrp- | [-inf, 0) 155 0.0537 0.052 -0.0195 0.0307 0.0983 0.1146 0.884 -0.117
normal-contango-vrp- | [0, 1) ⚠ thin 1 0.0032 0.0032 0.0032 0.0032 0.0032 0.0032 1.0 0.0032
normal-flat-vrp+ | [0, 1) ⚠ thin 26 0.0186 0.0616 -0.1987 -0.0025 0.083 0.1315 0.731 -0.2303
normal-flat-vrp+ | [1, 2) ⚠ thin 24 0.0499 0.0889 -0.1867 0.0508 0.1237 0.1488 0.833 -0.2179
normal-flat-vrp+ | [2, 3) ⚠ thin 19 0.0463 0.0784 -0.1861 0.0136 0.0978 0.1411 0.789 -0.2224
normal-flat-vrp+ | [3, 4) 32 0.0519 0.0755 -0.0468 0.03 0.1051 0.1321 0.781 -0.2212
normal-flat-vrp+ | [4, 6) 67 0.0336 0.0566 -0.0742 0.001 0.0979 0.1242 0.761 -0.2236
normal-flat-vrp+ | [6, inf) 125 0.0679 0.0816 0.0052 0.0507 0.107 0.1235 0.912 -0.2214
normal-flat-vrp- | [-inf, 0) 36 0.0438 0.0563 -0.0093 0.0142 0.0923 0.103 0.861 -0.1907
normal-flat-vrp- | [0, 1) ⚠ thin 2 0.1263 0.1263 0.0992 0.0992 0.1535 0.1535 1.0 0.0992
stressed-backwardation-vrp+ | [0, 1) ⚠ thin 6 0.0669 0.1217 -0.0821 -0.0797 0.1402 0.1799 0.667 -0.0821
stressed-backwardation-vrp+ | [1, 2) ⚠ thin 2 -0.1343 -0.1343 -0.3917 -0.3917 0.1232 0.1232 0.5 -0.3917
stressed-backwardation-vrp+ | [3, 4) ⚠ thin 2 -0.1511 -0.1511 -0.4669 -0.4669 0.1647 0.1647 0.5 -0.4669
stressed-backwardation-vrp+ | [4, 6) ⚠ thin 3 0.0527 0.0376 -0.1137 -0.1137 0.2344 0.2344 0.667 -0.1137
stressed-backwardation-vrp+ | [6, inf) ⚠ thin 28 0.0761 0.1454 -0.405 0.1061 0.1826 0.216 0.857 -0.4309
stressed-backwardation-vrp- | [-inf, 0) ⚠ thin 15 0.0797 0.1077 0.0109 0.0195 0.171 0.2314 0.933 -0.4703
stressed-contango-vrp+ | [2, 3) ⚠ thin 2 0.028 0.028 -0.007 -0.007 0.0629 0.0629 0.5 -0.007
stressed-contango-vrp+ | [3, 4) ⚠ thin 3 0.1174 0.1267 0.0385 0.0385 0.1871 0.1871 1.0 0.0385
stressed-contango-vrp+ | [4, 6) ⚠ thin 6 0.0989 0.1032 0.0136 0.0329 0.1693 0.1713 1.0 0.0136
stressed-contango-vrp+ | [6, inf) ⚠ thin 25 0.1187 0.1207 0.049 0.0882 0.1491 0.1754 1.0 0.0429
stressed-contango-vrp- | [-inf, 0) ⚠ thin 1 0.0339 0.0339 0.0339 0.0339 0.0339 0.0339 1.0 0.0339
stressed-flat-vrp+ | [0, 1) ⚠ thin 3 0.069 0.049 0.0481 0.0481 0.11 0.11 1.0 0.0481
stressed-flat-vrp+ | [1, 2) ⚠ thin 6 0.0951 0.0726 0.0206 0.0553 0.1177 0.232 1.0 0.0206
stressed-flat-vrp+ | [2, 3) ⚠ thin 7 0.0743 0.0689 0.007 0.0357 0.1199 0.1382 1.0 0.007
stressed-flat-vrp+ | [3, 4) ⚠ thin 8 0.0666 0.0573 0.023 0.0464 0.094 0.1488 1.0 0.023
stressed-flat-vrp+ | [4, 6) ⚠ thin 22 0.0737 0.074 0.0244 0.0498 0.0987 0.1177 1.0 0.0103
stressed-flat-vrp+ | [6, inf) 86 0.1062 0.103 0.0326 0.0678 0.142 0.182 1.0 0.0069
stressed-flat-vrp- | [-inf, 0) ⚠ thin 16 0.0896 0.0738 0.0237 0.0367 0.1404 0.1695 1.0 0.0112

Transition vs settled

group n mean median p10 p25 p75 p90 hit rate worst
settled 2001 0.0304 0.0387 -0.0294 0.014 0.0611 0.0872 0.825 -0.6517
transition 2230 0.042 0.0491 -0.0142 0.0233 0.0774 0.1095 0.872 -0.6354

Limitations — these bound every number above

  1. One underlying. Forward realised vol is SPY's. Seventeen years of a single correlated series is one sample, not N independent ones. Effective sample size is far below the row counts; treat n as an upper bound on evidence, not a measure of it.
  2. Post-2008 sample. VIX3M's Cboe history starts 2009-09-18, so 2008 is excluded. Later stress (2010, 2011, 2015, 2018, 2020, 2022) is present but the stressed-day count is small relative to calm.
  3. VIX is the IV30 proxy. VRP uses the production proxy, carrying the same caveat the live records carry. When canonical IV30 arrives the level shifts systematically by an estimated 1-2 vol points and every conclusion about theta here must be recomputed.
  4. No data-outage incidence. FRED's archive is complete for past dates, so the replay sees timely data on days that may in reality have been late. This measures what the gate would have done GIVEN timely inputs, not how often inputs arrived.
  5. Tier 2 is blocked. Nothing here speaks to EV, edge, or ladder quality: that needs historical option chains we do not have.