6 Bài Tập OOP Trên Lớp CCluster — Buổi 6 Grid Multi-Cluster MT5

Grid Bot cơ bảnGrid 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?

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

🔗 huongnghiepdulieu.com


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.*