The Bid & Ask

Quotations, Dispatches, and the Daily Tape

Thursday, August 13, 2026

Rejected thesis

Turnaround-volume (deep drawdown + sustained volume rise)

The result

Thesis (CONFIRMED): On a name that has lost meaningful value over the last 12 months (ret_252d ≤ -30 % and still near the lows), a SUSTAINED multi-day volume rise (recent 20d mean vs preceding 70d mean ≥ V) is an early sign of institutional accumulation, with positive forward returns over 60-250 days vs same-drawdown controls where no volume-rise fires.

Distinctness vs nearby: - drawdown_bounce triggers on a SINGLE negative-day with 5d/60d volume spike — looking for THE bounce day, not the early lead-in. - bounce scanner cohort requires realised vol ≥ 1.0 (panic mode) and recent crash >25 %. Here we want STABILISATION. - accumulation_validate required above-200DMA — opposite filter.

Code: research/turnaround_volume.py Report: research/turnaround_volume_report.json (n=11,069 base events, n=3,778 drawdown-matched controls)

Controls are drawdown-matched: same-name days where ret_252d ≤ -30 % AND dist_from_252d_high ≤ -30 % but no volume-rise — apples-to-apples "already beaten down, no accumulation footprint" comparison.

Cell sweep — BOTH axes scale monotonically:

Cell n 20d 60d 120d 250d hit@60d
D>=30% V>=1.3x 11069 -0.62 % +3.20 % +0.64 % +11.63 % 0.67
D>=30% V>=1.5x 5839 -0.03 % +5.44 % +3.19 % +19.38 % 0.68
D>=30% V>=2.0x 1831 +1.46 % +10.03 % +8.00 % +31.30 % 0.71
D>=50% V>=1.3x 2895 +2.63 % +10.11 % +8.56 % +33.88 % 0.69
D>=50% V>=1.5x 1659 +3.76 % +13.59 % +12.26 % +44.34 % 0.70
D>=50% V>=2.0x 591 +5.50 % +19.29 % +17.76 % +59.16% 0.73

The strictest cell (lost ≥50 % AND 2x+ volume rise) gives +59 % edge over 250 days at hit-rate 0.73 on n=591. Both depth and volume-rise compound; this is rare among the cohorts in this file.

Strata (base = D>=30 % V>=1.3x, n=11,069):

Stratum n 20d 60d 250d hit@60d
base all 11069 -0.62 % +3.20 % +11.63 % 0.67
D <= -50% 2939 +2.54 % +9.83 % +33.32 % 0.68
V >= 2.0x 1831 +1.46 % +10.03 % +31.30 % 0.71
green10 >= 6 (price confirm) 4385 +6.95% +10.56% +18.93 % 0.78
green10 <= 3 (no confirm) 1578 -14.75 % -12.30 % -12.04 % 0.42
stab < 1.0 (vol compressing) 2430 -0.64 % -2.85 % +2.54 % 0.60
stab >= 1.0 (still volatile) 8639 -0.62 % +4.90 % +14.18 % 0.69
OOS 2020+ 7257 +0.00 % +6.16 % +24.87 % 0.68

Three findings:

  1. Both axes scale. Depth × volume-rise are independent filters that compound. The strictest cell (D>=50 % V>=2x) gives among the strongest long-horizon edges in the repo. Per-trade n=591 is comfortable.

  2. Day-after green-day count is the timing accelerator. Without it the short-horizon edge is roughly zero. With ≥6 of the next 10 closes green: 20d edge jumps to +6.95 %, hit-rate 0.78. The mirror cohort (≤3 greens) bleeds -15 %/20d. Same day-after- confirmation principle that survived burst_continuation and dormant_awakening — but here it's not strictly required for the long-horizon (250d) edge, only for the short.

  3. Volatility compression is a NEGATIVE signal, opposite to the coil / VCP intuition. Names quietly going still in deep drawdown are dead-stock-walking (delisting / distress); the still-volatile subset carries the edge. Counterintuitive but clean and well-powered (compressing n=2,430, still-vol n=8,639).

  4. OOS 2020+ is strong (+24.9 %/250d at n=7,257) — not the decay we saw on dormant-awakening. The signal works in modern data. Pre-2020 in-sample was +6.0 %/250d, so OOS is actually stronger than in-sample. That's unusual and worth flagging: post-2020 may be a uniquely turnaround-friendly regime (post- pandemic recovery + AI re-ratings of beaten-down names).

Verdict: Real, strong, OOS-robust signal. Worth productizing as a portfolio-layer overlay (long-horizon — not a short-term scanner play; 60-250d holding). The strictest cell (D>=50 % V>=2x) is the high-conviction subset.

Compared to drawdown_bounce: at the same dd≤-30 % gate, drawdown_bounce gave +6.4 %/250d (per the entry in this file). Turnaround-volume's same dd cell gives +11.6 %/250d — the sustained-volume filter adds ~+5 pp by selecting names where accumulation is already happening, vs catching the single panic-low day. The two are complementary: drawdown_bounce times entry, turnaround_volume confirms thesis.

Day-after-confirmation meta-finding extended again: across burst_continuation, dormant_awakening at all windows, and now turnaround_volume, the pattern is consistent — day-after price follow-through is the cleanest selector for short-horizon timing. On turnaround_volume specifically, it boosts 20d edge from -0.6 % (unconditional) to +7 % (green10 ≥ 6). It's not load-bearing for the multi-month edge here, but it is for the multi-week edge.

At a glance
Sample11,069
Validatorresearch/turnaround_volume.py
VerdictRejected

Every result here is reproducible from the script named above. Reports are in the repository.

Other rejected theses