| MA Crossover là gì? Tín hiệu vào lệnh với đường trung bình (MA/EMA) trong MT5

Được viết bởi Đặng Trí Thanh vào ngày 01/09/2026 lúc 21:08 | 43 lượt xem

Đặng Trí ThanhĐặng Trí Thanh
Giám đốc Công nghệ · DNT Digital · Hướng Nghiệp Dữ Liệu
Giảng dạy Khóa Kiến thức Giao dịch Forex MQL MT5, Lập trình MT5, Bot Auto Trading.

MA Crossover là gì? Tín hiệu vào lệnh với đường trung bình (MA/EMA)

MA Crossover - video 60 giây
🎬 Xem video giai thich 60 giay: Xem tren YouTube

MA Crossover (giao cắt đường trung bình) là một trong những chiến lược giao dịch đơn giản nhưng hiệu quả nhất, được sử dụng rộng rãi trong lập trình bot EA. Ý tưởng cốt lõi: khi đường trung bình nhanh cắt lên trên đường trung bình chậm → tín hiệu mua; khi cắt xuống dưới → tín hiệu bán.

Trong bài viết này, chúng ta sẽ tìm hiểu về các loại đường trung bình, cách đọc tín hiệu crossover, cách kết hợp với MACD/RSI và lập trình đầy đủ trong MQL5.

1. Đường trung bình (Moving Average) là gì?

Đường trung bình (MA) là chỉ báo làm mượt giá bằng cách tính trung bình giá trong một khoảng thời gian. Nó giúp xác định xu hướngloại bỏ nhiễu của thị trường.

1.1. Các loại đường trung bình

Loại Cách tính Đặc điểm
SMA (Simple) Trung bình cộng Phản ứng chậm, ít nhiễu
EMA (Exponential) Trọng số giá gần cao hơn Phản ứng nhanh hơn
SMMA (Smoothed) Làm mượt kép Rất mượt
LWMA (Linear Weighted) Trọng số tuyến tính Cân bằng

Trong MT5, hàm iMA cho phép chọn loại MA qua tham số MODE_MA:

// Các loại MA trong MQL5
// MODE_SMA  - Simple
// MODE_EMA  - Exponential
// MODE_SMMA - Smoothed
// MODE_LWMA - Linear Weighted

1.2. Các tham số của MA

  • Period: số nến để tính (VD 20, 50, 200)
  • Shift: dịch đường MA sang trái/phải (VD shift 10 = dịch 10 nến)
  • Method: loại MA (SMA/EMA/SMMA/LWMA)
double ma200 = iMA(_Symbol, _Period, 200, 0, MODE_EMA, PRICE_CLOSE, 0);
Print("EMA 200 hiện tại = ", ma200);

2. MA Crossover là gì?

MA Crossover là tín hiệu phát sinh khi hai đường trung bình cắt nhau:

  • Golden Cross (cắt lên): MA nhanh cắt LÊN MA chậm → xu hướng tăng → MUA
  • Death Cross (cắt xuống): MA nhanh cắt XUỐNG MA chậm → xu hướng giảm → BÁN

2.1. Ví dụ trong bài giảng

Trong bài giảng Buổi 7, giảng viên lấy ví dụ điều kiện “EMA 5 giao cắt với giá mở” và vẽ minh họa: khi đường MA1 cắt lên MA2 hoặc cắt xuống, ta xác định tín hiệu vào lệnh.

2.2. Cách xác định crossover trong MQL5

// Lấy MA nhanh (EMA 5) và MA chậm (EMA 20)
double fastNow  = iMA(_Symbol, _Period, 5, 0, MODE_EMA, PRICE_CLOSE, 1);
double fastPrev = iMA(_Symbol, _Period, 5, 0, MODE_EMA, PRICE_CLOSE, 2);
double slowNow  = iMA(_Symbol, _Period, 20, 0, MODE_EMA, PRICE_CLOSE, 1);
double slowPrev = iMA(_Symbol, _Period, 20, 0, MODE_EMA, PRICE_CLOSE, 2);

// Golden Cross: nhanh cắt lên chậm
bool goldenCross = (fastPrev <= slowPrev) && (fastNow > slowNow);

// Death Cross: nhanh cắt xuống chậm
bool deathCross = (fastPrev >= slowPrev) && (fastNow < slowNow);

3. MA Crossover kết hợp giá mở cửa

Ngoài 2 đường MA, một biến thể phổ biến là giao cắt giữa EMA và giá:

  • EMA 5 cắt lên giá mở (hoặc giá đóng) → tín hiệu mua
  • EMA 5 cắt xuống giá mở → tín hiệu bán
// Giao cắt EMA5 với giá mở cửa
double ema5 = iMA(_Symbol, _Period, 5, 0, MODE_EMA, PRICE_CLOSE, 1);
double open1 = iOpen(_Symbol, _Period, 1);
double open2 = iOpen(_Symbol, _Period, 2);
double emaPrev = iMA(_Symbol, _Period, 5, 0, MODE_EMA, PRICE_CLOSE, 2);

bool crossUp = (emaPrev <= open2) && (ema5 > open1);
bool crossDown = (emaPrev >= open2) && (ema5 < open1);

4. Kết hợp nhiều chỉ báo để lọc tín hiệu

Tín hiệu MA Crossover đơn lẻ có thể bị nhiễu. Để lọc tín hiệu, ta kết hợp với MACDRSI — đúng như nội dung Buổi 7:

4.1. Xác nhận bằng MACD

// Lấy giá trị MACD (handle cần tạo trong OnInit)
double macdMain[1], macdSignal[1];
CopyBuffer(hMacd, 0, 0, 1, macdMain);   // đường MACD
CopyBuffer(hMacd, 1, 0, 1, macdSignal); // đường Signal

bool macdBullish = (macdMain[0] > macdSignal[0]); // MACD trên signal
bool macdBearish = (macdMain[0] < macdSignal[0]);

4.2. Xác nhận bằng RSI

double rsi[1];
CopyBuffer(hRsi, 0, 0, 1, rsi);

bool rsiBullish = (rsi[0] < 70) && (rsi[0] > 50); // xu hướng tăng còn sức
bool rsiBearish = (rsi[0] > 30) && (rsi[0] < 50); // xu hướng giảm còn sức

4.3. Bộ lọc kết hợp

// Tín hiệu mua: Golden Cross + MACD bullish + RSI không quá mua
bool buySignal = goldenCross && macdBullish && (rsi[0] < 70);

// Tín hiệu bán: Death Cross + MACD bearish + RSI không quá bán
bool sellSignal = deathCross && macdBearish && (rsi[0] > 30);

5. EA hoàn chỉnh: Giao dịch theo MA Crossover

//+------------------------------------------------------------------+
//| MaCrossoverEA.mq5 — Giao dịch theo MA Crossover                  |
//+------------------------------------------------------------------+
#property strict

input double LotSize = 0.01;
input int    FastPeriod = 5;
input int    SlowPeriod = 20;
input int    StopLossPips = 30;
input int    TakeProfitPips = 60;

int hMacd;
int hRsi;

int OnInit()
{
   hMacd = iMACD(_Symbol, _Period, 12, 26, 9, PRICE_CLOSE);
   hRsi  = iRSI(_Symbol, _Period, 14, PRICE_CLOSE);
   return INIT_SUCCEEDED;
}

void OnDeinit(const int reason) {}

double MA(int period, int shift)
{
   return iMA(_Symbol, _Period, period, 0, MODE_EMA, PRICE_CLOSE, shift);
}

bool GoldenCross()
{
   return (MA(FastPeriod, 2) <= MA(SlowPeriod, 2))
       && (MA(FastPeriod, 1) > MA(SlowPeriod, 1));
}

bool DeathCross()
{
   return (MA(FastPeriod, 2) >= MA(SlowPeriod, 2))
       && (MA(FastPeriod, 1) < MA(SlowPeriod, 1));
}

bool HasPosition()
{
   for(int i = 0; i < PositionsTotal(); i++)
      if(PositionGetSymbol(i) == _Symbol) return true;
   return false;
}

void OnTick()
{
   if(HasPosition()) return;

   double macdMain[1], macdSignal[1], rsi[1];
   CopyBuffer(hMacd, 0, 0, 1, macdMain);
   CopyBuffer(hMacd, 1, 0, 1, macdSignal);
   CopyBuffer(hRsi, 0, 0, 1, rsi);

   bool macdBull = (macdMain[0] > macdSignal[0]);
   bool macdBear = (macdMain[0] < macdSignal[0]);

   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
   int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);

   if(GoldenCross() && macdBull && rsi[0] < 70)
   {
      MqlTradeRequest req = {};
      MqlTradeResult res = {};
      req.action = TRADE_ACTION_DEAL;
      req.symbol = _Symbol;
      req.volume = LotSize;
      req.type = ORDER_TYPE_BUY;
      req.price = ask;
      req.sl = NormalizeDouble(bid - StopLossPips * 10 * _Point, digits);
      req.tp = NormalizeDouble(bid + TakeProfitPips * 10 * _Point, digits);
      req.deviation = 10;
      req.comment = "Golden Cross";
      OrderSend(req, res);
   }

   if(DeathCross() && macdBear && rsi[0] > 30)
   {
      MqlTradeRequest req = {};
      MqlTradeResult res = {};
      req.action = TRADE_ACTION_DEAL;
      req.symbol = _Symbol;
      req.volume = LotSize;
      req.type = ORDER_TYPE_SELL;
      req.price = bid;
      req.sl = NormalizeDouble(ask + StopLossPips * 10 * _Point, digits);
      req.tp = NormalizeDouble(ask - TakeProfitPips * 10 * _Point, digits);
      req.deviation = 10;
      req.comment = "Death Cross";
      OrderSend(req, res);
   }
}

6. Ưu nhược điểm của MA Crossover

Ưu điểm

  • Đơn giản, dễ hiểu, dễ lập trình
  • Hiệu quả trong thị trường có xu hướng
  • Kết hợp tốt với nhiều chỉ báo khác

Nhược điểm

  • Kém hiệu quả trong thị trường đi ngang (nhiễu, cắt liên tục)
  • Tín hiệu trễ (lagging indicator)
  • Cần bộ lọc để giảm tín hiệu giả

7. Câu hỏi thường gặp (FAQ)

7.1. MA Crossover là gì?

Là tín hiệu khi đường MA nhanh cắt lên/xuống đường MA chậm — xác định xu hướng và điểm vào lệnh.

7.2. Nên dùng EMA hay SMA?

EMA phản ứng nhanh hơn (phù hợp giao dịch ngắn hạn), SMA mượt hơn (phù hợp xác định xu hướng dài). Nhiều bot dùng EMA 5 / EMA 20.

7.3. MA Crossover có hiệu quả không?

Hiệu quả trong thị trường có xu hướng, kém hiệu quả khi đi ngang. Nên kết hợp MACD/RSI để lọc.

7.4. Khung thời gian nào phù hợp?

Tùy phong cách: M15-H1 cho scalping/day trading, H4-D1 cho swing. Khung lớn tín hiệu đáng tin hơn.

8. Kết luận

MA Crossover là nền tảng của nhiều hệ thống giao dịch tự động. Kết hợp Golden Cross / Death Cross với MACD, RSIgiá mở cửa giúp lọc tín hiệu hiệu quả. Bạn hoàn toàn có thể lập trình bot EA hoàn chỉnh trong MQL5 dựa trên chiến lược này.

Nếu bạn muốn học bài bản về chỉ báo, lập trình bot và backtest, hãy tham gia khóa Kiến thức Giao dịch tài chính & Lập trình đầu tư tự động (Forex MQL MT5 Cơ bản) tại Hướng Nghiệp Dữ Liệu.

🎬 Xem giải thích nhanh 60 giây: MA Crossover — tín hiệu vào lệnh

📚 Đăng ký khóa học: https://www.huongnghiepdulieu.com/kien-thuc-giao-dich-tai-chinh-forex-mt5/

Hướng Nghiệp Dữ Liệu — Đào tạo lập trình & giao dịch thực chiến · Hotline / Zalo: 0934 145 100

Đặng Trí Thanh

Đặng Trí Thanh

Giám đốc Công nghệ · DNT Digital · Giảng viên HNDL
870 Bài viết
15.4k Người theo dõi
120k+ Lượt đọc

Đặng Trí Thanh — Founder & CTO · Hướng Nghiệp Dữ Liệu - DNT Digital. Chuyên đào tạo và triển khai thực chiến Python, MT5 và hệ thống bot auto trading / IB cho học viên và doanh nghiệp.

Đội ngũ hỗ trợ

Đặng Trí Thanh
Đặng Trí Thanh
Giám đốc Công nghệ DNT Digital
Zalo 0934145100
Mộng Cầm
Mộng Cầm
Hỗ trợ khách hàng · Huấn luyện viên
Zalo 0927909257
Khánh Linh
Khánh Linh
Hỗ trợ khách hàng · Huấn luyện viên
Zalo 0927909582