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.
Validated findings (5)Rollout attemptsOther rejected hypotheses

Validated findings

All 5 are gold (XAU/USD), original structure engine, default 1H/4H pair -- nothing validated yet on another market or the variant engine (see "Rollout attempts" below for why). Each is published as its own ranked row on the Strategy Priority Ranking and Best Validated Version pages, not folded into its base combo's baseline row.

Finding 1 — Tokyo/Asian session filterValidated

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), 3/3 walk-forward folds, Monte Carlo probability of profit 64.0% → 85.3%. A pre-registered result (the project's own by_session categorical check), not discovered via the multi-market sweep below. Specific to gold Strategy A -- see the Tokyo rollout entry under "Rollout attempts" for why it doesn't generalize.

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. A genuine stop-mechanism change, not an entry filter -- trade count barely moves (755 → 744). Does not stack with Finding 4 (combined result is slightly worse than either alone).

Finding 3 — ATR-based stop (ENGINE=atrstop_15)Validated

Replacing the swing-based stop entirely with a volatility-normalized one (entry ± 1.5×ATR14) improves gold Strategy A: net avg R +0.033+0.094/trade, 3/3 walk-forward folds. Improves across nearly the whole 0.8×-3.0× ATR multiplier range tested -- a regional effect, not a narrow single-point fit. Median drawdown ticks up very slightly even as everything else improves.

Finding 4 — use_event_bias=False (ENGINE=no_event_bias)Validated

Disabling the "event bias" mechanism in structure detection (collapsing the original engine's two-bias system toward the variant engine's single self-referential bias) improves gold Strategy B: net avg R +0.170+0.211/trade, 3/3 walk-forward folds. Not a uniform Monte Carlo win -- risk of ruin ticks up slightly (5.4% → 6.8%) even as avg R and total R both improve. Does not stack with Finding 2.

Finding 5 — Conviction-scaled sizing on the Tokyo signalValidated

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.

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.