2026-08-21 21:00:06 +07:00
|
|
|
# P2.2 — EQH/EQL SEMANTIC ADJUDICATION
|
|
|
|
|
|
2026-08-22 17:21:46 +07:00
|
|
|
Status: **SEMANTICS RESOLVED — parity 0/0 mismatch (14850 rows)**
|
|
|
|
|
Date: 2026-08-21
|
|
|
|
|
Decision: **legacy runtime/v4.4 semantics = production source of truth (provisional)**
|
2026-08-21 21:00:06 +07:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2026-08-22 17:21:46 +07:00
|
|
|
## 1. Semantic differences (Python training vs EA/v4.4)
|
2026-08-21 21:00:06 +07:00
|
|
|
|
2026-08-22 17:21:46 +07:00
|
|
|
| Aspect | Python training (build_features) | EA/v4.4 (DetectEQ) |
|
2026-08-21 21:00:06 +07:00
|
|
|
|---|---|---|
|
2026-08-22 17:21:46 +07:00
|
|
|
| Pair selection | consecutive same-type pivots (skipping opposite types) | CONSECUTIVE pivots in the g_sp list (must be same type) |
|
|
|
|
|
| ATR basis | `EQ_TOL_ATR * A[p]` (ATR at the pivot bar) | `EQ_TOL_ATR * g_atr` (CURRENT ATR, row bar) |
|
|
|
|
|
| Pair window | full history | 700-bar cache, pivots valid [r-649, r-50] |
|
|
|
|
|
| Sweep | bar > p2 with high/low breaking the 2nd pivot price | same (bars p2+1..total) |
|
2026-08-21 21:00:06 +07:00
|
|
|
|
|
|
|
|
v4.4 `DetectEQ` (Indicators\Downloads\SniperGold_SMC_ProPlus_v4_4.mq5:671)
|
2026-08-22 17:21:46 +07:00
|
|
|
is IDENTICAL to the EA `DetectEQ` (AlgoForge_Backtest_Baseline.mq5:310) —
|
|
|
|
|
the EA copies v4.4 faithfully.
|
2026-08-21 21:00:06 +07:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2026-08-22 17:21:46 +07:00
|
|
|
## 2. Reconstruction & quantitative evidence
|
2026-08-21 21:00:06 +07:00
|
|
|
|
2026-08-22 17:21:46 +07:00
|
|
|
`ml/parity/recon_eq.py` — DetectEQ reconstruction in Python over the full-history
|
|
|
|
|
pivot list + EA window filter:
|
2026-08-21 21:00:06 +07:00
|
|
|
|
|
|
|
|
```text
|
2026-08-22 17:21:46 +07:00
|
|
|
PY-training f10 = 0.9846 f11 = 1.0000 (reproduces parity report SB-06)
|
|
|
|
|
RECON-A (EA pairs, ATR@pivot) = 0.9846 / 1.0000 (pair selection NOT dominant)
|
|
|
|
|
RECON-B (EA pairs, ATR@row) = 0.0523 / 0.0000 (ATR basis = dominant factor)
|
|
|
|
|
RECON-C (window + ATR@row) = 0.0000 / 0.0000 (window closes the f10 remainder)
|
2026-08-21 21:00:06 +07:00
|
|
|
```
|
|
|
|
|
|
2026-08-22 17:21:46 +07:00
|
|
|
Dominant factor = **ATR basis** (row ATR vs pivot ATR). Secondary factor =
|
|
|
|
|
**pair list window** (700-bar cache, absolute pivots [r-649, r-50] because
|
|
|
|
|
`begin=max(100, total-600)`, `len=50`, `p_rel in [50,649]`).
|
2026-08-21 21:00:06 +07:00
|
|
|
|
2026-08-22 17:21:46 +07:00
|
|
|
Note: RECON-A == PY-training (0.9846/1.0000) shows the pair-selection difference
|
|
|
|
|
does NOT change the output flag on this data — the real driver is ATR.
|
2026-08-21 21:00:06 +07:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2026-08-22 17:21:46 +07:00
|
|
|
## 3. Decision
|
2026-08-21 21:00:06 +07:00
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
Chosen semantics : legacy runtime/v4.4
|
2026-08-22 17:21:46 +07:00
|
|
|
- consecutive pivots in the list (g_sp[i-1], g_sp[i]), both same type
|
|
|
|
|
- bar distance >= EQ_BARS (3)
|
|
|
|
|
- tol = EQ_TOL_ATR (0.10) x CURRENT row-bar ATR
|
|
|
|
|
- sweep: exists bar (p2, r] with high > p2.price (EQH) / low < p2.price (EQL)
|
|
|
|
|
- pair list bounded by the EA analysis window (700-bar cache, pivots [r-649, r-50])
|
2026-08-21 21:00:06 +07:00
|
|
|
|
2026-08-22 17:21:46 +07:00
|
|
|
Reason : runtime reproduction 0/0 mismatch on 14850 rows; P2 policy:
|
2026-08-21 21:00:06 +07:00
|
|
|
legacy runtime/v4.4 = provisional production source of truth.
|
2026-08-22 17:21:46 +07:00
|
|
|
No EQH/EQL redesign in this session (recorded as a future research
|
|
|
|
|
experiment: non-monotonic flag because row ATR fluctuates).
|
2026-08-21 21:00:06 +07:00
|
|
|
|
2026-08-22 17:21:46 +07:00
|
|
|
Legacy status : v4.4 semantics (EA copies v4.4 faithfully) = TRUSTED
|
|
|
|
|
Parity : f10 0/14850, f11 0/14850 (Python reconstruction)
|
2026-08-21 21:00:06 +07:00
|
|
|
```
|
|
|
|
|
|
2026-08-22 17:21:46 +07:00
|
|
|
## 4. Training implications
|
2026-08-21 21:00:06 +07:00
|
|
|
|
2026-08-22 17:21:46 +07:00
|
|
|
`build_features` must be changed (in the P2.5 implementation):
|
|
|
|
|
- consecutive-list pairs, not same-type-skip;
|
|
|
|
|
- tol = EQ_TOL_ATR * A[i] (current bar ATR), not A[p];
|
|
|
|
|
- pivot list bounded by the same window as runtime (700-bar cache semantics).
|