CAT researchOverviewEURUSDGBPUSDXAUUSDGBPCADEURCADAUDJPYGBPJPYResearch notes

PRE-REGISTRATION — GBPUSD defaults robustness screen (ZMS)

Written and committed BEFORE any of the tests below were run. Nothing in this file may be edited after the first result is recorded; results go in a separate "Results" section appended afterwards.

Why this configuration

Across four instruments and six modifications, exactly one configuration produced a positive result that was not carried by one or two outlier trades:

FX:GBPUSD, 5m chart, ZMS defaults, every optional feature OFF (H1+H4 bias, Rolling-24 anchor, Percentile 90/95, sigma 100, T1 split 50%, min R:R 1.0, max 3 entries, Extreme target band, no fib depth, no session flat, no divergence continuation), slippage 2 ticks (0.4 pip RT).

Recorded baseline: n=109, 54.13% win, PF 1.208, +$20.51, max DD $45.31, Outliers PnL −$5.10ex-outlier PF 1.279, ex-outlier net +$25.61.

Every other positive in the study collapses when its one or two outlier trades are removed. This one improves. That is the only reason it is being examined; it is not a tuned variant and no parameters were selected for it.

The question

Is this a real effect, or the survivor of ~30 configuration/instrument combinations examined this session?

With ~30 combinations tried, seeing one at PF ~1.2 by chance is entirely unremarkable. So the burden of proof sits with the result, and the screen below is designed to falsify it cheaply before any holdout instrument is spent.

Pass criteria — ALL of these must hold

  1. Time split. Split the backtest window (Feb 9 – Aug 26 2026) into two halves at the midpoint. Both halves must have PF > 1.0. (A result that lives in one half is a regime artifact.)
  2. Ex-outlier. Overall ex-outlier PF must remain > 1.0.
  3. Cost stress. At 0.8 pip round-turn (slippage 4, double the baseline), PF must remain > 1.0.
  4. Parameter stability. Of the 8 perturbations below, at least 6 must keep PF > 1.0. These are small moves that should not matter if the effect is real:
    • sigma lookback 100 → 80 and → 120
    • extreme percentile 95 → 94 and → 96
    • min R:R 1.0 → 0.8 and → 1.2
    • H1 timeout 96 → 72; H4 timeout 48 → 36
  5. No single-month concentration. The best single calendar month must not exceed 60% of total net profit.

Decision rule, fixed in advance

  • All five pass → the result has earned one holdout test. Spend USDJPY (5m, identical settings, one run, no tuning). Report whatever it gives.
  • Any criterion fails → ZMS is closed as a mechanical strategy. No further variants, no holdout spent. Report the failure plainly and stop.

Explicitly not allowed under this pre-registration: changing settings to rescue a failed criterion, re-running a criterion with a different definition, or promoting a sub-cell (e.g. "H4 only still works") to headline status. Sub-cell readings may be reported as observations only.

Note on the remaining holdouts

USDJPY and XAGUSD are the last untouched instruments. Only USDJPY is at stake here, and only if the screen passes in full. XAGUSD stays reserved regardless.


RESULTS (appended after the run; nothing above this line was edited)

Measurement note — instrument changed, criteria unchanged

TradingView's Strategy Tester report became unusable mid-screen: setting a custom date range latched the panel into Deep Backtesting, which this account is not entitled to ("Caution! not_allowed"), and the report then reported "This report requires trade data" for every run. Repeated attempts to clear the mode via the range control failed.

The screen was therefore measured with the strategy's own TOTAL row, computed in Pine directly from strategy.closedtrades and read off the chart — independent of the report DOM. A TOTAL row (n, win%, PF, ex-outlier PF, net pips) and a best-month concentration row were added to the script for this purpose.

Calibration against the tester on the identical baseline run:

Tester Pine TOTAL row
n 109 109
win % 54.13 54.1
PF 1.208 ($, incl. slippage + compounding) 1.39 (gross pips per leg)
ex-outlier PF 1.279 (TV-flagged outliers) 1.33 (largest single win removed)

Trade count and win rate match exactly, and both PF measures agree in direction and in clearing 1.0. The Pine measure is slightly more generous (no slippage, no compounding), which biases in favour of the result being screened — so any failure below is not an artifact of the switch. The pass criteria were not altered.

Criterion results

# Criterion Threshold Result Verdict
2 Ex-outlier PF > 1.0 1.33 (tester 1.279) PASS
1 Both halves PF > 1.0 both > 1.0 H1 1.90 / H2 0.91 FAIL
5 Best month share of net <= 60% 123.2% FAIL
3 Cost stress 0.8 pip RT > 1.0 not run - see below -
4 Parameter stability 6/8 6 of 8 not run - see below -

Criterion 1 — time split (FAIL)

Half Window n win% PF ex-outlier PF net pips
First 2026-02-09 -> 2026-05-19 73 56.2 1.90 1.80 +1,232.4
Second 2026-05-19 -> 2026-08-26 38 52.6 0.91 0.78 -99.8

The result lives entirely in the first half. The second half is a losing sample on both the headline and ex-outlier measures. Second-half cells: H1-Path1 PF 0.43 (-320 pips), H4-Path1 PF 1.25 (+78 pips) — the H4-Path 1 cell that looked like the engine of the whole thing (PF 2.21, +840 pips over the full sample) produces +78 pips in the second half.

Criterion 5 — monthly concentration (FAIL, decisively)

Best month +1,192.6 pips against a total net of +967.8 pips = 123.2% of all profit, spread over 7 active months. Because the best month exceeds the total, every other month combined is net negative.

The first-half run shows the same month at 96.8% of that half's profit. The entire "only outlier-free positive result in the study" is one month on one instrument.

Criteria 3 and 4 — deliberately NOT run

The pre-registered decision rule triggers on the first failure. Continuing to test after two decisive failures — in the hope that cost stress or parameter stability might look better — is exactly the post-hoc rescue this pre-registration was written to prevent. They were not run.

DECISION (per the rule fixed in advance)

ZMS is closed as a mechanical strategy.

  • No holdout is spent. USDJPY and XAGUSD remain untouched and are still available for genuinely new work.
  • No further ZMS variants, parameter sweeps, or instrument searches.

Why this was the right screen to run

The GBPUSD-defaults result was the single best candidate the whole project produced: a positive, cost-robust, non-outlier-carried result on an instrument that had not been tuned for. It survived the check that had killed every other positive (ex-outlier PF 1.33). It then failed on the two checks that no amount of configuration searching can fake: it does not survive being cut in half, and it is one month.

Had the screen been skipped and a holdout spent instead, USDJPY would have been burned on a result that a free two-minute time-split could have falsified first.

What this closes, and what it does not

Closed: ZMS, and with it the whole family of "AVWAP-Z extreme bias + LTF structure entry" mechanical strategies. Six modifications, five instruments, two timeframes, one new information source (the AKAO oscillator) — every positive result was either instrument-specific, outlier-carried, or single-month.

Not closed: the indicators themselves as a discretionary read. PBK/AVWAP-Z remain useful context tools, and the untriangled divergent swing detector built in the previous step is a real object worth having marked on the chart. Nothing here says the levels are meaningless; it says this particular mechanical assembly of them has no edge that survives contact with out-of-sample data.


Addendum (same day, after the decision)

The screen failed and therefore did not authorise spending a holdout. Daniel subsequently asked for USDJPY directly, and it was run — see zms_first_read_2026-08-26.md, section "USDJPY (holdout spent) + EURGBP control". That was his call, not an outcome of this screen, and it is recorded here so this document is not misleading when read on its own.

It proved worthwhile: USDJPY returned PF 0.90 on base ZMS (consistent with the closure) and, via the EURGBP control it prompted, established that the divergence result was a single March-2026 dollar event.

Holdout status now: USDJPY spent, XAGUSD untouched.