Open Harmonics · Experiments

Not supported · Entries · 2026-10-11

Does the random control understate the harmonic edge because it overlaps the pattern itself?

What this means

The contamination is real but narrow: only randoms in the ~10 days after D (before the signal) are 'buying the same pattern'. The rest of the pattern span is the decline into D, the worst time for a random entry, so cutting out whole spans makes the control harder, not easier. Done narrowly, the correction lifts the daily edge from +0.05 to +0.07R (still all in 2016-20) and leaves 1h (+0.05) and 4h (+0.03) unchanged. Only 1h stays positive across every reasonable control (+0.02 to +0.10). Daily and 4h have no edge outside the immediate pattern neighbourhood.

Explanation checked against the data.

Daily: totals of 10,000 random traders (one matched random entry per harmonic trade) with the harmonic total marked.
Daily: totals of 10,000 random traders (one matched random entry per harmonic trade) with the harmonic total marked.
1-hour: totals of 10,000 random traders (one matched random entry per harmonic trade) with the harmonic total marked.
1-hour: totals of 10,000 random traders (one matched random entry per harmonic trade) with the harmonic total marked.
4-hour: totals of 10,000 random traders (one matched random entry per harmonic trade) with the harmonic total marked.
4-hour: totals of 10,000 random traders (one matched random entry per harmonic trade) with the harmonic total marked.
Hypothesis
Pre-registered: the +-60-day control (d) contains random entries inside the harmonic pattern (X->D) and around D, which are effectively the same trade, so excluding pattern spans raises the harmonic edge above (d)'s +0.05 (1d) / +0.05 (1h) / +0.01 (4h).
Method
Pattern span from trade_log features: X bar = fill - 1 - bd - (l1+l2+l3+l4), median 56 bars on all TFs; span = [X, harmonic exit]. Samples as before (1d n=2,006 2016-26; 1h 3,414 / 4h 735, 2023-11 to 2026-09); logged stop -> 2R, open entry, entry bar counts, full exit, build.py sim_many, 20 randoms per trade. Controls: (e) +-60 days minus own span and all other harmonic spans on the ticker; (f) after the exit, 120 trading days, minus spans; (g) +-250 days on no-active-pattern days. Ticker-clustered bootstrap CIs, halves, and a 10,000-trader Monte Carlo (one random per trade; share whose total >= harmonic total). Post-hoc: (d*) = (d) minus only [D, fill]; variants without the other-span exclusion; R of random entries by position relative to the pattern.
Result
Edge (95% CI) / MC share. (d) reproduced: 1d +0.047 (-0.002,+0.090) 3.2%; 1h +0.050 (+0.006,+0.096) 1.5%; 4h +0.012 (-0.072,+0.093) 39.3%. (e): 1d -0.20 (-0.28,-0.12) >99.9% [334 trades without candidates]; 1h +0.03 (-0.03,+0.08) 12%; 4h -0.03 72%. (f): 1d -0.04 (-0.12,+0.04) 95%; 1h +0.09 (+0.04,+0.15) <0.1%; 4h -0.00 54%. (g): 1d -0.06 (-0.13,+0.01) 98%; 1h +0.02 (-0.03,+0.08) 19%; 4h -0.09 (-0.20,+0.02) 97%. Post-hoc (d*): 1d +0.070 (+0.021,+0.116) 0.2% [halves +0.14 / +0.02]; 1h +0.046 (+0.002,+0.093) 2.2%; 4h +0.032 (-0.051,+0.116) 23%. Daily random R by position: last 10 days before fill +0.59; X to 10 days before fill +0.05; inside other patterns +0.17-0.19; free days +0.26-0.31.
How much to trust it
Medium: Pre-registered, exact reproduction of (d) and its Monte Carlo; but every span-based control uses hindsight (a span exists because a decline into D followed), so (e)-(g) are biased against harmonics, and the (d*) fix that avoids that bias is post-hoc
Did it change the live rule?
none; (d*) (+-60 minus [D, fill]) recommended as the default random control for future studies
Notes
Supersedes the headline numbers of entry-vs-random-control-fix. The 1h figures are positive under all of (d), (d*), (f), (f0); the 4h Monte Carlo share is 23-97% under every control.

Scripts and data for this study will be linked here when the research code is published on GitHub.

← All experiments

Education and research only. Not financial advice. Backtests use today's index members (survivorship bias).