ALAMO v2 / Hotfix4 / Snapshot Anchor

Case DD 41.14%: lệnh nào FIRE thật, lệnh nào chỉ chạm gate

Đây là public report cho build FBot_v4.1_Alamo_Jun2026_(v2-LenhY-Hotfix4-SnapshotAnchor). Nội dung dưới đây chỉ bám theo những gì đã implement trong code hiện tại và những gì log ngày 20260523.log xác nhận ở cycle ngày 2026.02.23.

Target Case Cycle DD cao nhất kết thúc ở 41.14%
Main Log Window 2026-02-23 01:06:28 -> 02:00:54
Source Files FBotAlamo.mqh, FBotGlobals.mqh, advisor Hotfix4
Public Goal Tóm tắt fix + case FIRE + validation Y/Y-1 + cache clear
FIRE thật L1, L2, L3

Ba level này có lệnh thực sự được mở trong cycle target.

Gate đạt nhưng không mở L4 @ 41.14%

L4 nhiều lần chạm fire gate 40%, nhưng bị skip ngay vì thiếu free margin.

Y / Y-1 L2: 1806 / 1805, L3: 1810 / 1809

Snapshot và anti-volatility fallback đều resolve đúng ticket để monitoring/close.

Loop close CloseAll + flush cache + clear memory

Khi đóng full loop, prev-cache và SC cache đều được dọn sạch.

Những gì đã implement / fix / thay đổi

Tóm tắt này lấy từ header của advisor Hotfix4 và diff hiện tại trong Include/FBot/.

Case ALAMO FIRE trong cycle 41.14%

Câu hỏi chính là: trong đúng case này, những lệnh ALAMO FIRE nào thực sự tồn tại? Câu trả lời ngắn gọn là: L1, L2, L3 là FIRE thật; L4 chỉ chạm gate nhưng không mở được lệnh.

01:06:28

L1 FIRE thật

L1 mở BUY 8.29 lot và kích hoạt S1 cho L2. Đây là điểm bắt đầu cycle target.

log: 78373-78375
01:28:05

L2 FIRE thật

L2 snapshot bắt được 5 lệnh phù hợp, lệnh_y=1806, y-1=1805, rồi L2 FIRE ở DD 20.45%.

log: 79213-79216
01:28:05+

L2 giao close cho PosMan

Vì snapshotCount của L2 là 5, close được defer sang PositionManager thay vì đóng ngay từng lệnh.

log: 79218 và lặp lại đến 84777
01:51:31

L3 FIRE thật

L3 snapshot bắt được 2 lệnh sau prevLn, resolve lệnh_y=1810, y-1=1809, và FIRE ở DD 30.40%.

log: 79992-79995
01:51:31 -> 02:00:43

L3 anti-volatility fallback chạy đúng

Vì giá của Ln nằm sai phía của lệnh_y, hệ thống fallback sang y-1=1809. Sau đó L3 đóng thành công khi 1809 flip profit dương.

log: 79999, 84769, 84775
01:58:16

L4 chạm gate nhưng không FIRE thật

DD lên 41.14%, fireGate 40% đã đạt, nhưng required margin lớn hơn free margin nên lệnh L4 bị skip ngay.

log: 83328-83329
02:00:54

Full loop close + reset

Hệ thống chạy CloseAll, reset về STANDBY, rồi flush SC cache và clear SC memory.

log: 84997-85004

Data monitoring trong case này có hoạt động bình thường không?

Có. Trong case này, dữ liệu monitoring cho YY-1 vẫn hoạt động bình thường. Quan trọng là phải tách rule runtime mới với những gì cycle này thực sự đã đi qua.

L2 Snapshot lệnh_y=1806, y-1=1805

L2 snapshot dùng fire_decision_anchor của L1 và pool after_prev_ln, không bị collapse về empty subset.

L3 Snapshot lệnh_y=1810, y-1=1809

L3 vẫn resolve được cặp theo đúng window sau prevLn. Đây là bằng chứng rằng snapshot anchor mới đang giữ dữ liệu đúng.

Anti-Volatility Fallback sang 1809 hoạt động

L3 không bám cứng ticket lớn nhất. Khi lệnh_y ở wrong side, logic fallback sang y-1 và tiếp tục monitoring được.

Close Signal L3 đóng nhờ 1809 flip profit

Dòng close thực tế của L3 ghi rõ lệnh_y=1809 flipped profit > 0, nên đường dữ liệu từ snapshot tới close vẫn thông.

Lưu ý: rule mới "L3+ chỉ cần Ln-1 đã fired là monitor được" là một thay đổi ở code-path tổng quát. Trong cycle target này, L2 vẫn đang bị defer cho PosMan nên không tạo ra tình huống "prevLn đã đóng trước khi L3 monitor". Tuy vậy, dữ liệu Y / Y-1 trong case này vẫn xác nhận là không bị hỏng sau khi đổi sang snapshot-anchor mới.

Bảng line-number chứng cứ để đối chiếu log

Phần này dành riêng để chứng minh với Silverf Smurfer. Mỗi dòng dưới đây chỉ ra rõ: level nào thật sự mở lệnh, level nào chỉ đạt gate nhưng không mở được, và level nào đóng riêng hay bị giao về full-loop close. Tất cả line-number đều lấy từ 20260523.log trong cycle 2026.02.23 01:06:28 -> 02:00:54.

Ln Trạng thái Log lines Raw proof Kết luận
L1 FIRED thật 78373-78375
84992-84998
78373 `ALAMO: FIRED ALAMO_L1 | BUY 8.29 @ 5122.92 | ticket=1801` 78374 `ALAMO L1 FIRE | accountDD=10.28% | thr=10.00%` 84992-84998 close ticket #1801 rồi `ALAMO: CloseAll | closed=2` và `reset to STANDBY`

L1 có lệnh mở thật ở ticket 1801.

Trong target cycle này L1 không có dòng close riêng; nó sống tới cuối loop và bị đóng trong batch CloseAll.

L2 FIRED thật 79207-79218
84726-84777
84987-84998
79207 `S1 của L2 FIRE | DD=20.01% >= fireGate=20.00%` 79213-79216 snapshot lệnh_y=1806, y-1=1805, rồi `FIRED ALAMO_L2 | ticket=1807` 79218 `ALAMO_DEFER_POSMAN_CLOSE L2 ... PosMan owns close` 84987-84998 close ticket #1807 trong full-loop batch rồi reset

L2 không chỉ chạm gate; nó mở lệnh thật ở ticket 1807.

Nhưng L2 cũng không tự close theo nhánh riêng, vì snapshot có 5 lệnh nên close path bị giao cho PosMan và kết thúc bằng full-loop close.

L3 FIRED + close riêng 79986-79999
84769-84775
79986 `S1 của L3 FIRE | DD=30.01% >= fireGate=30.00%` 79992-79995 snapshot lệnh_y=1810, y-1=1809, rồi `FIRED ALAMO_L3 | ticket=1812` 79999 `wrong side of lệnh_y ... fallback to y-1 (1809)` 84769 fallback cuối cùng sang 1809, 84775 `ALAMO_v2_CLOSE L3 | ticket=1812 | lệnh_y=1809 flipped profit > 0`

L3 là level chứng minh rõ nhất rằng data monitoring của Y / Y-1 vẫn chạy đúng.

Nó FIRE thật, sau đó anti-volatility không bám cứng lệnh_y=1810 mà fallback sang y-1=1809, rồi đóng riêng thành công.

L4 Gate đạt, không mở lệnh 83328-83329 83328 `S1 của L4 FIRE | DD=41.14% >= fireGate=40.00% | qualCount=3` 83329 `ALAMO: FIRE SKIP — margin 74765.89 > free 4770.97`

Đây là chỗ dễ hiểu nhầm nhất: L4 có fire condition thật, nhưng không có order opened.

Nói đúng theo log là: gate hit yes, order send no, vì fail margin check.

Loop reset Full close + cache clear 84997-85004 84997 `ALAMO: CloseAll | closed=2 failed=0` 84998 `ALAMO: CloseAll — reset to STANDBY` 84999-85002 `Flushing SC cache`, `reset completed`, `cache flushed` 85004 `SC memory cleared (g_scClosed[] reset)`

Phần đóng full loop không chỉ đóng lệnh còn lại, mà còn reset state và dọn cache đúng như yêu cầu hotfix.

Đây là bằng chứng rằng cycle kết thúc sạch, không để lại prev-cache hay SC memory cũ.

Vì sao DD vẫn lên 41.14%?

DD không dừng ở L3 vì L4 không mở được. Nói thẳng: đây là giới hạn margin, không phải lỗi snapshot hay lỗi Y/Y-1.

L4 Gate Đã đạt 40% từ nhiều tick liên tiếp

Các dòng L4 FIRE bắt đầu từ vùng 40.88% và đi qua đúng mốc 41.14%.

Margin Check 74765.89 > 4770.97

Ở mốc 41.14%, required margin lớn hơn free margin rất xa, nên AlamoFire skip trước khi có order mới.

Meaning L4 là “gate reached”, không phải “order opened”

Vì thế case này phải được đọc là L1, L2, L3 real FIREL4 skipped by margin.

Evidence map

Build Advisor header

Hotfix4 header ghi rõ: L2 giữ rule cũ, L3+ monitor khi Ln-1 đã fired, snapshot bám fire-decision anchor, full-loop close clear prev cache.

Case start L1 FIRE

78373-78375: L1 mở thật và kích hoạt monitoring cho L2.

Snapshot validity L2 / L3 snapshot

79213-7921679992-79995: có đủ count, lệnh_y, y-1, và snapshot basis.

Fallback validity L3 uses y-1

7999984775: fallback sang 1809 rồi L3 close thành công bằng ticket đó.

Margin limit L4 skip

83328-83329: DD đạt 41.14%, nhưng margin required lớn hơn free margin nên không có L4 order.

Full reset CloseAll + cache flush

84997-85004: CloseAll, reset STANDBY, flush cache, và clear SC memory đều xuất hiện đúng thứ tự.

Core files behind this version

Entry build Experts/Advisors/FBot_v4.1_Alamo_Jun2026_(v2-LenhY-Hotfix4-SnapshotAnchor).mq5

Header của build này là public summary tốt nhất cho phạm vi thay đổi đang được deploy.

Main logic Include/FBot/FBotAlamo.mqh

Chứa rule L2 vs L3+, snapshot anchor mới, mapping ticket-level, close behavior, và full-loop cache clear.

State shape Include/FBot/FBotGlobals.mqh

Chứa g_alamoTicketLevels[], fields mới cho lệnh_y / y-1, và schema snapshot mở rộng.