Spec timeline: prototype 18:58 → Max walkthrough 21:37–22:14 →
SS reply 23:57 chốt 6/6 ambiguity. Code FBotAlamo.mqh đã unlocked.
Trang này lưu state-machine comparison + concrete example với lệnh 0.61 + 3 price scenarios +
final spec recap cho SS xác nhận lần cuối.
CURRENT ADDENDUM — 2026-06-03
Spec update sau Hotfix7 + re-entry + hf15 review
1. prevCache: cache không được stale khi Ln cao nhất đóng. Nếu L3 đóng mà L2 còn sống,
prevCache phải cascade về L2; nếu không còn Ln sống thì clear cache và chờ full-cycle reset.
2. Re-entry: nếu Dominant Sell, giá đi xuống làm Ln exit đơn lẻ nhưng loop chưa đủ lời để thoát,
rồi giá quay lại đúng vùng đã kích hoạt Ln trước đó, ALAMO được re-fire Ln bằng MARKET order. Điều kiện exit đơn lẻ
giữ nguyên: re-entry hedge vẫn tự close khi profit > 0 / checkpoint hợp lệ, không đổi rule thoát.
2b. Re-entry guard: cache closed-Ln không được stale. Nếu L2 đã active lại bằng luồng ALAMO thường,
cache re-entry của L2 cũ phải clear/disarm. Re-entry không được trigger nếu cùng Ln đang active; với weekend/reopen,
phải có crossing/away-then-return gate thay vì chỉ check bid <= savedPrice hoặc ask >= savedPrice.
3. hf15: bỏ AlamoBasketExitBuffer / basket-threshold exit khỏi spec hiện tại.
hard DD loss-floor chỉ là safety pad chống cook quá sâu, để kiểm chứng sau, chưa coi là logic exit chính.
SS FINAL SPEC — 23:57 RECAP
3 rules chính SS chốt
1. Hedge direction: đám âm là BUY → hedge là SELL (và ngược lại). Vĩnh viễn opposite. 2. Close cases (chỉ 2, không có 3):
(a) Ln đóng trước → full grid đóng sau (eventual cycle close)
(b) Đóng toàn bộ grid kể cả Ln (PosMan triggered close-all)
Case "chỉ đóng 1 trong 2" → KHÔNG xảy ra theo operational logic
3. 2-Condition Filter (áp dụng cho cả Checkpoint check + L2 trigger):
(a) Lệnh ở VỊ TRÍ "trên" (với hedge SELL) / "dưới" (với hedge BUY) so với L1
(b) Lệnh đó đang âm
Cả 2 yes → biến số cho phép tính L2 lot khi DD ≥ 20%
+ Re-fire: dùng MARKET order.
Hotfix5 correction (2026-05-14): Rule (a) đã được đảo lại sau Interpretation A — "dominant" = main grid majority. BUY dom → L1 = SELL → đếm BELOW (Hotfix4 đã đếm ABOVE = SAI). SELL dom → L1 = BUY → đếm ABOVE. Anchor cho L2/L3 = prevLn (không L1-fixed). Fire = DD ≥ N×Thr + Array List all-negative.
Macro concept
ALAMO đẻ ra 1 lệnh Hedge để cứu Grid
Khi Main Grid đang thua nặng (DD ≥ threshold), ALAMO bắn 1 lệnh ngược chiều
với lot = tổng các lệnh đang âm. Mục tiêu: tránh lỗ + hòa vốn bằng cách dùng
hedge profit bù cho Grid loss. Mỗi lệnh hedge (L1, L2, ...) là một
"mạng sống" của account — khóa drawdown ở mức an toàn để các lệnh kế tiếp
có thể trade tiếp mà không tăng DD = Second Chance.
Concrete example — Max 21:37
Stage 2 lifecycle với lệnh anchor 0.61 lot
t=0
Grid BUY drift xuống. Bot mở các lệnh từ index 0 (0.17 lot) đến index 7
(0.61 lot) — lệnh 0.61 là lớn nhất hiện tại, mới mở gần đây.
t=1
FIRE L1
Price Line khiến lệnh 0.61 tăng DD tới 10% threshold → S2 ACTIVE.
Bắn L1 SELL với lot = tổng các BUY đang âm (≥ 0.01 lot).
t=2
CLOSE L1Giá đi xuống → lệnh 0.61 (gần nhất với L1 theo lot/giá) dương trở lại →
cắt L1. Loop close thành công → ALAMO RESET.
t=3 (alt)
LOOP FAIL
Nếu giá đó chưa làm DD tới 10% (Grid vẫn lỗ) → quay về S1 Monitoring,
chờ giá rớt thêm. Nếu sau đó giá quay lại vùng đã kích hoạt Ln, re-entry
được phép bắn lại Ln để giữ hedge loop.
t=4 (alt)
WHIPSAW
DD quay lại 10% → giá cao hơn price line 0.61 → tiếp tục S2 (L1) → có thể nhảy liên tục
ăn sạch profit → trigger increase exit condition + PosMan tái cân bằng.
t=5
ESCALATE L2
Không thoát được L1 → DD ≥ 20% → S3.1 monitor (DD ≥ 2×thr − 2% = 18%) →
S3.2 fire L2 với lot = tổng các lệnh âm có lots cao hơn L1 + tất cả đang âm.
3 Price scenarios khi S2 Active
↓
2.1. Đi XUỐNG
L1 (SELL) ngày càng có lãi. Track lệnh 0.61 (gần nhất với L1) — khi nó dương trở lại
→ cắt L1.
2.1.1 OK → reset · 2.1.2 FAIL → về S1 · 2.1.3 whipsaw → PosMan
↔
2.2. Đi NGANG
Hedge mở nhưng giá xuống chưa đủ thoát + lên chưa đủ vào lệnh tiếp.
Giữ trạng thái tới khi đi xuống/lên.
Idle — không action
↑
2.3. Đi LÊN
Ước lượng ~3 lệnh để đủ khối lượng. <3 lệnh: giống 2.1, check lệnh
âm to nhất + gần 0.61 (checkpoint). ≥3 lệnh: PosMan kiểm soát.
<3 → ALAMO · ≥3 → PosMan + redundancy
Account "Mạng sống" — DD scale
10% L1
20% L2
30% L3
70% danger
80% DEAD
Mỗi Ln (L1, L2, L3...) = 1 mạng của account. DD bay tới 70-80% →
hết cứu. Range 90-150 giá (XAU) → mất kiểm soát DD → nếu rebound thì vẫn sống
(ít nhất không lỗ).
3 điểm khác lớn
prevCache
Clear-only → cascade
RISK Highest Ln close làm cache stale
NOW Trỏ về highest Ln còn sống
Re-entry
Closed Ln can re-fire
OLD Ln close rồi chờ loop/grid
NOW Price returns to saved trigger → MARKET re-fire
hf15 exit
Basket threshold removed
DROP combinedNet threshold exit
CHECK hard DD loss-floor later
State machines
CŨ — Prototype 17:00
2-case logic, 3-state machine
Ctrl/Cmd + wheel zoom · drag pan · dbl-click fit
Loading...
MỚI — Prototype 18:58
3-stage state machine, Trường hợp 1/2 + Stage 3 escalation
Ctrl/Cmd + wheel zoom · drag pan · dbl-click fit
Loading...
Full diff table
Aspect
CŨ (Prototype 17:00)
MỚI (Prototype 18:58)
State model
3-state: STANDBY / S1 / S2
5-state: + S3.1 monitor + S3.2 active
S1 entry trigger
RANGER active OR DD ≥ 0.5×threshold
DD ≥ 50% threshold (≡ 0.5×, cùng số)
S2 fire condition
Con1 (all âm) + Con2 (DD ≥ threshold)
SubCon1 (all âm) + DD ≥ threshold
Close logic structure
Case 1 (Ln biggest) / Case 2 (not biggest)
TH1 (no orders above/below) / TH2 (has orders)
Reference object for close
MG-max = lệnh lot lớn nhất Main Grid
Lệnh X = lệnh gần Ln nhất (theo gì?)
3-order gate
Không có — ALAMO luôn tự đóng
MỚI: ≥ 3 lệnh trên/dưới Ln → PosMan đóng
Re-fire timing
Q1 pending (a immediate vs b wait)
Current: khi Ln đã exit đơn lẻ nhưng loop chưa thoát, price quay lại saved Ln trigger → MARKET re-fire
prevCache after Ln close
Clear / stale-risk khi highest Ln đóng
Hotfix7: cascade về highest Ln còn sống; chỉ clear khi không còn Ln hoặc full-cycle reset
Escalation L2
DD ≥ 2×thr → fire L2 ngay (1-step)
2-step: S3.1 monitor (DD≥2×thr−2%) → S3.2 fire (DD≥2×thr)
Scaling Ln
AlamoEscMultL2=2, AlamoEscMultLnPlus=3
L1=10% DD, L2=20%, L3=30% (clean N× rule)
PosMan integration
Implicit (PosMan close loop)
Addendum 1 explicit: PosMan close → ALAMO close all redundancy
Safety net
Bỏ LnStopLossMult + BlockExitRatio
Current: bỏ basket threshold exit; hard DD loss-floor để check sau, không chốt là primary exit
Order type re-fire
Q2 pending — em propose MARKET
Resolved: MARKET order qua Buy()/Sell(); giữ exit đơn lẻ như cũ
DEBUG — backtest 2026.02.20 → 2026.02.24
Tại sao margin còn nhưng Main Grid nhìn như không vào?
Evidence từ tester log 20260603.log. Đây là root-cause hiện tại, chưa phải fix final.
1.Đêm 20/2 → sáng 23/2: không phải margin block
ROOT CAUSE
Không thấy MARGIN_BLOCK trong window 2026.02.20 20:00 → 2026.02.23 03:00.
Margin/free-margin không phải lý do broker/code từ chối.
Trong window này Main Grid vẫn vào tối 20/2: 20:27 buy stop,
rồi nhiều sell-stop từ 20:39 tới 23:53. Không có log ngày
21/2 và 22/2; sang 23/2 01:00:39-01:00:57 broker trả
market closed cho sell-stop 1.11, sau đó 01:01:18 order đi được ngay.
1b.Main Grid thực ra có vào sau khi Skill6 unlock
EVIDENCE
Main Grid bị khóa theo sequence khi Skill6 đang tạo grid; chỉ unlock khi Skill6 đủ 8/8 pair
hoặc chuyển sang monitoring/breakout.
Log trong window đúng: 2026.02.20 20:27:42 đặt buy stop 0.15,
20:27:43 triggered. Sau đó SELL grid tăng tới level 88 lúc 23:53:41.
Sáng 2026.02.23 cũng không phải no-entry: 01:01:18 đặt
sell stop 1.11, 01:02:45 triggered; 01:04:30 đặt
sell stop 1.34, 01:04:43 triggered.
2.DD hơn 15% nhưng UI có L:#RR...EXPLAINED
L:#RR... là state UI từ g_levels[]: # = active,
R = re-entry-ready. Nó không tự chứng minh DD đã đạt L2/L3 đúng rule.
Sau 2026.02.23 01:05:48, log ghi ALAMO: All Ln closed → STANDBY (nextLnIdx=2 preserved).
Tức là Ln đã đóng riêng, escalation index vẫn preserve để tránh reset sai cycle; UI có thể nhìn như còn level/re-entry,
dù hệ thống không còn hedge primary đang chạy.
3.Sau 23/2 nhìn như pause rồi 24/2 lại trả lệnh và âm ~15%
NEEDS FIX
Phần 23/2-24/2 khớp với re-entry spam, không phải Main Grid bị thiếu margin rồi tự nhiên hồi phục.
Closed Ln được arm, price quay lại saved trigger nên log liên tục ALAMO_REENTRY: TRIGGERED.
Root cause đã detect ở 2026.02.23 01:05:48-01:06:29: L2 BUY mở tại
5122.83, close đơn lẻ và save cache; sau đó L2 active lại tại 5122.59
nhưng cache cũ saved=5122.83 vẫn còn. Vì BUY re-entry dùng level check
bid <= savedPrice, tick reopen quanh giá đó làm trigger true liên tục.
Cần clear cache khi cùng Ln active lại, skip nếu Ln đang active, chỉ log after real fire,
và thêm crossing gate cho weekend/reopen.
6/6 RESOLVED — SS chốt 23:57
Code FBotAlamo.mqh đã unlocked ✓
Max walkthrough resolve 4/6, SS reply 23:57 resolve nốt 2 còn lại + clarify 2 CLARIFIED.
Tất cả ambiguity đã chốt. Em sẵn sàng code state machine 5-stage.
1."Trên Ln / dưới Ln" — phân loại theo gì?
RESOLVED
Em hiểu cuối cùng: theo VỊ TRÍ giá relative to L1,
direction phụ thuộc CHIỀU Ln.
SS confirm 23:57: "Lệnh ở vị trí 'trên' (với chiều SELL) /
'dưới' (với chiều BUY) so với L1". Tức là:
Hedge SELL (đám BUY âm) → "trên L1" = orders có giá CAO hơn L1
Hedge BUY (đám SELL âm) → "dưới L1" = orders có giá THẤP hơn L1
2."Lệnh X" / "Checkpoint" — định nghĩa
RESOLVED
Em hiểu cuối cùng: orders thỏa 2-condition filter —
vị trí (Q1) + đang âm.
SS confirm 23:57: "Hai điều kiện check: a) vị trí trên/dưới L1,
b) đang âm. Nếu cả 2 yes → biến số cho phép tính L2 khi DD ≥ 20%". Filter này áp dụng:
Khi check L1 thoát: checkpoint flip dương → close L1
Khi tính L2 lot: sum lots tất cả orders qualified
3.Trường hợp 1 "không có lệnh trên/dưới Ln"
RESOLVED
Em hiểu cuối cùng: KHÔNG có TH1 riêng — không xảy ra theo operational logic.
SS confirm 23:57: "Sẽ luôn là 1 trong 2 trường hợp: (a) Ln đóng trước
full grid đóng sau, (b) đóng toàn bộ grid kể cả Ln. Trường hợp (c) 'chỉ đóng 1 trong 2'
không thể xảy ra theo operational logic". Code đơn giản: chỉ implement
2 close cases, không cần edge case TH1.
4.S3.1 "đo" = sum lots?
RESOLVED
Em hiểu: tính TỔNG LOT trong khoảng đó = volume Ln+1 sắp bắn.
Max confirm 22:01: "Hedge = tổng các lệnh ≥ 0.01 lot mà đang có lợi nhuận
âm và lots cao hơn L1". RESOLVED — đo = sum lots (filter: âm + > L1 lots).
5."Loop đóng được / Loop FAIL"
RESOLVED
Em hiểu: OK = full close cycle. FAIL = đóng Ln nhưng Grid vẫn lỗ.
Max confirm 21:37:
2.1.1 OK → reset
2.1.2 FAIL (DD chưa tới 10%) → về S1 Monitoring
2.1.3 Whipsaw (DD quay lại 10% liên tục) → ăn sạch profit → trigger PosMan rebalance
RESOLVED + thêm case whipsaw em chưa nghĩ tới.
6.Re-fire Ln — order type
RESOLVED
Em hiểu cuối cùng: MARKET order.
SS confirm 23:57: "Dùng market order Update". Code g_alamoTrade.Buy()
/ g_alamoTrade.Sell() với giá thị trường hiện tại (đã có pattern trong AlamoFire cũ).
✓ ALL 6 RESOLVED6 RESOLVED
· Code FBotAlamo.mqh rewrite chuẩn bị bắt đầu. Plan dir sẽ tạo tại
plans/260513-0003-alamo-prototype-3stage-rewrite/ với phase files.