Bài viết gần đây
-
-
Các ưu điểm của Python trong giao dịch định lư…
Tháng 6 28, 2026 -
Áp dụng thống kê Bayesian trong phân tích thị trư…
Tháng 6 28, 2026 -
Flutter có thể tích hợp dễ dàng với các hệ th…
Tháng 6 27, 2026 -
🚀 Cơ bản về Flutter & Dart
Tháng 6 27, 2026
| 6 Bài Tập OOP Trên Lớp CCluster — Buổi 6 Grid Multi-Cluster MT5
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.*
Weekly Digest — Nhận Bản Tin Hàng Tuần
Nhận các bài viết phân tích kỹ thuật chuyên sâu, thuật toán giao dịch tự động (Trading Bot) và các giải pháp công nghệ mới nhất từ Hướng Nghiệp Dữ Liệu.
Thành ĐT
Founder & Chief Technology Officer, HNDLChuyên gia với hơn 10 năm kinh nghiệm trong phát triển hệ thống giao dịch tự động (Trading Bot), Fintech, Mobile App và phân tích dữ liệu tài chính (Quantitative Analysis). Người sáng lập và trực tiếp dẫn dắt các khóa học thực chiến tại Hướng Nghiệp Dữ Liệu.