CAT researchOverviewEURUSDGBPUSDXAUUSDGBPCADEURCADAUDJPYGBPJPYResearch notes

entry5m v4 — XAUUSD, bias from the H1 extreme-triangle arm: pre-registration

Status: pre-registered 2026-09-06 (commit eb038a4), built (ac81096) and run the same day; verdict: FAIL on XAUUSD (see research/2026-09-06-entry5m-v4-xau-arm-screen.md); the confirmation run was not triggered. Parents: v1 spec 2026-09-06-entry5m-design.md (FAIL 0/3), v2 (FAIL 0/3), v3 2026-09-06-entry5m-v3-fixed3r-prereg.md (FAIL 1/3, EURUSD alone).

1. The variant (Daniel, 2026-09-06)

"For XAUUSD take the trade on 5min after the extreme triangle detection on H1 with stop at the H1 high/low. This is to test XAUUSD only."

Decisions taken with Daniel before writing this:

Question Decision
Trigger The ZTD arm with the triangle tier raised to Extreme: an H1 close where the AVWAP-Z triangle is at the Extreme tier AND the PBK z is beyond its extreme overbought/oversold level (ZtdRow.ovl != 0 with ZtdConfig.t_min_tier = "Extreme"). Bearish arm (ovl = 1) = short bias; bullish (ovl = -1) = long
Stop One tick beyond the running H1 range extreme since the trigger (curHi for a short, curLo for a long, followed at every H1 close while the bias lives), read at order placement and fixed for that order; pending orders cancelled at that level (stop_mode = "h1_extreme", unchanged code)
Bias window From the first 5m bar after the trigger's H1 close until: the H1 oscillator range ends (the zero touch, curHi/curLo becomes na) — reason range_end; an opposite-side trigger (replaced); or 96 H1 bars. A same-side trigger while the bias lives does not restart it. There is no contradiction rule and no zero-touch target (there is no zero touch yet)
Target Fixed 3R (target_mode = "fixed_r", target_r = 3.0), as in v3
Entry Unchanged: any 5m pullback (pivot N = 3, origin at least 3 bars older), stop order one tick beyond the origin, min_rr = 1.0 (not binding under a fixed target), one position at a time, pending_max_bars = 48
Instruments XAUUSD only, five-year Tickstory 5m data, costs 18 ticks per side at 0.01

2. Exact rule change

Entry5mConfig.bias_source = "arm" (default "divergence" reproduces v1-v3). In arm mode BiasTracker.on_h1_close ignores sigBear/sigBull/contraB/contraU/ext and:

  1. while a bias is active: if its side's running extreme (curHi / curLo) is na, end it with reason range_end; otherwise move Bias.ext to the new extreme when it is beyond the old one, then end on timeout (k > deadline_h1);
  2. on ovl != 0: same side as the active bias → no event; otherwise end the active bias (replaced) and start a new one with kind = "ARM", ext = ref = the current running extreme, target = na. A trigger whose running extreme is na (a range that ended on its own trigger bar) is skipped and counted in bias_no_target.

Config validation: bias_source = "arm" requires target_mode = "fixed_r" and sets ztd.t_min_tier = arm_tier (arm_tier default "Extreme"). The runner's target-touch bias end never fires (Bias.target is na). New counter keys biases_ARM, bias_end_range_end.

3. Primary cell (judged) and criteria

pivot_n = 3, min_pb_bars = 3, timeout_h1 = 96, min_rr = 1.0, pending_max_bars = 48, max_hold_bars = 0, stop_mode = "h1_extreme", target_mode = "fixed_r", target_r = 3.0, bias_source = "arm", arm_tier = "Extreme", ZTD defaults otherwise, on XAUUSD.

Single-instrument criteria: XAUUSD must clear all five sub-criteria of the v1 spec's section 8 (at least 200 trades; PF > 1.15 and ex-outlier PF > 1.0; expectancy > +0.05 R; best month <= 35% of net R; both calendar halves net-positive). The screen's per-symbol verdict column is the judged line; the "overall: n of 3 groups" line does not apply to a one-symbol run and is ignored.

A pass on XAUUSD alone is provisional: the pre-declared follow-up is the same cell on EURUSD, GBPUSD and EURJPY, judged by the group rule (two of three groups), before the rule is called alive. A fail means this variant is dead as specified for XAUUSD; no parameter search follows. The sensitivity grid is printed and NOT judged.

Expected side effects, stated now: many more biases than the divergence-based versions (every extreme arm, not only the ones that go on to diverge); shorter bias lives (an oscillator range, not a divergence cycle); stops that widen as the H1 range extends before the pullback forms.