หน้าแรก ตัวชี้วัดทางเทคนิค โพสต์

BrainTrend1Sig_Alert: สัญญาณแจ้งเตือนสำหรับ MetaTrader 5

ไฟล์แนบ
16629.zip (4.08 KB, ดาวน์โหลด 0 ครั้ง)

BrainTrend1Sig_Alert เป็นตัวบ่งชี้สัญญาณแบบเซมาฟอร์ที่มีฟังก์ชันแจ้งเตือนผ่านเสียง อีเมล และการแจ้งเตือนผ่านมือถือ

มีการปรับปรุงโค้ดของตัวบ่งชี้เพื่อเพิ่มฟังก์ชันการแจ้งเตือน อีเมล และการแจ้งเตือนผ่านมือถือ โดยมีการเปลี่ยนแปลงดังนี้:

  1. เพิ่มพารามิเตอร์ใหม่ในโค้ดของตัวบ่งชี้
    input uint จำนวนแท่ง=1;// จำนวนแท่งสำหรับสัญญาณ
    input bool เสียงเปิด=true; // เปิดใช้งานการแจ้งเตือน
    input uint จำนวนการแจ้งเตือน=2;// จำนวนการแจ้งเตือน
    input bool อีเมลเปิด=false; // เปิดใช้งานการส่งสัญญาณทางอีเมล
    input bool แจ้งเตือนเปิด=false; // เปิดใช้งานการส่งสัญญาณไปยังอุปกรณ์มือถือ
    
  2. เพิ่มฟังก์ชันใหม่สามตัวที่ส่วนท้ายของโค้ดตัวบ่งชี้: BuySignal(), SellSignal() และ GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| ฟังก์ชันสัญญาณซื้อ                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string ชื่อสัญญาณ,      // ข้อความชื่อของตัวบ่งชี้สำหรับอีเมลและการแจ้งเตือน
                   double &BuyArrow[],        // ตัวบ่งชี้บัฟเฟอร์สำหรับสัญญาณซื้อ
                   const int จำนวนแท่งทั้งหมด,     // จำนวนแท่งในปัจจุบัน
                   const int คำนวณก่อนหน้า, // จำนวนแท่งในทีแล้ว
                   const double &Close[],     // ราคาปิด
                   const int &Spread[])       // สเปรด
      {
    //---
       static uint counter=0;
       if(จำนวนแท่งทั้งหมด!=คำนวณก่อนหน้า) counter=0;
    
       bool สัญญาณซื้อ=false;
       bool ทดสอบชุด=ArrayGetAsSeries(BuyArrow);
       int index;
       if(ทดสอบชุด) index=int(จำนวนแท่ง);
       else index=จำนวนแท่งทั้งหมด-int(จำนวนแท่ง)-1;
       if(NormalizeDouble(BuyArrow[index],_Digits) && BuyArrow[index]!=EMPTY_VALUE) สัญญาณซื้อ=true;
       if(สัญญาณซื้อ && counter<=จำนวนการแจ้งเตือน)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          ทดสอบชุด=ArrayGetAsSeries(Close);
          if(ทดสอบชุด) index=int(จำนวนแท่ง);
          else index=จำนวนแท่งทั้งหมด-int(จำนวนแท่ง)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          ทดสอบชุด=ArrayGetAsSeries(Spread);
          if(ทดสอบชุด) index=int(จำนวนแท่ง);
          else index=จำนวนแท่งทั้งหมด-int(จำนวนแท่ง)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(เสียงเปิด) Alert("BUY signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
          if(อีเมลเปิด) SendMail(ชื่อสัญญาณ+": BUY signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(แจ้งเตือนเปิด) SendNotification(ชื่อสัญญาณ+": BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| ฟังก์ชันสัญญาณขาย                                               |
    //+------------------------------------------------------------------+
    void SellSignal(string ชื่อสัญญาณ,      // ข้อความชื่อของตัวบ่งชี้สำหรับอีเมลและการแจ้งเตือน
                    double &SellArrow[],       // ตัวบ่งชี้บัฟเฟอร์สำหรับสัญญาณขาย
                    const int จำนวนแท่งทั้งหมด,     // จำนวนแท่งในปัจจุบัน
                    const int คำนวณก่อนหน้า, // จำนวนแท่งในทีแล้ว
                    const double &Close[],     // ราคาปิด
                    const int &Spread[])       // สเปรด
      {
    //---
       static uint counter=0;
       if(จำนวนแท่งทั้งหมด!=คำนวณก่อนหน้า) counter=0;
    
       bool สัญญาณขาย=false;
       bool ทดสอบชุด=ArrayGetAsSeries(SellArrow);
       int index;
       if(ทดสอบชุด) index=int(จำนวนแท่ง);
       else index=จำนวนแท่งทั้งหมด-int(จำนวนแท่ง)-1;
       if(NormalizeDouble(SellArrow[index],_Digits) && SellArrow[index]!=EMPTY_VALUE) สัญญาณขาย=true;
       if(สัญญาณขาย && counter<=จำนวนการแจ้งเตือน)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          ทดสอบชุด=ArrayGetAsSeries(Close);
          if(ทดสอบชุด) index=int(จำนวนแท่ง);
          else index=จำนวนแท่งทั้งหมด-int(จำนวนแท่ง)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          ทดสอบชุด=ArrayGetAsSeries(Spread);
          if(ทดสอบชุด) index=int(จำนวนแท่ง);
          else index=จำนวนแท่งทั้งหมด-int(จำนวนแท่ง)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(เสียงเปิด) Alert("SELL signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
          if(อีเมลเปิด) SendMail(ชื่อสัญญาณ+": SELL signal alert","SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(แจ้งเตือนเปิด) SendNotification(ชื่อสัญญาณ+": SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  การดึงเวลาจากช่วงเวลาเป็นข้อความ                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. เพิ่มการเรียกใช้ฟังก์ชัน BuySignal() และ SellSignal() หลังจากการคำนวณตัวบ่งชี้ในบล็อก OnCalculate()
    //---
    BuySignal("BrainTrend1Sig_Alert",BuyBuffer,rates_total,prev_calculated,close,spread);
    SellSignal("BrainTrend1Sig_Alert",SellBuffer,rates_total,prev_calculated,close,spread);
    //---

โดยที่ BuyBuffer และ SellBuffer เป็นชื่อของบัฟเฟอร์สำหรับเก็บสัญญาณซื้อและขาย ซึ่งจะต้องตั้งค่าเป็นศูนย์หรือ EMPTY_VALUE ในบัฟเฟอร์ของตัวบ่งชี้

คาดว่าการเรียกใช้ฟังก์ชัน BuySignal() และ SellSignal() จะใช้เพียงครั้งเดียวในบล็อก OnCalculate() ของโค้ดตัวบ่งชี้

Fig.1. BrainTrend1Sig_Alert indicator on the chart

Fig.1. ตัวบ่งชี้ BrainTrend1Sig_Alert บนกราฟ

Fig.2. BrainTrend1Sig_Alert indicator. Generating alerts

Fig.2. ตัวบ่งชี้ BrainTrend1Sig_Alert กำลังสร้างการแจ้งเตือน

โพสต์ที่เกี่ยวข้อง

ความคิดเห็น (0)