Danh mục
Nền tảng
Độ khó
Cơ bản
Dùng trong
Vận hành MT5Đánh giá EA

Magic number

Một số nguyên mà Expert Advisor đóng lên mọi lệnh nó gửi đi, để nhận ra vị thế của chính mình và không đụng tới bất cứ thứ gì khác trong tài khoản.

còn gọi: magic của EA, mã magic của lệnh, MAGIC

Đã cập nhật · Đã đánh giá

Nói đơn giản

Một tấm nhãn tên trên từng giao dịch. Terminal không quan tâm ai mở vị thế, nên mỗi EA tự ghi số của mình lên phiếu lệnh rồi chỉ đụng tới những phiếu mang số đó.

Vì sao quan trọng

MetaTrader cho mọi EA trên một tài khoản cùng một góc nhìn về mọi vị thế. Không có nhãn, một EA không thể phân biệt lệnh của nó với lệnh của bạn hay của EA khác — và một EA quản lý nhầm vị thế là loại lỗi làm mất tiền chứ không phải loại lỗi báo ra màn hình.

  • Nó chính là thứ khiến việc chạy nhiều EA trên cùng một tài khoản trở nên khả thi ngay từ đầu.
  • Nó bảo vệ các lệnh vào tay: những lệnh đó mang magic 0, và một EA viết đúng sẽ không bao giờ đụng tới.
  • Nó là cách tách lịch sử giao dịch theo từng chiến lược về sau — nhãn ấy còn lại trong lịch sử deal.

Trong MetaTrader 5

Xuất hiện ở đâu trong MT5

  • Chart → thuộc tính EA (F7) → Inputs — tham số MagicNumber của chính EA
  • Strategy Tester → Inputs — vẫn tham số đó khi kiểm thử
  • Mã MQL5: MqlTradeRequest.magic khi gửi, POSITION_MAGIC / ORDER_MAGIC / DEAL_MAGIC khi đọc lại

EA dùng nó thế nào

  • Đặt một lần lúc khởi động — CTrade::SetExpertMagicNumber(MagicNumber) — sau đó mọi lệnh EA gửi đi đều mang nhãn.
  • Lọc ở mỗi vòng: vòng lặp vị thế bỏ qua mọi phiếu có POSITION_MAGIC không phải của nó trước khi sửa, dời hay đóng bất cứ thứ gì.
  • Lịch sử cũng được lọc y hệt, để thống kê theo từng EA chỉ tính trên deal của EA đó.
  • Mọi EA do Builder của mt5depot tạo ra đều kèm tham số MagicNumber với giá trị suy ra từ chiến lược, nên hai EA được tạo khác nhau không đụng nhau ngay từ đầu.

Thiết lập thường gặp

Thiết lập Giá trị thường dùng Ghi chú
Lệnh vào tay 0 Mặc định của terminal. Một EA không bao giờ nên quản lý magic 0.
Một EA, một sản phẩm bất kỳ số nguyên duy nhất nào Số nào dễ nhớ cũng được — 20260807, 1001.
Cùng một EA trên nhiều sản phẩm một giá trị cho mỗi chart Nếu không, bản chạy EURUSD sẽ đóng vị thế của bản chạy GBPUSD.
EA danh mục chạy nhiều chiến lược một giá trị cho mỗi nhánh Mỗi nhánh cần nhãn riêng để được dời và đóng độc lập.

Sự cố vận hành thường gặp

  • Hai bản chạy để cùng một magic: mỗi bản coi vị thế của bản kia là của mình và đóng chúng vào lúc sai.
  • Đổi magic khi còn vị thế mở sẽ bỏ rơi chúng — EA không còn nhận ra những lệnh chính nó mở vài phút trước, và không gì đóng chúng tự động nữa.
  • Để magic bằng 0 tức là giao cho EA quyền quản lý các lệnh vào tay của bạn.
  • Gắn lại EA sau khi khởi động lại terminal bằng giá trị mặc định thay vì giá trị bạn đã cấu hình cũng tạo ra sự bỏ rơi ấy, một cách âm thầm.

Hàm MT5 liên quan

CTrade::SetExpertMagicNumber()
Đặt nhãn mà mọi lệnh sau đó của bản chạy này sẽ mang.
PositionGetInteger(POSITION_MAGIC)
Đọc nhãn từ một vị thế đang mở.
OrderGetInteger(ORDER_MAGIC)
Đọc nhãn từ một lệnh chờ.
HistoryDealGetInteger(ticket, DEAL_MAGIC)
Đọc nhãn từ một deal đã đóng, và đó là cách tách lịch sử theo từng EA.

Ví dụ

Ba EA trên một tài khoản. Mỗi EA đóng số của riêng mình, nên mỗi vòng lặp vị thế chỉ đụng tới các dòng của nó dù cả ba đều thấy đủ sáu vị thế.

Một terminal, một tài khoản, ba chủ sở hữu — nhãn là thứ duy nhất tách họ ra.
EA theo xu hướng trên EURUSD
20260101
EA hồi quy trung bình trên USDJPY
20260102
Các lệnh vào tay của bạn
0
Không EA nào nhận nhãn này, nên không có thứ tự động nào đóng chúng.

Phép tính if (PositionGetInteger(POSITION_MAGIC) != MagicNumber) continue;

Kết quả Mỗi EA chỉ quản lý những vị thế do chính nó mở

Số liệu minh hoạ — không phải hồ sơ của bất kỳ EA nào đang niêm yết.

Cách sử dụng

Hãy coi magic number là cấu hình tài khoản chứ không phải thiết lập chiến lược: ghi lại trước khi EA chạy thật, và đừng bao giờ đổi khi còn vị thế mở.

  • Gán một giá trị cho mỗi bản chạy, không phải cho mỗi sản phẩm EA — cùng một EA trên hai chart cần hai giá trị.
  • Hãy giữ một danh sách. Khi đã có bốn hay năm bản chạy, một nhãn không ghi lại thì không thể phân biệt với một nhãn bị trùng.
  • Đừng bao giờ dùng lại nhãn vẫn còn vị thế mở gắn vào, kể cả từ một EA bạn đã gỡ.
  • Kiểm tra lại sau mỗi lần cài lại terminal hay khôi phục profile, vì đó là lúc giá trị mặc định quay về.

Bản thân giá trị chẳng có nghĩa gì với MetaTrader — số nguyên nào cũng chạy. Điều duy nhất quan trọng là nó phải duy nhất trong số những thứ đang chạy trên tài khoản đó.

Sai lầm thường gặp

Nghĩ rằng magic number ảnh hưởng tới khớp lệnh

Nó không thay đổi bất cứ điều gì về cách một lệnh được khớp. Nó là siêu dữ liệu: sàn không hành động dựa trên nó và nó không tác động tới giá, spread hay trượt giá.

Dùng một magic number cho một EA trên nhiều chart

Danh tính quan trọng là bản chạy, không phải sản phẩm. Hai chart dùng chung một nhãn nghĩa là hai bản chạy cùng quản lý một rổ vị thế.

Đổi nó để «reset» một EA đang chạy sai

Các vị thế đang mở vẫn giữ nhãn cũ. Đổi tham số là bỏ rơi chúng: EA thôi nhận ra chúng, và chúng nằm đó cho tới khi đóng bằng tay hoặc bị stop out.

Cho rằng magic number tách được sao kê tài khoản

Thẻ Trade của terminal không hiển thị nó. Muốn tách kết quả theo từng EA thì phải đọc DEAL_MAGIC từ lịch sử, và đó là việc của công cụ báo cáo — không phải thứ sao kê mặc định đưa cho bạn.

Chi tiết

Cái nhãn không mua kèm điều gì, đếm ngay trên cái kệ này

Trên 14 EA được công bố ở đâyGiá trị
Sản phẩm có tham số MagicNumber10
Sản phẩm bắt buộc đổi nó khi cài đặt0
Sản phẩm yêu cầu chạy ở nơi không có gì khác giao dịch sản phẩm đó8
Trong số đó, sản phẩm vẫn có tham số MagicNumber6
Sản phẩm giao dịch bị nhiều hơn một EA giành7 trên 15
Cặp EA không thể dùng chung một tài khoản15 trên 91

Hãy đọc dòng ba và dòng bốn cùng nhau. Đánh dấu lệnh là một việc; quyết định có cho phép một tín hiệu mới hay không lại là việc khác, và một EA tự giới hạn ở một vị thế mở thì phải đếm trước đã. Nếu nó đếm bằng PositionsTotal() cộng một phép kiểm tra sản phẩm, vị thế của người khác sẽ lọt vào tổng; nếu nó lọc trước bằng POSITION_MAGIC thì không. Sáu sản phẩm ở đây có tham số ấy mà vẫn in ra lời cảnh báo, và điều đó cho bạn biết cách đếm vị thế của chúng thuộc kiểu nào.

Vậy nên câu hỏi ghép cặp là câu hỏi về sản phẩm giao dịch, và trả lời được trước khi mua. USD/JPY bị bốn sản phẩm cùng giành — Iridescence, Kestrel Hover, Lanternfish và Tessera — nên không cặp nào trong số đó đi chung được. EUR/GBP giờ mang hai, Ballast và Thunderhead. Chỉ Orrery, Peregrine và Zerqon là không chồng lấn với ai. Ở chỗ hai cái chồng lấn nhau, tách tài khoản sẽ giải quyết được điều mà cái nhãn không giải quyết nổi: khi đó mỗi EA đếm một rổ chỉ chứa lệnh của chính nó. Phương pháp luận của chúng tôi ghi lại từng lượt chạy đã công bố theo từng sản phẩm, và đó chính là sự phân biệt ấy nhìn từ phía đo lường.

Câu hỏi thường gặp

Tôi nên dùng magic number nào?
Bất kỳ số nguyên nào chưa được dùng trên tài khoản đó, và khác 0 — giá trị 0 thuộc về các lệnh vào tay. Một giá trị dạng ngày tháng như 20260807 rất dễ theo dõi khi có nhiều bản chạy cùng lúc.
Hai EA có thể dùng chung một magic number không?
Về mặt kỹ thuật thì được, và đó là nguyên nhân phổ biến của những khoản lỗ khó truy nguyên: mỗi bản chạy coi vị thế của bản kia là của mình và có thể đóng hoặc dời chúng vào lúc sai. Hãy cho mỗi bản chạy một giá trị riêng.
Magic number có quan trọng trong Strategy Tester không?
Với một bài kiểm thử chỉ có một EA thì không, vì trong tài khoản thử nghiệm chẳng có gì khác giao dịch. Nó trở nên quan trọng ngay khi có hơn một EA chạy trên cùng một tài khoản thật hoặc demo.