Danh mục
Nền tảng
Độ khó
Cơ bản
Dùng trong
Vận hành MT5Đánh giá EAThiết kế chiến lược

Expert Advisor

Chương trình giao dịch tự động viết bằng MQL5, chạy bên trong MetaTrader 5 và đặt, sửa đổi, đóng lệnh theo các quy tắc được lập trình mà không cần can thiệp thủ công.

còn gọi: EA, robot giao dịch, bot giao dịch, trader thuật toán

Đã cập nhật

Nói đơn giản

Một chương trình giao dịch thay bạn bên trong MetaTrader. Nó không có phán đoán và không có ký ức nào ngoài những gì bạn đã đưa cho nó: nó thức dậy khi nền tảng gọi, nhìn vào vài thứ mà nó được viết ra để nhìn, rồi hành động.

Vì sao quan trọng

Backtest, các con số sụt giảm, magic number, thời gian hoạt động của VPS — tất cả tồn tại vì người đặt lệnh là một chương trình chứ không phải một con người. Biết nền tảng đưa gì cho EA, và giữ lại gì, chính là khác biệt giữa đọc đúng một kết quả và bị nó làm cho bất ngờ.

  • Nó thực thi không do dự, và đó là toàn bộ giá trị cũng như toàn bộ rủi ro của nó. Chính tập quy tắc không bao giờ bỏ lỡ một tín hiệu hợp lệ cũng không bao giờ nhận ra rằng hôm nay khác.
  • Nó chỉ thấy một lát cắt hẹp: giá của mã nó theo dõi, giá trị chỉ báo nó yêu cầu, vị thế và số dư của chính tài khoản. Tin tức, báo giá của sàn khác và các tài khoản còn lại của bạn nằm ngoài khung đó trừ khi mã nguồn chủ động lấy về.
  • Nó được phân phối dưới dạng đã biên dịch. Tệp .ex5 chạy được nhưng không đọc được, nên niềm tin của người mua phải đến từ bằng chứng kiểm thử đã công bố chứ không từ mã nguồn.
  • Nó chỉ chạy khi terminal còn chạy. Một EA trên chiếc laptop đang ngủ là một EA không giao dịch — đó là toàn bộ lập luận cho việc dùng VPS.

Trong MetaTrader 5

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

  • Navigator → Expert Advisors — các EA đã biên dịch mà terminal nhìn thấy
  • File → Open Data Folder → MQL5/Experts — nơi tệp .ex5 phải nằm thì nó mới xuất hiện
  • Thanh công cụ → Algo Trading — công tắc tổng; một EA hiện mặt buồn trên biểu đồ là EA đang bị nút này chặn
  • Biểu đồ → thuộc tính EA (F7) → Inputs / Common — tham số và quyền cho từng EA
  • View → Strategy Tester (Ctrl+R) — chính EA đó chạy trên dữ liệu quá khứ

EA dùng nó thế nào

  • Terminal gọi OnInit() một lần khi gắn vào, gọi OnTick() ở mỗi báo giá đến của mã trên biểu đồ, và gọi OnDeinit() khi gỡ ra.
  • Công việc thường diễn ra trên nến đã đóng chứ không phải mỗi tick: EA so sánh thời gian mở của nến hiện tại với thời gian nó đã lưu và thoát ra ngay khi chưa có gì mới hình thành.
  • Lệnh được gửi đi dưới dạng một MqlTradeRequest đã điền, hoặc qua lớp bọc CTrade vốn điền phần lớn giúp bạn.
  • Mỗi phiên bản gắn magic number lên lệnh của mình để chỉ quản lý vị thế của chính nó — không có nó, hai EA sẽ tranh nhau cùng những ticket.

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

Thiết lập Giá trị thường dùng Ghi chú
Algo Trading (terminal) bật Mặc định tắt sau khi cài đặt. Không gì giao dịch cho tới khi bật lên.
Allow Algo Trading (từng EA, F7 → Common) bật Đây là quyền riêng, tách khỏi công tắc chung của terminal.
Allow WebRequest for listed URL tắt trừ khi EA cần Chỉ EA lấy dữ liệu bên ngoài mới cần; hãy cấp theo từng URL, đừng bao giờ cấp tràn.
Khung thời gian biểu đồ khung thời gian mà EA được thiết kế cho Một chiến lược M15 đặt trên biểu đồ H1 là một chiến lược khác — OnTick chạy theo tick, nhưng logic nến đọc chu kỳ của biểu đồ.
MagicNumber duy nhất cho từng phiên bản đang chạy Không phải theo sản phẩm: hai biểu đồ chạy cùng một EA cần hai giá trị.

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

  • Terminal đang đóng, đang ngủ hoặc khởi động lại để cập nhật — EA đơn giản là không chạy, và không có lỗi nào được ghi lại.
  • Tên mã lệch nhau giữa sàn và thiết lập (EURUSD so với EURUSD.m) khiến EA vẫn gắn trên biểu đồ nhưng im lặng.
  • Ký quỹ khả dụng không đủ: OrderSend thất bại ở từng lần thử và EA cứ thử tiếp, nên nhật ký đầy lên trong khi tài khoản không làm gì.
  • Ngữ cảnh giao dịch bận khi nhiều EA gửi lệnh cùng lúc — những lỗi lúc có lúc không, rất khó tái hiện.
  • EA được kiểm thử ở một sàn có mô hình khớp lệnh hoặc cỡ hợp đồng khác, và chạy thực lại hành xử khác dù mã nguồn không đổi.

Hàm MT5 liên quan

OnInit() / OnDeinit()
Được gọi một lần khi gắn vào và một lần khi gỡ ra — nơi tham số được kiểm tra và handle được tạo.
OnTick()
Được gọi ở mỗi báo giá đến của mã trên biểu đồ; đây là điểm vào chính.
OnTimer()
Được gọi theo chu kỳ cố định do EventSetTimer() đặt, dành cho phần việc không nên phụ thuộc vào việc tick có đến hay không.
OrderSend(request, result)
Lời gọi duy nhất gửi đi mọi thao tác giao dịch; cấu trúc request quyết định đó là thao tác loại nào.
CTrade (Trade/Trade.mqh)
Lớp bọc của thư viện chuẩn mà phần lớn EA dùng thay vì tự điền MqlTradeRequest bằng tay.

Ví dụ

Gần như mọi EA, rút gọn về đúng thứ tự mà nền tảng gọi nó. Không phần nào ở đây là chiến lược — đây là khung sườn mà một chiến lược ngồi vào.

1. OnInit()
một lần, khi gắn vào
Kiểm tra tham số, tạo handle chỉ báo, đặt magic number.
2. OnTick()
mỗi báo giá
Thoát ra ngay khi chưa có nến mới, sau đó mới đánh giá các quy tắc.
3. OrderSend()
khi một quy tắc kích hoạt
Một MqlTradeRequest đã điền cho mỗi thao tác — mở, sửa hoặc đóng.
4. OnDeinit()
một lần, khi gỡ ra
Giải phóng handle. Vị thế đang mở không bị bước này đóng lại — chúng vẫn nằm đó.

Gỡ EA khỏi biểu đồ không đóng những gì nó đã mở. Các vị thế vẫn còn đó, và không còn gì quản lý chúng.

Phép tính if (iTime(_Symbol, PERIOD_CURRENT, 0) == lastBarTime) return;

Kết quả Một EA chạy theo nến đóng, bỏ qua hàng nghìn tick giữa hai quyết định

Cách sử dụng

Đánh giá một EA không phải do bạn viết là chuyện của bằng chứng: tệp đã biên dịch không nói gì với bạn. Dưới đây là những thứ cần hỏi.

  • Hỏi backtest dùng dữ liệu gì và mô hình hóa ra sao. Tick thật và một con số chất lượng mô hình hóa thì có ý nghĩa; một đường cong vốn không ghi chú thì không.
  • Hỏi số lệnh và khoảng thời gian. EA trung vị công bố ở đây đã đóng 362 lệnh trong nhiều năm; bốn mươi lệnh trong bốn tháng chỉ là một giai thoại.
  • Kiểm tra xem chiến lược có giữ lệnh thua mở hay không. Trung bình giá xuống và gỡ lệnh kiểu lưới tạo ra những đường cong rất đẹp cho tới rổ lệnh không hồi phục, và không tỷ số nào tính từ lệnh đã đóng cảnh báo bạn.
  • Chạy demo trên chính sàn của bạn trước khi nạp tiền. Mô hình khớp lệnh, spread, cỡ hợp đồng và cách đặt tên mã đều khác nhau, và đều làm kết quả thay đổi.
  • Cho mỗi phiên bản một magic number riêng, và ghi lại cái nào là cái nào trước khi chạy quá hai cái.

Mọi EA liệt kê ở đây đều công bố khoảng thời gian kiểm thử, nguồn dữ liệu, chất lượng mô hình hóa và sổ lệnh đầy đủ, nên những bằng chứng này có thể kiểm tra thay vì phải đi xin.

Sai lầm thường gặp

Xem EA như một trader biết phán đoán

Nó là một tập quy tắc được nền tảng gọi ở mỗi tick. Nó không thể nhận ra rằng thị trường đã đổi, rằng mười phút nữa một ngân hàng trung ương sẽ phát biểu, hay rằng kết quả của chính nó đang xấu đi — trừ khi có ai đó viết đúng một quy tắc cho việc ấy.

Cho rằng kết quả backtest sẽ chuyển nguyên vẹn sang tài khoản của bạn

Spread, phí hoa hồng, mô hình khớp lệnh, cỡ hợp đồng và bộ mã giao dịch đều là một phần của kết quả. Một bài kiểm thử ở một sàn là bằng chứng về sàn đó; chạy demo trên sàn của chính bạn là cách rẻ nhất để thấy bao nhiêu phần chuyển được sang.

Gỡ EA để dừng nó, rồi nghĩ rằng các lệnh cũng dừng theo

Gỡ EA ra khỏi biểu đồ để lại các vị thế đang mở nguyên tại chỗ. Sau đó không còn gì kéo dừng lỗ hay đóng chúng; chúng nằm đó cho đến khi chạm dừng lỗ, chạm mục tiêu hoặc bị cháy tài khoản.

Chạy nhiều EA trên một tài khoản mà không tách chúng ra

Không có magic number riêng, mỗi EA coi mọi vị thế là của mình để quản lý, và chúng đóng lệnh của nhau. Hỏng hóc diễn ra âm thầm — không lỗi nào hiện ra, chỉ có kết quả không khớp với bất kỳ chiến lược đơn lẻ nào.

Chi tiết

Một bản ghi EA thực tế trông như thế nào

Định nghĩa mô tả cơ chế; bản ghi mô tả trải nghiệm. Mười bốn EA được công bố ở đây đều kèm danh sách đầy đủ các lệnh đã đóng — 9.702 lệnh kể từ năm 2019.

Trên 14 EA đã công bốGiá trị
Lệnh đã đóng9.702
Lệnh mỗi EA (trung vị)362, từ 108 đến 4.725
Hệ số lợi nhuận (trung vị)1,39, từ 1,27 đến 1,52
Chuỗi thua tệ nhất (trung vị)6 lệnh, tệ nhất 14
Giai đoạn dài nhất không lập đỉnh vốn mới (trung vị)423 ngày, tệ nhất 775
Lần chạy thực đã xác minh0

Expert advisor có sinh lời không đi qua bản ghi đó theo từng EA, còn EA so với giao dịch thủ công chạy lại chính những lệnh ấy theo các quy tắc dừng mà con người thực sự áp dụng.

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

Expert Advisor trong MetaTrader 5 là gì?
Là chương trình viết bằng MQL5 và biên dịch thành tệp .ex5, chạy bên trong terminal và giao dịch theo quy tắc của nó. Nền tảng gọi nó ở mỗi báo giá đến của biểu đồ mà nó được gắn vào, và nó mở, sửa, đóng lệnh mà không cần ai ngồi trước bàn phím.
Tôi có phải để máy tính bật thì EA mới chạy không?
Có — EA chạy bên trong terminal, nên nó chỉ giao dịch khi terminal đang chạy và còn kết nối. Đó là lý do các EA chạy không người trông thường nằm trên VPS thay vì trên một máy tính có thể ngủ hoặc khởi động lại.
Tôi có đọc được chiến lược bên trong một EA đã mua không?
Không đọc được từ tệp .ex5. EA đã biên dịch chạy mà không để lộ logic, và đó chính là lý do người bán giao hàng theo cách đó. Chiến lược phải được mô tả trung thực trong trang sản phẩm và có bằng chứng kiểm thử công bố kèm theo.
Tôi có chạy được nhiều EA trên cùng một tài khoản không?
Có, và điều đó khá phổ biến. Mỗi phiên bản cần magic number riêng để chỉ quản lý các vị thế do chính nó mở, và tài khoản cần đủ ký quỹ khả dụng cho tất cả cùng lúc — các chiến lược không hề biết đến nhau.