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

Mike 2017.01.20 01:40 37 0 0
ไฟล์แนบ

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

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

  1. เพิ่มพารามิเตอร์ใหม่ในโค้ดของตัวบ่งชี้
    inputuint จำนวนแท่ง=1;// จำนวนแท่งสำหรับสัญญาณinputbool เสียงเปิด=true; // เปิดใช้งานการแจ้งเตือนinputuint จำนวนการแจ้งเตือน=2;// จำนวนการแจ้งเตือนinputbool อีเมลเปิด=false; // เปิดใช้งานการส่งสัญญาณทางอีเมลinputbool แจ้งเตือนเปิด=false; // เปิดใช้งานการส่งสัญญาณไปยังอุปกรณ์มือถือ
  2. เพิ่มฟังก์ชันใหม่สามตัวที่ส่วนท้ายของโค้ดตัวบ่งชี้: BuySignal(), SellSignal() และ GetStringTimeframe()
    //+------------------------------------------------------------------+//| ฟังก์ชันสัญญาณซื้อ                                              |//+------------------------------------------------------------------+void BuySignal(string ชื่อสัญญาณ,      // ข้อความชื่อของตัวบ่งชี้สำหรับอีเมลและการแจ้งเตือน
                   double &BuyArrow[],        // ตัวบ่งชี้บัฟเฟอร์สำหรับสัญญาณซื้อ
                   constint จำนวนแท่งทั้งหมด,     // จำนวนแท่งในปัจจุบัน
                   constint คำนวณก่อนหน้า, // จำนวนแท่งในทีแล้ว
                   constdouble &Close[],     // ราคาปิด
                   constint &Spread[])       // สเปรด
      {
    //---
       staticuint 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;
          doubleAsk=Close[index];
          doubleBid=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[],       // ตัวบ่งชี้บัฟเฟอร์สำหรับสัญญาณขาย
                    constint จำนวนแท่งทั้งหมด,     // จำนวนแท่งในปัจจุบัน
                    constint คำนวณก่อนหน้า, // จำนวนแท่งในทีแล้ว
                    constdouble &Close[],     // ราคาปิด
                    constint &Spread[])       // สเปรด
      {
    //---
       staticuint 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;
          doubleAsk=Close[index];
          doubleBid=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