SD1H4H — All Analyses

← Markets Hub · Strategy Priority Ranking · Best Validated Version · Recommendations · every hypothesis tested, validated or not

All Analyses

Every hypothesis this project has tested, on every market, whether it was validated, rejected, or came back inconclusive -- Strategy Priority Ranking and Best Validated Version only show combos that actually cleared this project's bar (net of costs, 3/3 walk-forward folds held), which is the right view for "what should I trade" but hides how much was tried and didn't work. This page is the other half of the record. Full reproduction commands and exact code locations for everything below are in FINDINGS.md at the repo root (not duplicated here) -- this page is a condensed, web-readable index, not a replacement for it.
Holdout re-check (2026-09-16). Data from 2026-05-01 onward is a permanent holdout. Full-sample 3/3 numbers below are historical. Under the holdout-respecting bar, only Finding 2 (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.
Holdout-robust (1) / full-sample-only (4)Rollout attemptsOther rejected hypotheses

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.

HypothesisWhat it wasWhy rejected
VWAP entry-confirmation filterRequire 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 filterVIX level or day-over-day change as entry filterVIX 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 multiplierScale 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 ratchetMove 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-takingClose 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 exitForce-close trades held longer than N barsRejected 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 ruleStrategy 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 sizingSize DOWN on high-ATR-at-entry tradesRisk 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 sensitivitySweep 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 checkDoes 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.