# Low-Volatility Upward Grind → Breakout Continuation — V2 (1H)

Primary question: following a bearish impulse, does a low-volatility upward grind break **above** its frozen high before breaking below its frozen low within 12h at a higher rate than comparable upward-drifting structures?

## Executive summary

- **Analysis A (boundary race):** cohort A broke upward first in 461/556 resolved events (82.9%; 95% Wilson 79.6%–85.8%); all-valid denominator 83.5%.
- **Comparable upward drift (no compression):** 76.9%; cohort B (drift+compression, no impulse): 78.5%.
- **Raw race advantage:** A − drift-only = +6.1% (95% block-bootstrap CI +1.2% to +10.9%). This is the visual hypothesis on its own terms.
- **Analysis B (geometry matched):** pattern 82.9% vs matched 80.1% (paired diff +2.8%, 95% CI -0.4% to +6.1%); the confidence interval includes zero.
- **Analysis C (equal-distance 1 ATR barriers):** pattern up-first 51.3% vs matched 53.2% (paired diff -1.9%, CI -7.0% to +3.4%); both are near a coin flip.
- **Equal-distance barrier level:** A up-first 53.4% of 541 resolved (95% CI 49.2%–57.6%); the interval includes 50%.
- **Conclusion:** the raw boundary race is high and modestly above comparable upward drift, but the advantage is **not robust to the boundary-distance control**. Geometry-matched controls, the equal-distance barrier test, the regression controls, forward returns and the trading simulation all fail to establish a directional edge. The hypothesis is **unsupported beyond geometry**.

![geometry](figures/lowvol_grind_v2/geometry_bias.png)

## 1. Audit of `lowvol_grind_v1`

V2 reuses the v1 detector unchanged. The previous implementation was audited against the event-level data before any change:

| check | detail | result |
|---|---|---|
| Causal detection | Features use only bars ≤ t; verified by future-price perturbation test. | PASS |
| Frozen boundaries | Pattern high/low fixed at the detection bar; no post-detection movement. | PASS |
| Outcome timing | Outcome window starts at the open of t+1; 1m bars resolve intrabar order. | PASS |
| Outcome labels | BD/BO/NEITHER/AMBIGUOUS/INVALID are mutually exclusive per event. | PASS |
| Resolved denominator | bd_rate_resolved uses bd+bo only; all-valid rate also reported. | PASS |
| Random-control denominator | Breakdown summary uses resolved controls (bd+bo), not all sampled controls. | FIXED |
| Block bootstrap units | Calendar bins computed in nanoseconds; 7-day blocks. | FIXED |
| Overlap handling | Dedup cooldown = window length; raw bars and clusters reported. | PASS |
| Look-ahead in matching | Geometry/vol/impulse matching uses detection-time features only. | PASS |
| Reproduction | v1 event-level rates reconciled with summary tables and baseline diffs. | PASS |

Reconciliation: cohort A event file (575 rows) reproduces the 12h summary exactly (461 breakout-first, 95 breakdown-first, 19 neither, 0 ambiguous); all baseline differences recompute from the saved event files. The only latent issue found was a random-control summary denominator that counted unresolved controls; it was corrected and the v1 artifact on disk is regenerated with resolved denominators.

## 2. Dataset and data quality

| symbol | n_1m | first_1m | last_1m | duplicate_1m | missing_minute_gaps | missing_minutes | null_cells_1m | n_1h | first_1h | last_1h | funding_rows |
|---|---|---|---|---|---|---|---|---|---|---|---|
| BTCUSDT | 918720 | 2025-01-01 00:00:00+00:00 | 2026-09-30 23:59:00+00:00 | 0 | 0 | 0 | 0 | 15312 | 2025-01-01 00:00:00+00:00 | 2026-09-30 23:00:00+00:00 | 1914 |
| ETHUSDT | 918720 | 2025-01-01 00:00:00+00:00 | 2026-09-30 23:59:00+00:00 | 0 | 0 | 0 | 0 | 15312 | 2025-01-01 00:00:00+00:00 | 2026-09-30 23:00:00+00:00 | 1914 |
| SOLUSDT | 918720 | 2025-01-01 00:00:00+00:00 | 2026-09-30 23:59:00+00:00 | 0 | 0 | 0 | 62218 | 15312 | 2025-01-01 00:00:00+00:00 | 2026-09-30 23:00:00+00:00 | 1914 |
| ZECUSDT | 918720 | 2025-01-01 00:00:00+00:00 | 2026-09-30 23:59:00+00:00 | 0 | 0 | 0 | 0 | 15312 | 2025-01-01 00:00:00+00:00 | 2026-09-30 23:00:00+00:00 | 1914 |
| NEARUSDT | 918720 | 2025-01-01 00:00:00+00:00 | 2026-09-30 23:59:00+00:00 | 0 | 0 | 0 | 0 | 15312 | 2025-01-01 00:00:00+00:00 | 2026-09-30 23:00:00+00:00 | 1914 |
| XRPUSDT | 918720 | 2025-01-01 00:00:00+00:00 | 2026-09-30 23:59:00+00:00 | 0 | 0 | 0 | 0 | 15312 | 2025-01-01 00:00:00+00:00 | 2026-09-30 23:00:00+00:00 | 1914 |
| OGNUSDT | 918720 | 2025-01-01 00:00:00+00:00 | 2026-09-30 23:59:00+00:00 | 0 | 0 | 0 | 0 | 15312 | 2025-01-01 00:00:00+00:00 | 2026-09-30 23:00:00+00:00 | 2567 |
| HYPEUSDT | 703530 | 2025-05-30 10:30:00+00:00 | 2026-09-30 23:59:00+00:00 | 0 | 0 | 0 | 0 | 11725 | 2025-05-30 11:00:00+00:00 | 2026-09-30 23:00:00+00:00 | 2930 |
| BNBUSDT | 918720 | 2025-01-01 00:00:00+00:00 | 2026-09-30 23:59:00+00:00 | 0 | 0 | 0 | 0 | 15312 | 2025-01-01 00:00:00+00:00 | 2026-09-30 23:00:00+00:00 | 1914 |
| DOGEUSDT | 918720 | 2025-01-01 00:00:00+00:00 | 2026-09-30 23:59:00+00:00 | 0 | 0 | 0 | 0 | 15312 | 2025-01-01 00:00:00+00:00 | 2026-09-30 23:00:00+00:00 | 1914 |

Same universe, venue and window as v1. 1m data are complete for every symbol, which makes the intrabar ordering and the strategy simulation reliable. HYPEUSDT starts 2025-05-30.

## 3. Pattern and structural features

The v1 primary pattern is reproduced exactly: 8-bar window; normalized log-price slope in [0.10, 0.60]; window realized-vol ratio ≤ 0.80; prior 12h impulse z ≤ −1.50; frozen pattern high/low. V2 adds structural features (slope R² and t-statistic, higher-low frequency, consecutive higher closes, candle overlap, pullback ratio, wick-to-body ratio, failed downward pushes, normalized boundary distances, time since impulse low) as candidate features.

| group | feature | n | mean | median |
|---|---|---|---|---|
| A | slope_z | 575 | 0.2521 | 0.2161 |
| A | rv_ratio | 575 | 0.6028 | 0.6270 |
| A | impulse_z | 575 | -1.9302 | -1.7667 |
| A | higher_low_freq | 575 | 0.6770 | 0.7143 |
| A | consec_up | 575 | 1.4487 | 1.0000 |
| A | slope_r2 | 575 | 0.6000 | 0.6072 |
| A | overlap_mean | 575 | 0.7671 | 0.7719 |
| A | pullback_ratio | 571 | 0.7286 | 0.4339 |
| A | wick_body_ratio | 575 | 6.3135 | 3.6899 |
| A | failed_down_pushes | 575 | 0.9774 | 1.0000 |
| A | range_pct | 575 | 0.0298 | 0.0252 |
| A | dist_high_norm | 575 | 0.2018 | 0.1765 |
| A | dist_low_norm | 575 | 0.7982 | 0.8235 |
| A | rel_volume | 575 | 0.7719 | 0.7584 |
| A | ema_dist_slow | 575 | -0.0277 | -0.0267 |
| A | bars_since_impulse_low | 575 | 9.6678 | 8.0000 |
| B | slope_z | 6137 | 0.2229 | 0.1790 |
| B | rv_ratio | 6137 | 0.5899 | 0.6148 |
| B | impulse_z | 6137 | 0.0490 | 0.0221 |
| B | higher_low_freq | 6137 | 0.6402 | 0.5714 |
| B | consec_up | 6137 | 1.6317 | 1.0000 |
| B | slope_r2 | 6137 | 0.5539 | 0.5519 |
| B | overlap_mean | 6137 | 0.7577 | 0.7613 |
| B | pullback_ratio | 6054 | 1.1049 | 0.5000 |
| B | wick_body_ratio | 6137 | 5.5585 | 3.0643 |
| B | failed_down_pushes | 6137 | 0.9760 | 1.0000 |
| B | range_pct | 6137 | 0.0275 | 0.0237 |
| B | dist_high_norm | 6137 | 0.2247 | 0.2018 |
| B | dist_low_norm | 6137 | 0.7753 | 0.7982 |
| B | rel_volume | 6111 | 0.9100 | 0.8757 |
| B | ema_dist_slow | 6137 | 0.0036 | -0.0032 |
| B | bars_since_impulse_low | 6137 | 14.0112 | 14.0000 |
| drift_no_low_vol | slope_z | 6155 | 0.2705 | 0.2356 |
| drift_no_low_vol | rv_ratio | 6155 | 1.1921 | 1.0605 |
| drift_no_low_vol | impulse_z | 6155 | 0.1363 | 0.1207 |
| drift_no_low_vol | higher_low_freq | 6155 | 0.6074 | 0.5714 |
| drift_no_low_vol | consec_up | 6155 | 1.3134 | 1.0000 |
| drift_no_low_vol | slope_r2 | 6155 | 0.3569 | 0.3185 |
| drift_no_low_vol | overlap_mean | 6155 | 0.7390 | 0.7425 |
| drift_no_low_vol | pullback_ratio | 5692 | 2.5635 | 0.8311 |
| drift_no_low_vol | wick_body_ratio | 6155 | 4.8505 | 2.4837 |
| drift_no_low_vol | failed_down_pushes | 6155 | 0.8595 | 1.0000 |
| drift_no_low_vol | range_pct | 6155 | 0.0409 | 0.0344 |
| drift_no_low_vol | dist_high_norm | 6155 | 0.2621 | 0.2244 |
| drift_no_low_vol | dist_low_norm | 6155 | 0.7379 | 0.7756 |
| drift_no_low_vol | rel_volume | 6133 | 1.1175 | 1.0855 |
| drift_no_low_vol | ema_dist_slow | 6155 | 0.0184 | 0.0094 |
| drift_no_low_vol | bars_since_impulse_low | 6155 | 14.3183 | 15.0000 |

![examples](figures/lowvol_grind_v2/example_patterns.png)

![structure](figures/lowvol_grind_v2/structure_distributions.png)

## 4. Analysis A — boundary race

Breakout-first = price crosses the frozen pattern high before the frozen pattern low; 1m bars resolve same-hour touches. Rates are on resolved events (breakout-first + breakdown-first); the all-valid rate is also reported.

| group | horizon | n_resolved | n_bo | n_bd | n_neither | n_ambiguous | bo_rate_resolved | bo_ci_low | bo_ci_high | bo_rate_valid |
|---|---|---|---|---|---|---|---|---|---|---|
| A | 3 | 399 | 358 | 41 | 176 | 0 | 0.8972 | 0.8636 | 0.9233 | 0.9287 |
| A | 6 | 505 | 429 | 76 | 70 | 0 | 0.8495 | 0.8157 | 0.8780 | 0.8678 |
| A | 12 | 556 | 461 | 95 | 19 | 0 | 0.8291 | 0.7956 | 0.8581 | 0.8348 |
| A | 24 | 572 | 466 | 106 | 3 | 0 | 0.8147 | 0.7808 | 0.8444 | 0.8157 |
| A | 48 | 575 | 467 | 108 | 0 | 0 | 0.8122 | 0.7782 | 0.8420 | 0.8122 |
| B | 3 | 4075 | 3549 | 526 | 2061 | 1 | 0.8709 | 0.8603 | 0.8809 | 0.9143 |
| B | 6 | 5052 | 4126 | 926 | 1084 | 1 | 0.8167 | 0.8058 | 0.8271 | 0.8491 |
| B | 12 | 5716 | 4489 | 1227 | 420 | 1 | 0.7853 | 0.7745 | 0.7958 | 0.8001 |
| B | 24 | 6046 | 4663 | 1383 | 90 | 1 | 0.7713 | 0.7605 | 0.7817 | 0.7746 |
| B | 48 | 6121 | 4693 | 1428 | 15 | 1 | 0.7667 | 0.7559 | 0.7771 | 0.7673 |
| drift_no_low_vol | 3 | 3633 | 3110 | 523 | 2522 | 0 | 0.8560 | 0.8443 | 0.8671 | 0.9150 |
| drift_no_low_vol | 6 | 4592 | 3702 | 890 | 1563 | 0 | 0.8062 | 0.7945 | 0.8174 | 0.8554 |
| drift_no_low_vol | 12 | 5396 | 4147 | 1249 | 759 | 0 | 0.7685 | 0.7571 | 0.7796 | 0.7971 |
| drift_no_low_vol | 24 | 5881 | 4406 | 1475 | 274 | 0 | 0.7492 | 0.7380 | 0.7601 | 0.7604 |
| drift_no_low_vol | 48 | 6060 | 4488 | 1572 | 95 | 0 | 0.7406 | 0.7294 | 0.7515 | 0.7446 |
| impulse_drift | 3 | 313 | 258 | 55 | 258 | 0 | 0.8243 | 0.7783 | 0.8624 | 0.9037 |
| impulse_drift | 6 | 419 | 325 | 94 | 152 | 0 | 0.7757 | 0.7333 | 0.8130 | 0.8354 |
| impulse_drift | 12 | 506 | 373 | 133 | 65 | 0 | 0.7372 | 0.6971 | 0.7736 | 0.7671 |
| impulse_drift | 24 | 538 | 387 | 151 | 33 | 0 | 0.7193 | 0.6799 | 0.7556 | 0.7356 |
| impulse_drift | 48 | 563 | 402 | 161 | 8 | 0 | 0.7140 | 0.6754 | 0.7498 | 0.7180 |
| low_vol_all | 3 | 7384 | 3606 | 3778 | 4399 | 1 | 0.4884 | 0.4770 | 0.4998 | 0.6794 |
| low_vol_all | 6 | 9442 | 4607 | 4835 | 2341 | 1 | 0.4879 | 0.4779 | 0.4980 | 0.5897 |
| low_vol_all | 12 | 10930 | 5358 | 5572 | 853 | 1 | 0.4902 | 0.4808 | 0.4996 | 0.5272 |
| low_vol_all | 24 | 11566 | 5689 | 5877 | 217 | 1 | 0.4919 | 0.4828 | 0.5010 | 0.5013 |
| low_vol_all | 48 | 11744 | 5762 | 5982 | 39 | 1 | 0.4906 | 0.4816 | 0.4997 | 0.4924 |
| low_vol_sideways | 3 | 4454 | 2257 | 2197 | 2872 | 0 | 0.5067 | 0.4921 | 0.5214 | 0.7001 |
| low_vol_sideways | 6 | 5936 | 2995 | 2941 | 1390 | 0 | 0.5045 | 0.4918 | 0.5173 | 0.5986 |
| low_vol_sideways | 12 | 6901 | 3496 | 3405 | 425 | 0 | 0.5066 | 0.4948 | 0.5184 | 0.5352 |
| low_vol_sideways | 24 | 7249 | 3679 | 3570 | 77 | 0 | 0.5075 | 0.4960 | 0.5190 | 0.5127 |
| low_vol_sideways | 48 | 7321 | 3715 | 3606 | 5 | 0 | 0.5074 | 0.4960 | 0.5189 | 0.5078 |
| post_impulse_all | 3 | 793 | 361 | 432 | 695 | 0 | 0.4552 | 0.4209 | 0.4900 | 0.7097 |
| post_impulse_all | 6 | 1097 | 511 | 586 | 391 | 0 | 0.4658 | 0.4365 | 0.4954 | 0.6062 |
| post_impulse_all | 12 | 1304 | 608 | 696 | 184 | 0 | 0.4663 | 0.4393 | 0.4934 | 0.5323 |
| post_impulse_all | 24 | 1408 | 657 | 751 | 80 | 0 | 0.4666 | 0.4407 | 0.4927 | 0.4953 |
| post_impulse_all | 48 | 1453 | 683 | 770 | 35 | 0 | 0.4701 | 0.4445 | 0.4958 | 0.4825 |

### Pattern − comparator differences (12h, block bootstrap)

| comparator | n_pattern | n_baseline | pattern_bo_rate | baseline_bo_rate | abs_diff | ci_low | ci_high |
|---|---|---|---|---|---|---|---|
| B | 556 | 5716 | 0.8291 | 0.7853 | 0.0438 | -0.0004 | 0.0893 |
| drift_no_low_vol | 556 | 5396 | 0.8291 | 0.7685 | 0.0606 | 0.0118 | 0.1088 |
| impulse_drift | 556 | 506 | 0.8291 | 0.7372 | 0.0920 | 0.0222 | 0.1635 |
| low_vol_all | 556 | 10930 | 0.8291 | 0.4902 | 0.3389 | 0.2920 | 0.3844 |
| post_impulse_all | 556 | 1304 | 0.8291 | 0.4663 | 0.3629 | 0.3003 | 0.4231 |

![race](figures/lowvol_grind_v2/boundary_race.png)

## 5. Analysis B — geometry-matched controls

Controls are sampled from eligible windows matched on symbol, duration, trailing volatility quintile, prior-impulse status, distance-to-high bin, distance-to-low bin, normalized-range bin and half-year, with a documented relaxation order. Matching uses detection-time information only.

| n_pattern_events | n_controls | pattern_bo_rate | control_bo_rate | paired_diff | paired_ci_low | paired_ci_high | pattern_ud_up_rate | control_ud_up_rate | ud_paired_diff | ud_ci_low | ud_ci_high |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 556.0000 | 1725.0000 | 0.8291 | 0.8010 | 0.0282 | -0.0041 | 0.0610 | 0.5126 | 0.5318 | -0.0192 | -0.0702 | 0.0336 |

| upper_bin | n | pattern_bo | control_bo | pattern_ud | control_ud | bo_diff | ud_diff |
|---|---|---|---|---|---|---|---|
| 0.0000 | 139.0000 | 0.9640 | 0.8753 | 0.4820 | 0.5228 | 0.0887 | -0.0408 |
| 1.0000 | 139.0000 | 0.9065 | 0.8585 | 0.5827 | 0.5468 | 0.0480 | 0.0360 |
| 2.0000 | 139.0000 | 0.8058 | 0.8058 | 0.4604 | 0.4748 | 0.0000 | -0.0144 |
| 3.0000 | 139.0000 | 0.6403 | 0.6643 | 0.5252 | 0.5827 | -0.0240 | -0.0576 |

### Match quality

| level | events | controls |
|---|---|---|
| exact | 340 | 1020 |
| relax_dist_high | 47 | 141 |
| relax_period | 6 | 18 |
| relax_range | 182 | 546 |

### Matched-difference robustness

| controls_per_event | n_pattern_events | pattern_bo_rate | control_bo_rate | paired_diff | paired_ci_low | paired_ci_high | pattern_ud_up_rate | control_ud_up_rate | ud_paired_diff | ud_ci_low | ud_ci_high |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1.0000 | 556.0000 | 0.8291 | 0.8094 | 0.0198 | -0.0207 | 0.0586 | 0.5126 | 0.5396 | -0.0270 | -0.0811 | 0.0256 |
| 3.0000 | 556.0000 | 0.8291 | 0.8010 | 0.0282 | -0.0041 | 0.0610 | 0.5126 | 0.5318 | -0.0192 | -0.0702 | 0.0336 |
| 5.0000 | 556.0000 | 0.8291 | 0.7986 | 0.0306 | -0.0032 | 0.0655 | 0.5126 | 0.5191 | -0.0065 | -0.0583 | 0.0452 |

### Geometry-conditioned linear probability models

`boundary_*`: breakout-first on an is-pattern indicator with geometry, volatility, slope and impulse controls (month-clustered SE). `barrier_*`: equal-distance up-first with the same pattern indicator (geometry is symmetric by construction).

{
  "boundary_n": 2198.0,
  "boundary_coef_is_pattern": -0.009838015372951881,
  "boundary_ci_low": -0.041257028902663466,
  "boundary_ci_high": 0.0215809981567597,
  "boundary_p_value": 0.5394071259758486,
  "barrier_n": 2198.0,
  "barrier_coef_is_pattern": 0.003376220327757295,
  "barrier_ci_low": -0.03994343670034788,
  "barrier_ci_high": 0.04669587735586247,
  "barrier_p_value": 0.8785919221940865
}

## 6. Analysis C — equal-distance ATR barriers

Reference price is the first tradable price after detection (`open[t+1]`); barriers are ±k·ATR(trailing 14h) from that reference, for k ∈ [0.5, 1.0, 1.5, 2.0]. By construction the nearer-boundary advantage of the frozen race is removed.

| group | multiplier | horizon | n_resolved | n_up | n_down | n_neither | n_ambiguous | up_first_rate | up_ci_low | up_ci_high | down_first_rate | up_rate_all_valid | neither_rate | ambiguous_rate |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| A | 0.5000 | 3 | 512 | 266 | 246 | 63 | 0 | 0.5195 | 0.4763 | 0.5625 | 0.4805 | 0.4626 | 0.1096 | 0.0000 |
| A | 0.5000 | 6 | 564 | 291 | 273 | 11 | 0 | 0.5160 | 0.4747 | 0.5570 | 0.4840 | 0.5061 | 0.0191 | 0.0000 |
| A | 0.5000 | 12 | 574 | 295 | 279 | 1 | 0 | 0.5139 | 0.4731 | 0.5546 | 0.4861 | 0.5130 | 0.0017 | 0.0000 |
| A | 0.5000 | 24 | 575 | 296 | 279 | 0 | 0 | 0.5148 | 0.4740 | 0.5554 | 0.4852 | 0.5148 | 0.0000 | 0.0000 |
| A | 0.5000 | 48 | 575 | 296 | 279 | 0 | 0 | 0.5148 | 0.4740 | 0.5554 | 0.4852 | 0.5148 | 0.0000 | 0.0000 |
| A | 1.0000 | 3 | 267 | 135 | 132 | 308 | 0 | 0.5056 | 0.4460 | 0.5651 | 0.4944 | 0.2348 | 0.5357 | 0.0000 |
| A | 1.0000 | 6 | 439 | 232 | 207 | 136 | 0 | 0.5285 | 0.4817 | 0.5747 | 0.4715 | 0.4035 | 0.2365 | 0.0000 |
| A | 1.0000 | 12 | 541 | 289 | 252 | 34 | 0 | 0.5342 | 0.4921 | 0.5758 | 0.4658 | 0.5026 | 0.0591 | 0.0000 |
| A | 1.0000 | 24 | 569 | 303 | 266 | 6 | 0 | 0.5325 | 0.4914 | 0.5732 | 0.4675 | 0.5270 | 0.0104 | 0.0000 |
| A | 1.0000 | 48 | 575 | 308 | 267 | 0 | 0 | 0.5357 | 0.4948 | 0.5760 | 0.4643 | 0.5357 | 0.0000 | 0.0000 |
| A | 1.5000 | 3 | 132 | 63 | 69 | 443 | 0 | 0.4773 | 0.3939 | 0.5619 | 0.5227 | 0.1096 | 0.7704 | 0.0000 |
| A | 1.5000 | 6 | 266 | 127 | 139 | 309 | 0 | 0.4774 | 0.4182 | 0.5374 | 0.5226 | 0.2209 | 0.5374 | 0.0000 |
| A | 1.5000 | 12 | 451 | 225 | 226 | 124 | 0 | 0.4989 | 0.4529 | 0.5449 | 0.5011 | 0.3913 | 0.2157 | 0.0000 |
| A | 1.5000 | 24 | 535 | 255 | 280 | 40 | 0 | 0.4766 | 0.4346 | 0.5190 | 0.5234 | 0.4435 | 0.0696 | 0.0000 |
| A | 1.5000 | 48 | 569 | 267 | 302 | 6 | 0 | 0.4692 | 0.4286 | 0.5103 | 0.5308 | 0.4643 | 0.0104 | 0.0000 |
| A | 2.0000 | 3 | 69 | 31 | 38 | 506 | 0 | 0.4493 | 0.3377 | 0.5662 | 0.5507 | 0.0539 | 0.8800 | 0.0000 |
| A | 2.0000 | 6 | 163 | 75 | 88 | 412 | 0 | 0.4601 | 0.3854 | 0.5367 | 0.5399 | 0.1304 | 0.7165 | 0.0000 |
| A | 2.0000 | 12 | 340 | 167 | 173 | 235 | 0 | 0.4912 | 0.4384 | 0.5441 | 0.5088 | 0.2904 | 0.4087 | 0.0000 |
| A | 2.0000 | 24 | 471 | 226 | 245 | 104 | 0 | 0.4798 | 0.4351 | 0.5249 | 0.5202 | 0.3930 | 0.1809 | 0.0000 |
| A | 2.0000 | 48 | 546 | 261 | 285 | 29 | 0 | 0.4780 | 0.4364 | 0.5199 | 0.5220 | 0.4539 | 0.0504 | 0.0000 |
| B | 0.5000 | 3 | 5829 | 2715 | 3114 | 306 | 2 | 0.4658 | 0.4530 | 0.4786 | 0.5342 | 0.4424 | 0.0499 | 0.0003 |
| B | 0.5000 | 6 | 6093 | 2842 | 3251 | 42 | 2 | 0.4664 | 0.4539 | 0.4790 | 0.5336 | 0.4631 | 0.0068 | 0.0003 |
| B | 0.5000 | 12 | 6134 | 2862 | 3272 | 1 | 2 | 0.4666 | 0.4541 | 0.4791 | 0.5334 | 0.4664 | 0.0002 | 0.0003 |
| B | 0.5000 | 24 | 6135 | 2862 | 3273 | 0 | 2 | 0.4665 | 0.4540 | 0.4790 | 0.5335 | 0.4664 | 0.0000 | 0.0003 |
| B | 0.5000 | 48 | 6135 | 2862 | 3273 | 0 | 2 | 0.4665 | 0.4540 | 0.4790 | 0.5335 | 0.4664 | 0.0000 | 0.0003 |
| B | 1.0000 | 3 | 3655 | 1817 | 1838 | 2480 | 2 | 0.4971 | 0.4809 | 0.5133 | 0.5029 | 0.2961 | 0.4041 | 0.0003 |
| B | 1.0000 | 6 | 5113 | 2504 | 2609 | 1022 | 2 | 0.4897 | 0.4760 | 0.5034 | 0.5103 | 0.4080 | 0.1665 | 0.0003 |
| B | 1.0000 | 12 | 5906 | 2902 | 3004 | 229 | 2 | 0.4914 | 0.4786 | 0.5041 | 0.5086 | 0.4729 | 0.0373 | 0.0003 |
| B | 1.0000 | 24 | 6111 | 3010 | 3101 | 24 | 2 | 0.4926 | 0.4800 | 0.5051 | 0.5074 | 0.4905 | 0.0039 | 0.0003 |
| B | 1.0000 | 48 | 6135 | 3023 | 3112 | 0 | 2 | 0.4927 | 0.4802 | 0.5053 | 0.5073 | 0.4926 | 0.0000 | 0.0003 |
| B | 1.5000 | 3 | 1989 | 1068 | 921 | 4148 | 0 | 0.5370 | 0.5150 | 0.5588 | 0.4630 | 0.1740 | 0.6759 | 0.0000 |
| B | 1.5000 | 6 | 3562 | 1821 | 1741 | 2575 | 0 | 0.5112 | 0.4948 | 0.5276 | 0.4888 | 0.2967 | 0.4196 | 0.0000 |
| B | 1.5000 | 12 | 5092 | 2570 | 2522 | 1045 | 0 | 0.5047 | 0.4910 | 0.5184 | 0.4953 | 0.4188 | 0.1703 | 0.0000 |
| B | 1.5000 | 24 | 5892 | 2968 | 2924 | 245 | 0 | 0.5037 | 0.4910 | 0.5165 | 0.4963 | 0.4836 | 0.0399 | 0.0000 |
| B | 1.5000 | 48 | 6116 | 3083 | 3033 | 21 | 0 | 0.5041 | 0.4916 | 0.5166 | 0.4959 | 0.5024 | 0.0034 | 0.0000 |
| B | 2.0000 | 3 | 1068 | 598 | 470 | 5069 | 0 | 0.5599 | 0.5300 | 0.5894 | 0.4401 | 0.0974 | 0.8260 | 0.0000 |
| B | 2.0000 | 6 | 2352 | 1220 | 1132 | 3785 | 0 | 0.5187 | 0.4985 | 0.5389 | 0.4813 | 0.1988 | 0.6168 | 0.0000 |
| B | 2.0000 | 12 | 4048 | 2039 | 2009 | 2089 | 0 | 0.5037 | 0.4883 | 0.5191 | 0.4963 | 0.3322 | 0.3404 | 0.0000 |
| B | 2.0000 | 24 | 5392 | 2731 | 2661 | 745 | 0 | 0.5065 | 0.4931 | 0.5198 | 0.4935 | 0.4450 | 0.1214 | 0.0000 |
| B | 2.0000 | 48 | 6005 | 3028 | 2977 | 132 | 0 | 0.5042 | 0.4916 | 0.5169 | 0.4958 | 0.4934 | 0.0215 | 0.0000 |
| drift_no_low_vol | 0.5000 | 3 | 5895 | 2993 | 2902 | 259 | 1 | 0.5077 | 0.4950 | 0.5205 | 0.4923 | 0.4863 | 0.0421 | 0.0002 |
| drift_no_low_vol | 0.5000 | 6 | 6126 | 3102 | 3024 | 28 | 1 | 0.5064 | 0.4938 | 0.5189 | 0.4936 | 0.5040 | 0.0045 | 0.0002 |
| drift_no_low_vol | 0.5000 | 12 | 6149 | 3111 | 3038 | 5 | 1 | 0.5059 | 0.4934 | 0.5184 | 0.4941 | 0.5054 | 0.0008 | 0.0002 |
| drift_no_low_vol | 0.5000 | 24 | 6154 | 3112 | 3042 | 0 | 1 | 0.5057 | 0.4932 | 0.5182 | 0.4943 | 0.5056 | 0.0000 | 0.0002 |
| drift_no_low_vol | 0.5000 | 48 | 6154 | 3112 | 3042 | 0 | 1 | 0.5057 | 0.4932 | 0.5182 | 0.4943 | 0.5056 | 0.0000 | 0.0002 |
| drift_no_low_vol | 1.0000 | 3 | 3852 | 2011 | 1841 | 2303 | 0 | 0.5221 | 0.5063 | 0.5378 | 0.4779 | 0.3267 | 0.3742 | 0.0000 |
| drift_no_low_vol | 1.0000 | 6 | 5223 | 2659 | 2564 | 932 | 0 | 0.5091 | 0.4955 | 0.5226 | 0.4909 | 0.4320 | 0.1514 | 0.0000 |
| drift_no_low_vol | 1.0000 | 12 | 5914 | 2963 | 2951 | 241 | 0 | 0.5010 | 0.4883 | 0.5138 | 0.4990 | 0.4814 | 0.0392 | 0.0000 |
| drift_no_low_vol | 1.0000 | 24 | 6127 | 3061 | 3066 | 28 | 0 | 0.4996 | 0.4871 | 0.5121 | 0.5004 | 0.4973 | 0.0045 | 0.0000 |
| drift_no_low_vol | 1.0000 | 48 | 6154 | 3073 | 3081 | 1 | 0 | 0.4994 | 0.4869 | 0.5118 | 0.5006 | 0.4993 | 0.0002 | 0.0000 |
| drift_no_low_vol | 1.5000 | 3 | 2139 | 1157 | 982 | 4016 | 0 | 0.5409 | 0.5197 | 0.5619 | 0.4591 | 0.1880 | 0.6525 | 0.0000 |
| drift_no_low_vol | 1.5000 | 6 | 3647 | 1881 | 1766 | 2508 | 0 | 0.5158 | 0.4995 | 0.5320 | 0.4842 | 0.3056 | 0.4075 | 0.0000 |
| drift_no_low_vol | 1.5000 | 12 | 5105 | 2571 | 2534 | 1050 | 0 | 0.5036 | 0.4899 | 0.5173 | 0.4964 | 0.4177 | 0.1706 | 0.0000 |
| drift_no_low_vol | 1.5000 | 24 | 5895 | 2970 | 2925 | 260 | 0 | 0.5038 | 0.4911 | 0.5166 | 0.4962 | 0.4825 | 0.0422 | 0.0000 |
| drift_no_low_vol | 1.5000 | 48 | 6112 | 3074 | 3038 | 43 | 0 | 0.5029 | 0.4904 | 0.5155 | 0.4971 | 0.4994 | 0.0070 | 0.0000 |
| drift_no_low_vol | 2.0000 | 3 | 1206 | 698 | 508 | 4949 | 0 | 0.5788 | 0.5507 | 0.6063 | 0.4212 | 0.1134 | 0.8041 | 0.0000 |
| drift_no_low_vol | 2.0000 | 6 | 2430 | 1285 | 1145 | 3725 | 0 | 0.5288 | 0.5089 | 0.5486 | 0.4712 | 0.2088 | 0.6052 | 0.0000 |
| drift_no_low_vol | 2.0000 | 12 | 3979 | 2017 | 1962 | 2176 | 0 | 0.5069 | 0.4914 | 0.5224 | 0.4931 | 0.3277 | 0.3535 | 0.0000 |
| drift_no_low_vol | 2.0000 | 24 | 5324 | 2704 | 2620 | 831 | 0 | 0.5079 | 0.4945 | 0.5213 | 0.4921 | 0.4393 | 0.1350 | 0.0000 |
| drift_no_low_vol | 2.0000 | 48 | 5939 | 3005 | 2934 | 216 | 0 | 0.5060 | 0.4933 | 0.5187 | 0.4940 | 0.4882 | 0.0351 | 0.0000 |
| impulse_drift | 0.5000 | 3 | 526 | 255 | 271 | 45 | 0 | 0.4848 | 0.4423 | 0.5275 | 0.5152 | 0.4466 | 0.0788 | 0.0000 |
| impulse_drift | 0.5000 | 6 | 566 | 276 | 290 | 5 | 0 | 0.4876 | 0.4467 | 0.5288 | 0.5124 | 0.4834 | 0.0088 | 0.0000 |
| impulse_drift | 0.5000 | 12 | 570 | 277 | 293 | 1 | 0 | 0.4860 | 0.4452 | 0.5270 | 0.5140 | 0.4851 | 0.0018 | 0.0000 |
| impulse_drift | 0.5000 | 24 | 571 | 277 | 294 | 0 | 0 | 0.4851 | 0.4444 | 0.5261 | 0.5149 | 0.4851 | 0.0000 | 0.0000 |
| impulse_drift | 0.5000 | 48 | 571 | 277 | 294 | 0 | 0 | 0.4851 | 0.4444 | 0.5261 | 0.5149 | 0.4851 | 0.0000 | 0.0000 |
| impulse_drift | 1.0000 | 3 | 304 | 140 | 164 | 267 | 0 | 0.4605 | 0.4053 | 0.5167 | 0.5395 | 0.2452 | 0.4676 | 0.0000 |
| impulse_drift | 1.0000 | 6 | 441 | 204 | 237 | 130 | 0 | 0.4626 | 0.4166 | 0.5092 | 0.5374 | 0.3573 | 0.2277 | 0.0000 |
| impulse_drift | 1.0000 | 12 | 547 | 248 | 299 | 24 | 0 | 0.4534 | 0.4121 | 0.4953 | 0.5466 | 0.4343 | 0.0420 | 0.0000 |
| impulse_drift | 1.0000 | 24 | 568 | 257 | 311 | 3 | 0 | 0.4525 | 0.4120 | 0.4936 | 0.5475 | 0.4501 | 0.0053 | 0.0000 |
| impulse_drift | 1.0000 | 48 | 571 | 260 | 311 | 0 | 0 | 0.4553 | 0.4149 | 0.4964 | 0.5447 | 0.4553 | 0.0000 | 0.0000 |
| impulse_drift | 1.5000 | 3 | 149 | 72 | 77 | 422 | 0 | 0.4832 | 0.4044 | 0.5629 | 0.5168 | 0.1261 | 0.7391 | 0.0000 |
| impulse_drift | 1.5000 | 6 | 291 | 128 | 163 | 280 | 0 | 0.4399 | 0.3840 | 0.4973 | 0.5601 | 0.2242 | 0.4904 | 0.0000 |
| impulse_drift | 1.5000 | 12 | 443 | 201 | 242 | 128 | 0 | 0.4537 | 0.4080 | 0.5003 | 0.5463 | 0.3520 | 0.2242 | 0.0000 |
| impulse_drift | 1.5000 | 24 | 534 | 243 | 291 | 37 | 0 | 0.4551 | 0.4133 | 0.4975 | 0.5449 | 0.4256 | 0.0648 | 0.0000 |
| impulse_drift | 1.5000 | 48 | 563 | 260 | 303 | 8 | 0 | 0.4618 | 0.4210 | 0.5031 | 0.5382 | 0.4553 | 0.0140 | 0.0000 |
| impulse_drift | 2.0000 | 3 | 84 | 42 | 42 | 487 | 0 | 0.5000 | 0.3954 | 0.6046 | 0.5000 | 0.0736 | 0.8529 | 0.0000 |
| impulse_drift | 2.0000 | 6 | 192 | 83 | 109 | 379 | 0 | 0.4323 | 0.3642 | 0.5030 | 0.5677 | 0.1454 | 0.6637 | 0.0000 |
| impulse_drift | 2.0000 | 12 | 345 | 151 | 194 | 226 | 0 | 0.4377 | 0.3863 | 0.4904 | 0.5623 | 0.2644 | 0.3958 | 0.0000 |
| impulse_drift | 2.0000 | 24 | 467 | 209 | 258 | 104 | 0 | 0.4475 | 0.4030 | 0.4929 | 0.5525 | 0.3660 | 0.1821 | 0.0000 |
| impulse_drift | 2.0000 | 48 | 532 | 246 | 286 | 39 | 0 | 0.4624 | 0.4205 | 0.5049 | 0.5376 | 0.4308 | 0.0683 | 0.0000 |

### A − comparator differences

| multiplier | horizon | comparator | n_pattern | n_baseline | pattern_up_rate | baseline_up_rate | abs_diff | ci_low | ci_high |
|---|---|---|---|---|---|---|---|---|---|
| 0.5000 | 12 | B | 574 | 6134 | 0.5139 | 0.4666 | 0.0474 | -0.0136 | 0.1036 |
| 0.5000 | 12 | drift_no_low_vol | 574 | 6149 | 0.5139 | 0.5059 | 0.0080 | -0.0491 | 0.0630 |
| 0.5000 | 12 | impulse_drift | 574 | 570 | 0.5139 | 0.4860 | 0.0280 | -0.0438 | 0.0923 |
| 1.0000 | 3 | B | 267 | 3655 | 0.5056 | 0.4971 | 0.0085 | -0.0839 | 0.0921 |
| 1.0000 | 3 | drift_no_low_vol | 267 | 3852 | 0.5056 | 0.5221 | -0.0164 | -0.1065 | 0.0670 |
| 1.0000 | 3 | impulse_drift | 267 | 304 | 0.5056 | 0.4605 | 0.0451 | -0.0669 | 0.1586 |
| 1.0000 | 6 | B | 439 | 5113 | 0.5285 | 0.4897 | 0.0387 | -0.0289 | 0.1031 |
| 1.0000 | 6 | drift_no_low_vol | 439 | 5223 | 0.5285 | 0.5091 | 0.0194 | -0.0491 | 0.0882 |
| 1.0000 | 6 | impulse_drift | 439 | 441 | 0.5285 | 0.4626 | 0.0659 | -0.0293 | 0.1619 |
| 1.0000 | 12 | B | 541 | 5906 | 0.5342 | 0.4914 | 0.0428 | -0.0161 | 0.0997 |
| 1.0000 | 12 | drift_no_low_vol | 541 | 5914 | 0.5342 | 0.5010 | 0.0332 | -0.0255 | 0.0971 |
| 1.0000 | 12 | impulse_drift | 541 | 547 | 0.5342 | 0.4534 | 0.0808 | 0.0005 | 0.1706 |
| 1.0000 | 24 | B | 569 | 6111 | 0.5325 | 0.4926 | 0.0400 | -0.0172 | 0.0930 |
| 1.0000 | 24 | drift_no_low_vol | 569 | 6127 | 0.5325 | 0.4996 | 0.0329 | -0.0248 | 0.0936 |
| 1.0000 | 24 | impulse_drift | 569 | 568 | 0.5325 | 0.4525 | 0.0800 | -0.0017 | 0.1654 |
| 1.0000 | 48 | B | 575 | 6135 | 0.5357 | 0.4927 | 0.0429 | -0.0136 | 0.0951 |
| 1.0000 | 48 | drift_no_low_vol | 575 | 6154 | 0.5357 | 0.4994 | 0.0363 | -0.0200 | 0.0971 |
| 1.0000 | 48 | impulse_drift | 575 | 571 | 0.5357 | 0.4553 | 0.0803 | -0.0020 | 0.1645 |
| 1.5000 | 12 | B | 451 | 5092 | 0.4989 | 0.5047 | -0.0058 | -0.0725 | 0.0624 |
| 1.5000 | 12 | drift_no_low_vol | 451 | 5105 | 0.4989 | 0.5036 | -0.0047 | -0.0805 | 0.0660 |
| 1.5000 | 12 | impulse_drift | 451 | 443 | 0.4989 | 0.4537 | 0.0452 | -0.0583 | 0.1495 |
| 2.0000 | 12 | B | 340 | 4048 | 0.4912 | 0.5037 | -0.0125 | -0.0882 | 0.0674 |
| 2.0000 | 12 | drift_no_low_vol | 340 | 3979 | 0.4912 | 0.5069 | -0.0157 | -0.0925 | 0.0669 |
| 2.0000 | 12 | impulse_drift | 340 | 345 | 0.4912 | 0.4377 | 0.0535 | -0.0572 | 0.1609 |

![barriers](figures/lowvol_grind_v2/equal_distance_barriers.png)

## 7. Secondary questions

### Forward returns after detection

| horizon | comparator | n_pattern | n_baseline | pattern_mean | baseline_mean | abs_diff | ci_low | ci_high |
|---|---|---|---|---|---|---|---|---|
| 3 | drift_no_low_vol | 575 | 6155 | -0.0000 | 0.0007 | -0.0007 | -0.0025 | 0.0010 |
| 6 | drift_no_low_vol | 575 | 6155 | -0.0006 | 0.0008 | -0.0014 | -0.0039 | 0.0009 |
| 12 | drift_no_low_vol | 575 | 6155 | 0.0017 | 0.0012 | 0.0005 | -0.0030 | 0.0041 |
| 24 | drift_no_low_vol | 575 | 6155 | 0.0033 | 0.0019 | 0.0014 | -0.0033 | 0.0068 |
| 48 | drift_no_low_vol | 575 | 6155 | 0.0071 | 0.0037 | 0.0034 | -0.0030 | 0.0102 |
| 3 | impulse_drift | 575 | 571 | -0.0000 | 0.0005 | -0.0005 | -0.0035 | 0.0023 |
| 6 | impulse_drift | 575 | 571 | -0.0006 | 0.0005 | -0.0011 | -0.0056 | 0.0029 |
| 12 | impulse_drift | 575 | 571 | 0.0017 | 0.0014 | 0.0003 | -0.0066 | 0.0066 |
| 24 | impulse_drift | 575 | 571 | 0.0033 | -0.0003 | 0.0037 | -0.0037 | 0.0106 |
| 48 | impulse_drift | 575 | 571 | 0.0071 | 0.0023 | 0.0048 | -0.0061 | 0.0164 |
| 3 | B | 575 | 6137 | -0.0000 | -0.0001 | 0.0001 | -0.0018 | 0.0015 |
| 6 | B | 575 | 6137 | -0.0006 | 0.0001 | -0.0007 | -0.0030 | 0.0015 |
| 12 | B | 575 | 6137 | 0.0017 | 0.0001 | 0.0016 | -0.0015 | 0.0050 |
| 24 | B | 575 | 6137 | 0.0033 | 0.0009 | 0.0024 | -0.0020 | 0.0074 |
| 48 | B | 575 | 6137 | 0.0071 | 0.0020 | 0.0052 | -0.0014 | 0.0113 |

Pattern forward returns are statistically indistinguishable from comparable upward drift at every horizon; the largest point estimate is +0.34% over 48h with a CI that includes zero.

### Continuation after the breakout

| route | n | post_3h | post_6h | post_12h | post_24h | reversal_3h | followthrough_12h | post_1h | mfe | mae |
|---|---|---|---|---|---|---|---|---|---|---|
| boundary_race | 461 | -0.0014 | -0.0010 | -0.0013 | 0.0001 | 0.5531 | 0.4599 |  |  |  |
| equal_distance_1ATR | 289 | -0.0008 | -0.0026 | -0.0040 | -0.0018 | 0.7128 | 0.4083 | -0.0004 | 0.0196 | -0.0246 |

Breakouts do not continue on average. In the boundary race the post-breakout 12h mean is slightly negative, 55% reverse within 3h and only 46% are still above the level after 12h. The equal-distance route is worse: 71% reverse within 3h.

![forward returns](figures/lowvol_grind_v2/forward_returns.png)

## 8. Structural-feature ablation

Each stage adds one candidate condition to the v1 base (drift + compression + impulse). Raw breakout rates rise for some conditions, but the equal-distance up-first rate is near 50% wherever the sample remains usable, and several conditions collapse the sample to a handful of events.

| stage | n_raw | n_dedup | n_resolved | n_bo | n_bd | n_neither | n_ambiguous | ud_n_resolved | ud_n_up | bo_rate_resolved | bo_rate_all_valid | ud_up_rate |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 01_drift | 45509 | 10332 | 9316 | 7253 | 2063 | 1015 | 1 | 9909 | 4914 | 0.7786 | 0.7020 | 0.4959 |
| 02_drift_compression | 23035 | 6349 | 5920 | 4658 | 1262 | 428 | 1 | 6109 | 3020 | 0.7868 | 0.7337 | 0.4944 |
| 03_plus_impulse | 1229 | 575 | 556 | 461 | 95 | 19 | 0 | 541 | 289 | 0.8291 | 0.8017 | 0.5342 |
| 04_plus_consec_up | 232 | 161 | 159 | 140 | 19 | 2 | 0 | 156 | 78 | 0.8805 | 0.8696 | 0.5000 |
| 05_plus_higher_low | 1116 | 541 | 523 | 435 | 88 | 18 | 0 | 512 | 271 | 0.8317 | 0.8041 | 0.5293 |
| 06_plus_slope_r2 | 325 | 197 | 195 | 177 | 18 | 2 | 0 | 186 | 96 | 0.9077 | 0.8985 | 0.5161 |
| 07_plus_overlap | 1229 | 575 | 556 | 461 | 95 | 19 | 0 | 541 | 289 | 0.8291 | 0.8017 | 0.5342 |
| 08_plus_pullback | 757 | 395 | 387 | 335 | 52 | 8 | 0 | 377 | 197 | 0.8656 | 0.8481 | 0.5225 |
| 09_plus_failed_pushes | 845 | 424 | 409 | 336 | 73 | 15 | 0 | 404 | 210 | 0.8215 | 0.7925 | 0.5198 |
| 10_plus_weak_recovery | 878 | 408 | 394 | 319 | 75 | 14 | 0 | 388 | 210 | 0.8096 | 0.7819 | 0.5412 |
| 11_plus_ema_momentum | 12 | 11 | 10 | 7 | 3 | 1 | 0 | 11 | 6 | 0.7000 | 0.6364 | 0.5455 |
| 12_plus_ema_spread | 11 | 10 | 9 | 6 | 3 | 1 | 0 | 10 | 5 | 0.6667 | 0.6000 | 0.5000 |
| 13_plus_volume | 10 | 9 | 9 | 6 | 3 | 0 | 0 | 9 | 5 | 0.6667 | 0.6667 | 0.5556 |

![ablation](figures/lowvol_grind_v2/ablation.png)

## 9. Parameter sensitivity

Full pre-registered grid: 540 configurations. Raw-race lift over the drift-only comparator is positive in 506 of 540 cells, but the equal-distance up-first rate exceeds 50% in only 178 cells and no cell survives the multiple-testing correction on that metric. No configuration was selected using the test window.

| duration | slope_min | slope_max | vol_ratio_max | impulse_z_max | n_A | bo_A | bo_C | lift_vs_C | p_vs_C | q_vs_C | n_ud_A | ud_up_A | p_ud | q_ud |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 8.0000 | 0.0000 | 0.4000 | 0.6000 | -2.0000 | 151.0000 | 0.8146 | 0.6902 | 0.1244 | 0.0010 | 0.0064 | 146.0000 | 0.5890 | 0.0191 | 1.0000 |
| 8.0000 | 0.0000 | 1.0000 | 0.6000 | -2.0000 | 173.0000 | 0.8324 | 0.7175 | 0.1149 | 0.0009 | 0.0059 | 165.0000 | 0.5879 | 0.0145 | 1.0000 |
| 8.0000 | 0.2000 | 0.4000 | 0.6000 | -2.0000 | 55.0000 | 0.9091 | 0.7943 | 0.1147 | 0.0358 | 0.0740 | 51.0000 | 0.4510 | 0.7995 | 1.0000 |
| 8.0000 | 0.0000 | 0.6000 | 0.6000 | -2.0000 | 166.0000 | 0.8253 | 0.7114 | 0.1139 | 0.0013 | 0.0070 | 160.0000 | 0.5813 | 0.0239 | 1.0000 |
| 6.0000 | 0.1000 | 0.4000 | 0.6000 | -2.0000 | 144.0000 | 0.8125 | 0.7163 | 0.0962 | 0.0110 | 0.0307 | 139.0000 | 0.5396 | 0.1982 | 1.0000 |
| 8.0000 | 0.2000 | 0.4000 | 0.6000 | -1.5000 | 154.0000 | 0.8896 | 0.7940 | 0.0956 | 0.0037 | 0.0137 | 147.0000 | 0.4762 | 0.7452 | 1.0000 |
| 8.0000 | 0.0500 | 0.4000 | 0.6000 | -2.0000 | 138.0000 | 0.8188 | 0.7233 | 0.0955 | 0.0127 | 0.0339 | 131.0000 | 0.5649 | 0.0809 | 1.0000 |
| 10.0000 | 0.0000 | 0.6000 | 0.6000 | -2.0000 | 141.0000 | 0.8156 | 0.7238 | 0.0918 | 0.0156 | 0.0395 | 140.0000 | 0.5286 | 0.2771 | 1.0000 |
| 10.0000 | 0.0000 | 1.0000 | 0.6000 | -2.0000 | 144.0000 | 0.8194 | 0.7277 | 0.0918 | 0.0141 | 0.0364 | 143.0000 | 0.5315 | 0.2518 | 1.0000 |
| 8.0000 | 0.1000 | 0.4000 | 0.6000 | -1.0000 | 632.0000 | 0.8370 | 0.7459 | 0.0911 | 0.0000 | 0.0000 | 627.0000 | 0.5120 | 0.2881 | 1.0000 |
| 10.0000 | 0.0000 | 0.4000 | 0.6000 | -2.0000 | 131.0000 | 0.8015 | 0.7105 | 0.0910 | 0.0227 | 0.0514 | 132.0000 | 0.5606 | 0.0957 | 1.0000 |
| 8.0000 | 0.2000 | 1.0000 | 0.6000 | -2.0000 | 77.0000 | 0.9221 | 0.8316 | 0.0905 | 0.0345 | 0.0725 | 70.0000 | 0.4857 | 0.6399 | 1.0000 |
| 10.0000 | 0.0500 | 0.4000 | 0.6000 | -2.0000 | 113.0000 | 0.8407 | 0.7502 | 0.0905 | 0.0273 | 0.0599 | 113.0000 | 0.5487 | 0.1734 | 1.0000 |
| 8.0000 | 0.2000 | 0.6000 | 0.6000 | -2.0000 | 70.0000 | 0.9143 | 0.8239 | 0.0904 | 0.0479 | 0.0928 | 65.0000 | 0.4615 | 0.7715 | 1.0000 |
| 10.0000 | 0.0500 | 0.6000 | 0.6000 | -2.0000 | 123.0000 | 0.8537 | 0.7640 | 0.0897 | 0.0200 | 0.0470 | 121.0000 | 0.5124 | 0.4279 | 1.0000 |
| 8.0000 | 0.2000 | 0.4000 | 0.6000 | -1.0000 | 376.0000 | 0.8803 | 0.7914 | 0.0889 | 0.0000 | 0.0005 | 374.0000 | 0.5000 | 0.5206 | 1.0000 |
| 10.0000 | 0.0500 | 1.0000 | 0.6000 | -2.0000 | 126.0000 | 0.8571 | 0.7684 | 0.0887 | 0.0191 | 0.0457 | 124.0000 | 0.5161 | 0.3939 | 1.0000 |
| 8.0000 | 0.0500 | 1.0000 | 0.6000 | -2.0000 | 160.0000 | 0.8375 | 0.7520 | 0.0855 | 0.0129 | 0.0342 | 150.0000 | 0.5667 | 0.0603 | 1.0000 |
| 8.0000 | 0.0000 | 0.4000 | 0.6000 | -1.5000 | 386.0000 | 0.7746 | 0.6896 | 0.0850 | 0.0004 | 0.0033 | 374.0000 | 0.5428 | 0.0544 | 1.0000 |
| 8.0000 | 0.0500 | 0.6000 | 0.6000 | -2.0000 | 153.0000 | 0.8301 | 0.7453 | 0.0847 | 0.0169 | 0.0420 | 145.0000 | 0.5586 | 0.0919 | 1.0000 |
| 8.0000 | 0.1000 | 0.4000 | 0.6000 | -1.5000 | 278.0000 | 0.8345 | 0.7519 | 0.0826 | 0.0017 | 0.0078 | 268.0000 | 0.5224 | 0.2509 | 1.0000 |
| 10.0000 | 0.0000 | 0.4000 | 0.6000 | -1.5000 | 318.0000 | 0.7925 | 0.7105 | 0.0819 | 0.0016 | 0.0077 | 320.0000 | 0.5250 | 0.2009 | 1.0000 |
| 8.0000 | 0.0000 | 0.4000 | 0.6000 | -1.0000 | 886.0000 | 0.7652 | 0.6834 | 0.0819 | 0.0000 | 0.0000 | 873.0000 | 0.5235 | 0.0879 | 1.0000 |
| 6.0000 | 0.0000 | 0.4000 | 0.6000 | -2.0000 | 188.0000 | 0.7500 | 0.6689 | 0.0811 | 0.0189 | 0.0456 | 182.0000 | 0.5385 | 0.1676 | 1.0000 |
| 8.0000 | 0.0500 | 0.4000 | 0.6000 | -1.5000 | 339.0000 | 0.8024 | 0.7220 | 0.0803 | 0.0012 | 0.0066 | 324.0000 | 0.5340 | 0.1217 | 1.0000 |
| 8.0000 | 0.0500 | 0.4000 | 0.6000 | -1.0000 | 782.0000 | 0.7954 | 0.7159 | 0.0795 | 0.0000 | 0.0001 | 769.0000 | 0.5111 | 0.2820 | 1.0000 |
| 8.0000 | 0.2000 | 0.4000 | 1.0000 | -1.0000 | 936.0000 | 0.8376 | 0.7590 | 0.0786 | 0.0000 | 0.0000 | 953.0000 | 0.4911 | 0.7201 | 1.0000 |
| 4.0000 | 0.1000 | 0.4000 | 1.0000 | -1.0000 | 1998.0000 | 0.7082 | 0.6304 | 0.0778 | 0.0000 | 0.0000 | 1914.0000 | 0.4728 | 0.9918 | 1.0000 |
| 6.0000 | 0.1000 | 0.4000 | 0.6000 | -1.5000 | 354.0000 | 0.7938 | 0.7161 | 0.0777 | 0.0014 | 0.0071 | 338.0000 | 0.5414 | 0.0709 | 1.0000 |
| 8.0000 | 0.1000 | 0.6000 | 0.6000 | -1.0000 | 690.0000 | 0.8420 | 0.7653 | 0.0767 | 0.0000 | 0.0002 | 682.0000 | 0.5073 | 0.3652 | 1.0000 |

![sensitivity](figures/lowvol_grind_v2/sensitivity.png)

## 10. Per-symbol, per-regime and chronological splits

### By symbol (12h, group A)

| group | split | n | n_bo | n_bd | n_neither | n_ambiguous | n_resolved | bo_rate_resolved | bo_ci_low | bo_ci_high | bo_rate_all_valid | horizon | table | symbol |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| A |  | 57 | 50.0000 | 6.0000 | 1.0000 | 0.0000 | 56.0000 | 0.8929 | 0.7853 | 0.9500 | 0.8772 | 12 | symbol | BNBUSDT |
| A |  | 64 | 44.0000 | 16.0000 | 4.0000 | 0.0000 | 60.0000 | 0.7333 | 0.6099 | 0.8287 | 0.6875 | 12 | symbol | BTCUSDT |
| A |  | 77 | 62.0000 | 14.0000 | 1.0000 | 0.0000 | 76.0000 | 0.8158 | 0.7142 | 0.8870 | 0.8052 | 12 | symbol | DOGEUSDT |
| A |  | 73 | 57.0000 | 12.0000 | 4.0000 | 0.0000 | 69.0000 | 0.8261 | 0.7202 | 0.8976 | 0.7808 | 12 | symbol | ETHUSDT |
| A |  | 40 | 33.0000 | 6.0000 | 1.0000 | 0.0000 | 39.0000 | 0.8462 | 0.7027 | 0.9275 | 0.8250 | 12 | symbol | HYPEUSDT |
| A |  | 43 | 34.0000 | 7.0000 | 2.0000 | 0.0000 | 41.0000 | 0.8293 | 0.6874 | 0.9147 | 0.7907 | 12 | symbol | NEARUSDT |
| A |  | 51 | 42.0000 | 8.0000 | 1.0000 | 0.0000 | 50.0000 | 0.8400 | 0.7149 | 0.9166 | 0.8235 | 12 | symbol | OGNUSDT |
| A |  | 74 | 61.0000 | 12.0000 | 1.0000 | 0.0000 | 73.0000 | 0.8356 | 0.7343 | 0.9034 | 0.8243 | 12 | symbol | SOLUSDT |
| A |  | 55 | 46.0000 | 8.0000 | 1.0000 | 0.0000 | 54.0000 | 0.8519 | 0.7340 | 0.9230 | 0.8364 | 12 | symbol | XRPUSDT |
| A |  | 41 | 32.0000 | 6.0000 | 3.0000 | 0.0000 | 38.0000 | 0.8421 | 0.6958 | 0.9256 | 0.7805 | 12 | symbol | ZECUSDT |

### By regime (12h)

| group | regime_vol | market_regime | n | n_bo | n_bd | n_neither | n_ambiguous | n_resolved | bo_rate_resolved | bo_ci_low | bo_ci_high | bo_rate_all_valid | horizon |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| A | highvol | highvol | 332 | 269.0000 | 55.0000 | 8.0000 | 0.0000 | 324.0000 | 0.8302 | 0.7856 | 0.8672 | 0.8102 | 12 |
| A | highvol | lowvol | 55 | 45.0000 | 9.0000 | 1.0000 | 0.0000 | 54.0000 | 0.8333 | 0.7126 | 0.9098 | 0.8182 | 12 |
| A | lowvol | highvol | 46 | 38.0000 | 5.0000 | 3.0000 | 0.0000 | 43.0000 | 0.8837 | 0.7552 | 0.9493 | 0.8261 | 12 |
| A | lowvol | lowvol | 142 | 109.0000 | 26.0000 | 7.0000 | 0.0000 | 135.0000 | 0.8074 | 0.7328 | 0.8650 | 0.7676 | 12 |
| B | highvol | highvol | 1904 | 1341.0000 | 380.0000 | 183.0000 | 0.0000 | 1721.0000 | 0.7792 | 0.7590 | 0.7982 | 0.7043 | 12 |
| B | highvol | lowvol | 515 | 361.0000 | 116.0000 | 38.0000 | 0.0000 | 477.0000 | 0.7568 | 0.7164 | 0.7932 | 0.7010 | 12 |
| B | lowvol | highvol | 728 | 554.0000 | 136.0000 | 38.0000 | 0.0000 | 690.0000 | 0.8029 | 0.7716 | 0.8309 | 0.7610 | 12 |
| B | lowvol | lowvol | 2990 | 2233.0000 | 595.0000 | 161.0000 | 1.0000 | 2828.0000 | 0.7896 | 0.7742 | 0.8042 | 0.7468 | 12 |
| drift_no_low_vol | highvol | highvol | 2677 | 1695.0000 | 535.0000 | 447.0000 | 0.0000 | 2230.0000 | 0.7601 | 0.7419 | 0.7774 | 0.6332 | 12 |
| drift_no_low_vol | highvol | lowvol | 702 | 462.0000 | 151.0000 | 89.0000 | 0.0000 | 613.0000 | 0.7537 | 0.7181 | 0.7861 | 0.6581 | 12 |
| drift_no_low_vol | lowvol | highvol | 650 | 471.0000 | 125.0000 | 54.0000 | 0.0000 | 596.0000 | 0.7903 | 0.7558 | 0.8210 | 0.7246 | 12 |
| drift_no_low_vol | lowvol | lowvol | 2126 | 1519.0000 | 438.0000 | 169.0000 | 0.0000 | 1957.0000 | 0.7762 | 0.7572 | 0.7941 | 0.7145 | 12 |
| impulse_drift | highvol | highvol | 427 | 280.0000 | 95.0000 | 52.0000 | 0.0000 | 375.0000 | 0.7467 | 0.7003 | 0.7880 | 0.6557 | 12 |
| impulse_drift | highvol | lowvol | 61 | 36.0000 | 17.0000 | 8.0000 | 0.0000 | 53.0000 | 0.6792 | 0.5452 | 0.7891 | 0.5902 | 12 |
| impulse_drift | lowvol | highvol | 24 | 15.0000 | 8.0000 | 1.0000 | 0.0000 | 23.0000 | 0.6522 | 0.4489 | 0.8119 | 0.6250 | 12 |
| impulse_drift | lowvol | lowvol | 59 | 42.0000 | 13.0000 | 4.0000 | 0.0000 | 55.0000 | 0.7636 | 0.6365 | 0.8563 | 0.7119 | 12 |
| low_vol_all | highvol | highvol | 3540 | 1580.0000 | 1607.0000 | 353.0000 | 0.0000 | 3187.0000 | 0.4958 | 0.4784 | 0.5131 | 0.4463 | 12 |
| low_vol_all | highvol | lowvol | 1054 | 446.0000 | 517.0000 | 91.0000 | 0.0000 | 963.0000 | 0.4631 | 0.4319 | 0.4947 | 0.4231 | 12 |
| low_vol_all | lowvol | highvol | 1334 | 650.0000 | 611.0000 | 73.0000 | 0.0000 | 1261.0000 | 0.5155 | 0.4879 | 0.5430 | 0.4873 | 12 |
| low_vol_all | lowvol | lowvol | 5853 | 2681.0000 | 2835.0000 | 336.0000 | 1.0000 | 5516.0000 | 0.4860 | 0.4729 | 0.4992 | 0.4581 | 12 |
| low_vol_sideways | highvol | highvol | 2022 | 944.0000 | 915.0000 | 163.0000 | 0.0000 | 1859.0000 | 0.5078 | 0.4851 | 0.5305 | 0.4669 | 12 |
| low_vol_sideways | highvol | lowvol | 589 | 272.0000 | 279.0000 | 38.0000 | 0.0000 | 551.0000 | 0.4936 | 0.4521 | 0.5353 | 0.4618 | 12 |
| low_vol_sideways | lowvol | highvol | 824 | 415.0000 | 366.0000 | 43.0000 | 0.0000 | 781.0000 | 0.5314 | 0.4963 | 0.5661 | 0.5036 | 12 |
| low_vol_sideways | lowvol | lowvol | 3890 | 1864.0000 | 1845.0000 | 181.0000 | 0.0000 | 3709.0000 | 0.5026 | 0.4865 | 0.5186 | 0.4792 | 12 |
| post_impulse_all | highvol | highvol | 962 | 404.0000 | 414.0000 | 144.0000 | 0.0000 | 818.0000 | 0.4939 | 0.4597 | 0.5281 | 0.4200 | 12 |
| post_impulse_all | highvol | lowvol | 174 | 64.0000 | 89.0000 | 21.0000 | 0.0000 | 153.0000 | 0.4183 | 0.3431 | 0.4975 | 0.3678 | 12 |
| post_impulse_all | lowvol | highvol | 103 | 38.0000 | 59.0000 | 6.0000 | 0.0000 | 97.0000 | 0.3918 | 0.3005 | 0.4912 | 0.3689 | 12 |
| post_impulse_all | lowvol | lowvol | 249 | 102.0000 | 134.0000 | 13.0000 | 0.0000 | 236.0000 | 0.4322 | 0.3706 | 0.4960 | 0.4096 | 12 |

### By split (12h)

| group | split | n | n_bo | n_bd | n_neither | n_ambiguous | n_resolved | bo_rate_resolved | bo_ci_low | bo_ci_high | bo_rate_all_valid | horizon | table | symbol |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| A | design | 423 | 352.0000 | 58.0000 | 13.0000 | 0.0000 | 410.0000 | 0.8585 | 0.8215 | 0.8889 | 0.8322 | 12 | split |  |
| A | test | 75 | 51.0000 | 23.0000 | 1.0000 | 0.0000 | 74.0000 | 0.6892 | 0.5766 | 0.7831 | 0.6800 | 12 | split |  |
| A | validation | 77 | 58.0000 | 14.0000 | 5.0000 | 0.0000 | 72.0000 | 0.8056 | 0.6997 | 0.8805 | 0.7532 | 12 | split |  |
| drift_no_low_vol | design | 4305 | 2913.0000 | 891.0000 | 501.0000 | 0.0000 | 3804.0000 | 0.7658 | 0.7521 | 0.7790 | 0.6767 | 12 | split |  |
| drift_no_low_vol | test | 923 | 633.0000 | 176.0000 | 114.0000 | 0.0000 | 809.0000 | 0.7824 | 0.7527 | 0.8095 | 0.6858 | 12 | split |  |
| drift_no_low_vol | validation | 927 | 601.0000 | 182.0000 | 144.0000 | 0.0000 | 783.0000 | 0.7676 | 0.7367 | 0.7958 | 0.6483 | 12 | split |  |

### Walk-forward duration selection

| month | method | duration | n_A | bo_A | n_C | bo_C | lift | train_lift |
|---|---|---|---|---|---|---|---|---|
| 2025-11 | frozen | 8 | 25 | 0.7600 | 263 | 0.7110 | 0.0490 |  |
| 2025-12 | frozen | 8 | 38 | 0.8421 | 209 | 0.7895 | 0.0526 |  |
| 2026-01 | frozen | 8 | 30 | 0.9000 | 263 | 0.7414 | 0.1586 |  |
| 2026-02 | frozen | 8 | 23 | 0.7391 | 207 | 0.7536 | -0.0145 |  |
| 2026-03 | frozen | 8 | 29 | 0.7241 | 264 | 0.7614 | -0.0372 |  |
| 2026-04 | frozen | 8 | 26 | 0.9231 | 268 | 0.7873 | 0.1358 |  |
| 2026-05 | frozen | 8 | 24 | 0.7083 | 274 | 0.7920 | -0.0836 |  |
| 2026-06 | frozen | 8 | 22 | 0.7727 | 241 | 0.7178 | 0.0549 |  |
| 2026-07 | frozen | 8 | 25 | 0.6400 | 271 | 0.7749 | -0.1349 |  |
| 2026-08 | frozen | 8 | 23 | 0.7826 | 270 | 0.7963 | -0.0137 |  |
| 2026-09 | frozen | 8 | 26 | 0.6538 | 268 | 0.7761 | -0.1223 |  |
| 2026-01 | walk_forward_selected | 8 | 30 | 0.9000 | 263 | 0.7414 | 0.1586 | 0.1059 |
| 2026-02 | walk_forward_selected | 8 | 23 | 0.7391 | 207 | 0.7536 | -0.0145 | 0.1102 |
| 2026-03 | walk_forward_selected | 8 | 29 | 0.7241 | 264 | 0.7614 | -0.0372 | 0.1027 |
| 2026-04 | walk_forward_selected | 8 | 26 | 0.9231 | 268 | 0.7873 | 0.1358 | 0.0928 |
| 2026-05 | walk_forward_selected | 8 | 24 | 0.7083 | 274 | 0.7920 | -0.0836 | 0.0952 |
| 2026-06 | walk_forward_selected | 8 | 22 | 0.7727 | 241 | 0.7178 | 0.0549 | 0.0856 |
| 2026-07 | walk_forward_selected | 8 | 25 | 0.6400 | 271 | 0.7749 | -0.1349 | 0.0845 |
| 2026-08 | walk_forward_selected | 8 | 23 | 0.7826 | 270 | 0.7963 | -0.0137 | 0.0737 |
| 2026-09 | walk_forward_selected | 8 | 26 | 0.6538 | 268 | 0.7761 | -0.1223 | 0.0696 |

## 11. Optional long-breakout strategy

Pre-specified long at the first trade through `pattern_high`, entry at the next 1m open, stop at `pattern_low`, 1.5R target, 12h time exit, costs of 0/3/6/12/20 bps per side plus funding. The comparison arms are a plain prior-12h-high breakout (`simple`) and a post-selloff-restricted version (`simple_impulse`).

| n | cost_bps | win_rate | mean_return | median_return | total_return | profit_factor | max_drawdown | avg_holding_hours | pct_stopped | pct_target | tag |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 489.0000 | 0.0000 | 0.4663 | -0.0003 | -0.0012 | -0.1389 | 0.9683 | 0.4853 | 8.1970 | 0.2434 | 0.1022 | pattern |
| 489.0000 | 3.0000 | 0.4479 | -0.0009 | -0.0018 | -0.4323 | 0.9048 | 0.5531 | 8.1970 | 0.2434 | 0.1022 | pattern |
| 489.0000 | 6.0000 | 0.4376 | -0.0015 | -0.0024 | -0.7257 | 0.8457 | 0.7509 | 8.1970 | 0.2434 | 0.1022 | pattern |
| 489.0000 | 12.0000 | 0.4110 | -0.0027 | -0.0036 | -1.3125 | 0.7395 | 1.3321 | 8.1970 | 0.2434 | 0.1022 | pattern |
| 489.0000 | 20.0000 | 0.3661 | -0.0043 | -0.0052 | -2.0949 | 0.6201 | 2.1081 | 8.1970 | 0.2434 | 0.1022 | pattern |
| 4188.0000 | 0.0000 | 0.4835 | 0.0009 | -0.0010 | 3.6360 | 1.0852 | 1.6075 | 10.1988 | 0.1975 | 0.1175 | simple |
| 4188.0000 | 3.0000 | 0.4675 | 0.0003 | -0.0016 | 1.1232 | 1.0255 | 1.8697 | 10.1988 | 0.1975 | 0.1175 | simple |
| 4188.0000 | 6.0000 | 0.4587 | -0.0003 | -0.0022 | -1.3896 | 0.9694 | 2.9791 | 10.1988 | 0.1975 | 0.1175 | simple |
| 4188.0000 | 12.0000 | 0.4346 | -0.0015 | -0.0034 | -6.4152 | 0.8667 | 6.6455 | 10.1988 | 0.1975 | 0.1175 | simple |
| 4188.0000 | 20.0000 | 0.4043 | -0.0031 | -0.0050 | -13.1160 | 0.7479 | 13.2727 | 10.1988 | 0.1975 | 0.1175 | simple |

![strategy](figures/lowvol_grind_v2/strategy.png)

## 12. Answers to the secondary questions

| question | evidence | answer |
|---|---|---|
| Does the pattern predict positive forward returns? | 12h mean +0.17% vs +0.12% for drift-only (diff +0.05%, CI −0.30% to +0.41%); 48h +0.71% vs +0.37% (CI −0.30% to +1.02%) | No significant edge |
| Does compression add beyond drift? | raw race +6.1% (CI +1.2% to +10.9%) but geometry-matched +2.8% (CI −0.4% to +6.1%) and equal-distance +3.3% (CI −2.5% to +9.7%) | Small raw lift, not robust |
| Does the prior impulse improve it? | raw race vs drift+impulse +9.2% (CI +2.2% to +16.4%); equal-distance +8.1% (CI +0.05% to +17.1%); regression p=0.88 | Weak, not robust |
| Is there continuation after the breakout? | post-breakout 12h mean ≈ −0.13%; 55% reverse within 3h; equal-distance route 71% reverse | No continuation |
| Does it survive costs? | long-breakout mean net return is negative at every cost including 0 bps (46.6% win rate) | No |

## 13. Limitations

- The geometry-matched pool is finite; exact matching on all strata is impossible and the relaxation order is documented but discretionary.
- ATR barriers at ±1 ATR are not the same object as the frozen boundaries; the two analyses answer different questions and are reported separately.
- Events overlap in time; inference uses deduplicated events and 7-day block bootstrap, but serial dependence may remain.
- The strategy is a single pre-specified rule, not an optimized system; it is secondary evidence, not proof about the pattern.

## Verdict: **UNSUPPORTED (raw upward rate not robust to boundary geometry)**

- Boundary race: cohort A broke upward first in 461/556 resolved events (82.9%; 95% Wilson 79.6%–85.8%); all-valid rate 83.5%.
- Versus upward drift without compression: 82.9% vs 76.9% (+6.1%, 95% block-bootstrap CI +1.2% to +10.9%).
- Equal-distance ATR barriers: A up-first 53.4% of 541 resolved (49.2%–57.6%).
- Geometry-matched controls: pattern 82.9% vs matched 80.1% (paired diff +2.8%, CI -0.4% to +6.1%); equal-distance up-first 51.3% vs 53.2%.

## Artifacts and reproduction

Machine-readable outputs are under `experiments/reports/lowvol_grind_v2/` and figures under `reports/figures/lowvol_grind_v2/`. Reproduce with:

```bash
python scripts/lowvol_grind_v2_study.py
```

