| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .. | ||
| output | ||
| .gitignore | ||
| ingest_fast.py | ||
| README.md | ||
| s25_attribution.py | ||
| s25_classify.py | ||
| s25_common.py | ||
| s25_config.py | ||
| s25_ingest.py | ||
| s25_mutation.py | ||
| s25_oracle.py | ||
| s25_parity.py | ||
| s25_quality.py | ||
| s25_reconcile.py | ||
| s25_replay.py | ||
| s25_repro.py | ||
| s25_run_main.py | ||
P3-S25 — EXTERNAL DATA BASIS VALIDATION & INDEPENDENT POPULATION RECONCILIATION
Session : P3-S25 — EXTERNAL DATA BASIS VALIDATION
Status : RESEARCH-ONLY DATA VALIDATION (no ML, no tuning, no calibration)
Policy : docs/CODE_VERIFICATION_AND_SILENT_BUG_POLICY_v1.md
Purpose : Determine whether the corrected SniperGold research population and
UTC-clock M30 construction remain valid when independently checked
against prepared external historical data.
Next : P3-S26 = NOT STARTED (requires explicit owner authorization)
Mission (abridged)
Answer whether the current absence of a demonstrated predictive edge is genuine, or whether residual historical-data/basis differences could still explain part of the result. Do NOT recover a positive ML result; do NOT optimize AUC; do NOT modify the model. Eliminate or quantify remaining data-basis uncertainty.
External data candidates (authoritative locations)
| Source | Path | Nature |
|---|---|---|
| Tickstory → MT5 tick CSV | MQL5\Files\XAUUSD_mt5_ticks.csv |
plain-text tick CSV, NO header, ~34.5 GB, 722,941,870 rows, 2003-05-05 → 2026-08-20 |
| Dukascopy via Tickstory | MQL5\Files\XAUUSD\ |
YYYY/Mon/day/NNh_ticks.bi5 compressed container (zstd/lz4), 204,152 files (~3.2 GB) |
Each source is treated independently (never merged).
Phases implemented
0 Mandatory preflight (documented in docs/P3_S25_EXTERNAL_DATA_BASIS_VALIDATION.md)
1 External data inventory -> s25_inventory.py
2 Data-quality gate -> s25_quality.py
3 Tick -> M15 independent oracle -> s25_oracle.py (ticks->M15 UTC buckets)
4 M15 -> M30 independent oracle -> s25_oracle.py (M15->M30 UTC buckets; 2 impls 100% agree)
5 Compare with corrected basis -> s25_parity.py
6 Data-basis classification -> s25_classify.py
7 Candidate Setup population replay (research basis) -> s25_replay.py (PART A)
8 External population replay -> s25_replay.py (PART B)
9 Identity-level reconciliation -> s25_reconcile.py
10 Difference attribution -> s25_attribution.py
11 Information-value test -> s25_classify.py (Question set + hierarchy)
12 Silent-bug / mutation testing -> s25_mutation.py
13 Reproducibility (run twice) -> s25_repro.py
Hard authorization boundary
Authorized: inventory, DQ validation, independent UTC M15/M30 construction, broker vs external comparison, corrected population replay, identity reconciliation, machine-readable evidence, mutation testing, documentation. NOT authorized: ML retraining/tuning, calibration, feature engineering/removal, label/TP/SL/horizon changes, nonlinear models, deployment, trading, production MQL5 changes.
Deliverables
docs/P3_S25_EXTERNAL_DATA_BASIS_VALIDATION.mddocs/P3_S25_EXTERNAL_DATA_POPULATION_RECONCILIATION.mddocs/P3_S25_EXTERNAL_DATA_DECISION.mddocs/SESSION_HANDOVER_2026-08-26_P3_S25_EXTERNAL_DATA_BASIS_VALIDATION.md- this namespace (
ml/p3/p3_s25_external_data_validation/)
Determinism & reproducibility
Every script is deterministic; evidence is machine-readable (JSON/CSV) with a
SHA-256 manifest generated by s25_manifest.py. The runner
(s25_run_main.py) can be executed twice; substantive outputs are
byte-identical except generated-UCT timestamps and explicit environment
metadata.
Hard stop
Commit only research artifacts, push to origin/main, verify clean tree, and
record the final SHA. P3-S26 = NOT STARTED.