Cảnh báo trong chỉ báo (Indicator). Làm thế nào để chèn Cảnh báo và Mũi tên vào chỉ báo của bạn?

Làm việc với Telegram trong MetaTrader. Kênh Telegram và bot
Bí quyết Autolot của tôi. Lô động hay Autolot. Rủi ro từ sự cân bằng.
Làm việc với Telegram trong MetaTrader. Kênh Telegram và bot
Bí quyết Autolot của tôi. Lô động hay Autolot. Rủi ro từ sự cân bằng.

Mô tả

Cảnh báo: Các truy vấn phổ biến trên công cụ tìm kiếm và những chủ đề nổi bật trên diễn đàn thường chứa những cụm từ sau.

Một cảnh báo về những chủ đề như vậy có thể giúp bạn cập nhật xu hướng mới nhất.

  • Alert indicator
  • Làm thế nào để thêm âm báo vào chỉ báo?
  • Giúp tôi chèn âm báo vào chỉ báo
  • Làm thế nào để chèn Cảnh báo và Mũi tên
  • Làm thế nào để gửi tin nhắn đến email hoặc điện thoại khi có tín hiệu từ chỉ báo?

Trong bài viết này, tôi sẽ mô tả chi tiết cách đơn giản để thêm Cảnh báo, Mail, PushMũi tên vào bất kỳ chỉ báo nào bằng cách sử dụng đoạn mã bổ sung có sẵn tại Expforex.

  

Lời mở đầu 

Để cài đặt Cảnh báo đúng cách trong chỉ báo, bạn phải có mã nguồn mở của chỉ báo. 

Mã đã dịch ngược là không mong muốn vì, với người mới, mã đã dịch ngược cung cấp rất ít thông tin. Rất khó để hiểu. 

Bạn cũng có thể gặp vấn đề khi biên dịch sau khi chỉnh sửa. 

xCustomEA

Nếu bạn đang tìm kiếm một cách dễ dàng hơn để tự động hóa chiến lược giao dịch mà không cần lập trình phức tạp, hãy cân nhắc xCustomEA.

Expert Advisor này từ Expforex được thiết kế để hoạt động trơn tru với các chỉ báo tạo ra tín hiệu mũi tên. Với xCustomEA, bạn có thể dễ dàng tự động hóa bất kỳ chỉ báo nào hiển thị mũi tên mua hoặc bán, cho phép bạn tạo chiến lược tự động mạnh mẽ mà không cần viết mã phức tạp.

xCustomEA giúp việc tự động hóa chiến lược dựa trên tín hiệu của chỉ báo trở nên dễ tiếp cận hơn nhiều. Nó cho phép nhà giao dịch tập trung vào việc tối ưu hóa giao dịch thay vì tốn thời gian và công sức lập trình phức tạp. Expert Advisor này là một giải pháp thay thế tuyệt vời cho việc thuê lập trình viên, cung cấp cách đơn giản để chuyển tín hiệu chỉ báo thành các lệnh giao dịch.

Để biết thêm thông tin, hãy truy cập trang xCustomEA hoặc khám phá các expert advisor khác của Expforex.

Bắt đầu công việc chèn Cảnh báo

   Trước tiên, bạn cần xác định buffer nào trong chỉ báo cung cấp các tín hiệu cụ thể, mục đích tạo cảnh báo và điều kiện xác định tín hiệu trên chỉ báo. 

Quan trọng: Chỉ các buffer bên ngoài được khai báo ở đầu mã biến mới có thể được hiển thị trong chỉ báo: 

#property indicator_buffers 1

Tuy nhiên, chỉ báo cũng có thể chứa các buffer ẩn, được thiết lập trong hàm init() và được khai báo dưới dạng biến:

IndicatorBuffers(7): Chúng ta chỉ cần các buffer đầu tiên. 

Nếu, ví dụ, bạn có 1 buffer bên ngoài, hãy xem biến: 

SetIndexBuffer(0, SarBuffer);
  • 0 là buffer đầu tiên
  • 1 là buffer thứ hai

Các buffer này hoặc tên của chúng có thể được xác định bằng cách di chuột qua một đường cụ thể của chỉ báo trên biểu đồ.

Value1 – Đây là buffer đầu tiên hoặc 0 trong hệ thống đánh chỉ số của mã.  

SetIndexBuffer(0, SarBuffer); // Tên buffer chúng ta cần  

Nếu đó là SarBuffer, chúng ta sẽ sử dụng nó.

Minh họa cài đặt cảnh báo trong chỉ báo Forex
Minh họa mũi tên báo hiệu trong MetaTrader

Tiếp theo, đó là vấn đề kỹ thuật để xác định cách kích hoạt tín hiệu;

Ví dụ, nếu là việc cắt đường 0 từ trên (dưới) xuống (lên), sẽ trông như sau:

SarBuffer[shift+1] >= 0 && SarBuffer[shift] < 0

Chỉ báo cắt giá hiện tại hoặc thanh, phá vỡ thanh bởi chỉ báo, v.v.:

SarBuffer[shift+1] >= Close[shift] && SarBuffer[shift] < Close[shift]

Nếu là việc cắt qua các mức riêng, ví dụ như stochastics:

SarBuffer[shift+1] <= 75 && SarBuffer[shift] > 75;

SarBuffer[shift+1] >= 25 && SarBuffer[shift] < 25;

Nếu chỉ báo của bạn đã có mũi tên, thì cũng có dạng tín hiệu như sau:

DnTrend[1] != EMPTY_VALUE && DnTrend[1] != 0 && UpTrend[2] != EMPTY_VALUE

Dù sao đi nữa, bạn cần vận dụng logic và sự linh hoạt để ghi lại tín hiệu chính xác. Nếu gặp khó khăn, hãy đăng vào chủ đề này, đính kèm chỉ báo, hiển thị các dòng trên biểu đồ và mô tả chi tiết điều bạn không làm được. Việc gửi tin nhắn kiểu “cần chèn cảnh báo vào chỉ báo” mà không giải thích chèn ở đâu, chèn cái gì, và không cung cấp chỉ báo thì sẽ không có ích. 

Mã “Cảnh báo và mũi tên từ www.expforex.com

Bước tiếp theo của việc thêm cảnh báo vào chỉ báo bao gồm vài điểm:

BƯỚC 1

Chèn mã sau vào đầu Expert Advisor trước hàm OnCalculate ()  (start):

//+==+//+ www.expforex.com edit AlertArrow +//+==+
extern string Alerts="Alerts and arrows from www.expforex.com";
extern bool AlerT=true; // Issue an alert to the screen
extern bool Mail=true; // Send message
extern bool Push=true; // Send PUSH to phone
extern bool Arrow=true; // Put arrows on signals
extern int shift=1; // On which bar to count the signal 0 - on the current one, 1 - on the closed
int timeee;
// Internal variable
string nameInd;
void SetArrow(int cd, color cl, string nm="", datetime t1=0, double p1=0, int sz=3)
{
  if(nm=="")
    nm=DoubleToStr(Time[0], 0);
  if(t1 <= 0)
    t1=Time[0];
  if(p1 <= 0)
    p1=Bid;
  nameInd=WindowExpertName();
  int wind=WindowFind(nameInd);
  wind=0;
  if(ObjectFind(nm) < 0)
    ObjectCreate(nm, OBJ_ARROW, wind, 0, 0);
  ObjectSet(nm, OBJPROP_TIME1, t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_ARROWCODE, cd);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_WIDTH, sz);
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Expforex_AlertArrow(string text="", int arrowdir=0, bool history=false, int i=0)
{
  nameInd=WindowExpertName();
  int wind=WindowFind(nameInd);
  if(wind==-1)
    wind=0;
  ObjectCreate("Originalalert", OBJ_LABEL, wind, 0, 0);
  ObjectSetText("Originalalert", "Modification AlertArrow www.expforex.com", 10, "Arial Bold", Red);
  ObjectSet("Originalalert", OBJPROP_CORNER, 2);
  ObjectSet("Originalalert", OBJPROP_XDISTANCE, 200);
  ObjectSet("Originalalert", OBJPROP_YDISTANCE, 10);
  if(!history)
  {
    if(AlerT)
      Alert(text);
    if(Arrow)
      if(arrowdir==1)
        SetArrow(241, Blue, nameInd + DoubleToStr(Time[shift], 0), Time[shift], Low[shift]);
    if(Arrow)
      if(arrowdir==2)
        SetArrow(242, Red, nameInd + DoubleToStr(Time[shift], 0), Time[shift], High[shift]);
    if(!IsTesting())
      if(Mail)
        SendMail(text, text);
    if(!IsTesting())
      if(Push)
        SendNotification(text);
  }
  if(history)
  {
    if(Arrow)
      if(arrowdir==1)
        SetArrow(241, Blue, nameInd + DoubleToStr(Time[shift + i2], 0), Time[shift + i2], Low[shift + i2]);
    if(Arrow)
      if(arrowdir==2)
        SetArrow(242, Red, nameInd + DoubleToStr(Time[shift + i2], 0), Time[shift + i2], High[shift + i2]);
  }
}//+==+//+ www.expforex.com edit AlertArrow +//+==+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  for(int i=ObjectsTotal(); i>=0; i--)
  {
    if(StringFind(ObjectName(i), nameInd)!=-1)
      ObjectDelete(ObjectName(i));
  }
}
//+------------------------------------------------------------------+

BƯỚC 2

 Trước khi kết thúc hàm OnCalculate (), ngay trước:

return(rates_total); }

Hãy chèn đoạn mã sau:

//+==+//+ www.expforex.com edit AlertArrow +//+==+

nameInd=WindowExpertName();

if(timeee != Time[0] && SarBuffer[shift+1] <= 75 && SarBuffer[shift] > 75)
{
  Expforex_AlertArrow(Symbol() + " " + Period() + nameInd + " UP", 1);
  timeee=Time[0];
}
if(timeee != Time[0] && SarBuffer[shift+1] >= 25 && SarBuffer[shift] < 25)
{
  Expforex_AlertArrow(Symbol() + " " + Period() + nameInd + " DN", 2);
  timeee=Time[0];
}//+==+//+ www.expforex.com edit AlertArrow +//+==+

BƯỚC 3

Đoạn mã này sẽ đóng vai trò là tín hiệu của chúng ta.

Tất nhiên, bạn cần thay thế một số đoạn bằng mã của chính bạn. 

Đoạn mã bên dưới dùng để tạo cảnh báo:

1. Cắt đường 0 từ trên (dưới) xuống (lên):

SarBuffer[shift+1] >= 0 && SarBuffer[shift] < 0

2. Chỉ báo cắt giá hiện tại hoặc thanh:

SarBuffer[shift+1] >= Close[shift] && SarBuffer[shift] < Close[shift]

3. Cắt qua các mức (như Stochastics):

SarBuffer[shift+1] <= 75 && SarBuffer[shift] > 75;

SarBuffer[shift+1] >= 25 && SarBuffer[shift] < 25;

Sau khi sử dụng

Để thêm âm báo cho chỉ báo, hãy làm như sau:

  • 1. Mở cài đặt của chỉ báo.
  • 2. Tìm mục “Cảnh báo” hoặc “Mũi tên“.
  • 3. Chọn tùy chọn thêm âm cảnh báo.
  • 4. Chọn tệp âm thanh bạn muốn dùng làm cảnh báo.
  • 5. Lưu thay đổi.

Bằng cách chèn âm báo vào chỉ báo, bạn sẽ nhận được thông báo âm thanh khi các điều kiện cụ thể được đáp ứng, giúp bạn đưa ra quyết định giao dịch tốt hơn.

Nếu bạn cần mũi tên trên lịch sử, hãy làm như sau:

Sau đoạn mã phía trên, thêm đoạn sau:

//+==+//+ www.expforex.com edit AlertArrow +//+==+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
if(counted_bars > 0)
   counted_bars--;
int limit2 = Bars - counted_bars;
for(int i2 = 0; i2 < limit2; i2++) {
    nameInd = WindowExpertName();
    if(SarBuffer[shift+1+i2] <= 75 && SarBuffer[shift+i2] > 75)
    {
        Expforex_AlertArrow(Symbol() + " " + Period() + nameInd + " UP" + i2, 1, true, i2);
    }
    if(SarBuffer[shift+1+i2] >= 25 && SarBuffer[shift+i2] < 25)
    {
        Expforex_AlertArrow(Symbol() + " " + Period() + nameInd + " DN" + i2, 2, true, i2);
    }
}
//+==+//+ www.expforex.com edit AlertArrow +//+==+

Ví dụ

Các ví dụ này được lấy từ phần tương ứng trên diễn đàn của chúng tôi. Tôi đã chỉnh sửa các chỉ báo theo nguyên tắc mô tả ở trên. 

Minh họa cách chèn cảnh báo vào chỉ báo
Ví dụ hiển thị mũi tên và cảnh báo trong MetaTrader

Kết luận

Trong bài viết này, tôi đã giải thích chi tiết và dễ hiểu nhất về quá trình tạo tín hiệu cho chỉ báo.

Đoạn mã ở trên có thể được sử dụng không hạn chế trên bất kỳ chỉ báo nào. Quan trọng là bạn không thay đổi tên tác giả khi thêm mã vào chỉ báo. 

Nếu bạn thấy bài viết này hữu ích và cách chèn tín hiệu này có ích, vui lòng để lại bình luận và đánh giá chủ đề. 

Thanh tín hiệu: Điều quan trọng cần biết

Có thắc mắc gì không?

Nếu bạn có bất kỳ câu hỏi nào, hãy đặt câu hỏi. Chúng tôi không bán thứ gì không rõ ràng.

Ngoài ra, mỗi sản phẩm của chúng tôi đều có thể được dùng thử trước khi mua.

Chúng tôi trân trọng sự quan tâm và ủng hộ của bạn dành cho các sản phẩm của chúng tôi, và luôn nỗ lực duy trì tiêu chuẩn chất lượng cao.

Cảm ơn bạn đã đồng hành cùng chúng tôi!

Bạn có câu hỏi?

Leave a Reply

Your email address will not be published. Required fields are marked *

Bài viết này cũng có sẵn bằng: English Українська Portuguese Español Deutsch Chinese Русский Français Italiano Türkçe 日本語 한국어 العربية Indonesian ไทย Tiếng Việt


    Please wait, contacting ...

    Cảnh báo Rủi ro:


    Hiệu suất giao dịch trong quá khứ không đảm bảo kết quả trong tương lai.

    Giao dịch ngoại hối với đòn bẩy mang lại mức độ rủi ro cao và có thể không phù hợp với tất cả các nhà đầu tư.

    Hãy nhận thức rằng việc sử dụng robot giao dịch (trading robots) có thể mang lại rủi ro đáng kể, và bạn có thể mất nhiều hơn khoản đầu tư ban đầu.

    Xin hãy tiến hành một cách thận trọng, đánh giá kỹ lưỡng tình hình tài chính của bạn, và cân nhắc việc tìm kiếm lời khuyên từ một chuyên gia có đủ năng lực.

    Disclaimer

    Trang web này sử dụng cookie để cải thiện trải nghiệm của bạn. Bằng cách sử dụng trang web này, bạn đồng ý với Chính sách bảo vệ dữ liệuTuyên bố miễn trừ trách nhiệm của chúng tôi.
    Đọc thêm