All Analyses
FINDINGS.md at the repo root (not duplicated here) -- this page is a condensed, web-readable index, not a replacement for it.lookback_10 / gold Strategy B) still clears 3/3. Tokyo, atrstop_15 (beats-baseline), no_event_bias, and conviction sizing do not. Source: backtest/results/holdout_review.json. Nasdaq Strategy A unfiltered baseline is also 1/3 pre-holdout and is Track-only on the Recommendations page.Validated findings
All 5 were gold (XAU/USD), original structure engine, default 1H/4H pair. After the 2026-09-16 holdout re-check, only Finding 2 remains validated. The other four stay on this page as full-sample historical results, marked Inconclusive.
Finding 1 — Tokyo/Asian session filterInconclusive
Restricting gold Strategy A entries to the Tokyo/Asian session (00:00-07:00 UTC) improves net avg R from +0.033 to +0.142/trade (326 of 1,125 trades) on the full sample, 3/3 trade-count folds. Pre-holdout (entry < 2026-05-01): net avg R +0.076 (n=307) vs baseline +0.018, 2/3 folds — does not clear the holdout-respecting bar. FINDINGS.md previously labeled these folds calendar-time; the script splits by trade index, and the last fold includes the holdout window.
Finding 2 — Shorter stop lookback (ENGINE=lookback_10)Validated
Shortening the swing-based stop's lookback window from 30 to 10 bars improves gold Strategy B: net avg R +0.170 → +0.213/trade, 3/3 walk-forward folds on the full sample and 3/3 pre-holdout (net +0.182 vs baseline +0.138). The only gold mechanics finding that still clears the 2026-09-01 holdout rule. Does not stack with Finding 4.
Finding 3 — ATR-based stop (ENGINE=atrstop_15)Inconclusive
Replacing the swing-based stop entirely with a volatility-normalized one (entry ± 1.5×ATR14) improves gold Strategy A on the full sample: net avg R +0.033 → +0.094/trade, 3/3 beats-baseline. Pre-holdout: 2/3 beats-baseline (absolute avg_r>0 still 3/3), net +0.093. The published beats-baseline claim does not survive the holdout-respecting bar.
Finding 4 — use_event_bias=False (ENGINE=no_event_bias)Inconclusive
Disabling event bias improves gold Strategy B on the full sample: net avg R +0.170 → +0.211/trade, 3/3 folds. Pre-holdout: 1/3 (net +0.183 vs baseline +0.138). Does not stack with Finding 2.
Finding 5 — Conviction-scaled sizing on the Tokyo signalInconclusive
Enhancement of Finding 1, not an independent finding: instead of excluding non-Tokyo trades, size them 0.75× and Tokyo-window trades 1.5×, on the full unfiltered trade set. Avg R is unchanged by construction (sizing doesn't touch any trade's R-multiple) -- Monte Carlo probability of profit rises 61.15% → 73.1%, risk of ruin falls 16.65% → 11.95%. Requires genuine reallocation (boost AND reduce) -- boosting Tokyo trades alone, without reducing others, makes risk of ruin worse than flat sizing. Inherits Finding 1's 2026-09-16 demotion (Tokyo itself is 2/3 pre-holdout).
Rollout attempts (tested across markets, did not generalize)
A validated finding on one market/strategy pairing is evidence about that pairing, not a portable rule -- every rollout below tested that directly, deliberately, with a pre-registered target rather than a blind search for whatever looks best.
Tokyo/Asian session filter, rolled out to all 6 markets × both strategies × 5 sessions (60 tests)Rejected
Same session-filter idea that validated on gold Strategy A (Finding 1), swept blindly across every market/strategy/session combination as a screen. Found 7 "robust" (3/3 walk-forward) hits -- statistically indistinguishable from the ~7.5 expected by pure chance alone at that many comparisons. Classic multiple-comparisons trap. Only gold Strategy A's result is legitimate, because it came from a single pre-registered test (the project's own by_session flag), not this sweep.
Findings 2/3/4 mechanics (lookback_10, atrstop_15, no_event_bias), rolled out to the other 5 markets on the original engineRejected
Pre-registered matrix: each mechanic tested on the same strategy it validated on for gold (lookback_10→B, atrstop_15→A, no_event_bias→B), across Silver, EUR/USD, Bitcoin, S&P 500, and Nasdaq 100 -- 15 tests. 0 of 15 hit the 3/3 walk-forward bar. A follow-up check of the non-pre-registered strategy pairing (30 tests total) found 3 more 3/3 hits -- ~3.75 are expected by chance alone at that many comparisons (P(3/3 folds)=12.5% under the null), so this is the same multiple-comparisons pattern as the session-filter sweep above, not a real signal. Notable near-miss: Bitcoin's no_event_bias flips Strategy B from failing costs to surviving them (−0.049R → +0.033R net avg) but only 2/3 folds. Nasdaq 100 is the only market where all 3 baselines already survive costs, yet none of the 3 mechanics changes clears 3/3 there either.
Findings 2/3 mechanics (lookback_10, atrstop_15), rolled out to the variant (LuxAlgo) structure engine, all 6 marketsInconclusive
Required a code change first: backtest.py's ENGINE argument used to select EITHER the structure engine or a mechanics variant, never both -- split into a structure-engine flag plus a separate mechanics dispatch so ENGINE=variant_atrstop_15 etc. now runs both together. Ran all 12 pre-registered combos plus both strategy labels (24 walk-forward checks). 20 of 24 had zero complete walk-forward folds -- each fold needs at least 30 training + 20 test trades, and the variant engine's total trade counts (34-122 across the whole 4.5-year history) simply aren't enough. This isn't a rejection, it's a data-volume ceiling: no walk-forward conclusion is possible on the variant engine with the history currently available, confirming a sample-size caveat already on record for this engine.
Other rejected hypotheses
Entry filters and exit/sizing mechanics tested and found negative on gold (the project's primary test market), full detail in FINDINGS.md / HANDOFF.md.
| Hypothesis | What it was | Why rejected |
|---|---|---|
| VWAP entry-confirmation filter | Require price/VWAP alignment + momentum before entry (3 variants: two-point, monotonic, regression-slope) | All 3 slope definitions fail walk-forward on gold; monotonic mode is degenerate (1 trade total) |
| VIX daily regime filter | VIX level or day-over-day change as entry filter | VIX level not robust for either strategy; VIX change passes 3/3 for A but margins are razor-thin in 2 folds, fails outright for B |
| H1 — stop-distance multiplier | Scale the existing swing-based stop distance (ENGINE=stopwide_NNN) | 1.25× looked best full-sample but only 1/3 folds held for both strategies |
| H4 — breakeven-at-1R ratchet | Move stop to entry once +1R favorable (ENGINE=breakeven) | Flips avg R from positive to strongly negative for both strategies -- this trend-following strategy needs room to pull back before its edge shows up |
| H5 — partial profit-taking | Close 50% at +1R, let the rest ride (ENGINE=partial_NN) | Same mechanism as H4: A fails to survive costs, B survives but far weaker than baseline |
| H6 — max-hold-time exit | Force-close trades held longer than N bars | Rejected by diagnostic before implementing: top 10% longest-held trades = 617%/323% of total net R for A/B -- a hold-time cap would cut off the trades generating the entire edge |
| H7 — hybrid A/B exit rule | Strategy B stays patient (4H exit) while underwater, drops to 1H sensitivity once profitable (ENGINE=hybrid_exit) | Net avg_r for B collapses from +0.170 to +0.051 -- fourth confirmation of the "don't curtail winners" pattern (with H4/H5/H6) |
| H9 — inverse-volatility sizing | Size DOWN on high-ATR-at-entry trades | Risk of ruin roughly triples/quadruples (A 16.65%→51.75%, B 5.6%→20.85%); correlation between ATR and R too weak (0.04-0.08) to justify it |
| H10 — EMA_LEN sensitivity | Sweep the mandatory EMA50 filter's length (ENGINE=ema_NNN) | Strategy B improved monotonically with no peak across the entire 20-300 range tested (textbook overfitting shape); a non-cherry-picked EMA 200 still failed walk-forward 1/3 |
| H13 — trade autocorrelation check | Does the Monte Carlo bootstrap's i.i.d. assumption hold? | Not rejected -- came back clean (0/24 combos show significant autocorrelation); listed here so a reviewer knows it was checked, not skipped |
The clean pattern across H4/H5/H6/H7: this strategy's edge is disproportionately generated by a small number of large trend trades. Any mechanism that caps exposure on the winning side -- whatever form it takes -- destroys the edge.