NoSL EA backtest results

NoSL_FirstProfit backtests, Vantage Markets MT5, XAUUSD and JPY pairs. Generated 2026-10-11 from results\RESULTS.md. Private working document.
Equity curves below are the Strategy Tester's own charts for the runs that matter most; the text that follows is the full results document.
equity curve V2_XAUUSD
V2_XAUUSD
v2 defaults, 1-minute model 2020-2026, 1% risk
equity curve V2r25_XAUUSD
V2r25_XAUUSD
v2 defaults, real ticks 2025-2026, 1% risk · tester report
equity curve V2r25_risk2_XAUUSD
V2r25_risk2_XAUUSD
v2 defaults, real ticks 2025-2026, 2% risk · tester report
equity curve V2r25_risk3_XAUUSD
V2r25_risk3_XAUUSD
v2 defaults, real ticks 2025-2026, 3% risk (halted) · tester report
equity curve NK1r25_XAUUSD
NK1r25_XAUUSD
v1 no-stop baseline with RSI cap, real ticks 2025-2026, 0.10 lot · tester report
equity curve NHbestr25_XAUUSD
NHbestr25_XAUUSD
v1 news hunt (swept setting), real ticks 2025-2026, 0.10 lot · tester report
equity curve A_XAUUSD
A_XAUUSD
original first-profit screen, 1-minute model 2020-2026, 0.10 lot

NoSL_FirstProfit backtest results

Vantage Markets MT5 demo (Standard STP, hedging, stop-out 20%), $10,000, 1:100, 2020-01-01 to 2026-10-10. EA: one position per symbol, no initial stop loss, re-enter immediately after a close. Entry: buy above EMA200/H1, sell below. Two exit modes were tested: first profit (close at the first tick with net profit >= $1; sections "Phase A" to "gates" below) and break-even + trailing stop (the current default; its own section near the end). All tables are from the MT5 Strategy Tester driven by run_backtests.ps1; full tables are in RESULTS_tables.md, raw reports and per-trade CSVs sit next to this file.

Bottom line (both exit modes)

The break-even/trailing exit makes the income real but leaves the tail untouched. In numbers, fixed 0.10 lot per symbol:

First profit ($1 scalp) Break-even + trail (1 ATR / 1.5 ATR)
Seven JPY pairs, 2020-2026, 1-minute model, net $ +13,174 +11,878
Seven JPY pairs, 2025-2026, 1-minute model, net $ -2,719 -2,092
Seven JPY pairs, 2025-2026, real ticks, net $ -5,072 -3,273
Gold, 2025-2026, real ticks, net $ (drawdown) -3,628 (79%) +10,400 (49%)
USDJPY 2020-03-09 short: worst floating $ / hold -7,679 / 6.6 years -7,586 / 6.6 years
Gold 2020-08-07 long: hold 4.7 years 4.7 years
Portfolio of 7 JPY pairs on $10k: largest fixed lot per pair under a 30% drawdown 0.06 0.05

Section "Break-even + trailing stop" has the detail. The original first-profit findings follow.

Added 2026-10-12, version 2 (section "Version 2" at the end): the EA now has an initial ATR stop, risk-per-trade sizing and a drawdown halt, and the no-stop modes are gone. Gold, 1% risk, $10,000: real ticks 2025-01 to 2026-10 +5,122 with an 11.7% drawdown, 86.8% winners, worst floating loss -553 (model 2020-2026: +49,577, 7.8% drawdown, every year positive). 2% risk: +14,446 with a 25.5% drawdown. 3% risk hit the 35% halt. The sized-up news entries that looked good in v1 lose as soon as trades carry a stop and are off by default.

Added 2026-10-11, news module on gold (section "News module" near the end): avoiding high-impact USD releases does not help, but entering the post-release move with more size does. Gold with the RSI cap, fixed 0.10 lot, real ticks 2025-01 to 2026-10: baseline +11,394 (47% drawdown), hunt defaults +15,949 (42%), hunt with the swept setting (4-hour window, 0.2 ATR confirmation, 3x lots) +27,731 (33%). The worst floating loss is the same -16,757 in every one of those runs: the news module adds winners, it does not touch the stuck trade. Two aggressive variants (follow the move against the trend, news-only) blow the account on both data sets.

Bottom line (first-profit mode)

  1. The premise fails on the tail. Because the EA re-enters one minute after every profit close, it is always in the market and therefore always holds a position opened at the exact extreme of every major reversal. Three of those entries alone decided the whole six years:
  1. The income is largely a backtest artefact. With real ticks (available from 2025-01) the "first profit" closes land at +$1 to +$2 instead of the +$20 to +$300 jumps the 1-minute tick model produces. USDJPY 2025-01 to 2026-10 on 0.10 lot: +$410 on the 1-minute model, +$19 on real ticks. Gold over the same window: +$68,287 on the model, -$3,628 on real ticks (79% drawdown). Every tail number (worst floating loss, longest hold) is identical between the two models; only the wins shrink.
  2. Money management cannot rescue it, it can only make the losses smaller. On $10k with the seven JPY pairs traded together at a fixed size, the worst correlated drawdown stays under 30% only up to about 0.06 lot per pair; at 0.02 to 0.03 lot per pair the equity drawdown is 11 to 15% and the model income is roughly $400 to $600 a year before the real-tick haircut. Gold at any size above 0.01 lot breaks the 30% relative-drawdown limit on this account.
  3. The "it usually comes back" part is true, and it is the trap. 99.9% of trades closed in profit. The losses are not frequent, they are permanent: at the end of the test every single symbol was holding an underwater position (end-of-test P/L -$270 to -$993 per JPY pair, -$15,906 gold, all on 0.10 lot).

What ran

Phase What Where
A Screen: each symbol alone, fixed 0.10 lot, MA200/H1, 1-minute OHLC model summary_A.csv, trades_A_*.csv
B 128-pass optimisation of entry mode (MA trend / RSI / long-only / alternate), TF, EMA period, profit target, cooldown B_*_passes.csv
C Phase B winners re-run 2020-2023 (in-sample) and 2024-2026 (out-of-sample) summary_C.csv
D All symbols together on $10k: lots-per-equity grid, then fixed-lot grid, with and without gold D_*_passes.csv
tick Real-tick (Model 4) vs 1-minute model on 2025-2026, and full period where ticks exist summary_tick_*.csv, summary_R.csv
G 270-pass optimisation of the four new entry gates per symbol G_*_passes.csv, summary_E15.csv, summary_C_G.csv
N News module on gold (RSI cap base): avoid / hunt / news-only, model and real ticks, 81-pass hunt sweep summary_N*.csv, NHopt_XAUUSD_passes.csv, news_analysis_*.md

Data caveats: Vantage's M1 history starts 2020-01 for USDJPY, EURJPY, GBPJPY, AUDJPY, NZDJPY, XAUUSD; 2020-01-14 for CHFJPY; 2022-01 for CADJPY (its numbers cover 4.75 years). Real ticks exist from 2020 for USDJPY (and the other JPY pairs, see Phase R) but only from 2025-01-02 for gold. The tester applies today's swap rates to the whole history, so swap costs in 2020-2021 are overstated for USD-based carry and the carry gate behaves as a static direction filter in backtests.

Phase A: each symbol alone, fixed 0.10 lot

Symbol Trades Win % Net $ Still-open P/L at end $ Equity DD % (relative) Worst floating $ Worst move Longest hold Worst floating per 1.0 lot $
USDJPY 102 99.0 -6,760 -7,561 71.1 -7,679 6,280 pips 6.6 years 76,792
EURJPY 2,096 100.0 4,615 -659 10.2 -1,481 2,101 pips 441 days 14,807
GBPJPY 2,543 100.0 6,277 -611 19.1 -1,970 2,801 pips 497 days 19,700
AUDJPY 1,318 99.9 2,594 -270 15.0 -1,560 2,334 pips 560 days 15,598
NZDJPY 748 99.9 899 -609 12.7 -1,308 1,919 pips 822 days 13,085
CADJPY (from 2022) 836 99.9 1,470 -451 11.0 -1,256 1,759 pips 821 days 12,560
CHFJPY 1,874 100.0 3,628 -993 9.6 -1,206 1,687 pips 363 days 12,063
XAUUSD 5,946 100.0 61,014 -15,906 66.0 -17,625 $1,646/oz 4.7 years 176,252

Reading it: every JPY cross was profitable on the model because the yen fell for six years and every single trade was a buy (the EA never flipped direction once in 15,463 trades: it re-enters within a minute of a close, on the same side of the EMA). USDJPY was the one pair where price sat below the EMA in early 2020, so all its trades were sells, and the last one never came back. Gold's +$61k is the 2025-2026 mania on the 1-minute model (see the real-tick section) with a 4.7-year gap in the middle.

Time underwater (Phase A): per JPY pair 12 to 39 trades lasted over a week, 8 to 17 over a month, 2 to 5 over six months. Median hold was six minutes.

Why it happens: the always-in mechanism

A first-profit close is by construction a local high (for a long). The EA re-opens there one minute later. In a trend that is harmless 99.9% of the time, and it is exactly what guarantees that the last trade before a reversal is opened at the top. The three disasters above were all opened one minute after a profit close at the run's peak. Nothing about timing, hour, weekday, session or "trade after a long hold" separates these entries from normal ones; the five analysis agents that mined the trade files confirmed that the yen-cross disasters (the July-2024 carry unwind tops: all six crosses bought within 36 hours of the top, 12 to 27 month holds) look like ordinary entries at the time. Only gold's blow-offs are visibly "stretched" before the fact.

Phase B and C: entry rules

The optimiser's favourite on six of seven JPY pairs was long only; on gold "MA trend" and "long only" are the same thing (it never sold). That is not an edge, it is the six-year yen decline read backwards. RSI reversion was worse everywhere; "alternate" lost the whole account on gold. Gold had zero of 128 configurations with a relative drawdown under 30% at 0.10 lot.

Out of sample (2024-2026) the long-only picks still made money on six of seven pairs (NZDJPY lost), but every pair ended the window holding an underwater position and the longest holds were one to two years.

Phase D: money management on $10,000, 1:100

Fixed lot per symbol, all seven JPY pairs traded at once, MA200/H1, 1-minute model, 2020-2026:

Lot per pair Total lots Profit $ (model) Max equity DD % Survives 30% relative-DD limit
0.01 0.07 1,428 6.2 yes
0.02 0.14 2,828 10.8 yes
0.03 0.21 4,193 14.6 yes
0.04 0.28 5,567 17.6 yes
0.05 0.35 6,783 20.2 yes
0.06 0.42 8,107 22.4 yes
0.07 0.49 9,451 24.2 no
0.08 0.56 10,808 25.7 no

With gold added at the same size the model profit roughly triples (gold's 2025-2026 run) and the limit is breached from 0.06 lot; with real ticks gold is a loser (next section), so the all-eight table is not a basis for sizing.

Sizing with lots per $1,000 of equity (the EA's default mode) compounds into nonsense on this strategy: 0.005 per $1,000 across all eight symbols produced a 90% drawdown, and 0.010 produced a fantasy $10 million on the model followed by a blown account at the next step. Use fixed lots.

Per-symbol arithmetic from Phase A (worst floating loss scaled to 1.0 lot, margin $1,000 per lot for USDJPY, about $4,200 for gold): the lot size that keeps margin level above 300% through the worst episode is 0.13 (USDJPY), 0.42 to 0.68 (crosses), 0.05 (gold); the size at which the worst episode is a 25% floating drawdown is 0.03 (USDJPY), 0.13 to 0.21 (crosses), 0.014 (gold). Those are single-symbol numbers; the correlated portfolio table above is the one to use.

Real ticks versus the 1-minute model

Run (0.10 lot) Window 1-minute model Real ticks
USDJPY net $ 2025-01 to 2026-10 +410 (317 trades) +19 (282 trades)
USDJPY worst floating / longest hold 2025-01 to 2026-10 -1,306 / 313 days -1,311 / 313 days
XAUUSD net $ 2025-01 to 2026-10 +68,287 (7,129 trades) -3,628 (6,294 trades)
XAUUSD equity DD % 2025-01 to 2026-10 18.7 79.1
USDJPY net $ 2020-01 to 2026-10 -6,760 -7,278

The model generates a handful of synthetic ticks per minute, so the first tick "in profit" is frequently the minute's high, tens of dollars beyond the $1 target. Real ticks cross the target gradually. The strategy's whole income is that overshoot; the tail is the same either way.

All symbols on the 2025-01 to 2026-10 window (the only window where every symbol has real ticks), fixed 0.10 lot, each symbol alone, positions force-closed at the end:

Symbol Net $ 1-minute model Net $ real ticks Worst floating $ (both) Longest hold (both)
USDJPY +410 +19 -1,306 313 days
EURJPY -1,273 -1,512 -2,334 589 days
GBPJPY +853 +138 -932 167 days
AUDJPY -1,328 -1,696 -2,205 549 days
NZDJPY -338 -576 -1,147 549 days
CADJPY +14 -137 -649 296 days
CHFJPY -1,057 -1,308 -2,417 589 days
XAUUSD +68,287 -3,628 -17,625 254 days
Seven JPY pairs together -2,719 -5,072

Full period on real ticks where Vantage has them: USDJPY 2020-2026 -7,278 (model -6,760); EURJPY 2020-2026 +1,778 (model +4,615), same worst floating loss and same longest hold in both. The remaining crosses could not be run over the full period on real ticks on this machine (GBPJPY ran for over three hours and returned nothing; six years of tick data per cross exceeds the available memory).

So the honest picture for the last 21 months is: on real prices the JPY basket lost about $5,000 on 0.10 lot per pair, and the model's $2,700 loss was already flattered.

The new entry variables (gates)

Four switchable gates were added to the EA after a design review of the trade files. All default to off.

Input Gate Rule
InpChaseBars, InpChaseMaxPct Range gate No entry while the high-low range of the last N closed signal bars (plus the live price) exceeds X% of price. Symmetric "do not chase".
InpMaxEmaDistPct EMA-distance gate No entry when price is more than X% beyond the signal EMA on the trade's side. Forces entries on pullbacks.
InpFlipMinDistPct Flip hysteresis A direction opposite to the previous trade is allowed only if price is at least X% beyond the EMA on the new side.
InpCarryMaxPayPerLot, InpCarryExemptMetals Carry gate Veto a direction whose swap costs more than X per 1.0 lot per night (metals exempt by default). Live-adaptive; static in the tester.

270-pass sweep per symbol (all four gates, fixed 0.10 lot, 2020-2026, 1-minute model), key readings:

Uniform setting InpMaxEmaDistPct = 1.5, InpFlipMinDistPct = 1.0 on every symbol (fixed 0.10 lot, model):

Symbol Net $ baseline -> gated Worst floating $ Longest hold Trades Direction flips
USDJPY -6,760 -> -6,911 -7,679 -> -7,494 6.6 y -> 6.6 y 102 -> 117 0
EURJPY 4,615 -> 5,722 -1,481 -> -1,481 441 d -> 441 d 2,096 -> 2,491 0
GBPJPY 6,277 -> 7,634 -1,970 -> -1,970 497 d -> 497 d 2,543 -> 2,928 0
AUDJPY 2,594 -> 3,291 -1,560 -> -1,560 560 d -> 560 d 1,318 -> 1,666 0
NZDJPY 899 -> 1,068 -1,308 -> -1,308 822 d -> 822 d 748 -> 834 0
CADJPY 1,470 -> 1,361 -1,256 -> -1,238 821 d -> 821 d 836 -> 733 0
CHFJPY 3,628 -> 3,614 -1,206 -> -1,206 363 d -> 363 d 1,874 -> 1,855 0
XAUUSD 61,014 -> 50,252 -17,625 -> -14,159 4.7 y -> 4.7 y 5,946 -> 5,247 0

The gate adds pullback entries (more model wins) and leaves every worst-case number where it was. It is cosmetic for the tail.

Out of sample, the per-symbol gate settings the optimiser liked best in 2020-2026 are fragile: re-run with the 2020-2023 / 2024-2026 split, GBPJPY (range gate 4%) made 12 trades in 2024-2026, got stuck on the wrong side for 1,011 days and lost $3,210 with a 37% drawdown; EURJPY (EMA gate 1.5% + flip 1.0 in its in-sample pick) made 11 trades and lost $1,999 with a 26% drawdown; CADJPY lost $306. USDJPY, AUDJPY, CHFJPY and NZDJPY stayed positive out of sample but all ended the window underwater. Any gate that leaves the EA flat hands the next entry to a coin flip on direction, and one wrong flip is a multi-year hold.

Break-even + trailing stop (exit mode EXIT_BE_TRAIL, now the default)

Rule: no stop until the trade is InpBEActivate in profit (default 1.0 ATR(14) of the signal timeframe), then a server-side stop at break-even in net money terms (entry price plus what swap and commission have cost so far, plus InpBELockMoney = $1), then trailed InpTrailDistance (1.5 ATR) behind price in steps of 0.1 ATR. Distances can also be set in pips or percent (InpDistUnit). Verified on USDJPY 2026: 68 of 69 trades closed by their stop, smallest at the +$0.98 lock, largest +$52.

Each symbol alone, fixed 0.10 lot, 2020-2026, 1-minute model (first-profit result in brackets):

Symbol Trades Net $ Worst floating $ Longest hold Wins > $50
USDJPY 22 (102) -6,956 (-6,760) -7,586 (-7,679) 6.6 y (6.6 y) 3
EURJPY 322 (2,096) 4,722 (4,615) -1,469 (-1,481) 452 d (441 d) 25
GBPJPY 333 (2,543) 4,673 (6,277) -3,262 (-1,970) 796 d (497 d) 41
AUDJPY 193 (1,318) 3,010 (2,594) -1,551 (-1,560) 572 d (560 d) 19
NZDJPY 169 (748) 1,305 (899) -1,284 (-1,308) 822 d (822 d) 9
CADJPY (from 2022) 149 (836) 1,693 (1,470) -1,234 (-1,256) 821 d (821 d) 13
CHFJPY 319 (1,874) 3,431 (3,628) -1,174 (-1,206) 363 d (363 d) 25
XAUUSD 148 (5,946) 9,392 (61,014) -16,966 (-17,625) 4.7 y (4.7 y) 73

Same money on the crosses from one tenth of the trades, with winners of $50 to several hundred dollars instead of $1 to $5; GBPJPY picked up a worse stuck trade (a different entry got caught in July 2024). The catastrophic holds are byte-for-byte the same, because a trade that never gets 1 ATR into profit never receives a stop, exactly as designed.

Real ticks, 2025-01 to 2026-10, fixed 0.10 lot (first-profit real-tick result in brackets):

Symbol 1-minute model net $ Real ticks net $
USDJPY +519 +256 (+19)
EURJPY -1,304 -1,340 (-1,512)
GBPJPY +1,174 +743 (+138)
AUDJPY -1,426 -1,402 (-1,696)
NZDJPY -367 -380 (-576)
CADJPY +481 +30 (-137)
CHFJPY -1,169 -1,180 (-1,308)
XAUUSD +12,950 (45% DD) +10,400 (49% DD) (-3,628)

This is the real improvement: model and real-tick results now agree within a few hundred dollars, so the trailing exit's income is not a tick-model illusion. It is still negative on the JPY basket for the last 21 months (-$3,273 on 0.10 lot per pair) because five of the seven pairs spent most of that window stuck in one underwater trade.

Optimising activation (0.5 to 3 ATR) and trail (0.5 to 3 ATR): every combination survives on the six crosses and none survives on USDJPY or gold (the stuck trade decides, not the exit). The best in-sample settings are in a narrow band (activate 1.5 to 2.5, trail 2 to 3 ATR; GBPJPY improves to +$6,100 / 12.5% DD with 1.5 / 2.0). Out of sample they fail for the same reason as everything else: started in January 2024, EURJPY and GBPJPY each opened a short (price was below the EMA that week), never got a stop, and sat for 1,012 days (-$2,006 and -$3,220); AUDJPY lost $1,793 on 8 trades. Which side you are on when the yen trend resumes is still the only thing that matters.

Portfolio on $10k, seven JPY pairs together, fixed lot per pair, 1-minute model, trailing exit:

Lot per pair Profit $ Max equity DD % Under the 30% relative-DD limit
0.01 1,478 6.1 yes
0.02 2,854 10.9 yes
0.03 4,251 14.7 yes
0.04 5,651 17.7 yes
0.05 7,014 20.3 yes
0.06 8,407 22.4 no

With gold added the limit is breached from 0.05 lot (gold's 2020-2025 hole), and 0.01 to 0.04 lot gives $2,401 to $9,375 with 13.6% to 29.1% drawdown, almost all of it gold 2025-2026.

Factor study: what the EA opens, why, and which filters change the outcome

Second round, requested to find conditions under which the strategy works (gold in particular). The EA now logs the context of every entry (distance from EMA in ATR, daily-trend agreement, RSI, position in the 120-bar range, ATR(14)/ATR(100), hour, weekday, 24-bar rate of change, bars since the extreme, win streak) and has eleven switchable filters. All runs below use the trailing exit, fixed 0.10 lot. Full tables: factor_analysis_F.md (entry context vs outcome), factor_sweeps.md (one factor at a time), summary_K*.csv (combinations), GXs_XAUUSD_passes.csv (240-combination gold grid).

What the stuck trades have in common (2020-2026 baseline, 1,654 trades over 8 symbols):

One factor at a time (gold, USDJPY, EURJPY, GBPJPY): the RSI cap at 70 improves every symbol a little (gold +$10,971 vs +$9,392, GBPJPY +$6,325 with drawdown 19% to 12.5%); a 1-ATR pullback requirement helps GBPJPY only; the volatility cap, range cap, session, weekday and win-streak filters flip between "best ever" and "account blown" on the same symbol depending on which single trade they happen to skip; the time stop is the only filter that changes USDJPY (every value 20-120 days turns -$6,956 into +$1,000 to +$3,200) but it costs EURJPY and GBPJPY money because their stuck trades used to recover.

Combinations, all eight symbols:

Set Gold 2020-2026 USDJPY Six crosses (sum) 2024-2026 only
baseline (trailing exit) +9,392 / 50% DD -6,956 / 72% +18,835 crosses negative, gold +12,950 / 45%
K1: RSI cap 70 +10,971 / 48% -6,898 / 72% +21,133 USDJPY, EURJPY, GBPJPY open 1-2 trades, stuck 1,011 days
K2: K1 + 1 ATR pullback +10,692 / 48% -6,922 / 72% +21,144 same
K3: K1 + 80-day time stop +27,950 / 39% +2,430 / 23% -5,276 (AUDJPY -5,521 / 60%) gold +32,466 / 35%, every JPY pair negative
K4: K3 + volatility cap 2 +28,603 / 38% +3,637 / 14% -6,611 gold +32,432 / 35%, JPY negative

Real ticks, 2025-01 to 2026-10, fixed 0.10 lot:

Symbol Baseline K1 (RSI 70) K3 (RSI 70 + 80-day stop)
XAUUSD +10,400 / 49% DD +11,394 / 47% +20,854 / 41% (worst floating -14,430)
USDJPY +256 +271 +218 (worst floating -794 instead of -1,289)
EURJPY -1,340 -1,330 -645
GBPJPY +743 +749 +625
AUDJPY -1,402 -1,465 -734
NZDJPY -380 -397 -266
CADJPY +30 +42 -28
CHFJPY -1,180 -1,118 -807
Seven JPY pairs -3,273 -3,248 -1,637

The gold grid (240 combinations of RSI cap, pullback, volatility cap, time stop, range cap, session): zero combinations keep gold under a 30% relative drawdown at 0.10 lot. The best drawdown with a usable trade count is 47% (+$11,257). And the time stop is path-dependent to the point of being a lottery on gold: with the RSI cap and nothing else, 50 days gives +$10,684, 75 days +$11,104, 80 days +$27,950 (the K3 run), 100 days blows the account. A result that moves by $17,000 when the stop moves from 75 to 80 days is not a setting, it is luck about which day a single trade gets closed.

Portfolio on $10k, fixed lot per symbol: K1 on the seven JPY pairs: 0.01 to 0.06 lot gives +$1,545 to +$8,917 at 6% to 22% drawdown (fails the 30% limit from 0.07), slightly better than the baseline. K3 on all eight symbols including gold: 0.01 lot +$1,975 / 11.8%, 0.02 lot +$3,796 / 19.9%, 0.03 lot and above fail the limit; 0.07 lot blows the account while 0.08 does not, which is the same path-dependence again.

What this means for gold: the only configuration that makes gold look tradeable is RSI cap + time stop + trailing stop, at 0.01 to 0.02 lot per $10k. That is no longer the original idea; it is an ordinary long-biased trend-follower with a time exit, and its record is +$2,500 in 2020, +$1,700 in 2021, -$4,900 in 2022, -$3,300 in 2023, +$5,100 in 2024, +$15,800 in 2025, +$11,000 in 2026 (0.10 lot, model). It earns in gold bull years and loses in sideways years, and the 2025-2026 bull run is most of the profit. On real ticks 2025-2026 it made +$20,854 on 0.10 lot with a 41% drawdown, i.e. about +$2,100 at 0.01 lot with a 14% worst floating loss.

News module: trading gold around high-impact USD releases

Requested after the gold verdict above: a major-news filter that can also catch the large post-release moves, with more risk accepted for more reward. The EA (v1.20) got InpNewsMode with four modes, see the README for every input:

Plumbing that matters for anyone re-running this: the Strategy Tester does not serve MT5's economic calendar (error 4014), so the calendar is exported once to Common\Files\NoSL_calendar.csv by a script and read by the EA. The terminal stamps every historical event with today's server offset (UTC+3), while Vantage's price history runs on UTC+2 in winter and UTC+3 in New York summer time; the CSV is therefore stored in UTC and the EA converts with a DST rule. This was verified against the tester's own M1 bars: the NFP spike sits at 15:30 server time in January and in July alike, and after the fix the EA's news entries land 4 to 70 minutes after the right releases. High-importance USD events only (about 3,660 from 2020 to 2026, i.e. weekly jobless claims and crude inventories, NFP, CPI, PCE, FOMC, GDP, retail sales, ISM, PMIs, auctions).

All runs: XAUUSD alone, fixed 0.10 lot, trailing exit, InpRSIMaxBuy = 70 (the K1 base). "News entries" are the trades the EA opened inside a post-release window with the multiplied size.

1-minute model, 2020-01 to 2026-10

Variant (tag) Net $ Max equity DD Trades News entries Net $ of news entries Worst floating $ 2020 2025 2026
Baseline RSI cap (NK1, identical to K1) 10,971 47.6% 146 – – -16,554 3,663 10,897 -3,589
Avoid (NA) 10,661 46.1% 143 – – -15,189 3,532 11,678 -4,549
Hunt, defaults: 2 h window, 0.3 ATR, 2x lots, 2x trail (NH) 19,821 36.5% 138 18 12,637 -15,189 3,758 12,526 3,536
Hunt, RSI cap also applied to news entries (NHn) 19,979 36.4% 145 13 12,073 -15,189 3,917 12,525 3,536
Hunt, tier-1 events only (NHk) 15,061 42.9% 147 6 6,941 -16,554 3,663 11,908 -511
Hunt, swept: 4 h window, 0.2 ATR, 3x lots, 1x trail (NHbest) 27,581 30.9% 152 34 23,491 -15,189 4,647 14,620 8,314
Hunt, follow the move against the trend (NHf) -10,043 100% 33 6 -14,912 -15,828 1,735 blown 2024
News-only (NO) -10,032 100% 117 117 -10,032 -29,667 blown

2021 to 2024 have no closed trades in the RSI-cap runs: the August-2020 long sat underwater until April 2025 and the EA holds one position per symbol. Those are the "bad years" of this configuration, spent entirely stuck.

Real ticks, 2025-01 to 2026-10

Variant (tag) Net $ Max equity DD Trades News entries Net $ of news entries Worst floating $ 2025 2026
Baseline RSI cap (NK1r25, identical to K1r25) 11,394 47.3% 161 – – -16,757 16,065 -4,671
Avoid (NAr25) 8,096 51.9% 151 – – -16,757 15,735 -7,638
Hunt, defaults (NHr25) 15,949 42.2% 159 23 8,800 -16,757 18,721 -2,772
Hunt, RSI cap also on news entries (NHnr25) 14,362 43.8% 157 17 6,892 -16,757 17,135 -2,772
Hunt, tier-1 events only (NHkr25) 15,443 42.7% 167 13 5,957 -16,757 17,664 -2,221
Hunt, defaults but 3x lots (NH3r25) 20,359 38.6% 159 23 13,210 -16,757 20,710 -351
Hunt, swept setting (NHbestr25) 27,731 33.3% 164 40 23,544 -16,757 23,371 4,360
Hunt, follow the move (NHfr25) -9,900 99% 11 5 -10,185 -10,471 blown (short of 2025-01-08, 92 days)
News-only (NOr25) -9,886 99% 26 26 -9,886 -13,756 blown (short of 2025-03-03, 189 days)

The 81-pass sweep (model, 2020-2026, hunt mode)

Window 60 / 150 / 240 min, confirmation 0.2 / 0.6 / 1.0 ATR, lots x1 / x2 / x3, trail x1 / x2 / x3. Corrected 2026-10-12: about twelve passes of the original 81 ran without the calendar (see the optimiser caveat in the Version 2 section) and reported the plain baseline; the clean re-run (NHopt2, 27 passes, trail multiplier dropped since it never mattered) gives: every pass profitable, drawdowns 30.9% to 49.8%; mean profit by level: window 60 -> 13,632, 150 -> 18,405, 240 -> 18,801; confirmation 0.2 -> 17,294, 0.6 -> 17,673, 1.0 -> 15,871; lots x1 -> 11,237, x2 -> 16,953, x3 -> 22,649. So: the confirmation threshold barely matters, the window helps a little, and the size multiplier is where the money is. With no size increase (x1) the best pass makes about 12,700, i.e. the window itself is worth about +1,700 on the model; everything above that is leverage on the news trades. The best pass (240 / 0.2 / x3) was then run on real ticks without further tuning and produced the NHbestr25 row above, which is as good a result as the in-sample one.

Reading

  1. Avoiding news does nothing good. None of the stuck trades were news entries (the table of worst floating losses in news_analysis_realticks.md shows them all opened hours to days away from a release), so the avoid window only removes winners: -300 on the model, -3,300 on real ticks.
  2. Hunting works on both data sets, and not only in January 2026. On real ticks the swept setting improves 2025 alone from +16,065 to +23,371 and 2026 from -4,671 to +4,360. The news entries are good trades as a group: real ticks, defaults, 23 entries, 78% winners, mean +383, worst floating -1,015, longest hold 6 days; swept setting, 40 entries, 68% winners, mean +589, worst floating -1,890, longest hold 6 days. On the model over 2020-2026, 34 entries, 97% winners, longest hold 13 days.
  3. It is still concentrated. The 28 Jan 2026 FOMC press conference long made +4,857 at 0.20 lot (+7,386 at 0.30) in four hours, the top of gold's blow-off in Vantage's data, and in the swept real-tick run two January-2026 entries are 13,000 of the 23,544. Take those away and the defaults are a wash against the baseline; the swept setting is still about +7,000 ahead over 21 months.
  4. The tail is untouched. Worst floating loss, longest hold and the end-of-test stuck long are byte-for-byte the same in every hunt run as in the baseline (-16,757 / 254 days on real ticks, -15,189 / 221 days on the model). The lower drawdown percentages come from a higher equity peak, not a smaller hole.
  5. The risk you add is size on a no-stop trade. No news entry got stuck in 34 to 40 samples, but nothing prevents it: a news entry is a trend-following long opened right after a spike, with 2x or 3x size and no stop until it is 1 ATR in profit. If one of them is the next 2020-08-07 or 2026-01-29, the hole is 2x or 3x the -15,000 to -17,000 seen here, which at 0.30 lot on a $10,000 account is a blown account rather than a 47% drawdown. The news trades' worst floating losses so far (-1,015 to -2,742) say nothing about that case because it has not happened yet in the sample.
  6. The two aggressive variants are account-killers on both data sets for the usual reason: one short taken after a release (follow-the-move) or one wrong-side news-only entry is held without a stop until the money is gone (691 days on the model, 92 and 189 days on real ticks). Do not run them.
  7. Keeping the RSI cap on news entries, or restricting to tier-1 events, removes profitable entries without improving the tail; the weekly jobless claims and crude inventories count as "high impact" in MT5's calendar and several of the good entries came from them.

Sizing the news version

Everything scales linearly with the base lot (news trades are 3x it). Real ticks 2025-01 to 2026-10, swept setting:

Base lot (news lot) Net $ Worst floating $ Rough equity DD on $10k
0.10 (0.30) 27,731 -16,757 33% (peak equity ~37k)
0.03 (0.09) 8,319 -5,027 ~27%
0.02 (0.06) 5,546 -3,351 ~22%
0.01 (0.03) 2,773 -1,676 ~13%

A stuck 3x news trade would triple the floating column. 0.02 to 0.03 base lot on $10,000 is the range where even that stays survivable; the user's stated tolerance for risk is why 0.03 is listed at all.

Not tested

Hunt mode combined with the 80-day time stop of set K3 (the only thing that ever changed the tail); a walk-forward on the swept parameters other than the model-to-real-tick check above; JPY pairs (their releases are BoJ and the quote currency's data, mostly without exact times).

Logging correction (affects the earlier factor study)

While testing the module a bug in the per-trade CSV surfaced: in the tester the close transaction of a stop-loss exit can arrive after the EA has already re-entered on the same tick, so a closed trade was often logged with the next entry's features. Fixed in v1.20 (features are stored under the position id). The no-cap baseline was re-run with the fix (tag NF, same +9,392 / 148 trades) and analyze_factors.ps1 re-run: RSI > 70 at entry is 42 trades (28%), net -12,362, 36% of the floating-loss mass, worst -16,966; RSI 50-70 is 102 trades, net +19,085. The earlier table said 70% of the loss mass and -4,781; the direction of the finding stands, its size was inflated. Range position > 0.9 now carries 57% of the loss mass (was 83%) and is net -2,727 (was +3,583). Feature columns in trade files from before 2026-10-11 should not be re-used for attribution; the filter backtests themselves were never affected.

Version 2 (2026-10-12): initial stop, risk sizing, drawdown halt, one EA

Request: a single EA (no variants), that cannot blow the account, with the worst floating-loss trades removed, the highest win rate and return the data supports, higher risk-reward still welcome, and a matching Pine indicator. What changed in NoSL_FirstProfit.mq5 v2.00:

Semantics check: with the new features switched off, v2 reproduces the v1 numbers to the cent (RSI-cap baseline +10,971 / 146 trades; fixed-lot hunt +27,581 / 152 trades).

Finding 1: a stop with fixed lots is a lottery

36-pass sweep at fixed 0.10 lot (stop 3 / 6 / 9 / 12 ATR, news stop 1 / 2 / 3, post-stop cooldown 0 / 12 h / 24 h, news hunt on): 21 passes profitable, 15 blew the account (92% to 97% drawdown), with neighbours like stop 3 / no cooldown +37,399 and stop 3 / 12 h cooldown -9,250. A 6-ATR stop on gold costs $900 to $1,800 per stop-out at 0.10 lot, so a cluster of stop-outs is fatal regardless of the long-run edge. Fixed lots cannot be used with a stop; everything below is risk-sized.

Finding 2: news entries lose as soon as trades carry a stop

The first risk-sized runs put the "news hunt" (post-release momentum entries, extra size) next to the plain trend system, 1% risk, model 2020-2026:

Configuration Net $ Max equity DD Trades News entries ... of which stopped out
Trend + 3 ATR stop, news off 46,027 10.2% 4,710 – –
Same, news hunt on (news stop 1 ATR, size x2) -6,043 91.6% 5,522 1,986 1,073
News hunt with wider news stops (5 or 8 ATR), size x1 or x2, confirmation 0.2 or 0.8 ATR (12 passes) best 8,660 best 29.9%

Every news variant was far below the no-news system. The v1 news trades won because they could sit through -1,000 to -2,700 floating losses after the release; a stop that bounds the loss removes exactly that. The module stays in the EA as an option (InpNewsHunt), off.

Finding 3: the plain stop system, and how far the 1-minute model flatters it

60-pass sweep, news off, 1% risk, model 2020-2026 (stop 2 / 3 / 4 / 5 ATR, break-even at 0.5 / 1 / 1.5 ATR, trail 1 to 3 ATR): all 60 profitable, 54 with a drawdown under 20%; the model loves tight stops (stop 2 mean profit 224,874, stop 5 mean 13,013) and an early break-even (0.5 ATR mean 152,479 vs 1.5 ATR 34,767). Five candidates were then run on the full model period, in-sample 2020-2023, out-of-sample 2024-2026 and real ticks 2025-01 to 2026-10, all from $10,000 at 1% risk:

Stop / BE / trail (ATR) Model 2020-26 net / DD / trades / win In-sample net / DD Out-of-sample net / DD Real ticks 2025-26 net / DD / trades / win / PF
3 / 0.5 / 1.5 107,403 / 7.5% / 8,542 / 86.4% 18,216 / 14.2% 29,955 / 7.2% 5,079 / 16.4% / 1,819 / 82.2% / 1.18
4 / 0.5 / 1.5 (default) 49,577 / 7.8% / 7,045 / 89.2% 11,511 / 12.5% 16,035 / 4.5% 5,122 / 11.7% / 1,500 / 86.8% / 1.30
3 / 1.0 / 2.0 47,987 / 9.0% / 4,232 / 75.1% 8,009 / 21.3% 21,425 / 8.4% 6,261 / 13.2% / 930 / 71.4% / 1.25
2 / 0.5 / 1.5 516,689 / 21.7% / 10,641 / 80.6% 60,007 / 26.8% 56,423 / 21.0% 3,535 / 39.1% / 2,392 / 71.7% / 1.06
4 / 0.5 / 2.5 36,936 / 6.1% / 5,654 / 88.2% 10,971 / 16.2% 11,157 / 5.6% 2,316 / 14.0% / 1,246 / 83.6% / 1.17

The model is not the truth for a system that trades two to four times a day with stops a few ATR away: on the same 2025-2026 window the default setting makes +10,890 with a 5.0% drawdown on the model and +5,122 with an 11.7% drawdown on real ticks (half the profit, twice the drawdown), and the 2-ATR stop that the model loved most is nearly flat on real ticks with a 39% drawdown. Real ticks decide: 4 / 0.5 / 1.5 for the best win rate and drawdown, 3 / 1 / 2 as the alternative with fewer trades and a slightly higher real-tick profit.

The v2 defaults in numbers

Gold, EMA 200 on H1, RSI cap 70, stop 4 ATR, break-even at 0.5 ATR, trail 1.5 ATR, news off, halt at 35% below peak equity, $10,000. Set file sets\V2_XAUUSD.set.

Run Net $ Final equity Max equity DD Trades Winners Profit factor Stop-outs (mean / worst $) Worst floating $ Longest hold
Model 2020-01 to 2026-10, 1% risk 49,577 59,577 7.8% (12.5% peak-to-trough) 7,045 89.2% 1.36 679 (-203 / -585) -635 20.7 days
Real ticks 2025-01 to 2026-10, 1% risk 5,122 15,122 11.7% 1,500 86.8% 1.30 156 (-108 / -553) -553 20.8 days
Real ticks, 2% risk 14,446 24,446 25.5% 1,502 80.2% 1.31 155 (-295 / -553) -553 20.8 days
Real ticks, 3% risk 247 10,247 35.0%, halted in 2025 after 530 trades 530 71.3% 1.01 64 (-359 / -441) -437 4.3 days

Yearly, by close date: model 2020 +1,614, 2021 +1,688, 2022 +3,629, 2023 +4,699, 2024 +4,353, 2025 +16,778, 2026 +16,817 (no losing year, but 2025-2026 are two thirds of the total); real ticks 1% risk 2025 +3,165, 2026 +1,957; 2% risk 2025 +6,203, 2026 +8,243.

What "cannot blow the account" means here: the planned loss per trade is 1% of equity (mean stop-out -108 on a 10,000 to 15,000 account); the worst single stop-out was -553 because gold gaps through stops at the weekly open and on releases, so a bad stop can cost five times the planned risk. Exits by stop are 10% of trades; 80% to 86% of trades close by the trailing stop in profit and 3% to 10% at break-even. The 35% halt is the backstop, and the 3% risk run shows it working: it fired, the EA went flat, and the account was intact at +247 instead of riding a 60% hole. There is no longer any trade that sits for months: the longest hold is 21 days.

What it costs against v1: on the same real-tick window the v1 no-stop gold run made +11,394 at 0.10 fixed lot (47% drawdown, one trade 254 days at -16,757) and the v1 news hunt +27,731 (33% drawdown, same stuck trade). v2 at 1% risk makes less than half of that, at 2% risk about half, with every loss bounded and no stuck trade. That is the price of the requirement, not a tuning gap: every attempt to keep the news-sized winners together with a stop lost money (Finding 2).

Caveats: one symbol; real ticks only from 2025-01 (21 months, one regime, a gold bull market); 1,500 trades in 21 months means spread (included in the tester) and slippage (not included) matter more than for v1; the model-vs-real gap of 2x should be assumed for any model-only number in this section; parameters were chosen on the model and confirmed on the same real-tick window that is now being quoted, so the real-tick numbers are not fully out of sample.

Pine indicator

pine\NoSL_GoldNews.pine (generated by make_pine.ps1) mirrors the rules on a TradingView XAUUSD 1-hour chart with the 931 release times of 2024-2026 embedded, entry and exit labels, the live stop, shaded release windows, alerts and a bar-level stats table. It is a bar-close approximation of the tick-level EA; its trade count and win rate will not match the tester exactly.

Optimiser caveat (affects one earlier table)

In complete-search optimisation, a subset of passes (apparently the first pass on each agent) could not open the calendar from Common\Files and ran with the news module inert; their results were the plain-system results attributed to news parameters. This contaminated about twelve of the 81 passes in the news-hunt sweep of 2026-10-11 (corrected inline above) and was caught because a single run never matched the pass with the same inputs. The EA now ships the calendar to the agents (#property tester_file), falls back to the program's Files folder, and refuses to start a test pass without calendar rows when news is on; a 24-pass identical-input sweep then reproduced the single run exactly.

If you run it anyway

Files