Mục lục
Nội dung này phục vụ mục đích giáo dục, không phải lời khuyên đầu tư, tín hiệu giao dịch hoặc hướng dẫn bật giao dịch tự động trên tài khoản thật.
Trả lời ngắn: EA là chương trình chạy trong MT5. Khi MT5 báo có giá mới hoặc sự kiện khác, chương trình đọc dữ liệu, áp dụng quy tắc đã viết và có thể gửi yêu cầu giao dịch tới máy chủ; yêu cầu gửi đi chưa có nghĩa đã khớp.
Việc chạy tự động không chứng minh chiến lược đúng, an toàn hay có lợi nhuận.
Đọc xong, bạn sẽ hiểu:
- EA khác indicator và script ở đâu.
- Một event đi qua dữ liệu, rule, action và log như thế nào.
- Vì sao gửi yêu cầu không đồng nghĩa lệnh đã được thực thi.
- Cách kiểm tra một EA trên giấy trước khi nghĩ tới tài khoản thật.
1. EA là chương trình theo rule, không phải hộp tiên tri
a. “Tự động” nghĩa là tự chạy quy trình đã viết
EA không nhìn thị trường rồi tự nảy ra ý tưởng như con người. Nó chạy những nhánh logic mà người viết đã mô tả: khi có dữ liệu mới thì đọc gì, điều kiện nào phải đúng, lúc nào bỏ qua, yêu cầu nào được tạo và kết quả nào cần ghi lại.
Hãy hình dung một nhân viên làm theo sổ tay. Chuông reo là lúc bắt đầu một việc. Nhân viên đọc phiếu, kiểm từng điều kiện, chọn hành động được phép rồi ghi biên bản. Nhân viên có thể làm rất đều; nhưng nếu sổ tay thiếu bước hoặc ghi sai, sự đều đặn chỉ làm lỗi lặp lại nhanh hơn.
Trong MQL5, event là sự kiện terminal đưa vào hàng đợi xử lý của chương trình. Event có thể là lúc EA khởi tạo, một tick giá mới, một timer đến hạn, thay đổi giao dịch hoặc thao tác trên chart. Event chỉ là “chuông gọi việc”; nó không tự là tín hiệu mua hay bán.
Hình 1 — EA chỉ biến event và state thành action theo rule đã được viết.
b. EA, indicator và script không phải một thứ
Ba loại chương trình dễ bị gọi chung là “tool MT5”, nhưng vòng đời và quyền khác nhau:
- EA có thể chạy liên tục trên chart, phân tích và thực hiện hoạt động giao dịch nếu code cùng permission cho phép.
- Indicator tính và hiển thị dữ liệu phân tích. Theo tài liệu MetaTrader 5, custom indicator không thực hiện giao dịch.
- Script thường chạy một nhiệm vụ một lần rồi kết thúc, thay vì duy trì vòng xử lý như EA.
Một mũi tên trên indicator không tự chứng minh có EA đặt lệnh. Một script đóng nhiều chart không phải robot chiến lược. Và một EA có nút bấm đẹp vẫn chỉ là chương trình: phải xem logic, quyền và kết quả thực thi.
Hình 2 — EA, indicator và script khác nhau ở vòng đời và quyền hành động.
MetaTrader 5 mô tả EA là hệ thống cơ học có thể tự động hóa hoạt động phân tích và giao dịch; tài liệu cũng tách rõ EA, custom indicator và script. MetaTrader 5 Help — How to Create an Expert Advisor or an Indicator
c. Cài được không có nghĩa dùng được
Một file xuất hiện trong Navigator chỉ cho biết terminal nhìn thấy nó. EA còn phải khởi tạo thành công, đọc được dữ liệu cần thiết, gắn đúng symbol/timeframe, có input hợp lệ và có permission phù hợp. Nếu là file từ bên thứ ba, còn có rủi ro phần mềm: nguồn không rõ, hành vi không minh bạch hoặc yêu cầu quyền quá rộng.
Vì vậy, câu hỏi đầu tiên không nên là “EA này lời bao nhiêu?”. Câu hỏi đầu tiên là “nó nhận event nào, dùng dữ liệu gì, có thể làm gì và ghi lại kết quả ra sao?”.
2. Bản đồ từ terminal tới trade server
a. Sáu khối của một vòng xử lý
Một cách đọc EA dễ nhớ là:
EVENT → READ → CHECK → DECIDE → ACT → VERIFY/LOG
- EVENT: terminal phát sự kiện.
- READ: EA đọc input, giá, position, thời gian hoặc dữ liệu liên quan.
- CHECK: rule kiểm điều kiện tín hiệu, rủi ro và quyền.
- DECIDE: EA chọn bỏ qua, chờ, cập nhật state hoặc tạo action.
- ACT: chương trình có thể gửi yêu cầu tới terminal/server.
- VERIFY/LOG: EA đọc kết quả rồi ghi bằng chứng.
Input là tham số người dùng cấu hình trước khi chạy, chẳng hạn chu kỳ timer hoặc ngưỡng spread giả. State là trạng thái EA đang giữ hoặc đọc tại thời điểm quyết định: đã có position chưa, bar nào vừa xử lý, lần action gần nhất là khi nào.
Signal là điều kiện logic đề xuất một hành động. Risk rule là điều kiện chặn hoặc giới hạn hành động đó. Signal đúng chưa đủ. Nếu risk rule không đạt, action hợp lý có thể là SKIP.
b. Terminal và server là hai phía khác nhau
EA chạy trong terminal. Khi code tạo trade request, terminal gửi yêu cầu giao dịch tới trade server theo điều kiện kết nối và permission. Server kiểm tra rồi trả kết quả. Giá thay đổi, market đóng, volume sai bước, margin không đủ hoặc rule server khác đều có thể làm request bị từ chối hay thực thi khác kỳ vọng.
Do đó:
Gọi hàm gửi lệnh ≠ server chấp nhận ≠ khớp đúng giá kỳ vọng
Ba dấu bằng này rất quan trọng. Nếu log chỉ ghi “đã send” mà không ghi kết quả, người vận hành có thể tưởng EA đã làm xong. Thực tế, code mới đi hết một phần đường.
Hình 3 — Terminal gửi yêu cầu; trade server mới trả kết quả xử lý.
c. Engine, components và inputs nằm ở đâu?
Bài này là bản đồ tổng. Ba bài tiếp theo sẽ tách sâu:
- EA Engine là bộ máy điều phối event, state và chu kỳ xử lý.
- EA Components là các khối signal, risk, execution, position management, logging.
- EA Inputs là bề mặt cấu hình; input phải được kiểm tra chứ không nên tin mặc định.
Giống một bếp ăn: engine là nhịp vận hành, components là từng trạm, inputs là phiếu đặt món. Bếp có đủ trạm nhưng phiếu sai vẫn làm món sai. Phiếu đúng nhưng điều phối lộn xộn vẫn có thể làm hai lần.
3. Một vòng hoạt động giả của EA
a. Khởi tạo với OnInit
Khi EA được nạp, terminal tạo Init event. Hàm OnInit() thường dùng để kiểm input, chuẩn bị resource và xác nhận môi trường. Tài liệu MQL5 cho biết phiên bản OnInit trả về mã kết quả được khuyến nghị; nếu EA trả INIT_FAILED, chương trình bị gỡ khỏi chart. MQL5 Reference — OnInit
Ví dụ demo:
- Ngưỡng spread tối đa phải lớn hơn
0. - Chu kỳ timer phải từ
1giây trở lên. - Symbol cần đọc phải tồn tại.
Nếu một điều kiện sai, action đúng là fail sớm và log lý do. Cố chạy tiếp với input vô nghĩa chỉ đẩy lỗi xuống đoạn khó quan sát hơn.
b. NewTick không có nghĩa “mỗi tick phải trade”
NewTick là event khi terminal nhận tick mới cho symbol của chart. EA có thể đọc Bid/Ask, thời gian, bar hoặc state. Sau đó rule quyết định.
Giả sử input spread tối đa là 15 point. Tick mới cho spread giả 18:
- EVENT: NewTick.
- READ: spread
18; state chưa có action. - CHECK:
18 ≤ 15là sai. - DECIDE: bỏ qua.
- ACT: không tạo trade request.
- LOG:
SPREAD_BLOCK.
Đây vẫn là một vòng xử lý thành công. “Không làm gì” là action hợp lệ khi điều kiện không đạt. Một EA cứ có tick là gửi request không chứng minh nhanh; nó có thể thiếu kiểm soát.
MQL5 còn có Timer, BookEvent, ChartEvent và trade-related event. Tài liệu event handling nhấn mạnh EA không chỉ phụ thuộc OnTick; loại event cần khớp công việc. MQL5 Reference — Event Handling Functions
c. Request phải đi cùng result code và log
Result code là mã phản hồi cho biết yêu cầu được xử lý thế nào. Log là bản ghi event, quyết định, request và kết quả. Một log dùng được nên trả lời:
- Event nào đến lúc nào?
- State/input nào được đọc?
- Rule nào pass hoặc fail?
- EA chọn action nào?
- Nếu gửi request, server trả gì?
Ví dụ signal demo đúng và risk rule đúng. EA gửi request, nhưng server trả mã từ chối vì volume không khớp bước của symbol. Kết luận phải là REJECTED_VOLUME_STEP, không phải ORDER_OK. Muốn hiểu volume step, quay lại bài Symbol trên MT5 là gì?.
Timer cũng hữu ích cho việc không phụ thuộc tick. Mỗi 60 giây, EA có thể ghi ALIVE, kiểm connection hoặc cập nhật panel. Tuy nhiên, timer dày không tự làm hệ thống tốt hơn; event kéo dài có thể làm hàng đợi xử lý chậm.
4. Sai lầm, giới hạn và rủi ro
a. Bật AutoTrading không biến logic sai thành logic đúng
AutoTrading là quyền terminal cho phép EA thực hiện hoạt động giao dịch tự động. Khi quyền tắt, EA vẫn có thể nhận event, tính toán và hiển thị; việc gửi trade request bị hạn chế. Khi quyền bật, nó chỉ mở một cánh cửa. Nó không kiểm chứng signal, volume, Stop Loss hay chất lượng code.
Đừng dùng nút này như nút “khởi động lợi nhuận”. Trước khi bật bất kỳ quyền giao dịch thật nào, EA phải qua review, test, forward observation và quy trình vận hành riêng. Bài này không yêu cầu bật quyền đó.
b. Chạy liên tục không đồng nghĩa hoạt động liên tục
EA phụ thuộc terminal, nguồn điện, network, dữ liệu, server, session và symbol. Laptop ngủ, terminal đóng hoặc connection mất thì chương trình không thể làm giống lúc online. VPS giảm một số gián đoạn nhưng không sửa logic hay dữ liệu xấu.
Câu chắc chắn: EA chỉ xử lý những event mà terminal cung cấp cho nó trong môi trường đang chạy.
Câu có điều kiện: nếu terminal, network, server, permission và dữ liệu đều sẵn sàng, EA có thể tiếp tục quy trình đã viết.
Nếu trước đây bạn nghĩ “gắn EA là chạy 24/7”, cần sửa lại: đó là lời nói thiếu điều kiện.
c. Năm lỗi người mới hay bỏ qua
- Nhầm file cài được với chiến lược đã kiểm định. Compile/load chỉ là gate kỹ thuật.
- Nhầm signal với execution. Signal đúng không bảo đảm request được chấp nhận.
- Không chống lặp. Nhiều event cùng thấy một điều kiện và tạo action trùng nếu state/idempotency yếu.
- Tin input mặc định. Một input hợp symbol A có thể vô nghĩa với symbol B.
- Không đọc log. Không có request/result thì chỉ còn đoán.
Một giới hạn khác là backtest. Dữ liệu quá khứ và mô hình tick giúp kiểm hành vi trên lịch sử, nhưng không tái tạo hoàn hảo latency, slippage, spread, session và điều kiện tương lai. Strategy Tester là công cụ test/optimize trước live, không phải giấy chứng nhận lợi nhuận. MetaTrader 5 Help — Strategy Testing
d. Khi nào phải đứng ngoài
Dừng nếu không trả lời được một trong các câu sau:
- File đến từ đâu, ai chịu trách nhiệm?
- EA đọc symbol/timeframe nào?
- Input nào làm thay đổi exposure/risk?
- Điều gì ngăn action trùng?
- Log nào chứng minh request và result?
- Permission nào đang bật?
- Có cách tắt và recovery rõ không?
Thiếu câu trả lời không phải lời mời “thử nhỏ”. Đó là dấu hiệu hệ thống chưa đủ quan sát.
5. Checklist và bài tập bắt đầu
a. Checklist bảy cửa trước khi attach
- Nguồn: xác minh tên file, phiên bản và người cung cấp.
- Phạm vi: ghi rõ symbol, timeframe, account mode và session.
- Input: liệt kê giá trị, đơn vị, khoảng hợp lệ và default.
- Event: biết EA dùng Init, Tick, Timer hay event khác.
- Permission: biết quyền trade/DLL/WebRequest nào được yêu cầu; không cấp quyền thừa.
- Evidence: biết log, result code và trạng thái lỗi nằm ở đâu.
- Test: chạy compile/static check, Strategy Tester và demo quan sát trước bất kỳ live gate nào.
Nếu một cửa thiếu bằng chứng, đặt trạng thái STOP — NEEDS REVIEW. Đừng tự điền câu trả lời bằng lời quảng cáo.
b. Bài tập 10–15 phút: paper trace
Dùng giấy hoặc Google Sheets miễn phí. Không mở terminal, không đăng nhập account và không dùng tiền thật.
Tạo năm cột: Event, State giả, Rule, Action, Result/Log. Sau đó điền ba dòng:
Mẫu đối chiếu đã điền
| Event | State giả | Rule | Action | Result/Log |
|---|---|---|---|---|
| Init | input hợp lệ | đủ dữ liệu | READY | INIT_OK |
| NewTick | spread 18 |
tối đa 15 |
SKIP | SPREAD_BLOCK |
| Timer | 60 giây | heartbeat | LOG | ALIVE |
Hình 4 — Paper trace giúp kiểm rule trước khi nghĩ tới tài khoản thật.
Ở dòng NewTick, khoanh SKIP. Đây là phần quan trọng nhất: học cách chứng minh EA không hành động khi rule fail. Thêm dòng thứ tư nếu muốn:
NewTick | spread 10, signal false | signal required | WAIT | NO_SIGNAL
Kết quả mong đợi không phải “có lệnh”. Kết quả là mỗi event đều có input/state, rule, action và bằng chứng tương ứng. Nếu bạn không biết result phải là gì, quay lại bước thiết kế; chưa được chuyển demo sang live.
c. Ba câu hỏi để đọc bất kỳ EA nào
- EA biết gì? Dữ liệu và state cụ thể.
- EA được phép làm gì? Action và permission cụ thể.
- Ta chứng minh bằng gì? Log, result code, test case và trạng thái failure.
Ba câu này không đánh giá chiến lược có lời. Chúng chỉ tạo nền để kiểm hệ thống có thể hiểu và quan sát.
6. Tổng kết
a. Năm ý chính
- EA là chương trình chạy rule trong terminal; tự động không đồng nghĩa tự đúng.
- Vòng đọc cơ bản là
EVENT → READ → CHECK → DECIDE → ACT → VERIFY/LOG. - EA, indicator và script khác nhau về vòng đời và quyền hành động.
- Trade request từ terminal chưa phải kết quả thực thi của server.
- Trước account thật, cần source, scope, input, event, permission, evidence và test.
b. Câu hỏi tự kiểm tra
- Vì sao NewTick không phải tín hiệu giao dịch?
- EA khác indicator ở điểm nào?
- Vì sao log “đã send” là chưa đủ?
- Khi spread giả
18vượt rule15, action nào hợp lý?
c. Gợi ý đáp án
Xem gợi ý câu 1
NewTick chỉ báo có event dữ liệu mới; signal còn phải qua logic riêng. Xem lại mục 1 và mục 3.
Xem gợi ý câu 2
EA có thể phân tích và thực hiện hoạt động giao dịch khi được phép; indicator dùng để phân tích. Xem lại mục 1.
Xem gợi ý câu 3
Request còn phải được trade server xử lý và trả result code; “send” không chứng minh đã khớp. Xem lại mục 2 và mục 3.
Xem gợi ý câu 4
Action là SKIP và log lý do SPREAD_BLOCK, không tạo request. Xem lại mục 3 và mục 5.
d. Thuật ngữ cần nhớ
| Thuật ngữ | Giải thích ngắn |
|---|---|
| EA | Chương trình MQL5 chạy trong terminal theo rule đã viết. |
| Event | Sự kiện terminal đưa vào hàng đợi xử lý. |
| Input | Tham số được cấu hình trước khi chạy. |
| State | Trạng thái dữ liệu tại lúc quyết định. |
| Signal | Điều kiện logic đề xuất một action. |
| Risk rule | Điều kiện chặn hoặc giới hạn action. |
| Trade request | Yêu cầu giao dịch gửi từ terminal tới server. |
| Result code | Mã phản hồi việc server xử lý request. |
| Log | Bản ghi event, quyết định, request và kết quả. |
| AutoTrading | Quyền terminal cho hoạt động giao dịch tự động. |
e. Nguồn tham khảo
- MetaTrader 5 Help — Algorithmic Trading
- MetaTrader 5 Help — How to Create an Expert Advisor or an Indicator
- MQL5 Reference — Event Handling Functions
- MQL5 Reference — OnInit
- MetaTrader 5 Help — Strategy Testing
Bài trước: Margin và Leverage là gì? Hiểu ký quỹ và đòn bẩy #5. Bài tiếp theo: EA Engine là gì? Bộ máy vận hành của robot giao dịch #7.
Nội dung này phục vụ mục đích giáo dục. Không dùng bài viết như lời khuyên đầu tư, tín hiệu giao dịch hoặc căn cứ bật EA trên tài khoản thật.
Bài tiếp theo