SniperGold_ML/docs/P3_S15_ML_PATH_ARCHITECTURE_DECISION.md

482 lines
23 KiB
Markdown
Raw Permalink Normal View History

# P3-S.15 ML PATH / TRAINING ARCHITECTURE DECISION — SNIPERGOLD_ML
```text
Date : 2026-08-23
Session : P3-S.15 — ML Path / Training Architecture Decision
Status : DESIGN / ARCHITECTURE DECISION ONLY. DOCUMENTATION ONLY.
NO code, NO model, NO training, NO Candidate Setup change,
NO FEATURE_CONTRACT change in this session.
Checkpoint : P3_S14_HEAD 8b29466e52ab810843768c083c1193e35e091e8e (VERIFIED
local == origin/main, branch main, working tree CLEAN)
Contract : docs/SNIPERGOLD_CANONICAL_SETUP_CONTRACT_v1.md (frozen, P3-S.10)
Handover : docs/SESSION_HANDOVER_2026-08-23_P3_S14_MTF_TRAINING_ALIGNMENT.md
Verification: P3-S.15 checkpoint VERIFIED — see §2.
Human verification : REMAINS CANCELLED (permanent research-path decision).
Decision : OPTION A final classification = "DESIGN DECISION REQUIRED -> A.
KEEP LEGACY MODEL AS REFERENCE + BUILD FUTURE SETUP-LEVEL ML"
(see §L). Resolved as an architecture decision, NOT by AUC/PF.
```
---
## 1. SESSION MANDATE (the single question)
> **Now that SniperGold has a repaired EVENT contract, repaired ZONE contract,
> a real Candidate Setup layer, and a canonical H4/M30/M15/M3 architecture,
> what should the future ML system learn from, and what should the current
> legacy MLP be considered?**
This session answers the architecture-level question above. It does NOT
compute AUC/PF, does NOT retrain, does NOT modify the Candidate Setup, and
does NOT touch feature contract frontiers. It decides the OBSERVATION UNIT,
LABEL DIRECTION, FEATURE ARCHITECTURE, TEMPORAL/REGIME model role, and the
FUTURE DATA PIPELINE for a separately-authorized future training phase.
---
## 2. CHECKPOINT VERIFICATION (Phase 0 — SESSION-HANDOVER-FIRST)
```text
A. Latest authoritrative handover found by repository search
(docs/SESSION_HANDOVER_*.md):
SESSION_HANDOVER_2026-08-23_P3_S14_MTF_TRAINING_ALIGNMENT.md
(newest date 2026-08-23, terminal phase P3-S.14; confirmed by git history
highest parent of current HEAD and by its own "Next gate: P3-S.15".)
B. Preceding handover for continuity:
SESSION_HANDOVER_2026-08-22_P3_S13_CANDIDATE_SETUP.md (F3, parent of S.14)
C. Checkpoint stated by the session brief (P3-S.14):
8b29466e52ab810843768c083c1193e35e091e8e
Checkpoint stated by the latest handover (P3-S.14 F4 test commit):
8b29466... (same object — the handover records it in the git log commit
"test: define F4 mtf-training-alignment session report generator").
D. Verified (against git):
local HEAD = 8b29466e52ab810843768c083c1193e35e091e8e OK
remote HEAD = 8b29466e52ab810843768c083c1193e35e091e8e OK (origin/main)
branch = main OK
working tree = CLEAN (git status empty) OK
local == remote == checkpoint OK
E. RESULT : repository state CONSISTENT with the latest handover.
PROCEED with the P3-S.15 architecture decision.
```
---
## 3. RECONSTRUCTED PROJECT STATE (from the latest handover — authoritative)
```text
Current phase : P3-S.15 — ML path / training architecture DECISION.
Completed phases : P3-S.2..S.8 semantic conformance; P3-S.9 architecture
review + root-cause matrix; P3-S.10 owner adjudication +
CANONICAL SETUP CONTRACT FREEZE; P3-S.11 F1 EVENT repair;
P3-S.12 F2 ZONE repair; P3-S.13 F3 CANDIDATE SETUP layer
(implemented, frozen, 25/25); P3-S.14 F4 MTF/training
alignment (verdict LEGACY / NOT COMPARABLE, 16/16).
Earlier P2.1-P2.6 (HTF parity, corrected baseline) and
P3.1/P3.2/P3.2.2 forensic evidence (feature audit,
label/event forensic, de-overlap/survival).
Frozen architecture : H4 (Narrative/Context gate) -> M30 (Context gate) ->
M15 (Entry/Setup carrier) -> M3 (optional confirmation).
Frozen Candidate Setup chain : H4 gate -> M30 gate -> fresh Liquidity EVENT ->
CHoCH/MSS EVENT after sweep -> active/unmitigated OB|FVG
ZONE -> M15 entry condition -> CANDIDATE_SETUP -> [M3].
Identity, lifecycle, one-setup-one-identity, one-entry,
score separation — all FROZEN (F3).
F1 / F2 : repaired and frozen (event contract; zone contract).
Current open decision:P3-S.15 (this session) — future ML/training architecture.
Production changes : NONE in P3-S.14/S.15 (docs only). Runtime unchanged.
Model status : SniperGold_ML.mqh v20260821_2head — FROZEN, UNCHANGED.
Legacy 24-bar directional MLP on D1/H4/H1+M15 (19 feats).
ML status : LEGACY / NOT COMPARABLE vs canonical setup (P3-S.14).
Known blockers : M30 and M3 have NO ML feature surface; virtual D1/H1 are
legacy-only; frozen model encodes the legacy v4.4 feed.
Next gate : P3-S.15 (this decision) -> per decision, P3-S.16 =
Setup-Level Dataset / Label Contract IMPLEMENTATION.
```
---
## 4. CURRENT ML MODEL STATUS (frozen, unchanged — §18)
```text
Object : SniperGold_ML.mqh (terminal + repo historical copies)
Version : v20260821_2head
Family : static MLP, 19 -> 12 -> 2 (long/short heads), 2-node aux-calibrated
Label : 24-bar forward direction drift | 0.75 x ATR threshold
(L1 DIRECTIONAL label, NOT setup outcome)
Feed : D1/H4/H1 HTF bias (f0-f2) + M15 structure/zone/delta/mom/confluence
(f3-f18) — the FEATURE_CONTRACT f0-f18 (P2 source of truth)
MTF : D1/H4/H1 + M15 (LEGACY generation)
AUC : validation 0.5005 | long 0.6270 | short 0.6207 (recorded header;
reported for status only — NOT used as a decision criterion)
Trained : 2026-08-21, XAUUSDc M15, on the OLD v4.4 feed semantics
(the P2.5-corrected build_features_p2 feed was NOT integrated
into train_model.py — a documented legacy inconsistency, P2 §F/G-8;
G-9: deployed model trained on the OLD feed).
Status classification (per §18, on established evidence only):
DEPLOYABLE : yes, it is wired and runs. [functional]
LEGACY : yes — pre-Candidate-Setup, bar-level, D1/H4/H1+M15 feed. [lineage]
REFERENCE : yes — usable as a historical baseline of the old generation.
SUPERSEDED : NO as "obsolete" for the CURRENT design intent; YES as
semantically non-equivalent to the canonical setup model.
FINAL : classify as LEGACY / REFERENCE benchmark. NOT the canonical
Candidate Setup model. It predicts directional drift (L1), which
is a DIFFERENT target from setup outcome. It stays intact.
```
The session's mandatory invariant (§18/§23): this model must remain the same
file/weights/architecture/calibration/header. It is preserved, not destroyed.
---
## 5. RUNTIME vs LEGACY ML ARCHITECTURE (§7, §17)
```text
RUNTIME (frozen, canonical) LEGACY ML / TRAINING (current)
----------------------------------- -----------------------------------------
MTF: H4/M30/M15/M3 MTF: D1/H4/H1 + M15
Setup unit: ONE Candidate Setup Unit: EVERY M15 bar
Chain: gate->gate->sweep->CHoCH->zone Unit class: per-bar feature vector
->M15 entry -> SETUP [->M3] Label: 24-bar forward DROFT (L1)
Identity: setup_id (causal) Label target: DIRECTION, not outcome
Lifecycle: full state machine No setup identity, no lifecycle
H4/M30 = HARD direction gates H4 = soft numeric bias (f1); D1/H1 = legacy
M30, M3 = REQUIRED gate / confirmation M30, M3 = ABSENT from feature set
Causality: as-of closed bars per stage Causality: as-of closed bars (aligned for M15/H4)
Overlap: M15 base layer + H4 bias semantics partially overlap (P3-S.14).
NOT COMPARABLE as the SAME predictor: different unit, different label target,
different MTF set, different consumer semantics.
The legacy model and the canonical setup are DIFFERENT OBJECTS, not the same
information written differently (P3-S.14 §L verdict).
```
---
## 6. ONE-OBSERVATION UNIT DECISION (§11, §12) — THE CORE ANSWER
### 6.1 Existing model unit
```text
one M15 bar -> future 24-bar DIRECTION drift
```
### 6.2 Future Candidate Setup unit
```text
one Candidate Setup -> setup OUTCOME (valid-before-invalidation)
```
### 6.3 Why the setup must be the observation unit
- **Semantic correspondence** (the decisive criterion): the runtime makes
decisions on WHOLE SETUPS (identity + lifecycle), not on arbitrary bars.
ML that learns per-bar cannot correspond to the runtime consumer.
- **Causality**: a setup is a causally-ordered chain with a defined creation
timestamp and lifecycle; an outcome can be measured causally from creation.
- **Training-unit correctness**: the runtime's decision granularity (one setup
per entry) forces the training unit to be the setup. Bar-level training
would optimize the wrong granularity.
- **Runtime/training consistency**: erased the P3-S.14 bifurcation (R-1).
- **Evidence (P3.2.2 §K)**: the L3 label MECHANISM is viable ONLY on a discrete
setup unit; the existing event/bar stream FAILED "unit validity" (97-99%
redundant, 1.5% retention). Setup-level units fix the unit-validity failure.
- **Setup identity is sufficient as an ML observation key** (§12): it has
setup_id, direction, sweep onset/dir, choch onset/dir, zone info,
creation timestamp, optional M3. This is a complete causal composite key.
### 6.4 Per-observation-consequence analysis (covers every required point)
| Dimension | Per-bar (legacy) | Per-setup (future) |
|---|---|---|
| Sample independence | FAIL — every bar overlaps its neighbours (outcome windows share) | IMPROVED — setups are discrete; dedup by identity removes per-bar redundancy (still need de-overlap between distinct setups, §6.5) |
| Label definition | direction drift (L1) — MISALIGNED for setups | setup-outcome (L3 TP-before-SL / risk-adjusted) — CAUSAL |
| Overlap | massive (98% +1-bar gap, P3.2.2 §J) | boundary: distinct setups may still overlap in TIME; need a min separation / lead-setup policy |
| Event clustering | bars cluster into long same-outcome runs | setups cluster into market episodes; de-overlap needed at the setup level |
| Setup deduplication | none (no identity) | BY CONSTRUCTION via setup_id (F3 one-setup-one-identity) |
| Time-to-outcome | horizon fixed 24 bars | setup lifetime (P3.2 §6/§8: 1-8 bars, ~90% <=8) — horizon must match lifetime |
| Censoring | — | must be handled (UNRESOLVED valid at H16+, low; survival for short H) |
| Class balance | near 50/50 direction | setup-outcome is LOSS-heavy (P3.2.2: LOSS ~2x WIN on existing event units); this is a REAL distribution fact, must be handled by the label design, not hidden |
| Feature leakage | fixed by closed-bar | must enforce closed-bar + no lookahead (setup created only when chain completes) |
### 6.5 De-overlap must be re-derived at the setup level
The P3.2.2 de-overlap was defined for EVENT stream. At the SETUP level the
dedup is by identity (§6.3), but two DISTINCT setups can still have
overlapping outcome windows (e.g. a second setup forms inside the first
setup's life). Future dataset must apply a setup-identity + temporal
separation policy (lead-setup-per-episode) analogous to P3.2.2 §B, defined in
the P3-S.16 label contract, NOT in this session.
**DECISION §6**: The future ML observation unit = **ONE Candidate Setup**.
This is the only unit that is semantically consistent, causally sound, and
matches the runtime consumer. (Section 6 answers §11, §12, and the STOP
condition "Candidate Setup cannot serve as a deterministic training unit" —
it CAN, because identity+lifecycle are deterministic and frozen.)
---
## 7. FUTURE LABEL CONTRACT — DIRECTION (§13, §14)
### 7.1 Explicit distinction (from P3.2 §0/§14 — the key forensic)
```text
BAR-DIRECTION label (L1) : one M15 bar -> future 24-bar drift.
Measures DIRECTIONAL PREDICTION, not setup validity.
This is what the CURRENT model encodes.
SETUP-OUTCOME label (L3+) : one Candidate Setup -> did the EXPECTED outcome
occur BEFORE invalidation?
Measures SETUP VALIDATION — what the runtime asks.
```
P3.2 (official classification B — LABEL IS MISALIGNED) established these are
DIFFERENT targets. P3.2.2 showed the L3 (TP-before-SL) mechanism is viable.
This session RECORDS the direction, does NOT implement labels.
### 7.2 Future label family (to be measured in P3-S.16; not implemented now)
```text
PRIMARY target : setup-outcome, TP-before-SL (L3 successor):
WIN = TP reached before SL within the setup-lifetime horizon.
LOSS = SL reached first (or invalidation/contrary structure first).
CENSORED/UNRESOLVED : neither within the lifetime; real censoring.
AMBIGUOUS : same-bar TP & SL (excluded/recorded, 1-3%).
Suggested semantic: TP = k*ATR, SL = m*ATR with a justified R:R (NOT
selected from performance; candidates in P3.2 §14 / P3.2.2 §0 can be
re-baselined against the FROZEN setup, not the event stream).
SECONDARY / descriptive (NOT classification targets):
- MFE / MAE excursion (L2) : setup risk/geometry profile.
- time-to-TP / time-to-SL (L4) : setup lifetime distribution.
- invalidation time : structure-break invalidation latency.
EXPLICITLY SEVERED from the legacy: the 24-bar DIRECTION drift label is NOT
reused as the setup-outcome target.
P3.2 evidence note: on the EXISTING event semantics the outcome is LOSS-heavy.
This is a measurement of the OLD setup units, not a judgment on the NEW
canonical Candidate Setup outcome distribution. P3-S.16 must re-measure on the
canonical unit. The label must not be engineered to fake balance; it should
measure truthfully.
```
---
## 8. FUTURE FEATURE ARCHITECTURE (§14) — PROPOSAL ONLY
The future setup-level model will require features aligned to the canonical
setup entity (NOT added to FEATURE_CONTRACT in this session):
```text
IDENTITY / TARGET block : setup_id, direction,
creation_bar / creation timestamp.
H4 context (gate) : H4 narrative STATE (as-of closed), direction.
M30 context (gate) : M30 context STATE (as-of closed), direction.
Liquidity EVENT : sweep onset, sweep direction, sweep freshness,
distance to sweep, sweep size relative to ATR.
CHoCH EVENT : choch onset, choch direction, choch-vs-sweep
order/latency.
ZONE (OB|FVG) state : zone type, zone age (vs zone formation),
zone width (ATR units), price-in-zone offset,
mitigation state at creation, zone-bound proximity.
Displacement attribute : value at chain completion (optional boost).
M15 entry state : M15 entry-condition boolean, premium/discount
filter state, distance-to-zone in ATR.
M3 confirmation : optional M3 confirmation presence + direction.
Geometry / time : zone geometry, time since event onset,
time since zone formation, setup lifecycle stage.
```
ALL features must be as-of the FROZEN MTF as-of contract (§L of the canonical
contract): every consumed bar closed before the setup creation decision bar.
NO partial candle, NO future information.
This is an ARCHITECTURAL PROPOSAL (Section 8 records the direction). The full
contract with numerics/lookbacks belongs to P3-S.16 (or a dedicated proposal),
where it will be created as a NEW proposal document, NOT by mutating
`docs/FEATURE_CONTRACT.md` (§19 policy respected).
---
## 9. TEMPORAL MODEL QUESTION (§15)
```text
Q: Would a future temporal model have a valid temporal sequence to learn once
Candidate Setup becomes the observation unit?
Bar-sequence view (old): M15 bars -> 24-bar drift. Sequences of bars,
but the "event" is drowned by bars (redundant, overlapping windows).
Setup-lifecycle-sequence view (future): the canonical lifecycle
NONE -> CONTEXT_VALID -> LIQUIDITY_TRIGGERED -> STRUCTURE_CONFIRMED ->
ZONE_READY -> ENTRY_ARMED -> CANDIDATE_SETUP -> [M3_CONFIRMED] ->
EXPIRED | INVALIDATED | CONSUMED.
Assessment:
- There IS a well-defined temporal object: the SETUP LIFECYCLE is a sequence
of dated states/events. A temporal model (e.g. sequence-of-stages) is
CONCEPTUALLY valid IF it models the lifecycle transition sequence per setup.
- However the per-setup lifecycle is SHORT (1-8 bars for confirm, then
terminal). Over a sequence of DISTINCT setups, the meaningful information is
the cross-setup context, not a long intra-setup series.
- REGIME/H4/M30 state provide the longer temporal context; M15 provides the
short lifecycle sequence.
- CONCLUSION: temporal modeling is JUSTIFIED ONLY as modeling the SETUP
LIFECYCLE SEQUENCE (stages as a sequence) and/or the cross-setup context
series. The old per-bar LSTM/Informer premise (learn on dense bars) is NOT a
valid temporal learning target after the unit becomes the setup, because it
re-introduces the overlap/redundancy failure (P3.2.2). A temporal model over
well-separated setup-lifecycle sequences would have a valid sequence to learn.
- NOT run here. This § answers the design question only.
```
---
## 10. REGIME MODEL QUESTION (§16)
```text
Q: What role should REGIME play in the future architecture?
Prior regime work (HMM/MSM/GARCH experiments) is NOT revived. The canonical
H4/M30 narrative+context gates already capture a coarse regime/state of the
market at the top of the MTF stack.
Preferred future role (documented, NOT implemented):
REGIME = LABEL-CONDITIONING VARIABLE / PRE-FILTER, layered on top of, and
defined consistently with, the H4/M30 narrative/context gates.
Rationale:
- H4 direction-compatible gate ALREADY conditions entry (a regime proxy).
- If used as a pre-filter, note the frozen OD-1/OD-4: regime must NOT
override the canonical gate semantics for the SETUP LAYER. Regime would
sit ABOVE the setup layer as an entry-quality conditioner, not as a new
setup gate.
- NOT a separate super-model; NOT a hard filter that contradicts H4/M30.
- A single regime SCORE could eventually be a SETUP FEATURE (context depth)
but should not be allowed to recreate the legacy "regime gate" that the
canonical contract removed (OD-4 gate-fail policy is authoritative for
the setup layer).
Preference ranking (as a documented default for future design):
1. Label-conditioning variable (most consistent with frozen gates)
2. Context candidate-setup feature (if it is meaningful)
3. Pre-filter (allowed only if it never contradicts H4/M30 gate semantics)
4. Separate model (NOT preferred — legacy direction, not revived)
A single preferred default will be fixed in the P3-S.16 contract.
```
---
## 11. FUTURE DATA PIPELINE (§17)
### 11.1 Future (recommended)
```text
Market Data (M15 base + H4/M30/M3 as-of)
-> SMC primitives (sweep/CHoCH/FVG/OB/displacement; F1/F2 repaired)
-> repaired Events & Zones (F1/F2 contracts; as-of lifecycle)
-> Candidate Setup (F3: deterministic chain, identity, lifecycle)
-> Setup SNAPSHOT (per-setup feature vector, §8)
-> Outcome Label (setup-outcome L3, §7, measured from creation bar forward)
-> ML Dataset (one row per Candidate Setup, de-overlapped by identity+time)
-> model (setup-level, see §12)
```
### 11.2 Old (legacy)
```text
Market Data (M15 bars)
-> features (D1/H4/H1+M15, f0-f18)
-> 24-bar label (directional drift)
-> MLP (19->12->2)
```
### 11.3 Comparability
```text
NOT comparable as the same predictor:
- observation unit : bar vs setup
- label target : 24-bar drift vs setup outcome
- MTF set : D1/H4/H1+M15 vs H4/M30/M15/M3
- consumer semantics : MLP numeric input vs runtime candidate-setup entity
They represent different generations. The legacy pipeline is preserved as
evidence; it is not the canonical training path.
```
---
## 12. ML ARCHITECTURE CLASSIFICATION (final — §21 with §26 guards)
```text
The three options (A / B / C) were evaluated on semantics only (§10):
A. KEEP LEGACY MODEL AS REFERENCE + BUILD FUTURE SETUP-LEVEL ML
B. ALIGN EXISTING ML PIPELINE TO CANONICAL RUNTIME
C. RETIRE CURRENT STATIC ML AND DESIGN A REPLACEMENT
P3-S.14 §I already recommended B-now + A/C-future for the FEATURE audience.
At the ARCHITECTURE level (this session) the deciding questions are:
(1) Can the legacy pipeline be "aligned" to the canonical runtime?
NO — one is bar-level (L1 drift), the other setup-level (L3 outcome).
Aligning the ONE-LINE pipeline (Option B) would change unit + label + MTF,
i.e. it would no longer be the legacy pipeline at all. So B is a label,
not a faithful "alignment" of the probe.
(2) Can the legacy model be retired NOW (Option C)?
It CAN be classified LEGACY/REFERENCE and preserved. "Retirement" as a
resolution is not required; preservation + reclassification is the honest
outcome. There is no architectural need to delete it.
(3) Is the current model a valid REFERENCE?
YES — as a historical baseline of the old generation (frozen, reproducible).
(4) What must the future build?
A NEW setup-level model (unit = Candidate Setup, target = setup outcome).
FINAL CLASSIFICATION : A.
KEEP the legacy static MLP as a frozen LEGACY / REFERENCE benchmark, AND
design/build the FUTURE SETUP-LEVEL ML (separately authorized, P3-S.16 and
beyond). The current model is NOT represented as the canonical Candidate
Setup model.
STOP-CONDITION CHECK (§26): None triggered.
- Candidate Setup CAN serve as a deterministic training unit (identity, F3).
- Future outcome CAN be defined causally (setup-outcome, §7).
- Legacy model CAN be preserved as a valid reference (§4).
- Future ML does NOT require changing frozen runtime semantics (it targets
the SAME canonical setup; it does not alter it).
- Selection is NOT based on AUC/PF (architecture/semantics only).
```
---
## 13. NET RECOMMENDATION
```text
CURRENT MODEL : SniperGold_ML.mqh v20260821_2head = LEGACY / REFERENCE
(bar-level directional MLP; frozen; NOT the canonical model).
FUTURE ML : Candidate-Setup-native. Observation unit = ONE Candidate
Setup; target = setup-outcome (TP-before-SL + censoring);
features aligned to H4/M30/M15/M3 canonical setup entity;
temporal model = setup-lifecycle sequence ONLY if warranted;
regime = label-conditioning variable consistent with gates.
NEXT GATE : P3-S.16 = Setup-Level Dataset / Label Contract
IMPLEMENTATION (docs+dataset contract proposal, per §7/§8,
preserving FEATURE_CONTRACT.md). No retrain in P3-S.15.
```
---
## 14. EXPLICITLY UNCHANGED AREAS (§18, §23)
```text
Candidate Setup : FROZEN (AF_Engine2_Setup.mqh, AFCandidateSetup) — NOT redesigned.
F1 (events) : unchanged.
F2 (zones) : unchanged.
ML model : SniperGold_ML.mqh — unchanged (weights/architecture/calib/header).
FEATURE_CONTRACT : docs/FEATURE_CONTRACT.md — NOT modified this session.
train_model.py / build_features.py / build_features_p2.py : NOT modified.
.model weights : NOT retrained / NOT re-exported.
production MQL5 : NOT changed. No .mq5/.mqh edit.
runtime semantics : NOT changed.
No AUC/PF/backtest/optimization used in this session.
```
*End of P3-S.15 ML path / training architecture decision. Documentation only.*