Validated on gold, weak elsewhere Structure / BOS-CHoCH FX · Metals · Crypto · Indices 2022–2026 · 1-min data

SD1H4H — Multi-TF
Structure Bias

Trend-following BOS/CHoCH structure strategy — 1H breaks of structure aligned with 4H bias, mandatory EMA(50) filter, wick-confirmed breaks — backtested identically across six markets with real broker costs.

Gold: real edge + 3/3 walk-forward filters · most markets cost-wiped
6
Markets tested
Gold, Silver, BTC, Nasdaq, S&P 500, EUR/USD
+0.142
Net avg R / trade
Tokyo-session filtered gold (baseline +0.033)
3/3
Walk-forward folds
Session filter, ATR stop, stop-lookback, no-event-bias
2
Strategies
A: 1H runner exit · B: 4H runner exit

Verdict

The base BOS/CHoCH structure strategy is profitable net of realistic broker costs on gold and Nasdaq, cost-wiped on silver and the S&P 500, and has no edge on EUR/USD. No consistent A-vs-B winner across markets.

The durable findings are gold-specific, pre-registered, and walk-forward confirmed (3/3 folds): restricting entries to the Tokyo/Asian session (00:00–07:00 UTC) lifts net avg R from +0.033 to +0.142; the ATR(1.5×) stop and a shorter stop lookback both improve strategy A/B respectively; disabling the event-bias flag helps strategy B. Conviction-scaled sizing cuts risk of ruin from 16.65% to 11.95%.

Everything that looked like a fix for “curtailing winners” (breakeven ratchet, partial profit-take, max-hold cap, hybrid exit) is decisively negative — the edge depends on letting trades run.

What the strategy does

The signal

1H Break of Structure (BOS) aligned with 4H bias (WithHTF_BOS + CounterHTF_CHOCH), plus a mandatory EMA(50) alignment filter on 1H and wick-confirmed breaks (V1.3 rule). Event-driven bias and a V1.2 stop behind the last opposite 1H candle (30-bar max lookback).

Two exit variants

Strategy A closes the runner on an opposing 1H BOS/CHoCH (matches the Pine script exactly). Strategy B uses the slower 4H structure instead — a higher-timeframe trailing exit. No consistent winner across markets.

The mechanics findings

Four validated mechanics: Tokyo-session entry filter (A), ATR-based stop 1.5×ATR14 (A), stop-lookback 30→10 bars (B), and no-event-bias (B). H2/H12 do NOT stack with each other. Breakeven ratchets, partial takes, hold-caps and hybrid exits all destroy the edge.

Swing-pivot VA migration

A second family (mean-reversion to the opposite of the last two alternating swing pivots) validated on 6/14–15 markets at a pre-registered 50% target fraction; the volume-histogram version was a null on ETHUSDT.

Exact rules (validated gold config)

ComponentRuleNotes
Timeframe1H entries / 4H HTF biasDefault pair; 15min/1H also supported
Signal1H BOS with 4H bias + EMA(50) alignment + wick-confirmed breakV1.3 rule set
Entry sessionTokyo/Asian only (00:00–07:00 UTC)Gold, strategy A — 3/3 walk-forward
Stop1.5 × ATR(14) behind entryReplaces swing stop — 3/3 folds, A only
ExitOpposing 1H (A) or 4H (B) BOS/CHoCHRunner exit; no time stops
CostsPer-market broker modelVantage FX / Bybit assumptions

Where the edge exists

MarketStatusEvidence
Gold (XAUUSD)Profitable net of costsBase + Tokyo filter + ATR stop; 3/3 WF folds on every validated filter
Nasdaq 100Profitable net of costsBase strategy both A and B cost-surviving
Silver / S&P 500Gross-positive, cost-wipedNo net edge after broker costs
EUR/USDNo edge even grossFails before costs
Bitcoin (BTCUSD)InconclusiveIncluded in universe; perp funding framework is design-only

Validated filter lifts (net of costs, gold)

FindingStrategyBaselineVariantWalk-forward
Tokyo/Asian session filterA+0.033+0.1423/3
ATR-based stop (1.5×ATR14)A+0.033+0.0943/3
Stop lookback 30→10 barsB+0.170+0.2133/3
No event-bias (use_event_bias=False)B+0.170+0.2113/3
Conviction-scaled sizing (Tokyo 1.5× / others 0.75×)ARoR 16.65%RoR 11.95%enhancement of #1
Rejected: breakeven ratchet at +1R, 50% partial take at +1R, max-hold exit, hybrid A/B exit, VWAP entry filters (2/3, 1/3, 1/3 folds), VIX level filter (2/3), EMA-length sweep (no peak — overfit shape), inverse-vol sizing (RoR 3–4× worse). H2/H12 do not stack. The 2026-08-24 re-baseline killed the previously-strongest h4_bias_age_bars finding.

How it was tested

Data

1-minute BID candles from Dukascopy's free feed, Jan 2022 → present, resampled to 15min/1H/4H/Daily. Real per-market broker cost models.

Validation

Gross → net-of-costs → chronological 70/30 split → 3-fold walk-forward. Only pre-registered findings count; 60-test rollouts produce ~7 hits ≈ chance.

Sizing / risk

Joint (r, risk_pct) bootstrap Monte Carlo for conviction scaling; trade-autocorrelation check clean (0/24 combos significant).

Site

Per-trade viewer with pannable Lightweight Charts candlesticks, R histograms, session/regime/cost analysis — a few hundred files total, Cloudflare-Pages safe.

Run it yourself

# per market: download → resample → backtest → analysis → site
cd backtest && pip install requests pandas numpy pyarrow matplotlib mplfinance scipy
SYMBOL=XAUUSD   # or XAGUSD / BTCUSD / USATECHIDXUSD / USA500IDXUSD / EURUSD
python scripts/download.py $SYMBOL && python scripts/build_bars.py $SYMBOL
python scripts/backtest.py $SYMBOL && python scripts/compute_costs.py $SYMBOL
python scripts/export_trade_data.py $SYMBOL && python scripts/build_site.py $SYMBOL
python scripts/build_markets_hub.py   # writes site/index.html