Kiến thức Trading

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

01/09/2026 Đặng Trí Thanh 181 lượt xem ~7 phút đọc
Mục lục 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

    Đặ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ướ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

    Đặng Trí Thanh

    Đặng Trí Thanh

    Giám đốc Công nghệ · DNT Digital · Giảng viên HNDL Hướng Nghiệp Dữ Liệu
    831 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.

    Thẻ: (chưa gắn thẻ)

    Bài viết liên quan

    DNT DIGITAL

    🤖 AI CODE: Vibe Code NEEDED! 🚀 🏦 SSI • DNSE • MT5 • Bitget ⚡

    Zalo 0934145100
    Khóa đào tạo
    Hỗ trợ

    Được học lại miễn phí · Hỗ trợ trọn đời · Cập nhật miễn phí

    Độ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