6 Bài Tập OOP Trên Lớp CCluster — Buổi 6 Grid Multi-Cluster MT5
Grid Bot cơ bản và Grid Bot chuyên nghiệp khác nhau ở một điểm then chốt: OOP + Đa cụm (Multi-Cluster).
Trong Buổi 6 khóa Bot MT5 Nâng cao — Chiến thuật Rải quân (Grid Logic), học viên không chỉ chạy lưới Buy/Sell song song. Toàn bộ logic được đóng gói vào lớp `CCluster`: mỗi cụm tự quản Magic Number, điểm neo P₀, cache lệnh, chốt lời Surplus, khóa Hedge… Cụm nào lo việc cụm đó.
Sau buổi học, học viên thực hành trên `Buoi6_Code.mq5` với 6 bài tập nâng cao — mỗi bài chạm trực tiếp Encapsulation · Constructor · Getter · Dynamic memory trong MQL5.
Vì sao cần Multi-Cluster OOP?
| Amateur | Professional (Buổi 6) |
|---|---|
| Buy/Sell dùng chung biến toàn cục | 2+ thực thể `CCluster` độc lập |
| Step cố định | Dynamic Step co giãn |
| Chỉ Basket TP | Surplus Harvest từng Step |
| Restart VPS mất trạng thái | Global Variables persist P₀, ResetCount |
*”Lưới Buy và lưới Sell chạy song song — nhưng không hề biết đến sự tồn tại của nhau.”*
Đó là tinh thần Encapsulation: mỗi cụm là một module tự quản, EA chỉ điều phối qua vòng lặp `Process()`.
Bài tập 1 — Mảng đối tượng động (Dynamic Cluster Array)
Vấn đề: Khai báo cứng `m_buy_cluster` và `m_sell_cluster` — muốn thêm cụm thứ 3, 4 phải sửa `OnInit()` và `OnTick()` thủ công.
Yêu cầu OOP:
- Định nghĩa `CCluster* m_clusters[];`
- Khởi tạo bằng `new` trong `OnInit()`, giải phóng bằng `delete` trong `OnDeinit()`
- `OnTick()` chỉ cần vòng lặp `for` gọi `CachePositions()` và `Process()`
Kỹ năng: Dynamic memory · tránh memory leak · scale EA không đụng luồng chính.
Bài tập 2 — Panic Sync đa cụm (Cross-Cluster Panic Sync)
Vấn đề: Cụm Buy bị Lockdown nhưng cụm Sell vẫn rải DCA → margin toàn tài khoản cạn nhanh.
Yêu cầu OOP:
- Cờ toàn cục `g_panic_lockdown`
- Quét tất cả cụm: nếu bất kỳ cụm nào `IsLocked() == true` → bật panic
- Trong `Process()`: panic bật → dừng mở DCA mới, vẫn cho chốt Surplus
Kỹ năng: Quản trị rủi ro cấp hệ thống — không phải rủi ro từng lệnh.
Bài tập 3 — Multi-Symbol Cluster
Vấn đề: `CCluster` mặc định giao dịch `_Symbol` của chart — không linh hoạt đa cặp.
Yêu cầu OOP:
- Thuộc tính `string m_symbol_name;`
- Constructor: `CCluster(int magic, bool is_buy, string symbol_name);`
- Thay `_Symbol` bằng `m_symbol_name` trong mọi truy vấn giá và giao dịch
- EA trên chart EURUSD chạy song song cụm GBPUSD
Kỹ năng: Constructor overload · module hóa theo symbol.
Bài tập 4 — Giá trung bình & Break-Even trên chart
Vấn đề: DCA cần biết điểm hòa vốn — mỗi cụm phải tự tính, không dùng số chung.
Yêu cầu OOP:
- `GetAveragePrice()` — trung bình trọng số theo volume
- `GetBreakEvenPrice()` — cộng/trừ commission + swap
- Tự vẽ/cập nhật `OBJ_HLINE` (xanh nhạt Buy · đỏ nhạt Sell)
Kỹ năng: Getter method · visualization gắn với đối tượng.
Bài tập 5 — Drawdown & Analytics theo cụm
Vấn đề: Backtest/live-test cần đo hiệu suất từng cụm, không chỉ balance chung tài khoản.
Yêu cầu OOP:
- `m_cluster_peak_equity` — đỉnh vốn riêng từng cụm
- `GetMaxDrawdown()` — DD cục bộ trong chu kỳ lưới hiện tại
- `GetProfitFactor()` — lọc lịch sử theo Magic Number của cụm
- Đẩy số liệu lên Dashboard góc chart
Kỹ năng: Analytics encapsulated · ra quyết định dựa trên số liệu cụm, không nhìn chung balance.
Bài tập 6 — Cooldown độc lập theo cụm
Vấn đề: Cooldown toàn EA (Global Variable chung) — cụm Buy chốt lời nghỉ thì cụm Sell đang kẹt DD cũng bị đóng băng.
Yêu cầu OOP:
- `datetime m_cooldown_until;`
- `bool IsInCooldown();` — kiểm tra trong `Process()` của từng cụm
- Bỏ GV cooldown toàn EA
Kỹ năng: State management per object · tránh side effect chéo cụm.
Tự kiểm tra sau 6 bài tập
| # | Câu hỏi | Pass nếu… |
|---|---|---|
| BT1 | Thêm cụm thứ 3 có sửa OnTick không? | Chỉ sửa input + resize mảng |
| BT2 | 1 cụm Lockdown, cụm kia còn DCA? | Không — panic sync |
| BT5 | Dashboard hiện DD/PF riêng? | Có — theo Magic |
| BT6 | Buy cooldown, Sell vẫn DCA? | Có |
Khóa học liên quan
📚 Bot MT5 Nâng cao · Phần 2 — Chiến thuật Rải quân (Grid Logic)
📚 Xây dựng IB bằng Bot Auto Trading — Học phần 2
Lưu ý: Giao dịch Forex có rủi ro. Nội dung mang tính học thuật — minh họa kiến trúc MQL5/OOP, không phải khuyến nghị đầu tư hay cam kết lợi nhuận.
*Bạn đã làm tới bài tập mấy? Gửi screenshot Dashboard BT5 để được review.*