EA_ICT_CL – Kiến trúc & cấu trúc file
EA chính: Experts/EA_ICT_CL.mq5
Thư mục module: Experts/EA_ICT_CL/ (các file .mqh)
1. Cấu trúc thư mục và chức năng từng file
File chính (entry point)
| File | Vai trò |
|---|---|
EA_ICT_CL.mq5 |
File “glue”: khai báo globals, include 3 tầng module, và chỉ chứa OnInit(), OnTick(), OnDeinit(). Không chứa logic nghiệp vụ. |
Layer 1 – Cấu hình & kiểu dữ liệu (include đầu tiên)
| File | Chức năng |
|---|---|
Config.mqh |
Toàn bộ input của EA: timeframe (Bias/Middle/Trigger), risk %, session giờ (London/NY), swing/FVG/MSS params, magic, slippage, debug flags. |
State.mqh |
Enums và struct: EAState, MarketDir, BlockReason, FVGStatus; struct TFTrendContext, FVGRecord, OrderPlan, DailyRiskContext. Không chứa biến global. |
Layer 2 – Tiện ích (sau Config + State)
| File | Chức năng |
|---|---|
Utils.mqh |
Hàm helper thuần: ClampDouble, ClampInt, RoundToStep, IsNewBar. |
Logging.mqh |
Wrapper log bật/tắt: LogPrint, LogPrintF (gọi khi InpDebugLog bật). |
Market.mqh |
Helper market: GetBid, GetAsk, GetPoint, GetDigits, GetSpreadPoints, IsTradeAllowedNow. |
Indicators.mqh |
Wrapper an toàn: CopyBufferSafe, CopyTimeSafe cho dữ liệu series. |
Sessions.mqh |
Lọc theo giờ: IsHourInRange, GetUTCHour (dùng cho session London/NY). |
Filters.mqh |
Bộ lọc chung: Filter_MaxSpreadPoints (có thể mở rộng news, max trades/day). |
Risk.mqh |
Risk & volume: NormalizeVolume, LotsFromRiskMoneyAndSLPoints. |
Orders.mqh |
Chuẩn hoá order: NormalizePrice, BuildOrderComment. |
Swing.mqh |
Swing structure: MyBarShift, IsSwingHighAt, IsSwingLowAt, ScanSwingStructure, ResolveTrendFromSwings. |
Trailing.mqh |
Placeholder cho logic trailing / breakeven / partial close (chưa implement). |
Layer 3 – Logic nghiệp vụ (sau khi đã khai báo globals trong .mq5)
| File | Chức năng |
|---|---|
Contexts.mqh |
Cập nhật context: UpdateTFTrendContext, UpdateDailyRiskContext, UpdateAllContexts. Dùng globals g_MiddleTrend, g_TriggerTrend, g_DailyRisk. |
Guards.mqh |
Điều kiện trước khi trade: IsSessionAllowed, IsDailyLossOK, IsMiddleTrendValid, EvaluateGuards. Set g_BlockReason khi block. |
Signals_BOS_FVG_OB.mqh |
FVG: IsCandleStrong, IsFVGInPool, ScanAndRegisterFVGs, UpdateFVGStatuses, GetBestActiveFVGIdx. Quản lý pool FVG và trạng thái PENDING/TOUCHED/USED. |
Trade.mqh |
Order plan & execution: CalcLotFromRisk, BuildOrderPlan, ExecuteLimitOrder. Gửi lệnh pending limit, dùng g_OrderPlan. |
StateMachine.mqh |
State machine: TransitionTo, ResetToIdle, OnStateIdle, OnStateWaitTouch, OnStateWaitTrigger, OnStateInTrade, RunStateMachine. Điều phối theo g_State. |
Drawing.mqh |
Vẽ trên chart: DrawOneSwingPoint, DrawMiddleSwingPoints, DrawTriggerSwingPoints, DrawMSSMarker, DrawMSSMarkers, DrawOrderVisualization, DrawOneFVGRecord, DrawFVGPool, DrawContextDebug, DrawVisuals. Dùng prefix PREFIX_SWING_MIDDLE, PREFIX_ORDER_VISUAL, v.v. |
2. Thứ tự include trong EA_ICT_CL.mq5
Layer 1: Config.mqh → State.mqh
Layer 2: Utils, Logging, Market, Indicators, Sessions, Filters, Risk, Orders, Swing, Trailing
Globals: g_State, g_MiddleTrend, g_TriggerTrend, g_DailyRisk, g_FVGPool, g_OrderPlan, PREFIX_*
Layer 3: Contexts.mqh → Guards.mqh → Signals_BOS_FVG_OB.mqh → Trade.mqh → StateMachine.mqh → Drawing.mqh
Layer 3 phải include sau khi globals và prefix đã được khai báo trong .mq5.
3. Luồng chạy tổng thể (v4.3)
Timeframe
- MiddleTF (H1): trend + quét FVG thuận xu hướng.
- TriggerTF (M5): xác nhận entry bằng MSS (market structure shift).
State machine
| State | Mục đích |
|---|---|
| EA_IDLE | Chọn FVG “tốt nhất” (ưu tiên TOUCHED, rồi PENDING mới nhất). |
| EA_WAIT_TOUCH | Chờ giá retrace vào vùng FVG (H1). |
| EA_WAIT_TRIGGER | Đã touch FVG → chờ M5 MSS (chỉ detect MSS trong state này). |
| EA_IN_TRADE | Theo dõi pending/position; reset khi fill, cancel hoặc đóng lệnh. |
Luồng quyết định (mỗi tick)
- UpdateAllContexts() – Cập nhật H1/M5 swing (và MSS nếu đang WAIT_TRIGGER).
- EvaluateGuards() – Kiểm tra session, daily loss, H1 trend.
- Nếu pass → RunStateMachine():
UpdateFVGStatuses()+ScanAndRegisterFVGs()+ xử lý theo state (Idle → chọn FVG; WaitTouch → chờ touch/switch FVG; WaitTrigger → khi FVG triggered thì BuildOrderPlan + ExecuteLimitOrder; InTrade → theo dõi order/position). - Nếu InpDebugDraw bật → DrawVisuals() (swing, MSS, FVG pool, order, debug panel).
Entry / SL / TP
- Entry: giá swing bị phá (tH0 cho buy, tL0 cho sell).
- SL: swing đối diện (tL0 cho buy, tH0 cho sell) + buffer 2 point.
- TP: Entry ±
InpRiskReward× |Entry − SL|.
4. Đặt tên object trên chart (prefix)
Các hằng trong EA_ICT_CL.mq5 dùng cho Drawing:
PREFIX_SWING_MIDDLE– H1 swing (MiddleH0/L0…).PREFIX_SWING_TRIGGER– M5 swing (TriggerH0/L0…).PREFIX_MSS_MARKER– Điểm đánh dấu MSS.PREFIX_FVG_POOL– Các hình chữ nhật FVG.PREFIX_ORDER_VISUAL– Vùng/label Entry/SL/TP.PREFIX_DEBUG_PANEL– Bảng thông tin góc trái (H1/M5, Risk, State, Pool, Order).
5. Mở rộng / chỉnh sửa gợi ý
- Thêm input: chỉnh trong
Config.mqh. - Thêm enum/struct: chỉnh trong
State.mqh. - Logic FVG / chọn FVG: chỉnh trong
Signals_BOS_FVG_OB.mqh. - Tính lot / gửi lệnh: chỉnh trong
Trade.mqh. - Chuyển state / xử lý từng state: chỉnh trong
StateMachine.mqh. - Trailing / breakeven: bổ sung trong
Trailing.mqhvà gọi từ state IN_TRADE (trongStateMachine.mqhhoặc từOnTick). - Vẽ thêm object: chỉnh trong
Drawing.mqh, dùng đúng prefix đểOnDeinitcó thể dọn theo prefix nếu cần.