Bot Auto TradingExpert AdvisorMQL5MT5Lập trình Bot
Được viết bởithanhdtvào ngày 06/07/2026

MT5 Expert Advisor: Hướng Dẫn Tạo EA Đầu Tiên Không Cần Kinh Nghiệm

Hướng dẫn tạo Expert Advisor MT5 đầu tiên từ scratch bằng MQL5. Viết bot MA crossover đơn giản, backtest và deploy — không cần kinh nghiệm lập trình trước.

MT5 Expert Advisor: Hướng Dẫn Tạo EA Đầu Tiên Không Cần Kinh Nghiệm

Tạo Expert Advisor (EA) MT5 đầu tiên nghe có vẻ đáng sợ nhưng thực ra không quá phức tạp nếu bạn có hướng dẫn đúng. Bài này sẽ dẫn bạn viết một bot MA Crossover hoàn chỉnh bằng MQL5 — ngôn ngữ lập trình native của MetaTrader 5.

MQL5 Là Gì?

MQL5 (MetaQuotes Language 5) là ngôn ngữ lập trình hướng đối tượng, cú pháp rất giống C++. Bạn viết code trong MetaEditor — IDE có sẵn trong MT5, nhấn F4 để mở.

Cấu Trúc Cơ Bản Của Một EA

Mọi EA đều có 3 hàm chính:

// Chạy 1 lần khi EA được attach vào chart
int OnInit() {
   return(INIT_SUCCEEDED);
}

// Chạy mỗi khi có nến mới hoặc tick mới
void OnTick() {
   // Logic giao dịch ở đây
}

// Chạy 1 lần khi EA bị remove khỏi chart
void OnDeinit(const int reason) {
}

Viết Bot MA Crossover Đơn Giản

Chiến lược: Mua khi EMA(9) cắt lên EMA(21), Bán khi EMA(9) cắt xuống EMA(21).

input double LotSize = 0.01;
input int EMA_Fast = 9;
input int EMA_Slow = 21;
input int MagicNumber = 12345;

int handleFast, handleSlow;

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);
   return(INIT_SUCCEEDED);
}

void OnTick() {
   // Chỉ xử lý khi có nến mới
   if(!IsNewBar()) return;

   double fast[], slow[];
   CopyBuffer(handleFast, 0, 0, 3, fast);
   CopyBuffer(handleSlow, 0, 0, 3, slow);

   bool crossUp = fast[1] < slow[1] && fast[0] > slow[0];
   bool crossDown = fast[1] > slow[1] && fast[0] < slow[0];

   if(crossUp && CountPositions() == 0) {
      OpenBuy(LotSize);
   }
   if(crossDown && CountPositions() == 0) {
      OpenSell(LotSize);
   }
}

Các Hàm Hỗ Trợ Cần Biết

  • OrderSend() — Gửi lệnh giao dịch
  • PositionSelect() — Kiểm tra lệnh đang mở
  • SymbolInfoDouble() — Lấy thông tin bid/ask
  • AccountInfoDouble() — Lấy thông tin tài khoản (balance, equity)

Biên Dịch và Test

  1. Nhấn F7 trong MetaEditor để biên dịch. Sửa lỗi nếu có.
  2. File .ex5 tự động xuất hiện trong thư mục Experts.
  3. Mở Strategy Tester (Ctrl+R) trong MT5 để backtest.

Những Lỗi Phổ Biến Khi Mới Học MQL5

  • Quên ArraySetAsSeries() khi dùng CopyBuffer → thứ tự index bị ngược
  • Dùng OnTick() không có kiểm tra nến mới → mở quá nhiều lệnh trong 1 nến
  • Không handle lỗi OrderSend() → không biết lệnh thất bại vì sao

Bước Tiếp Theo

Sau khi bot cơ bản chạy được, bạn có thể nâng cấp:

  • Thêm Stop Loss và Take Profit tự động
  • Thêm Trailing Stop
  • Tích hợp Telegram notification

Học MQL5 bài bản từ đầu với lộ trình thực chiến tại Hướng Nghiệp Dữ Liệu.