SniperGold_ML/docs/P3_S6_DISPLACEMENT_CONFORMANCE.md

14 KiB

P3-S.6 DISPLACEMENT FORMAL SPECIFICATION & CODE-CONFORMANCE REPORT

Date       : 2026-08-22
Session    : P3-S.6 — Formal SMC Specification + Code-Conformance Audit (Displacement)
Scope      : Displacement — Engine 2 Entry agent (AF_DetectDisplacement),
             and its relationships with Order Block "strong move" (AF_E3_MOVE_BODY),
             FVG, CHoCH/MSS, and the E-agent confirmation chain.
Principle  : SPECIFICATION FIRST, CODE AUDIT SECOND
Status     : NO CODE CHANGES (Phase D) — all findings DOCUMENTED
Artifacts  : docs/SMC_DISPLACEMENT_SPEC_v1.md (specification)
             ml/p3/smc_semantic/spec_tests_displacement.py (+ .json) (tests)
             ml/p3/smc_semantic/output/spec_tests_displacement_report.json

0. CHECKPOINT & PROVENANCE (session-start verification)

Forge HEAD          : 07883f6abf116b656e2cb8adfb41ec47e1fce498 (P3-S.5)  VERIFIED
Branch / remote     : main == origin/main (07883f6)                      VERIFIED
Working tree        : CLEAN at start                                     VERIFIED
P3-S.5 artifacts    : spec/conformance/tests/report/handover INTACT        VERIFIED
HUMAN VERIFICATION  : CANCELLED                                          VERIFIED

A. SOURCE MATERIAL (Phase A — inventory & reconciliation)

# Source Location Role
1 Engine 2 displacement Include\AlgoForge\AF_Engine2_Agents.mqh:281-291 (AF_DetectDisplacement) body >= 1.6 x avg body on newest closed bar; direction Close vs Open; no structure
2 AF_AvgBody AF_Engine2_Agents.mqh:120-127 mean
3 Engine 2 E agent AF_Engine2_Agents.mqh:583-663 disp = AF_DetectDisplacement(20); mDisp; wDisp 0.20 (x1.3); ZONE + CONFIRMATION
4 OB "strong move" AF_Engine2_Agents.mqh:304-305; AF_Engine2_Display.mqh:212; AF_Defines.mqh:60
5 DESIGN.md docs/DESIGN.md:132-133 C "opposite bar before a strong move"; E "Sweep, CHoCH, displacement, OB/FVG zones; ZONE + CONFIRMATION = setup; strong displacement -> confirmation weight up"
6 FEATURE_CONTRACT docs/FEATURE_CONTRACT.md NO displacement feature (0 refs)
7 EA runtime Experts\AlgoForge_Backtest_Baseline.mq5 NO displacement (0 refs)
8 Python training ml/**/*.py NO displacement (0 refs)
9 Legacy v4.3/v4.4/v4.5 Indicators\Downloads\SniperGold_SMC_ProPlus_v4_3/4_4/4_5.mq5 NO displacement concept (0 refs)
10 P3-S.4/S.5/S.3 specs docs/SMC_FVG/ORDER_BLOCK/CHOCH_MSS_SPEC_v1.md displacement declared NOT REQUIRED for FVG/OB/CHoCH
11 External XAUUSD_MTF_Liquidity_OB_Reversal (2).mq5 external reference only, NOT wired

Layer separation:

Intended semantics   : displacement = entry confirmation input (E agent);
                       "strong displacement -> confirmation weight up" (DESIGN).
Legacy semantics     : NONE — v4.3/v4.4/v4.5 have no displacement concept.
Current semantics    : body >= 1.6 x avg body (newest closed bar), direction by
                       Close vs Open, no structure, per-bar attribute.
Training semantics   : N/A — not a training feature.
Display-only         : NONE — displacement is not rendered.

B. PROJECT SEMANTIC SPECIFICATION (Phase B)

Full document: docs/SMC_DISPLACEMENT_SPEC_v1.md (PROJECT SEMANTIC SPECIFICATION — not "universal SMC ground truth").

Spec decision summary:

S-1  Definition      : body >= 1.6 x avg body on the NEWEST CLOSED bar; direction
                       by Close vs Open; pure candle attribute.
S-2  Measurement     : |Close-Open| vs average body; range/wicks/ATR/ratio NOT used.
S-3  Baseline        : mean over newest min(20, t+1) bars; candidate included.
S-4  Direction       : +1 Close>Open, -1 Close<Open, 0 otherwise; symmetric.
S-5  Structural req. : NONE.
S-6  FVG relationship: NOT REQUIRED (independent).
S-7  OB relationship : "strong move" (1.5 x) = same family, lower constant (proxy).
S-8  CHoCH rel.      : NOT REQUIRED by CHoCH; independent.
S-9  Event vs State  : CANDLE ATTRIBUTE (per-bar); no persistence; no stale state.
S-10 Threshold       : >= 1.6 x avg (inclusive).
S-11 Symmetry        : symmetric.
S-12 Timeframe       : per-TF independent; canonical = SPECIFICATION AMBIGUOUS.
S-13 Consumers       : E agent confirmation (w 0.20, x1.3); per-bar.
S-14 Parity          : PARITY = N/A BY ABSENCE.

C. FORMAL DEFINITION (Phase B — extract)

avg_body(t) = (1 / min(20, t+1)) * SUM_{i=t-min(20,t+1)+1 .. t} |Close(i) - Open(i)|

Displacement(t) = +1  if |Close(t)-Open(t)| >= 1.6 * avg_body(t) AND Close(t) > Open(t)
                  -1  if |Close(t)-Open(t)| >= 1.6 * avg_body(t) AND Close(t) < Open(t)
                   0  otherwise.

Only the NEWEST closed bar (t) is evaluated. Pure candle attribute, no state.

D. CURRENT CODE BEHAVIOR (Phase C — code audit)

// AF_DetectDisplacement (AF_Engine2_Agents.mqh:281-291)
int AF_DetectDisplacement(const AFEngine1MTF &e1,int slot,int avgN)
{
   if(!e1.IsReady(slot)) return 0;
   double avg=AF_AvgBody(e1,slot,avgN);          // mean |Close-Open| last min(avgN,count)
   if(avg<=0.0) return 0;
   double body=MathAbs(e1.Close(slot,0)-e1.Open(slot,0));   // NEWEST CLOSED bar
   if(body<1.6*avg) return 0;                    // strict < -> inclusive >= at equality
   return (e1.Close(slot,0)>e1.Open(slot,0))? 1 : -1;
}
// E agent consumption (AF_Engine2_Agents.mqh:606, 627-640, 659-660)
int disp = AF_DetectDisplacement(e1,slot,AF_E2_LOOKBACK_AVG);   // avgN=20
if(MathAbs(disp)>0) wDisp*=1.3;   // "strong displacement -> confirmation weight up"
mDispBull=(disp>0)?1.0:0.0;  mDispBear=(disp<0)?1.0:0.0;

Observations:

  • Formula matches S-1/S-2/S-3 exactly (avg includes the candidate bar; window min(20,count); no min-bars guard — a short window still applies the rule).
  • No structural check anywhere (S-5 CONFORMING).
  • Per-bar, no state (S-9 CONFORMING — the E agent reads a fresh value each bar).
  • Direction by Close vs Open (S-4 CONFORMING).
  • Threshold 1.6 hardcoded (S-10 CONFORMING); boundary inclusive (>=).

E. CONFORMANCE MATRIX (Phase C)

# Requirement Specification Code (Function/Line) Actual Behavior Verdict
E-1 Definition body >= 1.6 x avg body, newest closed bar (S-1) AF_DetectDisplacement:287-288 exact match CONFORMING
E-2 Candle measurement Close-Open vs avg body; range/wicks unused (S-2) AF_DetectDisplacement:287
E-3 Baseline/lookback mean over newest min(20,t+1), candidate included (S-3) AF_AvgBody:120-127; call avgN=20 match CONFORMING
E-4 Direction +1 Close>Open / -1 Close<Open (S-4) AF_DetectDisplacement:289 match CONFORMING
E-5 Threshold >= 1.6 x avg (inclusive) (S-10) AF_DetectDisplacement:288 (strict < returns 0) inclusive at equality CONFORMING
E-6 Structural req. NONE (S-5) no structure check in the function match CONFORMING
E-7 FVG relationship NOT REQUIRED (S-6) FVG detector independent (P3-S.4) no dependency either way CONFORMING
E-8 OB relationship strong move = same family, lower constant (S-7) AF_E3_MOVE_BODY=1.5 (OB) vs 1.6 (disp) 1.5 vs 1.6 constants; undocumented split PARTIALLY CONFORMING (BUG-P3S6-001)
E-9 CHoCH relationship NOT REQUIRED (S-8) CHoCH close-confirmed, no displacement (P3-S.3) independent CONFORMING
E-10 Timing newest closed bar; close-observable (S-9/S-10) index 0 under Engine-1 closed-bar lock no 1-bar lag; no look-ahead CONFORMING
E-11 Closed-bar / no future all inputs <= t (S-3) closed-bar lock; DP-T19 no future visibility CONFORMING
E-12 Lifecycle candle attribute, no persistence (S-9) per-bar recompute; no state variable no stale state (DP-T18) CONFORMING
E-13 Timeframe per-TF independent; canonical AMBIGUOUS (S-12) per-slot AF_DetectDisplacement per-TF; cross-TF role undefined SPECIFICATION AMBIGUOUS (A-1)
E-14 Consumer behavior E agent per-bar confirmation (S-13) AF_Engine2_Agents:606,627-640 fresh value each bar; no stale consumer CONFORMING
E-15 Runtime/training parity PARITY = N/A (S-14) FEATURE_CONTRACT/EA/Python/v4.x: 0 refs absent everywhere except Engine 2 CONFORMING (N/A by absence)

F. CONFIRMED BUGS (Phase D — DOCUMENT ONLY, no code changes)

BUG-P3S6-001
  SEVERITY     : LOW (cross-concept consistency)
  SOURCE       : AF_E3_MOVE_BODY=1.5 (AF_Defines.mqh:60, OB strong move) vs the
                 hardcoded 1.6 in AF_DetectDisplacement (AF_Engine2_Agents.mqh:288)
  SPEC REQ     : S-7/A-2 — the "strong move" family must have ONE documented rule
  ACTUAL CODE  : OB "strong move" = body >= 1.5 x avg; Displacement = body >= 1.6 x
                 avg; same measurement, same family, different constants; a body
                 in [1.5, 1.6) x avg is "strong" for OB but NOT displacement
  IMPACT       : a candle can satisfy the OB formation gate while the E-agent
                 reports no displacement (and vice versa is impossible);
                 DESIGN.md uses "strong move" and "displacement" loosely; the
                 threshold split is undocumented
  PROPOSED FIX : unify the constant or document the intentional split (no repair
                 this session; consolidated repairs deferred until the audit
                 chain completes)

No consumer/stale-state bug exists for displacement (E-12/E-14 CONFORMING): the f7/CHoCH/FVG/OB consumer bug class does NOT apply — displacement is a per-bar candle attribute with no state to go stale (verified DP-T18).


G. SEMANTIC AMBIGUITIES

G-1  Canonical displacement timeframe (A-1): per-slot computation explicit;
     cross-TF influence rule not defined. Same class as CHoCH G-4 / sweep G-3 /
     FVG A-3 / OB A-4.
G-2  "Strong move" vs "Displacement" terminology (A-2 / BUG-P3S6-001):
     1.5 vs 1.6 constants for one concept family; not adjudicated.

H. CROSS-CONCEPT CONSISTENCY (Phase C — diagnostic, per brief §27)

Concept Requires Displacement? Produces Displacement? Uses "strong move"?
FVG (P3-S.4) No (geometric gap, S-5) No (may correlate) No
OB (P3-S.5) No (own strong-move gate 1.5 x) No Yes (1.5 x avg body)
CHoCH/MSS (P3-S.3) No (close-confirmed break, S-6) No No
Displacement (P3-S.6) = the concept (1.6 x avg body)
CROSS-CONCEPT INCONSISTENCY (documented, NOT modified this session):
  OB uses "strong move" = 1.5 x avg body (AF_E3_MOVE_BODY);
  Displacement uses 1.6 x avg body (AF_DetectDisplacement).
  Same concept family, different constants -> BUG-P3S6-001.
  No prior specification is changed; the inconsistency is recorded for the
  consolidated repair phase.

I. RUNTIME/TRAINING PARITY (Phase C — diagnostic, not a retrain)

Displacement is not in FEATURE_CONTRACT (f0-f18), the EA runtime, or Python
training (verified: 0 references each; legacy v4.x also has none).
-> PARITY = N/A BY ABSENCE (S-14). No mismatch exists; absence is documented.

J. VERDICT

CONFORMING

  Definition (E-1)                 : CONFORMING
  Measurement (E-2)                : CONFORMING
  Baseline/lookback (E-3)          : CONFORMING
  Threshold (E-5)                  : CONFORMING
  Timing (E-10, E-11)              : CONFORMING
  Lifecycle (E-12)                 : CONFORMING (candle attribute, no stale state)
  Structure relationship (E-6)     : CONFORMING (none required)
  FVG relationship (E-7)           : CONFORMING (independent)
  OB relationship (E-8)            : PARTIALLY CONFORMING (BUG-P3S6-001)
  CHoCH relationship (E-9)         : CONFORMING (independent)
  Consumer behavior (E-14)         : CONFORMING (per-bar, no stale consumer)
  Timeframe (E-13)                 : SPECIFICATION AMBIGUOUS (A-1)
  Runtime/training parity (E-15)   : CONFORMING (N/A by absence)

The displacement primitive itself is CONFORMING: AF_DetectDisplacement matches
the project specification exactly (body >= 1.6 x avg body, newest closed bar,
direction by Close/Open, no structure, per-bar attribute, no look-ahead). The
only finding is a cross-concept threshold inconsistency (OB "strong move" 1.5 vs
displacement 1.6) and the usual canonical-timeframe ambiguity. The f7/CHoCH/FVG/
OB stale-consumer bug class does NOT apply to displacement.

Verdict = conformance to the PROJECT SEMANTIC SPECIFICATION, NOT profitability/edge.

K. NEXT GATE

After the Displacement verdict (CONFORMING):
  MTF Alignment -> Candidate Setup.
DO NOT return to ML; DO NOT create new event labels; DO NOT perform consolidated
repairs yet (BUG-P3S6-001 and the P3-S.2..P3-S.5 documented findings stay open
until the semantic audit chain completes).

L. CHECKPOINT & PROVENANCE (P3-S.6)

Forge HEAD (session start)   : 07883f6 (P3-S.5) — VERIFIED
P3-S.5 spec (immutable)      : docs/SMC_ORDER_BLOCK_SPEC_v1.md
P3-S.4 spec (immutable)      : docs/SMC_FVG_SPEC_v1.md
P3-S.3 spec (immutable)      : docs/SMC_CHOCH_MSS_SPEC_v1.md
FEATURE_CONTRACT             : C44CC6F2... (P2-era) / 7b908b12... (committed)
symbol/tf                    : XAUUSD / M15 (2017-01-01 .. 2026-08-20)
Human verification           : CANCELLED
No production change         : AF_DetectDisplacement / AF_AvgBody / AF_FindOrderBlock /
                               E agent / Engine 2 / Engine 3 / f7-f18 / FVG / OB /
                               CHoCH / ML : NOT touched