Cơ bản về MQL5 EA — robot MetaTrader 5 thực sự hoạt động như thế nào

Xác minh lần cuối: · Nội dung luôn có giá trị
Cảnh báo rủi ro · YMYL Bài viết này chỉ mang tính giáo dục và không phải là lời khuyên đầu tư. Giao dịch trên thị trường Forex tiềm ẩn rủi ro mất vốn cao — ESMA cho biết từ 74% đến 89% tài khoản nhà đầu tư bán lẻ thua lỗ. Giao dịch ký quỹ ngoại hối dành cho cá nhân không được cấp phép tại Việt Nam; hãy tham khảo ý kiến chuyên gia tài chính được cấp phép trước khi đưa ra bất kỳ quyết định nào.

Expert Advisor (EA) viết bằng MQL5 là một chương trình nhỏ nằm trên biểu đồ trong MetaTrader 5 và, ở mỗi tick, kiểm tra xem thị trường vừa tạo ra điều kiện mà bạn định nghĩa là tín hiệu vào lệnh hay chưa. Nếu có, EA tự động đặt lệnh — không cần hỏi ý kiến bạn. Bài này giải thích EA được xây dựng ra sao từ bên trong, nó giao tiếp với nền tảng và với nhà môi giới (broker) như thế nào, và khi nào thì việc chạy EA thực sự có ý nghĩa. Đây không phải hướng dẫn lập trình.

Expert Advisor trong MQL5 thực sự là gì

MQL5 là ngôn ngữ gần với C++, được viết riêng cho nền tảng MetaTrader 5. Expert Advisor là một chương trình đơn trong ngôn ngữ đó, được biên dịch thành file nhị phân .ex5 và gắn lên biểu đồ giống như một chỉ báo kỹ thuật. Điểm khác biệt nằm ở quyền hạn: một chỉ báo chỉ vẽ lên biểu đồ, còn EA được phép đặt lệnh thực trên tài khoản giao dịch của bạn. Ranh giới đó trong mô hình phân quyền của nền tảng phân tách hiển thị thụ động khỏi tự động hóa tự chủ.

"EA" khác "robot giao dịch" nói chung ở điểm nào? Chỉ là hệ sinh thái. Robot viết bằng Python cũng là robot — nó chỉ sống ngoài terminal, thường kết nối với broker qua REST API hoặc FIX. EA, theo định nghĩa, sống trong MT5. Để so sánh chi tiết hơn, bạn có thể xem các bài về nền tảng giao dịch Forex và tổng quan về thực hành giao dịch theo hệ thống.

EA giao tiếp với nền tảng ra sao — chu kỳ OnInit, OnTick, OnDeinit

Mỗi Expert Advisor có nhịp sống được quyết định bởi ba sự kiện mà nền tảng gọi thay cho nó. OnInit kích hoạt đúng một lần, khi EA được gắn lên biểu đồ hoặc terminal khởi động lại. Đây là lúc EA đọc các tham số đầu vào, mở handle cho các chỉ báo mà nó phụ thuộc, và báo hiệu rằng nó sẵn sàng nhận tick.

Sự kiện thứ hai mới là quan trọng nhất. OnTick được gọi mỗi khi một báo giá mới đến từ broker cho cặp tiền tệ (currency pair) mà EA đang gắn vào. Trên một cặp có thanh khoản như EUR/USD trong phiên London (khoảng 15:00–00:00 giờ Việt Nam / ICT), điều này có thể xảy ra vài chục lần mỗi giây. Bên trong OnTick, EA quyết định xem giá hiện tại có thỏa mãn điều kiện vào lệnh không, liệu có cần dời cắt lỗ (stop loss) không, hay có nên đóng vị thế đang mở không. Toàn bộ logic chiến lược nằm trong hàm duy nhất này.

Sự kiện thứ ba, OnDeinit, được gọi khi EA bị gỡ khỏi biểu đồ, khi cặp tiền được thay đổi, hoặc khi MT5 tắt. Công việc của nó là dọn dẹp — giải phóng handle chỉ báo, lưu trạng thái, đóng file log. Tôi cố ý bỏ qua các handler phụ như OnTimer và OnTrade, vì chúng không thay đổi nguyên tắc. Mọi EA, về bản chất, đều là chương trình xử lý sự kiện phản ứng với những gì MT5 đưa cho nó.

EA đặt lệnh ra sao — lớp CTrade

Điều thứ hai đáng hiểu mà không cần đi sâu vào cú pháp là cách EA giao tiếp với broker. MT5 không cho phép bạn đơn giản "gửi lệnh mua" như con người nhấn trong giao diện. Mỗi lệnh được gửi đi như một yêu cầu có cấu trúc — một MqlTradeRequest — và server phản hồi bằng một kết quả chứa mã trạng thái cho biết lệnh đã qua hay bị từ chối vì lý do như ký quỹ (margin) không đủ, mức stop không hợp lệ, hoặc độ lệch giá vượt ngưỡng.

Điền thủ công các cấu trúc đó rất tốn công, vì vậy MetaQuotes cung cấp một lớp tên là CTrade trong thư viện chuẩn, bọc mọi thứ trong các phương thức tiện lợi như Buy, Sell, PositionClose và OrderModify. Các luồng thảo luận trên diễn đàn tranh luận mãi về các chi tiết tinh tế — dùng Buy(volume, symbol) hay tự điền request, xử lý requote thế nào, phản ứng với trượt giá (slippage) khi giá bứt phá mạnh ra sao. Với đa số chiến lược bán lẻ, CTrade là quá đủ.

Strategy Tester — kiểm tra EA có thực sự hoạt động hay chỉ ghi nhớ lịch sử

Strategy Tester tích hợp trong MT5 là công cụ nghiêm túc hơn nhiều so với phiên bản trong MT4. Nó cung cấp cho EA các tick lịch sử (được tạo từ nến hoặc tick thực từ server MetaQuotes), chạy hàng nghìn lượt qua các tổ hợp tham số, và tạo ra báo cáo với đường cong vốn, sụt giảm vốn (drawdown), và profit factor.

Vấn đề là chính tester được thiết kế để xác minh công việc của bạn lại thường trở thành nhà máy sản xuất ảo giác. Tối ưu hóa tham số trên toàn bộ lịch sử hầu như luôn tạo ra đường cong mượt như sợi chỉ, và đường cong đó hầu như luôn sụp đổ khi EA gặp tiền thật. Hiện tượng này có tên — curve fitting (khớp đường cong với lịch sử) — và đó là tất yếu toán học, không phải xui rủi. Các biện pháp đối phó là chia dữ liệu thành giai đoạn trong mẫu (in-sample) và ngoài mẫu (out-of-sample), và lý tưởng nhất là dùng thêm phân tích walk-forward.

"Chiến lược sinh lời trên dữ liệu lịch sử chưa chắc sinh lời trong tương lai. Dữ liệu lịch sử chỉ là một mẫu nhỏ trong vũ trụ các trạng thái thị trường có thể xảy ra, và tối ưu hóa tham số theo mẫu đó chính xác là điều tên gọi của nó mô tả — khớp với mẫu." — Ernest P. Chan, 2013

Khi nào EA thực sự hữu ích, khi nào nó gây hại

Việc chạy EA có ý nghĩa hay không phụ thuộc nhiều vào chiến lược. Ba tình huống mà EA mang lại lợi thế thực sự: thực thi nhất quán các quy tắc mà con người không thể tuân thủ về mặt tâm lý (hãy nghĩ đến hai trăm lệnh scalping mỗi tháng), theo dõi thị trường suốt ngày đêm trong phiên châu Á khi phần còn lại của thế giới đang ngủ (khoảng 02:00–11:00 giờ Việt Nam / ICT), và giao dịch khi quyết định phải được đưa ra trong một phần của giây — lãnh thổ mà con người đơn giản là quá chậm.

EA hoạt động kém ở những nơi cần đến phán đoán. Giao dịch khi công bố Non-Farm Payrolls, phân biệt liệu hành động giá hiện tại là thay đổi xu hướng thực sự hay nhiễu nhất thời, diễn giải bối cảnh địa chính trị — phần lớn điều này loại EA ra khỏi cuộc chơi. Con số từ các khảo sát độc lập trên diễn đàn MQL5 rất khắc nghiệt: đa số EA trên Marketplace, dù có biểu đồ backtest bóng bẩy, đều lỗ trong giao dịch thực trong năm đầu tiên. Đây không phải thiếu thành thật từ phía người bán — backtest đẹp rẻ tiền, còn lợi thế thực sự là hiếm.

Lưu ý quan trọng về pháp lý tại Việt Nam: giao dịch ngoại hối/CFD bán lẻ qua broker nước ngoài không được Ngân hàng Nhà nước Việt Nam (NHNN) cấp phép cho nhà đầu tư cá nhân, và tiềm ẩn rủi ro pháp lý và tài chính đáng kể. Bài viết này chỉ có tính giáo dục.

Có đáng để viết EA của riêng mình không?

Nếu bạn hiểu chiến lược mình giao dịch và có thể mô tả nó thành các quy tắc đủ chính xác không còn chỗ cho quyết định tùy nghi, thì việc xây dựng EA của riêng mình là khoản đầu tư thời gian tốt nhất bạn có thể thực hiện trong lĩnh vực này. Ba đến sáu tháng với tài liệu MQL5, một dự án thử nghiệm đơn giản và Strategy Tester sẽ xây dựng kiến thức mà không có gói robot mua sẵn nào mang lại được.

Lý do thứ hai mang tính thực tế. EA chạy liên tục năm ngày một tuần — nhưng chỉ khi máy chứa nó cũng chạy liên tục. Một máy tính để bàn tại nhà phụ thuộc vào một sợi cáp điện là chưa đủ. Đó là lý do VPS đóng vai trò riêng: cùng một EA có thể tạo ra kết quả khác nhau rõ rệt tùy thuộc vào độ trễ (latency) giữa server của broker và máy chứa EA. Chi phí VPS tại các nhà cung cấp chuyên về MT hiện nay dao động khoảng 15–50 EUR mỗi tháng. Một số broker cung cấp VPS miễn phí khi vượt ngưỡng nạp tiền hoặc khối lượng giao dịch nhất định.

Bước tiếp theo của bạn

  1. Tải MetaTrader 5 từ trang web của broker, mở tài khoản demo và vào tab Strategy Tester. Tải một trong các EA mẫu tích hợp sẵn (Moving Average hoặc MACD Sample) trên EUR/USD H1, chạy một lượt đơn và đọc kỹ báo cáo kết quả để xem các chỉ số cơ bản — đường cong vốn, sụt giảm vốn (drawdown), profit factor — trông như thế nào trong thực tế. Đây là bước khởi đầu không tốn đồng nào.
  2. Mở tài liệu chính thức MQL5 tại mql5.com/en/docs và chỉ đọc ba chương: OnInit, OnTick và lớp CTrade. Chưa cần thử viết bất cứ điều gì — mục tiêu là thấy tài liệu được tổ chức như thế nào và tìm các ví dụ có sẵn ở đâu khi bạn cần. Khoảng hai đến ba buổi chiều là đủ để có cái nhìn tổng quan vững chắc.
  3. Viết chiến lược của bạn thành các quy tắc logic dạng "nếu X và Y thì vào vị thế mua EUR/USD với cắt lỗ tại mức Z". Nếu sau một giờ các quy tắc vẫn còn những cụm từ như "tùy bối cảnh" hay "cảm nhận thị trường", bạn đang có chiến lược tùy nghi mà tự động hóa không cứu được — hãy quay lại phần quản lý rủi ro và xây dựng hệ thống trước khi viết bất kỳ dòng code nào.
  4. Nếu các quy tắc ra rõ ràng và không mơ hồ, hãy lập lịch học: khoảng ba tháng học cơ bản MQL5 từ tài liệu MetaQuotes, cộng với một dự án phụ kéo dài một tuần để xây dựng EA đơn giản nhất có thể dựa trên giao cắt đường trung bình động. Dự án đó dạy cho bạn nhiều hơn mười robot mua sẵn.
  5. Trước khi chạy bất cứ điều gì trên tiền thật, cam kết ít nhất một tháng kiểm thử tiến (forward testing) trên demo với báo giá thực tế. Backtest không thể thay thế forward test — forward test phơi bày độ trễ thực thi của broker, điều mà backtest không thể thấy được. Thu nhập từ giao dịch ngoại hối thường chịu Thuế Thu nhập Cá nhân (TNCN) tại Việt Nam; hãy tham khảo chuyên gia tư vấn thuế để biết cách kê khai đúng theo quy định hiện hành.
Jarosław Wasiński
Giới thiệu tác giả

Jarosław Wasiński

Tổng biên tập MyBank.pl · Nhà phân tích tài chính và thị trường

Nhà phân tích và chuyên gia thực hành độc lập với hơn 20 năm kinh nghiệm trong lĩnh vực tài chính. Người sáng lập và tổng biên tập cổng thông tin MyBank.pl hoạt động từ năm 2004. Phân tích cơ bản thị trường ngoại hối và kinh tế vĩ mô từ năm 2007. Viết từ góc độ thị trường toàn cầu, chú trọng khung pháp lý quốc tế. Nội dung mang tính giáo dục; giao dịch Forex ký quỹ không được cấp phép cho nhà đầu tư cá nhân tại Việt Nam.

Nguồn và tài liệu tham khảo

  1. MetaQuotes MQL5 Reference — OnTick event handler · oficjalna dokumentacja zdarzenia wywoływanego na każdą kwotację www.mql5.com ↗
  2. MetaQuotes MQL5 Standard Library — CTrade class · klasa biblioteki standardowej do składania zleceń przez EA www.mql5.com ↗
  3. MetaQuotes MetaTrader 5 — Strategy Tester documentation · narzędzie do backtestowania i optymalizacji EA www.metatrader5.com ↗

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

EA trong MQL5 khác "robot" Python ở điểm nào?

Về mặt logic — chúng không khác gì nhau. Cả hai đều quy về một vòng lặp định kỳ kiểm tra điều kiện thị trường và gửi lệnh. Sự khác biệt nằm ở hệ sinh thái. EA trong MQL5 là con đẻ của MetaTrader: nó gắn lên biểu đồ, tận dụng các chỉ báo tích hợp và dùng Strategy Tester. Robot Python sống bên ngoài terminal và kết nối với broker từ bên ngoài — thường qua REST API hoặc giao thức FIX. EA chiếm ưu thế nếu chiến lược của bạn dựa vào các chỉ báo MT5 và bạn cần tester tích hợp. Python chiếm ưu thế nếu bạn muốn dùng thư viện học máy, thống kê, hoặc kết hợp dữ liệu từ nhiều nguồn.

Tôi có cần biết lập trình để chạy EA không?

Để chỉ chạy EA của người khác — không cần. Bạn kéo file .ex5 lên biểu đồ, thiết lập tham số và bật AutoTrading. Khó khăn thực sự bắt đầu từ đó: không biết MQL5, bạn không thể xác minh robot thực sự làm gì bên trong, nó phản ứng với trượt giá (slippage) như thế nào, hay liệu nó có dùng phương pháp Martingale một cách lén lút không. Người bán EA trên MQL5 Market thường ẩn các tham số quan trọng nhất khỏi người dùng. Không có khả năng mở code nguồn (và hầu hết EA thương mại đều đóng), bạn buộc phải tin tưởng một cách mù quáng. Đó là lý do tôi khuyến nghị đầu tư vào học cơ bản ngôn ngữ — vài tuần đọc tài liệu là đủ để hiểu những gì bạn đang đọc.

Tại sao Strategy Tester cho kết quả xuất sắc trong khi giao dịch thực lại thua lỗ?

Vì Strategy Tester là công cụ tối ưu hóa, không phải dự báo. Nếu bạn tìm kiếm toàn bộ dữ liệu lịch sử để tìm tham số tạo ra đường cong vốn tốt nhất, bạn gần như chắc chắn sẽ tìm được tổ hợp cho kết quả tuyệt vời — nhưng chỉ trên mẫu đó mà thôi. Hiện tượng này gọi là curve fitting (khớp đường cong) và là tất yếu toán học. Biện pháp đối phó là chia dữ liệu thành giai đoạn in-sample để tối ưu hóa (chẳng hạn 2018–2022) và giai đoạn out-of-sample để xác minh (chẳng hạn 2023–2024), khi đó chạy EA mà không điều chỉnh thêm tham số. Chỉ kết quả nhất quán trong giai đoạn xác minh mới cho phép tin rằng bạn không đang nhìn vào một kết quả nhân tạo. Phân tích walk-forward đi xa hơn một bước — nó trượt cửa sổ huấn luyện và kiểm tra qua toàn bộ lịch sử.

Chạy EA có thực sự cần VPS không?

Với chiến lược phản ứng trong một phần giây — có, không cần tranh luận. Scalper có EA bắn hàng chục lệnh mỗi ngày mất lợi thế mỗi khi kết nối tại nhà gặp sự cố hoặc máy tính vào chế độ ngủ. VPS đặt trong cùng trung tâm dữ liệu với server của broker có thể giảm độ trễ từ khoảng năm mươi mili giây xuống vài mili giây. Với chiến lược vị thế thực hiện một giao dịch mỗi tuần, VPS là tiện nghi, không phải yêu cầu — máy tính để bàn tại nhà có UPS (bộ lưu điện) là đủ. Chi phí tại các nhà cung cấp chuyên về MT hiện nay dao động khoảng 15–50 EUR mỗi tháng. Một số broker cung cấp VPS miễn phí khi vượt ngưỡng nạp tiền hoặc khối lượng nhất định. Lưu ý: giao dịch ngoại hối qua broker nước ngoài không được NHNN cấp phép cho nhà đầu tư cá nhân tại Việt Nam — hãy xem xét kỹ rủi ro pháp lý trước khi nạp tiền.

Tìm hiểu sâu hơn · hướng dẫn đầy đủ