Bài viết gần đây
Trang chủ → Bài Viết → MA Crossover là gì? Tín hiệu vào lệnh với đường trung bình (MA/EMA) trong MT5
| 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
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 (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ướng và loạ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 MACD và RSI — đú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, RSI và giá 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
Weekly Digest — Nhận Bản Tin Hàng Tuần
Nhận các bài viết phân tích kỹ thuật chuyên sâu, thuật toán giao dịch tự động (Trading Bot) và các giải pháp công nghệ mới nhất từ Hướng Nghiệp Dữ Liệu.
Đặng Trí Thanh
Giám đốc Công nghệ · DNT Digital · Giảng viên HNDLĐặ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.