2026-08-21 21:00:06 +07:00 | | | # P2 SOURCE-OF-TRUTH REPORT — SNIPERGOLD_ML
|
| | |
|
2026-08-22 17:21:46 +07:00 | | | Date: 2026-08-21
|
| | | Session: P2 SOURCE-OF-TRUTH ADJUDICATION
|
| | | Forge HEAD (end): 0bdd58afc9bc16f693cdefa4af711edaea37d713 (unchanged — no commit without review)
|
| | | Status: **P2 = COMPLETE** (all 6 success criteria met; corrected baseline P2.6 not yet run)
|
2026-08-21 21:00:06 +07:00 | | |
|
| | | ---
|
| | |
|
| | | ## A. HTF Bias (P2.1)
|
| | |
|
| | | ```text
|
2026-08-22 17:21:46 +07:00 | | | Root cause : EA BTTFBias uses GetBar(count-1-i) -> window = the 200 OLDEST bars
|
| | | of the 250-bar cache (bars[249..50]), not the 200 newest.
|
| | | Effect: HTF bias lagged by 50 bars (D1 50 days, H4 ~8.3 days, H1 ~2.1 days).
|
| | | Not an input-state mismatch (cache == npz, 250/250 bars identical);
|
| | | not legacy (v4.4 uses CopyHigh(0,200) = 200 newest).
|
| | | Source of truth : CORRECTED SEMANTICS (classification B = EA bug)
|
| | | Runtime : BTTFBias fixed -> GetBar(need-1-i) = 200 newest bars
|
| | | ending at E_ea (last closed HTF bar at tc=t+900)
|
2026-08-21 21:00:06 +07:00 | | | Training : tf_bias_asof(E_ea), E_ea = searchsorted(ht, tc-period, 'right')-1
|
2026-08-22 17:21:46 +07:00 | | | Parity : fixed EA vs training = f0 1/14850, f1 1/14850, f2 0/14850
|
| | | (2 exceptions = cache staleness at daily-break boundary, 22:45 rows)
|
2026-08-21 21:00:06 +07:00 | | | ```
|
| | |
|
| | | ## B. EQH/EQL (P2.2)
|
| | |
|
| | | ```text
|
| | | Chosen semantics : legacy runtime/v4.4 (provisional production source of truth)
|
2026-08-22 17:21:46 +07:00 | | | - CONSECUTIVE pivot pairs in the swing list (g_sp[i-1], g_sp[i]), same type
|
| | | - tol = EQ_TOL_ATR (0.10) x CURRENT row-bar ATR (not pivot ATR)
|
| | | - pairs in window [t-649, t-50]; swept when high/low breaks the 2nd pivot price
|
| | | Reason : runtime reproduction 0/0 mismatch (14850 rows); v4.4 == EA (faithful);
|
| | | no redesign this session (recorded: non-monotonic flag due to row ATR)
|
2026-08-21 21:00:06 +07:00 | | | Legacy status : v4.4 semantics = TRUSTED
|
2026-08-22 17:21:46 +07:00 | | | Parity : f10 0/14850, f11 0/14850 (Python reconstruction)
|
2026-08-21 21:00:06 +07:00 | | | ```
|
| | |
|
| | | ## C. Context Window (P2.3)
|
| | |
|
| | | ```text
|
2026-08-22 17:21:46 +07:00 | | | Minimum required : 700-bar M15 cache (600 analyzed + 100 warmup) for full parity;
|
| | | HTF cache 250 (200 used). A LOOKBACK of 600 ALONE is technically
|
| | | insufficient (rel pivots [50,99] = absolute [t-649,t-600] also
|
| | | determine sw_high/sw_low & EQH/EQL pairs; pivot confirmation needs bars 0..99).
|
2026-08-21 21:00:06 +07:00 | | | Production window: cache 700 / HTF 250 (runtime deployment window = SOURCE OF TRUTH)
|
2026-08-22 17:21:46 +07:00 | | | Training window : 700 slice ending at the row bar, begin=100; HTF 200 newest ending at E_ea
|
2026-08-21 21:00:06 +07:00 | | | Parity : f6/f14/f15/f17 = 0/14850 (windowed sw_high/sw_low [t-649,t-50])
|
| | | ```
|
| | |
|
| | | ## D. FEATURE_CONTRACT
|
| | |
|
| | | ```text
|
2026-08-22 17:21:46 +07:00 | | | Status : COMPLETE (v1.0, 19 features x 14 fields, one definition)
|
2026-08-21 21:00:06 +07:00 | | | Hash : C44CC6F2B740C32D06F776BD7C3E669DC5A8A6DE0484230544EBFFCF517D38DD
|
| | | File : docs/FEATURE_CONTRACT.md (publish mirror, uncommitted)
|
2026-08-22 17:21:46 +07:00 | | | Content : temporal anchor tc=t+900; closed-bar rule; M15 window 700/begin=100;
|
| | | HTF E_ea; EQH/EQL ATR@row; per-feature formula; missing-data; parity eps.
|
2026-08-21 21:00:06 +07:00 | | | ```
|
| | |
|
| | | ## E. Full Feature Parity (P2.5)
|
| | |
|
| | | ```text
|
| | | Timestamp match : 14850/14850 (missing 0); feed close max|d|=0.000000
|
2026-08-22 17:21:46 +07:00 | | | Feature mismatch : 14/14850 exception rows (0.09%), 17 features exact:
|
2026-08-21 21:00:06 +07:00 | | | f0=1 (22:45 D1 break), f1=1 (22:45 H4 break),
|
2026-08-22 17:21:46 +07:00 | | | f13=11 (tester tick-level data vs broker, 07-02), f18=1 (derived f0)
|
| | | Prediction mismatch: 2/14850 (LONG & SHORT, tol 6e-5 = mode-0 CSV rounding);
|
| | | max|dp| LONG 6.1e-2 / SHORT 1.1e-1 only on the 2 feature-exception rows;
|
| | | mean|dp| ~1e-5 (rounding); Python model == MQL5 for identical features
|
| | | Evidence : docs/P2_5_PARITY.md; ml/parity/parity_p2.py, parity_prediction.py
|
2026-08-21 21:00:06 +07:00 | | | ```
|
| | |
|
| | | ## F. Corrected Baseline
|
| | |
|
| | | ```text
|
2026-08-22 17:21:46 +07:00 | | | Status: NOT YET RUN (P2.6 handover)
|
| | | Reason: retraining requires integrating build_features_p2 into train_model.py + full
|
| | | training + calibration + evaluation + hash capture — a separate work package
|
| | | that must not be rushed at session close.
|
| | | Procedure (when run):
|
| | | - integrate the corrected build_features into the training pipeline (single source of definition)
|
2026-08-21 21:00:06 +07:00 | | | - same architecture (MLP 19->12->2), seed 42, label 24x0.75ATR, purge H_LABEL
|
2026-08-22 17:21:46 +07:00 | | | - record: AUC_LONG/SHORT, VAL/TEST, calibration, dataset/feature/model/config hash, git SHA
|
| | | - status name: POST-P2 PARITY-CORRECTED BASELINE (not yet deployment evidence)
|
2026-08-21 21:00:06 +07:00 | | | ```
|
| | |
|
| | | ## G. Evidence Classification
|
| | |
|
| | | ```text
|
2026-08-22 17:21:46 +07:00 | | | TRUSTED : P2.1 root cause (50-bar lag, reproduction 14849/14850)
|
| | | P2.2 EQH/EQL semantics (reproduction 0/0)
|
| | | P2.3 700-bar window (reproduction 0/0)
|
| | | P2.5 parity (17 features exact; exceptions documented)
|
| | | prediction parity (Python model == MQL5)
|
2026-08-21 21:00:06 +07:00 | | | corrected runtime dump (AlgoForge_bt_features_fixed_... 5F8AB5CB...)
|
2026-08-22 17:21:46 +07:00 | | | INCONCLUSIVE: P1 baseline 0.6582/0.6582 (still TRUSTED for the old feed, but the
|
| | | feed has moved to corrected semantics -> P2.6 rerun needed)
|
| | | SUPERSEDED : old baseline 0.6270/0.6207; runtime cross-feed 0.5305/0.5487
|
| | | (contaminated by the now-measured and fixed parity gap)
|
| | | INVALID : no new verdict behind without evidence
|
2026-08-21 21:00:06 +07:00 | | | ```
|
| | |
|
| | | ## H. Remaining Risks
|
| | |
|
| | | ```text
|
2026-08-22 17:21:46 +07:00 | | | 1. 14 parity exception rows (0.09%) — runtime cache-staleness at break boundaries &
|
| | | tester tick-level data; reproducible, tolerance documented.
|
| | | 2. Model freeze (SniperGold_ML.mqh) trained on OLD semantics — MUST NOT be used for
|
| | | claims on the corrected feed until the P2.6 baseline.
|
| | | 3. Local EA modified (BTTFBias fix + debug mode 3) — NOT yet committed/reviewed.
|
| | | 4. build_features_p2 not yet integrated into train_model.py (still a parity module).
|
| | | 5. Non-monotonic EQH/EQL features (row ATR) — recorded as a future experiment.
|
| | | 6. Cache staleness (Refresh-on-Bars-change) is an Engine 1 characteristic — documented,
|
| | | not changed in this session.
|
2026-08-21 21:00:06 +07:00 | | | ```
|
| | |
|
| | | ## I. Recommendation
|
| | |
|
| | | ```text
|
2026-08-22 17:21:46 +07:00 | | | 1. Proceed to P2.6 (corrected baseline) with procedure F above — retrain MLP
|
| | | 19->12->2 on the corrected feed, seed 42, purge H_LABEL.
|
| | | 2. Review & commit the P2 artifacts (docs + build_features_p2 + EA fix + parity dump)
|
| | | through an explicit review process (not auto-commit).
|
| | | 3. After the P2.6 baseline, re-evaluate the runtime cross-feed AUC on the corrected feed.
|
| | | 4. Only then does SMC -> MTF -> Regime -> Temporal ML -> Meta-Label research have a
|
| | | valid experimental foundation.
|
2026-08-21 21:00:06 +07:00 | | | ```
|
| | |
|
| | | ---
|
| | |
|
2026-08-22 17:21:46 +07:00 | | | ## Appendix — session artifacts (uncommitted, awaiting review)
|
2026-08-21 21:00:06 +07:00 | | |
|
| | | ```text
|
| | | docs/FEATURE_CONTRACT.md, P2_1_HTF_FORENSIC.md, P2_2_EQH_EQL_FORENSIC.md,
|
| | | P2_3_CONTEXT_WINDOW.md, P2_5_PARITY.md (publish mirror)
|
| | | ml/parity/htf_forensic.py, compare_htf_dump.py, verify_bttf_dump.py,
|
| | | verify_bttf_rootcause.py, probe_h4_window.py, check_h1_gap.py,
|
| | | recon_eq.py, verify_window.py, verify_structure_window.py, verify_pivot_eq.py,
|
| | | diag_*.py, build_features_p2.py, parity_p2.py, parity_prediction.py,
|
| | | AlgoForge_bt_features_fixed_XAUUSD_M15.csv, AlgoForge_bt_prob_fixed_XAUUSD_M15.csv
|
2026-08-22 17:21:46 +07:00 | | | Experts/AlgoForge_Backtest_Baseline.mq5 (BTTFBias fix + debug mode 3) (local)
|
| | | Experts/AlgoForge_BTTF_Isolate.mq5 (verbatim isolate) (local)
|
2026-08-21 21:00:06 +07:00 | | | Profiles/Tester/AlgoForge_HTFDebug*.ini, AlgoForge_BTTF_Isolate*.ini,
|
2026-08-22 17:21:46 +07:00 | | | AlgoForge_Parity_Fixed*.ini, AlgoForge_Prob_Fixed*.ini (local)
|
2026-08-21 21:00:06 +07:00 | | | ```
|