forked from chiki2bum2/SniperGold_ML
408 lines
23 KiB
Markdown
408 lines
23 KiB
Markdown
# P3-S.4 FVG FORMAL SPECIFICATION & CODE-CONFORMANCE REPORT
| |||
| |||
```text
| |||
Date : 2026-08-22
| |||
Session : P3-S.4 — Formal SMC Specification + Code-Conformance Audit (FVG)
| |||
Scope : Fair Value Gap (FVG / imbalance) — Engine 2 agents C/E (AF_FindFVG),
| |||
Engine 3 display (AF_CollectFVG), legacy v4.3/v4.4/v4.5
| |||
(DetectAndDrawFVG + v4.5 MTF FVG), legacy entry gate
| |||
(InpEntryOnFVGorOB / FindEntryFVG / Sweep->CHoCH->OB/FVG chain).
| |||
Principle : SPECIFICATION FIRST, CODE AUDIT SECOND
| |||
Status : NO CODE CHANGES (Phase D) — all findings DOCUMENTED
| |||
Artifacts : docs/SMC_FVG_SPEC_v1.md (specification)
| |||
ml/p3/smc_semantic/spec_tests_fvg.py (+ .json) (tests)
| |||
ml/p3/smc_semantic/output/spec_tests_fvg_report.json
| |||
```
| |||
| |||
---
| |||
| |||
## 0. CHECKPOINT & PROVENANCE (session-start verification)
| |||
| |||
```text
| |||
Forge HEAD : 85e3b48993c25323c2ff40040402da548826b1b2
| |||
(3 documentation-only commits ahead of the P3-S.3 research
| |||
checkpoint b6100f9 — Markdown standardization eb8a818,
| |||
inventory tooling 0ac6ed1, title audit 85e3b48;
| |||
git diff b6100f9..HEAD touches ONLY .md docs + the
| |||
md_language_inventory tooling — no research/code change)
| |||
P3-S.3 commit : b6100f9c4ff631539bab4ba8c5416cae4d89564a VERIFIED
| |||
P3-S.2 checkpoint : c7a2b3f5e6acbf8deb748315dcbcc200046d0b84 VERIFIED
| |||
P3-S.0 / P3-S.1 : b519a34396df1304467e45dd223132bed9a6d655 /
| |||
8c1ef6c2979b421d15d24d4537bb287fc90396c4 VERIFIED
| |||
P2 source : 8d330343af688e2de2b2a1d12ce19a582714709a VERIFIED
| |||
P2.6 model (SHA-256): 06df8452a112290ecb9bae1a3dbff6df492e084f8b872885d808bb0303ec6a70
| |||
(Include\SniperGold_ML_p26_corrected.mqh) VERIFIED (file hash match)
| |||
Branch / remote : main == origin/main (85e3b48) VERIFIED
| |||
Working tree : CLEAN at start VERIFIED
| |||
HUMAN VERIFICATION : CANCELLED VERIFIED
| |||
```
| |||
| |||
---
| |||
| |||
## A. SOURCE MATERIAL (Phase A — inventory & reconciliation)
| |||
| |||
| # | Source | Location | Role |
| |||
|---|--------|----------|------|
| |||
| 1 | DESIGN.md (Algo Forge) | docs/DESIGN.md §C/E + display | Intent: C agent "which zone is price in?" (OB/FVG/S-R/PD); E agent "entry confirmation" (Sweep, CHoCH, displacement, OB/FVG zones; ZONE + CONFIRMATION = setup); display FVG = AFDispZone, MIT filter + size >= 0.02xATR |
| |||
| 2 | DESAIN_MTF_v45.md | Shared Projects\SniperGold_ML | v4.5 redesign: real per-TF structure (HH/HL/OB/FVG/EQ) via cache; per-TF MTF FVG mitigation on rebuild; view MTF OB/FVG on chart; v4.4 computed FVG only on chart TF |
| |||
| 3 | v4.3/v4.4 indicator | Indicators\Downloads\SniperGold_SMC_ProPlus_v4_3/4_4.mq5 | DetectAndDrawFVG (v4.3 == v4.4 verified line-identical for FVG): 3-candle gap; minGap = 0.25 x ATR (auto) or 0; HTF projection InpFVGTF; mitigation low<=bot / high>=top; entry gate InpEntryOnFVGorOB + FindEntryFVG tap +- 1 ATR; FVGRec zone struct |
| |||
| 4 | v4.5 indicator | Indicators\Downloads\SniperGold_SMC_ProPlus_v4_5.mq5 | Same chart DetectAndDrawFVG + per-TF MTF FVG (D1/H4/H1) via cache (0.25 x avg range minGap, per-TF mitigation) |
| |||
| 5 | Engine 2 FVG detector | Include\AlgoForge\AF_Engine2_Agents.mqh:329-350 (AF_FindFVG) | Geometric 3-candle (reversed index): l0>h2 / h0<l2; NO minGap; NO mitigation; returns NEWEST FVG +-1/0; lookback param (40 C / 20 E) |
| |||
| 6 | Engine 2 C agent | AF_Engine2_Agents.mqh:492-575 | "which zone is price in": fv = AF_FindFVG(40); mInFv = trap(close, zone +- 0.3 ATR); weight 0.25 |
| |||
| 7 | Engine 2 E agent | AF_Engine2_Agents.mqh:583-663 | "entry confirmation": fv = AF_FindFVG(20); mZone from FVG tap; ZONE + CONFIRMATION setup rule |
| |||
| 8 | Engine 3 display collector | Include\AlgoForge\AF_Engine2_Display.mqh:255-292 (AF_CollectFVG) | 3-candle geometry; minGap 0.02 x ATR (AF_E3_FVG_MIN_ATR); mitigation = subsequent CLOSE < bot (bull) / > top (bear); collects newest maxN unmitigated zones (default 6, max 24) |
| |||
| 9 | Engine 3 render | Include\AlgoForge\AF_Engine3_Render.mqh:379-392 | draws FVG boxes (top/bot), bull/bear labels |
| |||
| 10 | Engine 3 indicator | Indicators\AlgoForge\AF_Engine3_Display.mq5 | inputs: InpShowFVG, InpFVGCount=6, colors |
| |||
| 11 | Unit test | Experts\AlgoForge_Engine3_UnitTest.mq5:133-137,164 | basic zone validity (top>bot, bot>0, tag="FVG") |
| |||
| 12 | AF_Defines.mqh | Include\AlgoForge\AF_Defines.mqh:31,53,58,61 | AF_E2_FVG_LOOKBACK=40; AF_E3_MAX_ZONES=24; AF_E3_FVG_DEFAULT=6; AF_E3_FVG_MIN_ATR=0.02 |
| |||
| 13 | FEATURE_CONTRACT | docs/FEATURE_CONTRACT.md | NO FVG feature (0 references) — FVG not in f0-f18 |
| |||
| 14 | EA runtime | Experts\AlgoForge_Backtest_Baseline.mq5 | NO FVG (0 references) — ML runtime features exclude FVG |
| |||
| 15 | Python training | ml/**/*.py | NO FVG (0 references) — no training-side FVG |
| |||
| 16 | P3 docs | P3_S2 conformance (AF_FindFVG context), golden-dataset concept list | FVG listed as a context feature and as the last element of the SMC chain Sweep->CHoCH->OB/FVG |
| |||
| |||
**Layer separation:**
| |||
| |||
```text
| |||
Intended semantics : FVG = imbalance ZONE; C agent = "which zone is price in";
| |||
E agent = entry zone (ZONE + CONFIRMATION = setup);
| |||
legacy chain Sweep -> CHoCH -> OB/FVG within InpSeqWindow;
| |||
display zones with MIT filter + minimum size.
| |||
Legacy semantics : v4.3/v4.4/v4.5: 3-candle wick gap; minGap 0.25xATR (auto)
| |||
or 0; mitigation = full fill by wick; entry tap +-1 ATR on
| |||
ANY unmitigated zone of the side; HTF projection (InpFVGTF);
| |||
v4.5 per-TF MTF FVG (display).
| |||
Current semantics : Engine 2 AF_FindFVG = newest FVG ONLY, NO minGap, NO
| |||
mitigation, lookback 40 (C) / 20 (E); display AF_CollectFVG
| |||
= newest N unmitigated zones, minGap 0.02xATR, mitigation
| |||
by close; ML features / EA / training: FVG ABSENT.
| |||
Training semantics : N/A — FVG is not a training feature (no parity target).
| |||
Display-only : zone boxes + labels (Engine 3, v4.4/v4.5).
| |||
```
| |||
| |||
---
| |||
| |||
## B. PROJECT SEMANTIC SPECIFICATION (Phase B)
| |||
| |||
Full document: **docs/SMC_FVG_SPEC_v1.md** (PROJECT SEMANTIC SPECIFICATION — not "universal SMC ground truth").
| |||
| |||
Spec decision summary:
| |||
| |||
```text
| |||
S-1 Definition : 3-candle: bullish Low(C3) > High(C1), zone [High(C1), Low(C3)];
| |||
bearish High(C3) < Low(C1), zone [High(C3), Low(C1)];
| |||
C2 extremes unused in the zone bounds.
| |||
S-2 Gap boundaries : WICK-BASED (High/Low of C1 & C3); no body rule.
| |||
S-3 Minimum gap : none in the definition (>= 1 tick); zero gap = NOT FVG;
| |||
consumer filters 0.02/0.25/none = AMBIGUOUS (A-1).
| |||
S-4 Direction : +1 bullish (up gap), -1 bearish (down gap), 0 none;
| |||
no trend precondition.
| |||
S-5 Displacement : NOT REQUIRED (geometric gap sufficient).
| |||
S-6 Formation : observable at C3 close (b <= t); newest closed bar eligible;
| |||
canonical timestamp = C3 open.
| |||
S-7 Closed-bar : all inputs <= t; no future visibility.
| |||
S-8 Lifecycle : ZONE (persistent); one zone per formation; no event stream.
| |||
S-9 Mitigation : full fill by wick (Low<=bot bull / High>=top bear);
| |||
partial fill NOT mitigation; display = close variant (A-2).
| |||
S-10 Invalidation : NOT MODELED.
| |||
S-11 Overlap : separate zones per formation; no merge/replace/dedup.
| |||
S-12 Timeframe : Engine 2 per-TF independent; canonical = AMBIGUOUS (A-3).
| |||
S-13 Parity : FVG NOT an ML feature (contract f0-f18 has none); parity N/A.
| |||
```
| |||
| |||
---
| |||
| |||
## C. FORMAL DEFINITIONS (Phase B — extract)
| |||
| |||
```text
| |||
FVG_zone(bar b, prices) with b >= 2 (closed bars), C1=b-2, C2=b-1, C3=b:
| |||
| |||
Bullish FVG (dir=+1): Low(b) > High(b-2) -> zone (bot=High(b-2), top=Low(b))
| |||
Bearish FVG (dir=-1): High(b) < Low(b-2) -> zone (bot=High(b), top=Low(b-2))
| |||
| |||
One zone per qualifying bar b (formations are NOT merged).
| |||
Zone state (S-9): MITIGATED iff exists j in (b, t] with
| |||
bull: Low(j) <= bot bear: High(j) >= top (wick full-fill)
| |||
Canonical consumer query (S-9): the NEWEST UNMITIGATED zone at decision t.
| |||
No invalidation, no age expiry (S-8/S-10).
| |||
FVG is not a Feature Contract feature (S-13).
| |||
```
| |||
| |||
---
| |||
| |||
## D. CURRENT CODE BEHAVIOR (Phase C — code audit)
| |||
| |||
### D.1 Engine 2 — AF_FindFVG (AF_Engine2_Agents.mqh:329-350)
| |||
| |||
```mql5
| |||
int AF_FindFVG(const AFEngine1MTF &e1,int slot,int lookback,double &zoneHi,double &zoneLo)
| |||
{
| |||
zoneHi=0.0; zoneLo=0.0;
| |||
if(!e1.IsReady(slot)) return 0;
| |||
int cnt=e1.Count(slot);
| |||
if(cnt<3) return 0;
| |||
int maxIdx=MathMin(cnt-3,(lookback>0)? lookback : cnt);
| |||
for(int i=1;i<=maxIdx;i++) // i=0 (newest closed bar) SKIPPED
| |||
{
| |||
double l0=e1.Low(slot,i);
| |||
double h2=e1.High(slot,i+2);
| |||
if(l0>h2) { zoneLo=h2; zoneHi=l0; return 1; } // bullish, NO mit check
| |||
double h0=e1.High(slot,i);
| |||
double l2=e1.Low(slot,i+2);
| |||
if(h0<l2) { zoneLo=h0; zoneHi=l2; return -1; } // bearish, NO mit check
| |||
}
| |||
return 0;
| |||
}
| |||
```
| |||
| |||
Observations:
| |||
- Geometry matches S-1 (reversed index: i = C3, i+2 = C1).
| |||
- Loop starts at `i=1` — the newest closed bar (index 0) is never C3 → 1-bar lag.
| |||
- Returns the FIRST (newest) match only → a single "newest FVG" query.
| |||
- NO minimum gap (any strictly positive gap accepted).
| |||
- NO mitigation filter — a fully-filled zone still returns as FVG.
| |||
- Lookback callers: C agent `AF_E2_FVG_LOOKBACK=40`; E agent `20` (inconsistent).
| |||
| |||
### D.2 Engine 3 display — AF_CollectFVG (AF_Engine2_Display.mqh:255-292)
| |||
| |||
```mql5
| |||
for(int i=1; i<=maxIdx; i++)
| |||
{
| |||
...
| |||
if(lo0>hi2) { bull=true; top=lo0; bot=hi2; found=true; }
| |||
else if(hi0<lo2) { bull=false; top=lo2; bot=hi0; found=true; }
| |||
if(!found) continue;
| |||
if((top-bot)<AF_E3_FVG_MIN_ATR*atr) continue; // min 0.02 x ATR
| |||
bool mit=false;
| |||
for(int b=i-1; b>=0; b--)
| |||
{
| |||
if(bull && e1.Close(slot,b)<bot) { mit=true; break; } // CLOSE below bot
| |||
if(!bull && e1.Close(slot,b)>top) { mit=true; break; } // CLOSE above top
| |||
}
| |||
if(mit) continue;
| |||
... zones[nz] = {t=Time(i), top, bot, bull, tag="FVG"};
| |||
}
| |||
```
| |||
Observations: geometry = S-1; minGap 0.02xATR (A-1); mitigation = CLOSE beyond far
| |||
boundary (A-2 display variant); collects newest N unmitigated zones; timestamp = C3.
| |||
| |||
### D.3 Legacy v4.3/v4.4 — DetectAndDrawFVG (v4_4.mq5:592-660; v4_3 identical)
| |||
| |||
```mql5
| |||
double minGap=InpFVGAutoThreshold?0.25*g_atr:0.0;
| |||
for(int i=startBar+2;i<total;i++) // normal order; total = closed horizon
| |||
{
| |||
if(low[i]>high[i-2] && (low[i]-high[i-2])>=minGap) AddFVG(i-1,time[i-1],low[i],high[i-2],true);
| |||
if(high[i]<low[i-2] && (low[i-2]-high[i])>=minGap) AddFVG(i-1,time[i-1],low[i-2],high[i],false);
| |||
}
| |||
// mitigation (wick full-fill)
| |||
for(...) for(int j=b;j<total;j++)
| |||
{
| |||
if(g_fvg[k].bull&&low[j]<=g_fvg[k].bot){ g_fvg[k].mit=true; break; }
| |||
if(!g_fvg[k].bull&&high[j]>=g_fvg[k].top){ g_fvg[k].mit=true; break; }
| |||
}
| |||
// draw newest InpFVGCount unmitigated
| |||
```
| |||
Observations: geometry = S-1; minGap 0.25xATR (auto) or 0 (A-1); mitigation = wick
| |||
full-fill (S-9 canonical); C3 = newest closed bar eligible (i can reach total-1);
| |||
timestamp = C2 (middle candle, A-5); HTF projection via InpFVGTF (A-3).
| |||
Entry gate: `InpEntryOnFVGorOB` + `FindEntryFVG` = ANY unmitigated zone of the side
| |||
within +- 1 ATR of price (A-6), closest to zone mid; +10 confluence; signal note
| |||
"Sweep->CHoCH->Bullish/Bearish FVG (discount/premium)".
| |||
| |||
### D.4 v4.5 MTF FVG (per-TF structure)
| |||
| |||
Per-TF cache FVG for D1/H4/H1: same geometry + minGap 0.25 x avg range + wick
| |||
full-fill mitigation, evaluated internally per TF on rebuild (display only).
| |||
| |||
---
| |||
| |||
## E. CONFORMANCE MATRIX (Phase C)
| |||
| |||
Verdicts: CONFORMING / PARTIALLY CONFORMING / NON-CONFORMING / UNVERIFIABLE /
| |||
SPECIFICATION AMBIGUOUS.
| |||
| |||
| # | Requirement | Specification | Code (Function/Line) | Actual Behavior | Verdict |
| |||
|---|-------------|--------------|----------------------|-----------------|---------|
| |||
| E-1 | FVG definition | 3-candle gap, zone [High(C1), Low(C3)] / [High(C3), Low(C1)] (S-1) | AF_FindFVG:341,349; AF_CollectFVG:269-272; v4.4:604-605 | all implementations agree on geometry; C2 unused | **CONFORMING** |
| |||
| E-2 | Gap boundaries | WICK-BASED (High/Low of C1 & C3) (S-2) | all: Low vs High comparisons | wick extremes; no body/close rule | **CONFORMING** |
| |||
| E-3 | Minimum gap | definition: >= 1 tick; zero gap NOT FVG; filters are consumer config (S-3) | AF_FindFVG none; AF_CollectFVG 0.02xATR (:273); v4.4 0.25xATR auto (:598) | three different filters; no canonical threshold | **SPECIFICATION AMBIGUOUS** (A-1) |
| |||
| E-4 | Direction | +1 bullish / -1 bearish / 0 none; no trend precondition (S-4) | AF_FindFVG:346,353; bull flags everywhere | gap direction; no prior-trend gate | **CONFORMING** |
| |||
| E-5 | Displacement | NOT REQUIRED (S-5) | no displacement check in any FVG path | geometric gap sufficient | **CONFORMING** |
| |||
| E-6 | Formation timing | observable at C3 close; newest closed bar eligible as C3 (S-6) | v4.4:602 i<total (C3=newest OK); display i=1.. (C3 = idx 1, lag 1); AF_FindFVG i=1.. (lag 1) | Engine 2 & display skip newest closed bar as C3 (1-bar lag vs legacy) | **PARTIALLY CONFORMING** (BUG-P3S4-002) |
| |||
| E-7 | Closed-bar / no future | all inputs <= t (S-7) | Engine-1 closed-bar lock; v4.4 tc=total-1 | no future visibility; deterministic | **CONFORMING** |
| |||
| E-8 | Lifecycle (zone) | ZONE; one zone per formation; no event stream (S-8) | zones arrays (g_fvg / dd.fvg); no event emission | one zone per formation; persistent; no duplication pattern | **CONFORMING** |
| |||
| E-9 | Mitigation | full fill by wick; partial NOT mitigation (S-9) | AF_FindFVG NONE; AF_CollectFVG close<bot/ >top (:279-283); v4.4 low<=bot / high>=top (:634-635) | Engine 2 consumes mitigated zones; display uses close variant; legacy uses wick | **NON-CONFORMING** (Engine 2, BUG-P3S4-001) + **SPECIFICATION AMBIGUOUS** (A-2 close vs wick) |
| |||
| E-10 | Invalidation | NOT MODELED (S-10) | no invalidation code anywhere | none exists | **CONFORMING** |
| |||
| E-11 | Overlap / multiple | separate zones per formation; no merge (S-11) | independent AddFVG per bar; zones arrays | consecutive formations -> separate zones; no dedup | **CONFORMING** |
| |||
| E-12 | Timeframe | Engine 2 per-TF; canonical AMBIGUOUS (S-12) | AF_FindFVG per slot (H4/M30/M15/M3); v4.5 MTF cache; InpFVGTF | per-TF independent; HTF role not defined | **SPECIFICATION AMBIGUOUS** (A-3) |
| |||
| E-13 | Runtime/training parity | FVG NOT an ML feature; parity N/A (S-13) | FEATURE_CONTRACT/EA/ml: 0 FVG references | no training-side FVG; no parity target | **CONFORMING** (N/A by absence) |
| |||
| E-14 | Consumer zone scope | canonical consumer = newest UNMITIGATED zone (S-9) | AF_FindFVG newest-ANY (no mit); FindEntryFVG all-unmitigated; AF_CollectFVG newest-N-unmitigated | Engine 2 zone selection diverges from legacy entry semantics | **PARTIALLY CONFORMING** (BUG-P3S4-001 / A-6) |
| |||
| E-15 | Consumer lookback | single canonical window (S-6 note) | C agent 40 vs E agent 20 (AF_E2_FVG_LOOKBACK vs hardcoded) | C sees an FVG the E agent cannot | **PARTIALLY CONFORMING** (BUG-P3S4-002) |
| |||
| |||
---
| |||
| |||
## F. CONFIRMED BUGS (Phase D — DOCUMENT ONLY, no code changes)
| |||
| |||
```text
| |||
BUG-P3S4-001
| |||
SEVERITY : MEDIUM
| |||
SOURCE : AF_FindFVG — AF_Engine2_Agents.mqh:329-350 (Engine 2 C/E agents)
| |||
SPEC REQ : S-9 — mitigation is part of the FVG zone lifecycle; the canonical
| |||
consumer query is the newest UNMITIGATED zone
| |||
ACTUAL CODE : AF_FindFVG returns the newest FVG with NO mitigation check;
| |||
it also returns ONLY the newest zone (older unmitigated zones
| |||
invisible to the agents)
| |||
IMPACT : C agent "price in FVG zone" (weight 0.25) and E agent "zone tap"
| |||
can fire on a FULLY-FILLED (mitigated) FVG; the zone selection
| |||
(newest-any) differs from the legacy entry rule (all-unmitigated
| |||
within tap). The f7/f9/f18 duplication pattern does NOT apply
| |||
(FVG is a zone, not an event stream), but the mitigation
| |||
lifecycle is not respected by the current detector.
| |||
PROPOSED FIX : add the wick full-fill mitigation filter (S-9) to AF_FindFVG and
| |||
(if intended) scan for the newest unmitigated zone instead of
| |||
the newest-any; document the zone-selection rule.
| |||
| |||
BUG-P3S4-002
| |||
SEVERITY : LOW
| |||
SOURCE : AF_FindFVG loop bound — AF_Engine2_Agents.mqh:338 (`i=1`)
| |||
and callers (C:40 / E:20)
| |||
SPEC REQ : S-6 — the newest closed bar is eligible as C3; a single canonical
| |||
lookback window
| |||
ACTUAL CODE : loop starts at i=1 (index 0 skipped) -> FVG whose C3 is the newest
| |||
closed bar is missed until one bar later (1-bar lag); C agent
| |||
lookback 40 vs E agent hardcoded 20
| |||
IMPACT : Engine-2 FVG lags the legacy/display detection by 1 bar; the C
| |||
and E agents may disagree on FVG presence/age (E window 20 vs C 40)
| |||
PROPOSED FIX : start the scan at i=0 (subject to the closed-bar lock) or document
| |||
the 1-bar maturity delay; unify the lookback constant.
| |||
| |||
BUG-P3S4-003
| |||
SEVERITY : INFO (display only)
| |||
SOURCE : zone timestamp/bar conventions
| |||
SPEC REQ : S-6/A-5 — canonical timestamp = C3 open
| |||
ACTUAL CODE : v4.4/v4.5 AddFVG(i-1, time[i-1]) = middle candle C2; Engine-3
| |||
display = C3; Engine 2 = none
| |||
IMPACT : box start times differ between legacy and Engine-3 displays;
| |||
no ML/feature impact
| |||
PROPOSED FIX : unify the zone timestamp at C3 (display only).
| |||
| |||
BUG-P3S4-004
| |||
SEVERITY : INFO (specification ambiguity)
| |||
SOURCE : minimum-gap filters — AF_Defines.mqh:61 (0.02 ATR) vs
| |||
v4.4:598 (0.25 ATR auto) vs AF_FindFVG (none)
| |||
SPEC REQ : S-3/A-1 — a canonical project minimum-gap threshold
| |||
ACTUAL CODE : three different consumer filters; no canonical value
| |||
IMPACT : the same price sequence may be "FVG" in Engine 2, "not FVG" in
| |||
display, and "not FVG" in v4.4 (auto) depending on gap size
| |||
PROPOSED FIX : adjudicate a single project threshold (NOT optimized here) or
| |||
explicitly scope the filters to their consumers
| |||
```
| |||
| |||
---
| |||
| |||
## G. SEMANTIC AMBIGUITIES (Phase F — consistency)
| |||
| |||
```text
| |||
G-1 MINIMUM GAP FILTERS (A-1)
| |||
Engine 2 none / display 0.02 x ATR / legacy auto 0.25 x ATR. No canonical
| |||
project threshold; no optimization performed in this session.
| |||
G-2 MITIGATION TRIGGER (A-2)
| |||
Legacy = full fill by WICK (low<=bot / high>=top); display = full fill by
| |||
CLOSE; Engine 2 = none (BUG-P3S4-001). Partial fill not modeled anywhere.
| |||
G-3 CANONICAL TIMEFRAME (A-3)
| |||
Engine-2 M15 slot explicit; HTF FVG as M15 context and M3 FVG as entry
| |||
trigger not defined. Same class as CHoCH G-4 / sweep G-3.
| |||
G-4 SAME-BAR DOUBLE CONDITION (A-4)
| |||
Bull and bear cannot both be true for one C3 (geometrically); bull-first
| |||
evaluation; unreachable.
| |||
G-5 ZONE TIMESTAMP (A-5)
| |||
v4.4/v4.5 = C2 middle; Engine-3 display = C3; Engine 2 = none. Display-only.
| |||
G-6 CONSUMER ZONE SCOPE (A-6)
| |||
Engine 2 = newest zone only; legacy entry = all unmitigated within tap;
| |||
display = newest N unmitigated. Different selection semantics.
| |||
```
| |||
| |||
---
| |||
| |||
## H. SEMANTIC RELATIONSHIP WITH THE SMC CHAIN (Phase C)
| |||
| |||
```text
| |||
Detection : FVG detection STANDS ALONE (pure geometric gap; no sweep/CHoCH
| |||
required) — CONFORMING S-1/S-4/S-5.
| |||
Legacy chain : Sweep -> CHoCH -> OB/FVG within InpSeqWindow (v4.4) — FVG is the
| |||
final ENTRY ZONE of the chain; ordering/freshness handled by the
| |||
sweep/CHoCH gates (P3-S.2/P3-S.3 audits), the FVG zone itself has no
| |||
age rule (mitigation is its only termination).
| |||
Engine 2 : C agent = FVG as CONTEXT (price-in-zone); E agent = FVG as ENTRY ZONE
| |||
with ZONE + CONFIRMATION = setup (DESIGN.md). Consistent with intent.
| |||
ML : FVG ABSENT from f0-f18 — the chain is runtime/display only.
| |||
| |||
NO production dependency between FVG and f7/f8/f9/f10/f11 was changed.
| |||
```
| |||
| |||
---
| |||
| |||
## I. RUNTIME/TRAINING PARITY (Phase C — diagnostic, not a retrain)
| |||
| |||
```text
| |||
FVG is not a Feature Contract feature (f0-f18) and has no Python training
| |||
representation (verified: 0 FVG references in FEATURE_CONTRACT.md, EA, ml/**/*.py).
| |||
-> runtime/training parity for FVG = N/A BY ABSENCE (S-13). No mismatch exists;
| |||
the absence itself is a documented fact, not a defect.
| |||
If FVG is later promoted to an ML feature, a Feature Contract entry and a parity
| |||
harness are required first (out of scope).
| |||
```
| |||
| |||
---
| |||
| |||
## J. VERDICT
| |||
| |||
```text
| |||
PARTIALLY CONFORMING
| |||
| |||
Detection semantics (E-1, E-2, E-4, E-5, E-7) : CONFORMING
| |||
Minimum gap (E-3) : SPECIFICATION AMBIGUOUS (A-1)
| |||
Formation timing (E-6) : PARTIALLY CONFORMING (BUG-P3S4-002)
| |||
Lifecycle zone (E-8) : CONFORMING (no event duplication)
| |||
Mitigation (E-9) : NON-CONFORMING (Engine 2, BUG-P3S4-001)
| |||
+ AMBIGUOUS (A-2 close vs wick)
| |||
Invalidation (E-10) : CONFORMING (not modeled)
| |||
Overlap / multiple (E-11) : CONFORMING
| |||
Timeframe (E-12) : SPECIFICATION AMBIGUOUS (A-3)
| |||
Consumer semantics (E-14, E-15) : PARTIALLY CONFORMING (BUG-P3S4-001/-002, A-6)
| |||
Runtime/training parity (E-13) : CONFORMING (N/A by absence)
| |||
| |||
Verdict = conformance to the PROJECT SEMANTIC SPECIFICATION, NOT profitability/edge.
| |||
The DETECTOR core (geometry/direction/closed-bar/zone lifecycle) is conforming;
| |||
the gaps are in consumer-side semantics (mitigation, newest-zone scope, 1-bar lag,
| |||
lookback split, canonical threshold/timeframe).
| |||
```
| |||
| |||
---
| |||
| |||
## K. NEXT GATE
| |||
| |||
```text
| |||
After the FVG verdict (PARTIALLY CONFORMING):
| |||
OB -> Displacement -> MTF Alignment -> Candidate Setup.
| |||
DO NOT return to ML; DO NOT build a meta-label; DO NOT create new event labels;
| |||
DO NOT fix production code before the audit chain completes (all fixes stay
| |||
documented as BUG-P3S4-00x until the semantic audit chain is finished).
| |||
```
| |||
| |||
---
| |||
| |||
## L. CHECKPOINT & PROVENANCE (P3-S.4)
| |||
| |||
```text
| |||
Forge HEAD (session start) : 85e3b48 (P3-S.3 research checkpoint b6100f9 intact;
| |||
ahead only by 3 documentation-only commits)
| |||
P3-S.3 spec (immutable) : docs/SMC_CHOCH_MSS_SPEC_v1.md
| |||
P3-S.2 spec (immutable) : docs/SMC_LIQUIDITY_SWEEP_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_FindFVG / AF_CollectFVG / v4.3/v4.4/v4.5 /
| |||
Engine 2 / Engine 3 / f7-f18 / OB / CHoCH /
| |||
Displacement / ML : NOT touched
| |||
```
|