135 lines
5.2 KiB
Markdown
135 lines
5.2 KiB
Markdown
# EA_ICT_CL – Kiến trúc & luồng chạy
|
||
|
||
File chính: `Experts/EA_ICT_CL.mq5`
|
||
Thư mục module: `Experts/EA_ICT_CL/` (các `.mqh`)
|
||
|
||
## 1) Mục tiêu thiết kế
|
||
|
||
- `EA_ICT_CL.mq5` nên là **file “glue”**: `OnInit/OnDeinit/OnTick/...` + gọi hàm module.
|
||
- Mỗi `.mqh` chỉ gánh **một trách nhiệm**: config/state/signals/risk/trade/filters/…
|
||
- Migrate **từng phần nhỏ** để tránh trùng định nghĩa (enum/struct/global) và dễ debug.
|
||
|
||
## 2) Luồng chạy tổng thể (theo mô tả hiện tại trong header v4.3)
|
||
|
||
### Bối cảnh timeframe
|
||
|
||
- **BiasTF (D1)**: xác định bias (UP/DOWN/SIDEWAY/NONE)
|
||
- **MiddleTF (H1)**: xác định trend + quét FVG thuận xu hướng
|
||
- **TriggerTF (M5)**: xác nhận entry bằng **MSS** (market structure shift)
|
||
|
||
### State machine
|
||
|
||
EA đang dùng state machine:
|
||
|
||
- **`EA_IDLE`**
|
||
- Mục tiêu: tìm/đặt “FVG tốt nhất” (MiddleTF) để theo dõi.
|
||
- **`EA_WAIT_TOUCH`**
|
||
- Mục tiêu: chờ giá retrace và **touch vào vùng FVG** (H1).
|
||
- **`EA_WAIT_TRIGGER`**
|
||
- Mục tiêu: khi đã touch FVG, chờ **M5 MSS** xác nhận đảo chiều theo trend.
|
||
- v4.3: MSS chỉ detect khi state này.
|
||
- **`EA_IN_TRADE`**
|
||
- Mục tiêu: quản lý pending/position (trailing/timeout/cleanup tuỳ EA).
|
||
|
||
### Decision flow “từ trên xuống”
|
||
|
||
1) **D1 Bias**
|
||
- Xác định `HTFBias` (UP/DOWN/SIDEWAY/NONE).
|
||
2) **H1 Trend / Swing structure**
|
||
- Xác định `MarketDir` (UP/DOWN/NONE) và các swing gần nhất: `h0/h1/l0/l1`.
|
||
3) **Quét H1 FVG**
|
||
- Tạo/duy trì pool FVG (`g_FVGPool`) tối đa `MAX_FVG_POOL`.
|
||
- FVG có lifecycle: `PENDING → TOUCHED → USED`.
|
||
4) **Touch FVG**
|
||
- Khi bid/ask đi vào vùng gap → `touchTime` được set, chuyển state sang chờ trigger.
|
||
5) **M5 MSS (chỉ khi `EA_WAIT_TRIGGER`)**
|
||
- Nếu H1 UP: bull MSS khi close phá **OLD** `tH0` → entry = `tH0`, SL = `tL0`.
|
||
- Nếu H1 DOWN: bear MSS khi close phá **OLD** `tL0` → entry = `tL0`, SL = `tH0`.
|
||
6) **Lập kế hoạch lệnh (OrderPlan)**
|
||
- `direction`: +1 BUY LIMIT / -1 SELL LIMIT
|
||
- `entry`, `stopLoss`, `takeProfit`, `lot`
|
||
7) **Risk sizing**
|
||
- Lot theo `%risk` và khoảng SL (points).
|
||
- Chặn trade nếu chạm max daily loss (`InpMaxDailyLossPct`).
|
||
8) **Gửi pending limit**
|
||
- Gắn `magic` và comment có `fvg_id` để trace.
|
||
|
||
## 3) Các folder/file module (vai trò + khi nào dùng)
|
||
|
||
Thư mục: `Experts/EA_ICT_CL/`
|
||
|
||
- **`Config.mqh`**
|
||
- Nơi đưa `input`, `enum` và hằng số cấu hình.
|
||
- Khi migrate: chuyển dần `input ...` và các enum khỏi `.mq5` sang đây (rồi include).
|
||
|
||
- **`State.mqh`**
|
||
- Nơi đưa `struct` contexts (bias/trend/fvg/orderplan/daily risk) + state machine.
|
||
- Khi migrate: chuyển dần các `struct`, `g_*` globals sang đây để module nào cũng dùng chung.
|
||
|
||
- **`Utils.mqh`**
|
||
- Helper thuần: clamp/round/newbar/time formatting…
|
||
- Ưu tiên migrate các hàm nhỏ, không phụ thuộc EA logic (vd `MyBarShift` cũng có thể đặt vào đây hoặc `Market/Indicators`).
|
||
|
||
- **`Logging.mqh`**
|
||
- Chuẩn hoá log bật/tắt theo `InpDebugLog`.
|
||
- Có thể mở rộng: prefix theo symbol/tf/state, ghi file, debug panel.
|
||
|
||
- **`Market.mqh`**
|
||
- Helper về symbol specs (digits/point/spread), trade allowed, quote access…
|
||
|
||
- **`Sessions.mqh`**
|
||
- Helper session/time filter (London/NY theo UTC).
|
||
- Khi migrate: đưa logic “được trade trong giờ nào?” sang đây.
|
||
|
||
- **`Filters.mqh`**
|
||
- Các bộ lọc: spread, news (nếu có), day-of-week, max trades/day, cooldown…
|
||
|
||
- **`Indicators.mqh`**
|
||
- Wrapper CopyBuffer/CopyTime, quản lý handles nếu bạn dùng iMA/iATR/…
|
||
|
||
- **`Signals_BOS_FVG_OB.mqh`**
|
||
- Nơi tập trung **logic tín hiệu**: BOS/MSS/FVG/OB… và build `OrderPlan`.
|
||
- Mục tiêu: module này “pure” nhất có thể (input/state snapshot → plan).
|
||
|
||
- **`Risk.mqh`**
|
||
- Tính lot, normalize volume, kiểm soát daily drawdown.
|
||
|
||
- **`Orders.mqh`**
|
||
- Chuẩn hoá normalize price, build comment, mapping direction→order type…
|
||
|
||
- **`Trade.mqh`**
|
||
- Các hàm “side-effect”: `OrderSend`, modify, cancel, close.
|
||
|
||
- **`Trailing.mqh`**
|
||
- Trailing/BE/partial close (nếu có).
|
||
|
||
## 4) Gợi ý thứ tự migrate (an toàn, ít rủi ro nhất)
|
||
|
||
Để tránh trùng định nghĩa và lỗi include:
|
||
|
||
1) **Move helpers**: `MyBarShift`, swing helper functions → `Utils.mqh` (hoặc tách `Swing.mqh` nếu bạn muốn).
|
||
2) **Move trade wrappers**: các đoạn `MqlTradeRequest/Result` → `Trade.mqh` + helper normalize → `Orders.mqh`.
|
||
3) **Move risk**: tính lot / daily loss → `Risk.mqh`.
|
||
4) **Move filters/session** → `Sessions.mqh`, `Filters.mqh`.
|
||
5) **Cuối cùng mới move types**: enums/struct/global sang `Config.mqh` + `State.mqh`.
|
||
|
||
> Lưu ý: Chỉ include module nào khi bạn đã chuyển phần tương ứng khỏi `.mq5` (để tránh “redefinition”).
|
||
|
||
## 5) Quy ước include trong `EA_ICT_CL.mq5` (gợi ý)
|
||
|
||
Khi bắt đầu migrate, thường include theo thứ tự:
|
||
|
||
1. `Config.mqh`
|
||
2. `State.mqh`
|
||
3. `Utils.mqh`
|
||
4. `Logging.mqh`
|
||
5. `Market.mqh`
|
||
6. `Indicators.mqh`
|
||
7. `Sessions.mqh` / `Filters.mqh`
|
||
8. `Risk.mqh`
|
||
9. `Orders.mqh`
|
||
10. `Trade.mqh`
|
||
11. `Signals_BOS_FVG_OB.mqh`
|
||
12. `Trailing.mqh`
|
||
|