Code tool mt5 MetaQuotes Language Editor chọn đa khung thời gian chuyên sâu cho vàng

admin

Administrator
Thành viên BQT

Cấu trúc Logic của Tool​


Một tool chuyên sâu cho Vàng thường cần 3 thành phần chính:

Bảng điều khiển (Dashboard): Hiển thị xu hướng từ các khung lớn (H4, D1) đến khung nhỏ (M5, M15).

Chỉ báo kỹ thuật: Thường dùng RSI, MACD hoặc Price Action (Hỗ trợ/Kháng cự) để xác định sự đồng thuận giữa các khung.

Bộ lọc tin tức (News Filter): Tự động lấy dữ liệu từ lịch kinh tế của MetaQuotes để cảnh

Code mẫu: Lấy dữ liệu đa khung thời gian​


Để lấy dữ liệu từ khung thời gian khác khung hiện tại, bạn sử dụng hàm iRSI, iMACD hoặc CopyRates.
C++:
// Ví dụ: Lấy xu hướng RSI từ 3 khung thời gian khác nhau
double GetRSI(string symbol, ENUM_TIMEFRAMES tf, int period) {
   int handle = iRSI(symbol, tf, period, PRICE_CLOSE);
   double buffer[];
   ArraySetAsSeries(buffer, true);
   if(CopyBuffer(handle, 0, 0, 1, buffer) > 0) {
      return buffer[0];
   }
   return -1;
}

// Cách dùng trong OnTick()
void OnTick() {
   double rsiM15 = GetRSI(_Symbol, PERIOD_M15, 14);
   double rsiH1  = GetRSI(_Symbol, PERIOD_H1, 14);
   double rsiD1  = GetRSI(_Symbol, PERIOD_D1, 14);
 
   // Logic: Nếu cả 3 khung đều > 70 => Vàng đang quá mua cực độ
}

Code mẫu: Tích hợp Tin tức (Economic Calendar)​


MQL5 có thư viện lịch kinh tế rất mạnh. Bạn có thể dùng hàm CalendarValueLast để kiểm tra các tin tức sắp tới liên quan đến USD (cặp bài trùng với Vàng).

C++:
#include <GetCalendar.mqh> // Bạn có thể tìm các thư viện hỗ trợ này trên MQL5 Market

void CheckNews() {
   MqlCalendarValue values[];
   datetime date_from = TimeCurrent();
   datetime date_to = date_from + PeriodSeconds(PERIOD_H4); // Kiểm tra tin trong 4 giờ tới

   // Lấy các sự kiện lịch kinh tế
   if(CalendarValueHistory(values, date_from, date_to, "US")) { // Lọc theo mã quốc gia "US"
      for(int i=0; i<ArraySize(values); i++) {
         // Nếu tin có độ ảnh hưởng cao (Impact High)
         if(values[i].impact_type == CALENDAR_IMPACT_HIGH) {
            Alert("Cảnh báo: Có tin mạnh về USD lúc: ", values[i].time);
         }
      }
   }
}

Cách cài đặt:​

  1. Mở MetaEditor (F4 trong MT5).
  2. File -> New -> Custom Indicator.
  3. Đặt tên là Gold_MTF_News_Pro.
  4. Xóa hết code mặc định và dán đoạn code dưới đây vào.
  5. Nhấn Compile (F7) và quay lại MT5 để kéo vào biểu đồ Vàng.

Full code đầy đủ chỉ cần copy.​


C++:
//+------------------------------------------------------------------+
//|                                           Gold_MTF_News_Pro.mq5 |
//|                                  Copyright 2026, fxvnn.com |
//+------------------------------------------------------------------+
#property copyright "Gemini AI"
#property indicator_chart_window
#property indicator_plots 0

// Khai báo các khung thời gian muốn theo dõi
ENUM_TIMEFRAMES TFs[] = {PERIOD_M15, PERIOD_H1, PERIOD_H4};
string TF_Names[] = {"M15", "H1", "H4"};

// Cấu hình giao diện
int x_start = 20;
int y_start = 50;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   EventSetTimer(1); // Cập nhật tin tức mỗi giây
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   ObjectsDeleteAll(0, "GoldPanel_");
   EventKillTimer();
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   DrawDashboard();
   return(rates_total);
}

//+------------------------------------------------------------------+
//| Timer function for News updates                                  |
//+------------------------------------------------------------------+
void OnTimer()
{
   DrawNews();
}

//+------------------------------------------------------------------+
//| Hàm vẽ Dashboard Đa khung thời gian                              |
//+------------------------------------------------------------------+
void DrawDashboard()
{
   string panel_name = "GoldPanel_BG";
   CreateLabel(panel_name, "--- GOLD MULTI-TF MONITOR ---", x_start, y_start - 25, clrGold);

   for(int i=0; i<ArraySize(TFs); i++)
   {
      double rsi = GetRSI(_Symbol, TFs[i]);
      double ma = GetMAStack(_Symbol, TFs[i]);
   
      string text = TF_Names[i] + " | RSI: " + DoubleToString(rsi, 2) + " | Trend: " + (ma > 0 ? "BULL" : "BEAR");
      color clr = (ma > 0 && rsi > 50) ? clrLime : (ma < 0 && rsi < 50 ? clrRed : clrWhite);
   
      CreateLabel("GoldPanel_TF_"+IntegerToString(i), text, x_start, y_start + (i * 20), clr);
   }
}

//+------------------------------------------------------------------+
//| Hàm lấy dữ liệu Tin tức (USD)                                    |
//+------------------------------------------------------------------+
void DrawNews()
{
   MqlCalendarValue values[];
   datetime from = TimeCurrent();
   datetime to = from + 86400; // Kiểm tra tin trong 24h tới
 
   string news_text = "Sắp có tin: ";
   color news_color = clrGray;

   if(CalendarValueHistory(values, from, to, "US"))
   {
      for(int i=0; i<ArraySize(values); i++)
      {
         MqlCalendarEvent event;
         CalendarEventById(values[i].event_id, event);
     
         if(event.importance == CALENDAR_IMPORTANCE_HIGH)
         {
            news_text = "!!! TIN CỰC MẠNH (USD): " + event.name;
            news_color = clrOrangeRed;
            break;
         }
      }
   }
   CreateLabel("GoldPanel_News", news_text, x_start, y_start + 80, news_color);
}

// --- Các hàm hỗ trợ tính toán ---

double GetRSI(string symbol, ENUM_TIMEFRAMES tf)
{
   int handle = iRSI(symbol, tf, 14, PRICE_CLOSE);
   double buffer[];
   ArraySetAsSeries(buffer, true);
   if(CopyBuffer(handle, 0, 0, 1, buffer) > 0) return buffer[0];
   return 50;
}

double GetMAStack(string symbol, ENUM_TIMEFRAMES tf)
{
   int h_fast = iMA(symbol, tf, 10, 0, MODE_EMA, PRICE_CLOSE);
   int h_slow = iMA(symbol, tf, 20, 0, MODE_EMA, PRICE_CLOSE);
   double f[], s[];
   CopyBuffer(h_fast, 0, 0, 1, f);
   CopyBuffer(h_slow, 0, 0, 1, s);
   return f[0] - s[0]; // Dương là xu hướng tăng, âm là giảm
}

void CreateLabel(string name, string text, int x, int y, color clr)
{
   if(ObjectFind(0, name) < 0) ObjectCreate(0, name, OBJ_LABEL, 0, 0, 0);
   ObjectSetString(0, name, OBJPROP_TEXT, text);
   ObjectSetInteger(0, name, OBJPROP_XDISTANCE, x);
   ObjectSetInteger(0, name, OBJPROP_YDISTANCE, y);
   ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
   ObjectSetInteger(0, name, OBJPROP_FONTSIZE, 10);
}

Các tính năng chuyên sâu trong Code này:​

  1. Chỉ báo hợp lưu: Tool không chỉ lấy RSI mà còn so sánh đường MA nhanh (10) và MA chậm (20). Nếu MA nhanh nằm trên MA chậm VÀ RSI > 50, Dashboard sẽ hiện màu Lime (Xanh sáng) - báo hiệu lực mua mạnh.
  2. Tự động lọc tin USD: Vàng chịu tác động trực tiếp từ đồng USD. Code này sử dụng CalendarValueHistory lọc riêng quốc gia "US" và chỉ cảnh báo khi có tin Importance High (Tin đỏ).
  3. Tối ưu hiệu năng: Sử dụng OnTimer riêng cho tin tức để không làm nặng biểu đồ khi nến nhảy (OnTick).

Lưu ý cho bạn:​

  • Dữ liệu tin tức: Để tin tức hiện lên, bạn cần vào MT5 -> Tab Tools -> Options -> Charts -> Tích chọn "Show real-time history of deals on chart" và đảm bảo tab Calendar ở hộp công cụ phía dưới có dữ liệu.
  • Backtest: Các hàm Calendar không chạy được trong Backtest của MT5, bạn chỉ có thể test real-time trên biểu đồ Demo hoặc Live.
 

Một lệnh tạo ấn tượng. Trăm lệnh tạo trải nghiệm.

Trải nghiệm giao dịch không chỉ được đánh giá ở lần đầu tiên, mà ở sự thuận tiện và hiệu quả được duy trì qua từng giao dịch.

Khám phá XM ngay
Sidebar Prices (XAU, BTC, ETH)
Thị trường
Cặp
Giá hiện tại
Xu hướng
Đang tải...
Next: --:--
XAU/USD – Tín hiệu hôm nay
--
Đang phân tích…
Dữ liệu: fxvnn.com • Tham khảo
Back
Top Bottom