Auto Trading Robot MT5 — hay còn gọi là Expert Advisor (EA) — là chương trình giao dịch tự động chạy trực tiếp trên nền tảng MetaTrader 5, thực hiện lệnh mua/bán hoàn toàn theo thuật toán đã lập trình, không cần sự can thiệp của con người. Bài viết này hướng dẫn từng bước để bạn tự xây dựng robot giao dịch MT5 của riêng mình từ đầu.
1. Thiết Lập Môi Trường và Công Cụ Cần Thiết
1.1. Chọn Nền Tảng: Tại Sao Nên Dùng MT5 Thay MT4?
MetaTrader 5 là lựa chọn tốt hơn MT4 cho việc xây dựng auto trading robot vì:
- Ngôn ngữ MQL5 hiện đại hơn MQL4, hỗ trợ OOP (lập trình hướng đối tượng) đầy đủ
- Backtest nhanh hơn 5-10 lần nhờ xử lý đa luồng (multi-thread)
- 21 timeframe thay vì 9 (MT4) — linh hoạt hơn cho phân tích kỹ thuật
- Strategy Tester mạnh hơn với Genetic Algorithm optimization
- Multi-asset: Giao dịch Forex, Gold, Oil, Index, Crypto trên cùng một nền tảng
Tải MT5 trực tiếp từ sàn bạn đang dùng (ICMarkets, Exness, XM...) để đảm bảo tương thích.
1.2. Cài Đặt MetaEditor — IDE Lập Trình MQL5
MetaEditor là môi trường lập trình (IDE) có sẵn trong MT5:
- Mở MT5 → Nhấn F4 hoặc vào menu Tools → MetaQuotes Language Editor
- MetaEditor mở ra với đầy đủ: code editor, compiler, debugger và documentation
- Để tạo EA mới: File → New → Expert Advisor (template)
Công cụ bổ sung nên có:
- Visual Studio Code — editor mạnh hơn cho code review và version control
- Git — quản lý version code của robot
- MQL5 Documentation (build-in trong MetaEditor, nhấn F1)
1.3. Tài Nguyên Học MQL5
- MQL5.com/en/docs — tài liệu chính thức đầy đủ nhất
- MQL5 Community Forum — giải đáp mọi vấn đề kỹ thuật
- Strategy Tester — công cụ backtest và optimization built-in
2. Xây Dựng Chiến Lược và Phát Triển Auto Trading Robot MT5
2.1. Xây Dựng Chiến Lược Giao Dịch
Trước khi viết một dòng code, bạn phải có chiến lược rõ ràng. Một chiến lược hoàn chỉnh bao gồm:
Điều kiện vào lệnh (Entry):
- Dùng chỉ báo nào? (MA, RSI, MACD, Bollinger Bands)
- Điều kiện xác nhận tín hiệu?
- Timeframe nào? Phiên giao dịch nào?
Điều kiện thoát lệnh (Exit):
- Take Profit: bao nhiêu pips hoặc % tài khoản?
- Stop Loss: cố định hay ATR-based?
- Trailing Stop?
Ví dụ chiến lược MA Crossover:
Entry: EMA(9) cắt lên EMA(21) → Buy
EMA(9) cắt xuống EMA(21) → Sell
Exit: TP = 30 pips, SL = 20 pips
Filter: Chỉ giao dịch khi RSI(14) > 50 (cho Buy)
2.2. Viết Mã Thuật Toán MQL5
Dưới đây là cấu trúc hoàn chỉnh của một auto trading robot MT5 cơ bản:
//+------------------------------------------------------------------+
//| Auto Trading Robot MT5 — MA Crossover + RSI Filter |
//+------------------------------------------------------------------+
#include <Trade\Trade.mqh>
// Tham số đầu vào
input int EMA_Fast = 9; // EMA nhanh
input int EMA_Slow = 21; // EMA chậm
input int RSI_Period = 14; // RSI period
input double RSI_BuyMin = 50; // RSI tối thiểu để Buy
input double LotSize = 0.01; // Kích thước lệnh
input int TakeProfit = 30; // Take Profit (pips)
input int StopLoss = 20; // Stop Loss (pips)
input int MagicNumber = 20260706;// ID robot
CTrade trade;
int handleFast, handleSlow, handleRSI;
//--- Khởi tạo robot
int OnInit() {
handleFast = iMA(_Symbol, PERIOD_CURRENT, EMA_Fast, 0, MODE_EMA, PRICE_CLOSE);
handleSlow = iMA(_Symbol, PERIOD_CURRENT, EMA_Slow, 0, MODE_EMA, PRICE_CLOSE);
handleRSI = iRSI(_Symbol, PERIOD_CURRENT, RSI_Period, PRICE_CLOSE);
if(handleFast == INVALID_HANDLE || handleSlow == INVALID_HANDLE ||
handleRSI == INVALID_HANDLE) {
Print("Lỗi khởi tạo indicator!");
return INIT_FAILED;
}
trade.SetExpertMagicNumber(MagicNumber);
return INIT_SUCCEEDED;
}
//--- Logic chính chạy mỗi tick
void OnTick() {
// Chỉ xử lý khi có nến mới (tránh vào lệnh nhiều lần trong 1 nến)
static datetime lastBarTime = 0;
datetime currentBarTime = iTime(_Symbol, PERIOD_CURRENT, 0);
if(currentBarTime == lastBarTime) return;
lastBarTime = currentBarTime;
// Lấy giá trị indicator
double fast[], slow[], rsi[];
ArraySetAsSeries(fast, true);
ArraySetAsSeries(slow, true);
ArraySetAsSeries(rsi, true);
CopyBuffer(handleFast, 0, 0, 3, fast);
CopyBuffer(handleSlow, 0, 0, 3, slow);
CopyBuffer(handleRSI, 0, 0, 3, rsi);
// Phát hiện crossover
bool crossUp = (fast[1] < slow[1]) && (fast[0] > slow[0]);
bool crossDown = (fast[1] > slow[1]) && (fast[0] < slow[0]);
double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);
double pipVal = (digits == 5 || digits == 3) ? point * 10 : point;
// Kiểm tra không có lệnh đang mở
if(PositionsTotal() > 0) return;
// Tín hiệu Buy: EMA crossover lên + RSI > 50
if(crossUp && rsi[0] > RSI_BuyMin) {
double sl = ask - StopLoss * pipVal;
double tp = ask + TakeProfit * pipVal;
sl = NormalizeDouble(sl, digits);
tp = NormalizeDouble(tp, digits);
trade.Buy(LotSize, _Symbol, ask, sl, tp, "MA Cross Buy");
}
// Tín hiệu Sell: EMA crossover xuống + RSI < (100 - RSI_BuyMin)
if(crossDown && rsi[0] < (100 - RSI_BuyMin)) {
double sl = bid + StopLoss * pipVal;
double tp = bid - TakeProfit * pipVal;
sl = NormalizeDouble(sl, digits);
tp = NormalizeDouble(tp, digits);
trade.Sell(LotSize, _Symbol, bid, sl, tp, "MA Cross Sell");
}
}
void OnDeinit(const int reason) {
IndicatorRelease(handleFast);
IndicatorRelease(handleSlow);
IndicatorRelease(handleRSI);
}
2.3. Tích Hợp Quản Lý Rủi Ro
Một auto trading robot MT5 chuyên nghiệp bắt buộc phải có quản lý rủi ro:
// Tính lot size tự động theo % rủi ro tài khoản
double CalculateLotSize(double riskPercent, int slPips) {
double accountBalance = AccountInfoDouble(ACCOUNT_BALANCE);
double riskAmount = accountBalance * riskPercent / 100.0;
double pipValue = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE);
double tickSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);
double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);
double pipSize = (digits == 5 || digits == 3) ? point * 10 : point;
double lotSize = riskAmount / (slPips * (pipValue / tickSize) * pipSize);
lotSize = MathFloor(lotSize / 0.01) * 0.01; // Làm tròn xuống 0.01
// Giới hạn min/max
double minLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
double maxLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
return MathMax(minLot, MathMin(maxLot, lotSize));
}
3. Backtest Kiểm Thử Auto Trading Robot MT5
3.1. Chạy Backtest Trong Strategy Tester
Đây là bước không thể bỏ qua trước khi chạy robot thật:
- Nhấn Ctrl+R trong MT5 để mở Strategy Tester
- Chọn EA, Symbol (EURUSD, XAUUSD...), Timeframe
- Chọn "Every tick based on real ticks" — kết quả chính xác nhất
- Đặt khoảng thời gian backtest: tối thiểu 1-3 năm
- Nhấn Start
3.2. Đọc Kết Quả Backtest
Các chỉ số quan trọng cần đánh giá:
| Chỉ số | Ngưỡng tốt | Ý nghĩa |
|---|---|---|
| Profit Factor | > 1.3 | Tổng lời / Tổng lỗ |
| Sharpe Ratio | > 1.0 | Lợi nhuận điều chỉnh rủi ro |
| Max Drawdown | < 20% | Thua lỗ tối đa từ đỉnh |
| Win Rate | > 40% (nếu R/R ≥ 1:2) | Tỷ lệ lệnh thắng |
| Recovery Factor | > 2.0 | Net Profit / Max Drawdown |
3.3. Optimization Tham Số
Strategy Tester MT5 có tính năng Optimization tự động tìm bộ tham số tốt nhất:
- Tab Optimization → chọn tham số muốn tối ưu (EMA_Fast: 5→20, step 1)
- Chọn Genetic Algorithm để tối ưu nhanh hơn
- Maximize: Sharpe Ratio (không phải Net Profit để tránh overfitting)
Cảnh báo overfitting: Nếu backtest quá hoàn hảo (Profit Factor > 5, Drawdown < 5%) — đó là dấu hiệu overfitting. Robot sẽ thất bại trong live trading.
4. Theo Dõi, Cập Nhật và Triển Khai Robot
4.1. Chạy Demo Trước Live
Sau backtest đạt kết quả tốt, bắt buộc chạy demo ít nhất 4-8 tuần:
- So sánh kết quả demo với backtest — nếu sai lệch > 30%, cần điều tra
- Kiểm tra slippage thực tế so với backtest
- Đảm bảo robot hoạt động ổn định qua mọi điều kiện thị trường
4.2. Deploy Lên VPS Trading
Robot cần máy chủ chạy 24/7 — không thể dùng máy tính cá nhân:
- Thuê VPS Windows tại Contabo, Vultr hoặc nhà cung cấp VN (~$5-10/tháng)
- Cài MT5 lên VPS, đăng nhập tài khoản live
- Attach EA vào chart, bật Allow Automated Trading
- Kết nối Remote Desktop để giám sát định kỳ
4.3. Theo Dõi và Cập Nhật Liên Tục
Auto trading robot MT5 không phải "set and forget" — cần theo dõi định kỳ:
- Hàng ngày: Kiểm tra log lệnh, drawdown hiện tại
- Hàng tuần: So sánh performance với benchmark kỳ vọng
- Hàng tháng: Đánh giá lại chiến lược — thị trường thay đổi, robot cần được cập nhật
Dấu hiệu cần can thiệp:
- Drawdown vượt 15% → giảm lot size hoặc dừng robot
- Liên tục thua 5-7 lệnh → có thể market regime đã thay đổi
- Spread đột ngột tăng cao → kiểm tra điều kiện sàn
Kết Luận
Xây dựng một auto trading robot MT5 chuyên nghiệp đòi hỏi kiến thức tổng hợp: phân tích kỹ thuật, lập trình MQL5, phân tích định lượng và quản lý rủi ro. Đây không phải con đường ngắn — nhưng là con đường duy nhất để tạo ra robot giao dịch thực sự bền vững về lâu dài.
Lộ trình học đề xuất:
- Nắm vững phân tích kỹ thuật (MA, RSI, MACD, Bollinger Bands)
- Học MQL5 từ cơ bản đến nâng cao
- Backtest nghiêm túc với dữ liệu tick thực
- Demo trading tối thiểu 1-2 tháng trước live
Muốn học xây dựng auto trading robot MT5 bài bản với lộ trình thực chiến, có mentor hỗ trợ? Tham khảo chương trình đào tạo chuyên sâu tại Hướng Nghiệp Dữ Liệu.
