Bài viết gần đây
-
Huỳnh Thị Ngọc Loan — Giảng Viên Yoga & Spa | HNDL
Tháng 8 6, 2026
| Magic & Comment Python MT5: Tách Cụm 6111/6112 Trước Step | HNDL
Được viết bởi Đặng Trí Thanh vào ngày 04/08/2026 lúc 14:07 | 39 lượt xem
Đặng Trí Thanh
Giám đốc Công nghệ · DNT Digital · Hướng Nghiệp Dữ Liệu
Buổi 3 khóa Python Hedging: Magic & Comment chuyên sâu.
Magic & Comment Python MT5: đừng để bot đóng nhầm lệnh người
Bot hedging Python có Global State và Market Cache rồi vẫn có thể phá tài khoản bằng một lỗi “nhỏ”: không phân biệt lệnh của mình với lệnh của người / bot khác.
Trên MetaTrader 5, hai field quyết định việc đó là magic và comment. Buổi 3 khóa Lập trình Python nâng cao Hedging tự động hóa chốt quy ước: whitelist magic (ví dụ 6111/6112), comment có schema parse được, sync State chỉ nuốt lệnh thuộc bot.
Bài mang tính giáo dục kỹ thuật, không cam kết lợi nhuận.
1. Bridge từ Buổi 1–2
| Đã có | Buổi 3 thêm |
|---|---|
| State theo ticket | Lọc / gom theo magic |
cluster_id = symbol:magic |
Chuẩn hóa BUY magic / SELL magic |
| Cache theo symbol | Comment mang level/role — không nhét vào cache giá |
| Lab 2.1 PASS | Order send ghi đúng magic + comment |
Giá và ATR lấy từ Cache theo symbol. Surplus từng cụm lấy từ State theo magic. Trộn hai việc này là bug kiến trúc.
2. Magic Number — CMND của cụm lệnh
Mỗi position MT5 có magic (int). Bot production chỉ được đụng ticket thuộc whitelist trong BotConfig.
Mô hình 2 magic (kiểu Nhi Quái / PyNhiQuaiBot)
| Vai trò | Ví dụ | Ý nghĩa |
|---|---|---|
| BUY cluster | 6111 |
Grid / Surplus phía BUY |
| SELL cluster | 6112 |
Grid / Surplus phía SELL |
@dataclass(frozen=True)
class MagicPolicy:
buy_magic: int = 6111
sell_magic: int = 6112
def owns(self, magic: int) -> bool:
return magic in (self.buy_magic, self.sell_magic)
Anti-pattern
- Magic = 0 cho mọi lệnh
- Hard-code
6111rải 20 file - Lọc chỉ theo symbol, bỏ magic
- Sweep đóng toàn bộ vị thế symbol — kể cả lệnh manual
3. Comment — metadata ngắn nhưng phải parse được
Comment MT5 ngắn. Schema classroom của khóa:
NQ|{role}|L{level}|{tag}
NQ|S|L1|GRID
NQ|H|L2|HEDGE
| Token | Nghĩa |
|---|---|
NQ |
namespace bot |
S / H |
Surplus / Hedge |
L{n} |
X-Level (Buổi 4) |
tag |
GRID / HEDGE… |
Parser không được ném exception làm chết vòng tick. Comment hỏng → role="?", level=0, giữ raw để audit.
def build_comment(role: str, level: int, tag: str = "GRID", prefix: str = "NQ") -> str:
return f"{prefix}|{role.upper()}|L{int(level)}|{tag}"
4. Luồng sync đúng

positions_get()
→ drop magic lạ
→ parse comment → level, role
→ upsert Position
→ rebuild clusters theo symbol:magic
Kết quả: XAUUSD:6111 và XAUUSD:6112 có net riêng. Ticket magic 9999 (manual) không vào State bot.
5. Order send — ghi đúng từ đầu
request = {
"action": mt5.TRADE_ACTION_DEAL,
"symbol": symbol,
"volume": lot,
"type": order_type,
"magic": policy.buy_magic,
"comment": build_comment("S", level=1, tag="GRID"),
}
Sau lệnh: sync_from_mt5() lại. Đừng tin metadata chỉ nằm trong biến local.
6. Lab Buổi 3 trong folder khóa
Buoi 3.../Bai tap/
├─ starter/comment_schema.py
├─ starter/magic_policy.py
├─ starter/ingest.py
└─ starter/run_assignment.py
cd starter
python run_assignment.py
# PASS - Buoi 3 Magic Comment
Đề chấm buộc: parse đúng, bỏ magic 9999, cluster 6111/6112 không trộn volume.
7. Lỗi thường gặp
| Triệu chứng | Nguyên nhân | Hướng xử lý |
|---|---|---|
| Bot đóng lệnh tay | Không whitelist magic | owns() trước mọi close |
| Level luôn 0 sau restart | Comment không schema / không parse | build_comment lúc gửi lệnh |
| Hai cụm chung một net | Gom cluster chỉ theo symbol | cluster_id(symbol, magic) |
| Crash khi comment lạ | raise trong parser |
Fail-soft role=? |
8. Bridge Buổi 4–5–8–9
| Buổi | Dùng field nào |
|---|---|
| 4 · Step & X-Level | level từ comment + ATR cache |
| 5 · Surplus & Hedge | role S/H + net theo magic |
| 8 · Sweep | Chỉ đóng magic thuộc bot |
| 9 · Guard | Từ chối nếu magic/comment lệch policy |
Đọc thêm: Market Cache Buổi 2 · Lab 2.1
9. FAQ
Một magic cho cả BUY và SELL được không? Được nếu chiến lược đơn giản; khóa này khuyến nghị 6111/6112 để tách cụm độc lập như Nhi Quái.
Comment có thay client_order_id crypto không? Khác sàn khác field. Trên MT5, magic + comment là cặp nhận diện chính trong khóa này.
Có cần MT5 để làm bài tập? Không. Lab dùng payload giả + assert.
10. Kết
Global State nhớ lệnh. Cache nhớ thị trường. Magic & Comment quyết định lệnh nào mới được vào bộ nhớ đó. Buổi 3 khóa Python Hedging tại Hướng Nghiệp Dữ Liệu chốt whitelist + schema trước khi vào toán Step và logic Surplus/Hedge.
Học để vận hành có kiểm soát. Mọi quyết định vốn là trách nhiệm của bạn.
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.
Đặng Trí Thanh
Giám đốc Công nghệ · DNT Digital · Giảng viên HNDLĐặng Trí Thanh — Founder & CTO · Hướng Nghiệp Dữ Liệu - DNT Digital. Chuyên đào tạo và triển khai thực chiến Python, MT5 và hệ thống bot auto trading / IB cho học viên và doanh nghiệp.