Skip to content
All strategies

Strategies

Spot Gold Asian-Range Compression Breakout at the London Open, Flat Before the New York Financing Cut (XAUUSD.SPOTMETAL 15m, long/short, intraday)

Outcome: Verifying

XauAsianCompressionLondonStopBreakout

Spot Gold Asian-Range Compression Breakout at the London Open, Flat Before the New York Financing Cut (XAUUSD.SPOTMETAL 15m, long/short, intraday)

Hypothesis

Single-instrument intraday session strategy on spot gold XAUUSD.SPOTMETAL (Dukascopy MID prices, 15-MINUTE bars, history from 2003). Gold has a strong time-of-day structure. Liquidity is thin during the Asian session (18:00-03:00 New York). Price discovery concentrates when London opens (about 03:00 NY) and the London AM fix and the New York COMEX open follow. When the overnight Asian range is narrow relative to gold's recent daily ATR, the London open tends to resolve the compression directionally, and the move……Show moreShow less

Single-instrument intraday session strategy on spot gold XAUUSD.SPOTMETAL (Dukascopy MID prices, 15-MINUTE bars, history from 2003). Gold has a strong time-of-day structure. Liquidity is thin during the Asian session (18:00-03:00 New York). Price discovery concentrates when London opens (about 03:00 NY) and the London AM fix and the New York COMEX open follow. When the overnight Asian range is narrow relative to gold's recent daily ATR, the London open tends to resolve the compression directionally, and the move continues into the NY morning. Every session boundary is read in America/New_York local time through the platform session calendar (FactoryStrategy.session_close_ns / src.strategies.helpers.sessions), so DST shifts are handled and nothing is hard-coded in UTC. Rules: (1) Asian range = high/low of the 15m bars from the 18:00 NY reopen to the bar closing at 03:00 NY. (2) Compression filter: trade only if range_width / ATR14(daily, from 15m bars aggregated in-strategy or the 1-DAY bar as extra bar type) <= range_atr_max. (3) From 03:00 to entry_end_hour NY, place two intrabar stop-entry orders (stop_market) at range_high*(1+buffer_pct) and range_low*(1-buffer_pct); when one fills, cancel the other (one trade per trading day, no reversal). (4) Exits: intrabar protective stop at the opposite range boundary; take-profit limit at entry ± target_mult × range_width; otherwise a time exit at the 16:30 NY bar close, which fills at the next bar's open (16:30-16:45) under the session venue's next-open rule, so no position is held through the 17:00 NY financing cut-off and no overnight financing is ever paid. Unfilled entry orders are cancelled at entry_end_hour. Sizing (risk route a): notional = 0.75% of equity / stop distance (range width + buffer), capped at 3x equity; with a typical ~0.45% Asian range that is ~1.7x notional. Venue rationale: SPOTMETAL holds 0.2% of the corpus (8 of 4,554 runs); this adds a long/short, short-horizon, OHLCV-only, non-crypto mechanism, so it diversifies away from the BTC/alt-perp series the factory keeps re-mining. Fee arithmetic: round trip costs ~0.015% (0.77 bp half spread per fill), zero commission, no financing for intraday holds. Gold's daily ATR in 2015-2026 is ~0.9-1.4%, and a compressed Asian range is ~0.3-0.5%. A breakout trade that reaches a 1.5x range target makes ~0.55%; a stopped trade loses ~0.4%. At a ~45% hit rate with time exits in between, the expected gross per trade is ~0.08-0.15% of notional, 5-10x the round-trip cost. The required intrabar stops and stop entries are 'supported' in execution_capabilities; nothing needs exchange-resting orders.

Most under-represented useful buckets: venue concentration (BINANCE 53%), long/short (22%), and cross-asset diversification. SPOTMETAL has 8 runs, far below any share cap, and gives 22 years of intraday data at a ~0.015% round trip. The failure graveyard is dominated by sub-fee crypto breakouts at 0.10% RT; here the cost hurdle is ~7x lower and the per-trade capture estimate (0.08-0.15%) clears it 5-10x. The 0.08% per-trade prediction is below the generic 0.15% crypto floor, but SPOTMETAL's cost is 0.015%, so the venue-appropriate test is 2x cost (0.03%), which it clears. It is not a re-dressed crypto momentum strategy: the signal is a session clock plus range compression on a non-crypto asset, with no overnight holding.

Implementation

Intraday long/short strategy on XAUUSD.SPOTMETAL with 15-minute bars. The Asian range is the high and low of the 15m bars that close after the 18:00 New York reopen, up to and including the bar that closes at 03:00 New York. Times use the New York local clock, so DST is handled, and the trading day comes from the platform session calendar. The strategy trades only if the range has at least min_asia_bars bars, its width is at least min_range_pct of price, and width divided by the daily ATR14 is at most……Show moreShow less

Intraday long/short strategy on XAUUSD.SPOTMETAL with 15-minute bars. The Asian range is the high and low of the 15m bars that close after the 18:00 New York reopen, up to and including the bar that closes at 03:00 New York. Times use the New York local clock, so DST is handled, and the trading day comes from the platform session calendar. The strategy trades only if the range has at least min_asia_bars bars, its width is at least min_range_pct of price, and width divided by the daily ATR14 is at most range_atr_max. The daily ATR is Wilder's ATR over trading-day bars built inside the strategy from the 15m bars. When those conditions hold, two OCO-linked STOP_MARKET entry orders go on from the 03:00 close: a buy at range_high*(1+buffer_pct) and a sell at range_low*(1-buffer_pct). They trigger inside the bar, and a fill cancels the other order, so there is one setup per trading day and no reversal. Entry orders that have not filled are cancelled at the entry_end_hour New York bar close. After a fill, two OUO-linked reduce-only orders are attached: an intrabar stop at the opposite range boundary and a limit take-profit at the fill price +/- target_mult x range_width. If neither fills, the strategy decides to exit at the 16:30 New York bar close, or two bars before an early session close. That exit fills at the next bar's open under the session venue's next-open rule, so no position is held through the 17:00 New York financing cut. Size is equity x 0.75% / (trigger - stop), with notional capped at min(3, leverage) x 0.97 x equity.

Implements hypothesis rules 1-4 as written, using the parameter names from the optimization plan. buffer_pct, target_mult, range_atr_max and entry_end_hour are tunable, with baselines of 0.0002, 1.5, 0.5 and 8; every other plan value is fixed as given. Entries and exits use the supported intrabar_stop capability: raw OCO STOP_MARKET entries plus OUO reduce-only stop and limit exits. The time exit uses next_open_fill. Risk route (a): the loss at the stop is 0.75% of equity, within the 2% limit. Notional is capped……Show moreShow less

Implements hypothesis rules 1-4 as written, using the parameter names from the optimization plan. buffer_pct, target_mult, range_atr_max and entry_end_hour are tunable, with baselines of 0.0002, 1.5, 0.5 and 8; every other plan value is fixed as given. Entries and exits use the supported intrabar_stop capability: raw OCO STOP_MARKET entries plus OUO reduce-only stop and limit exits. The time exit uses next_open_fill. Risk route (a): the loss at the stop is 0.75% of equity, within the 2% limit. Notional is capped at 3x equity, so leverage is set to 3.0 and sizing reads it; the cap is min(3, leverage) x 0.97 to leave room for fees and margin. Entry orders are placed only while the close is between the two trigger levels. If the 03:00 bar is missing and orders go on later, they therefore never chase a breakout that has already happened. The daily ATR is built from 15m bars per session_date, so about 14 trading days of warm-up come before the first trade. calculate_signal returns the close's position inside the Asian range in half-widths, a continuous value; the entry decision itself is the pair of stop orders.

Backtest and paper results are hypothetical. Trading involves risk of loss.