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`
|
|||
|
|
|