Bài 3: Cấu trúc thư mục MQL5 và phân biệt EA, Script, Indicator
1. Cấu Trúc Thư Mục Lõi Của MQL5
Toàn bộ mã nguồn, tài nguyên đồ họa và tệp dữ liệu của bạn bắt buộc phải nằm gọn trong thư mục gốc MQL5/. Nếu đặt file sai vị trí quy định, MetaTrader 5 sẽ không thể nhận diện và MetaEditor không thể biên dịch thành công. Từ cửa sổ Navigator, cấu trúc thư mục được phân chia nghiêm ngặt theo chức năng:
MQL5/Experts: Nơi lưu trữ mã nguồn (.mq5) và file thực thi (.ex5) của các robot giao dịch tự động.MQL5/Indicators: Thư mục chứa các chỉ báo kỹ thuật tùy chỉnh để vẽ tín hiệu lên biểu đồ.MQL5/Scripts: Nơi chứa các đoạn mã kịch bản thực thi một lần.MQL5/Include: Thư mục cực kỳ quan trọng dùng để lưu các tệp tiêu đề (.mqh). Đây là nơi bạn để các Class OOP, thư viện chuẩn, hoặc các hàm dùng chung để gọi (include) vào EA/Indicator giúp tái sử dụng code.MQL5/Libraries: Chứa các thư viện liên kết động (.dllhoặc.ex5) để kết nối MQL5 với các ngôn ngữ bên ngoài như C++, C# hoặc Python.MQL5/Files: Do cơ chế bảo mật (Sandbox) của MT5, mọi chương trình MQL5 chỉ được phép đọc/ghi dữ liệu (như xuất file CSV, TXT) duy nhất tại thư mục này để tránh can thiệp sâu vào hệ điều hành.
2. Phân Biệt Expert Advisor (EA), Custom Indicator Và Script
Việc hiểu rõ bản chất của ba loại chương trình này giúp bạn chọn đúng khuôn mẫu (template) khi khởi tạo dự án.
| Tiêu chí phân loại | Expert Advisor (EA - Robot) | Custom Indicator (Chỉ báo) | Script (Kịch bản) |
|---|---|---|---|
| Mục đích chính | Tự động hóa giao dịch toàn phần (vào/ra lệnh, dời SL/TP, quản lý vốn). | Phân tích dữ liệu giá, tính toán công thức toán học và vẽ tín hiệu trực quan. | Thực thi nhanh một tác vụ cụ thể để tiết kiệm thời gian (ví dụ: đóng toàn bộ lệnh). |
| Vòng đời hoạt động | Chạy liên tục, tự động lặp lại logic tính toán mỗi khi có một mức giá mới (Tick) truyền về. | Chạy liên tục, tính toán và vẽ lại (render) dữ liệu hiển thị mỗi khi có Tick mới. | Chỉ chạy đúng một lần duy nhất ngay khi bạn kéo thả file vào biểu đồ, sau đó tự tắt. |
| Quyền giao dịch | Có toàn quyền thực hiện các thao tác gửi lệnh (OrderSend) lên máy chủ. |
Bị cấm. Indicator không thể thực hiện bất kỳ lệnh giao dịch, mua bán nào. | Có quyền giao dịch (ví dụ: đặt một lưới lệnh chờ ngay khi kích hoạt). |
| Hàm sự kiện cốt lõi | OnTick(), OnTimer(), OnTrade() |
OnCalculate() |
OnStart() |
All rights reserved