forked from chiki2bum2/SniperGold_ML
295 lines
13 KiB
Markdown
295 lines
13 KiB
Markdown
# SESSION HANDOVER — SNIPERGOLD_ML P3-S.5: ORDER BLOCK SPEC + CONFORMANCE
| |||
| |||
```text
| |||
Date : 2026-08-22 (session close)
| |||
Status : P3-S.5 COMPLETE — spec + conformance audit done; synthetic tests 20/20;
| |||
NOT yet committed (handover prepared before commit+push)
| |||
Forge : https://forge.mql5.io/chiki2bum2/SniperGold_ML
| |||
Checkpoint : P3-S.4 176880f8f3f17afb7e922a48ed953daa22c1515f (VERIFIED clean at start)
| |||
```
| |||
| |||
---
| |||
| |||
## 1. SESSION OBJECTIVE
| |||
| |||
```text
| |||
Formal Specification + Code-Conformance Audit for Order Block (OB).
| |||
| |||
Question answered:
| |||
Does the SniperGold code claiming to detect Order Blocks really implement the
| |||
OB definition established by the PROJECT SEMANTIC SPECIFICATION?
| |||
| |||
Questions NOT answered:
| |||
- Does OB generate profit?
| |||
- Does OB improve AUC / PF?
| |||
- Is the universal SMC OB definition correct for every trader?
| |||
```
| |||
| |||
Principle: SPEC FIRST, CODE AUDIT SECOND. Human verification = CANCELLED.
| |||
No production code changes (Phase D). No ML / AUC / PF / backtest optimization.
| |||
| |||
---
| |||
| |||
## 2. SOURCE MATERIAL (15 sources, reconciled)
| |||
| |||
```text
| |||
1 DESIGN.md (Algo Forge) docs/DESIGN.md:132-133,206 (intent: OB =
| |||
"opposite bar before a strong move")
| |||
2 Engine 2 detector Include\AlgoForge\AF_Engine2_Agents.mqh:293-322
| |||
(AF_FindOrderBlock)
| |||
3 AF_AvgBody AF_Engine2_Agents.mqh:120-127
| |||
4 Engine 2 C agent AF_Engine2_Agents.mqh:492-575 (weight 0.30)
| |||
5 Engine 2 E agent AF_Engine2_Agents.mqh:583-663 (ZONE+CONFIRM)
| |||
6 Engine 3 display collector Include\AlgoForge\AF_Engine2_Display.mqh:199-250
| |||
(AF_CollectOBs)
| |||
7 AF_Defines.mqh AF_Defines.mqh:57,59,60 (OB 5/0.15 ATR/1.5)
| |||
8 Engine 3 render/indicator AF_Engine3_Render.mqh; AF_Engine3_Display.mq5
| |||
9 v4.3/v4.4 indicator Indicators\Downloads\SniperGold_SMC_ProPlus_v4_3/4_4.mq5
| |||
(LEGACY structure-break OB: ProcessStructure
| |||
RecordOB, FindEntryOB, Sweep->CHoCH->OB)
| |||
10 v4.5 indicator SniperGold_SMC_ProPlus_v4_5.mq5 (chart OB
| |||
identical; + MTF OB per-TF RecordOB_mtf)
| |||
11 FEATURE_CONTRACT docs/FEATURE_CONTRACT.md — NO OB feature
| |||
12 EA runtime Experts\AlgoForge_Backtest_Baseline.mq5 — NO OB
| |||
13 Python training ml/**/*.py — NO OB (0 refs)
| |||
14 P3 docs P3_2_2 / P3_2_LABEL_FORENSIC: "breaker" = FUTURE
| |||
concept only
| |||
15 External SMC Order Block Detector.mq5 /
| |||
XAUUSD_MTF_Liquidity_OB_Reversal (2).mq5:
| |||
external references, NOT wired to the project
| |||
| |||
Three semantic layers separated:
| |||
INTENDED : OB = opposite bar before a strong move (DESIGN.md); C agent context
| |||
zone; E agent entry zone (ZONE + CONFIRMATION = setup); display
| |||
zones with MIT filter + dedupe + min size 0.15xATR.
| |||
LEGACY : v4.3/v4.4/v4.5: OB = opposite candle BEFORE A STRUCTURE BREAK
| |||
(BOS/CHoCH on swing len=50 / internal len=5); last or highest-volume
| |||
opposite candle; full range; min 0.15xATR; close-through mitigation;
| |||
internal + swing OBs; entry chain.
| |||
CURRENT : Algo Forge: opposite bar before strong move (1.5 x avg body); zone =
| |||
full range; Engine 2 = newest-only, NO min size, NO mitigation;
| |||
display = newest N unmitigated, 0.15xATR min, close-through mit,
| |||
0.5xATR dedupe.
| |||
TRAINING : N/A (no OB feature). DISPLAY-ONLY: Engine 3 / v4.4 / v4.5 MTF OB.
| |||
```
| |||
| |||
---
| |||
| |||
## 3. SPECIFICATION (docs/SMC_ORDER_BLOCK_SPEC_v1.md)
| |||
| |||
```text
| |||
FORMATION : canonical current = opposite-color candle B immediately before
| |||
strong-move candle M (|body(M)| >= 1.5 x avg body, avg over the
| |||
last 20 closed bars). LEGACY second definition = opposite candle
| |||
before a STRUCTURE BREAK (BOS/CHoCH) — recorded as A-2.
| |||
CANDLE : B = full opposite candle (Close vs Open); doji excluded; zone =
| |||
FULL RANGE [Low(B), High(B)].
| |||
BOUNDARIES : top = High(B), bot = Low(B); no padding; min size none in the
| |||
definition (0.15 ATR consumer filters, A-1).
| |||
DIRECTION : +1 bullish (bearish B + bullish M), -1 bearish, 0 none;
| |||
direction = move direction.
| |||
PRECONDITION : NONE (canonical); BOS/CHoCH/displacement/liquidity NOT required.
| |||
TIMING : observable at M close (B+1 <= t); newest pair (t-1, t); NO 1-bar
| |||
lag; timestamp = B open; closed-bar lock; no future.
| |||
LIFECYCLE : ZONE + FORMATION EVENT; one zone per pair; no event stream;
| |||
no age expiry; one zone stays ONE zone (T09).
| |||
MITIGATION : close-through full fill (Close < Low(B) bull / > High(B) bear);
| |||
partial/wick NOT mitigation.
| |||
INVALIDATION : NOT MODELED.
| |||
OVERLAP : separate zones per pair; display dedupe 0.5 x ATR (A-3).
| |||
BREAKER : NOT IMPLEMENTED (0 code matches; future concept only).
| |||
TIMEFRAME : Engine 2 per-TF (H4/M30/M15/M3); canonical = AMBIGUOUS (A-4).
| |||
CONSUMERS : C (context, w 0.30), E (entry zone), legacy entry gate
| |||
(all-unmitigated within tap), display; NO ML feature.
| |||
PARITY : PARITY = N/A BY ABSENCE (OB not in f0-f18 / EA / Python).
| |||
```
| |||
| |||
---
| |||
| |||
## 4. CONFORMANCE (docs/P3_S5_ORDER_BLOCK_CONFORMANCE.md)
| |||
| |||
```text
| |||
Formation (E-1, E-2, E-4, E-6, E-7) : CONFORMING (current definition)
| |||
Zone boundaries (E-3) : CONFORMING (+ AMBIGUOUS A-1 min size)
| |||
Structural precondition (E-5) : CONFORMING (current = none);
| |||
legacy BOS/CHoCH rule = A-2
| |||
Lifecycle (E-8) : CONFORMING (zone; no event duplication)
| |||
Mitigation (E-9) : NON-CONFORMING (Engine 2, BUG-P3S5-001)
| |||
Invalidation (E-10) : CONFORMING (not modeled)
| |||
Overlap (E-11) : PARTIALLY CONFORMING (A-3)
| |||
Breaker (E-12) : NOT IMPLEMENTED (no claim)
| |||
Timeframe (E-13) : SPECIFICATION AMBIGUOUS (A-4)
| |||
Consumer semantics (E-14) : PARTIALLY CONFORMING (BUG-P3S5-001, A-5)
| |||
Runtime/training parity (E-15) : CONFORMING (N/A by absence)
| |||
| |||
VERDICT : PARTIALLY CONFORMING
| |||
(conformance to the project spec; NOT profitability/edge)
| |||
```
| |||
| |||
---
| |||
| |||
## 5. SYNTHETIC TESTS
| |||
| |||
```text
| |||
Runner : ml/p3/smc_semantic/spec_tests_order_block.py
| |||
Cases : ml/p3/smc_semantic/spec_test_cases_order_block.json (20 cases)
| |||
Report : ml/p3/smc_semantic/output/spec_tests_order_block_report.json
| |||
| |||
Result : 20/20 PASS
| |||
OB-T01..T20 (all required). spec_oracle (truth, from SPEC S-1..S-15) ==
| |||
expected in all cases; symmetry property (S-4) asserted on EVERY case.
| |||
code_port (Engine-2 AF_FindOrderBlock port, observation) MATCHES spec in
| |||
T01-T05/T07-T10/T13-T15/T17-T19; DIVERGES in:
| |||
T06/T11/T12/T16: spec newest-unmitigated = none (mitigated) vs code returns
| |||
the zone -> synthetic evidence for BUG-P3S5-001.
| |||
Expected derived from SPEC, NOT from production code.
| |||
Parity scan (T20): FEATURE_CONTRACT.md = 0 order-block refs; ml/**/*.py = 0
| |||
(excluding the spec test files) -> PARITY = N/A BY ABSENCE.
| |||
NO AUC/PF/backtest/human annotation/ML on the test path.
| |||
```
| |||
| |||
---
| |||
| |||
## 6. CONFIRMED BUGS (document-only; NOT fixed in P3-S.5)
| |||
| |||
```text
| |||
BUG-P3S5-001 [MEDIUM] CONFIRMED, NOT FIXED
| |||
Engine-2 AF_FindOrderBlock (AF_Engine2_Agents.mqh:293-322) has NO mitigation
| |||
filter and NO age/freshness bound: the Context (weight 0.30) and Entry (zone
| |||
tap) agents can consume a FULLY-FILLED OB as a current zone, and the newest OB
| |||
can be hundreds of bars old. It also returns ONLY the newest zone (older
| |||
unmitigated OBs invisible), diverging from the legacy entry rule
| |||
(FindEntryOB: all unmitigated within tap). Same bug class as BUG-P3S4-001
| |||
(FVG side). NOT the f7/f9/f18 duplication class — OB is a zone, not an event
| |||
stream (verified OB-T09).
| |||
Fix: apply the close-through mitigation filter (S-9) to AF_FindOrderBlock (or
| |||
filter mitigated zones in the agents) and add a zone-age bound if freshness is
| |||
required; document the zone-selection rule.
| |||
| |||
BUG-P3S5-002 [LOW] DOCUMENTED
| |||
Two OB definitions in one project: Algo Forge "opposite bar before strong move
| |||
(1.5 x avg body)" vs legacy v4.3/v4.4/v4.5 "opposite candle before STRUCTURE
| |||
BREAK (BOS/CHoCH)" (+ legacy volume-weighted mode InpVolumeOB/InpOBStyle).
| |||
The two rules can select DIFFERENT candles for the same price sequence.
| |||
Fix: document the current rule as canonical; mark the legacy rule as historical.
| |||
| |||
BUG-P3S5-003 [INFO] DOCUMENTED
| |||
Minimum zone size filters diverge: Engine-2 none / display 0.15 ATR / legacy
| |||
0.15 ATR (A-1). No canonical value; not optimized here.
| |||
| |||
BUG-P3S5-004 [INFO] DOCUMENTED
| |||
Display dedupe (0.5 x ATR) vs Engine-2 newest-only vs legacy keep-all (A-3):
| |||
three zone-selection policies. Not adjudicated.
| |||
```
| |||
| |||
---
| |||
| |||
## 7. SEMANTIC AMBIGUITIES
| |||
| |||
```text
| |||
1. Minimum zone size (A-1) : none / 0.15 ATR / 0.15 ATR; no canonical value.
| |||
2. Two OB definitions (A-2) : strong-move (current) vs structure-break (legacy).
| |||
3. Overlap / dedupe (A-3) : display 0.5 ATR dedupe vs keep-all.
| |||
4. Canonical timeframe (A-4) : Engine-2 M15 slot explicit; HTF OB as M15
| |||
context / M3 execution not defined (same class as
| |||
CHoCH G-4 / sweep G-3 / FVG A-3).
| |||
5. Consumer zone scope (A-5) : Engine-2 newest-ANY (no mit/age) vs legacy
| |||
all-unmitigated within tap.
| |||
6. Volume-weighted OB (A-6) : legacy-only (InpVolumeOB / OB_HIGHEST_VOLUME);
| |||
current = last candle only.
| |||
```
| |||
| |||
---
| |||
| |||
## 8. PREVIOUS BUG-CLASS CHECK (per brief §27)
| |||
| |||
```text
| |||
The f7/CHoCH/FVG cross-layer pattern (detector correct -> zone/state correct ->
| |||
consumer incorrect) was explicitly checked for OB:
| |||
| |||
detector : AF_FindOrderBlock — correct for FORMATION (S-1..S-6) OK
| |||
zone/state : zone list — correct (one zone per pair, no duplication) OK
| |||
consumer : C/E agents consume the newest-ANY zone WITHOUT the
| |||
mitigation filter that display/legacy apply FAIL
| |||
| |||
-> The cross-layer gap EXISTS for OB (BUG-P3S5-001: mitigation/age not applied
| |||
by the Engine-2 detector/consumers). It is the SAME class as BUG-P3S4-001
| |||
(FVG) — a mitigation-lifecycle gap, NOT the f7/f9/f18 stale-event
| |||
duplication (proven: OB-T09 zone_count=1 after 19 bars).
| |||
```
| |||
| |||
---
| |||
| |||
## 9. NO PRODUCTION CHANGE
| |||
| |||
```text
| |||
No production code was modified.
| |||
AF_FindOrderBlock / AF_CollectOBs / v4.3 / v4.4 / v4.5 / Engine 2 / Engine 3 /
| |||
f7 / f8 / f9 / f10 / f11 / f18 / FVG / CHoCH / Displacement / ML / EA :
| |||
NOT touched.
| |||
| |||
Only P3-S.5 research artifacts added (spec, conformance, tests, report, handover).
| |||
P3-S.4 / P3-S.3 / P3-S.2 artifacts (immutable) UNCHANGED
| |||
(git status: only new files, 0 modified).
| |||
```
| |||
| |||
---
| |||
| |||
## 10. HUMAN VERIFICATION STATUS
| |||
| |||
```text
| |||
HUMAN VERIFICATION = CANCELLED
| |||
Human annotation is NOT part of the OB validation path.
| |||
The human_package/ remains a historical artifact only.
| |||
```
| |||
| |||
---
| |||
| |||
## 11. NEXT GATE
| |||
| |||
```text
| |||
After the Order Block verdict (PARTIALLY CONFORMING):
| |||
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 bugs before the audit chain completes (BUG-P3S5-00x stay
| |||
documented until the semantic audit chain is finished).
| |||
```
| |||
| |||
---
| |||
| |||
## 12. CHECKPOINT & PROVENANCE (P3-S.5)
| |||
| |||
```text
| |||
Forge HEAD (session start) : 176880f (P3-S.4) — VERIFIED
| |||
P3-S.4 spec (immutable) : docs/SMC_FVG_SPEC_v1.md
| |||
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
| |||
```
| |||
| |||
---
| |||
| |||
## 13. P3-S.5 ARTIFACTS
| |||
| |||
```text
| |||
docs/SMC_ORDER_BLOCK_SPEC_v1.md
| |||
docs/P3_S5_ORDER_BLOCK_CONFORMANCE.md
| |||
ml/p3/smc_semantic/spec_tests_order_block.py
| |||
ml/p3/smc_semantic/spec_test_cases_order_block.json
| |||
ml/p3/smc_semantic/output/spec_tests_order_block_report.json
| |||
docs/SESSION_HANDOVER_2026-08-22_P3_S5_ORDER_BLOCK.md (this document)
| |||
```
| |||
| |||
---
| |||
| |||
## 14. COMMIT & PUSH STATUS
| |||
| |||
```text
| |||
NOT YET COMMITTED at handover write time.
| |||
Planned commit message:
| |||
research: P3-S.5 Order Block formal spec + conformance audit (PARTIALLY CONFORMING)
| |||
Follow with: git push origin main; verify rev-parse HEAD == ls-remote origin HEAD;
| |||
working tree CLEAN.
| |||
```
|