Indikator JBrainTrend1Stop_Alert untuk MetaTrader 5: Fitur Peringatan dan Notifikasi

Mike 2017.01.20 02:09 12 0 0
Lampiran

JBrainTrend1Stop adalah indikator tren yang dilengkapi dengan fitur peringatan, email, dan notifikasi push.

Pada indikator ini, terdapat beberapa perubahan yang dilakukan untuk mengimplementasikan fitur peringatan, pesan email, dan notifikasi push:

  1. Menambahkan parameter input baru:
    input uint NumberofBar=1;//Jumlah Bar untuk sinyal
    input bool SoundON=true; //Aktifkan peringatan
    input uint NumberofAlerts=2;//Jumlah peringatan
    input bool EMailON=false; //Aktifkan pengiriman email sinyal
    input bool PushON=false; //Aktifkan pengiriman sinyal ke perangkat mobile
    
  2. Menambahkan tiga fungsi baru di akhir kode indikator: BuySignal(), SellSignal(), dan GetStringTimeframe():
    //+------------------------------------------------------------------+
    //| Fungsi sinyal beli                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // teks nama indikator untuk email dan pesan push
                   double &BuyArrow[],        // buffer indikator dengan sinyal untuk tren naik
                   double &SellArrow[],       // buffer indikator dengan sinyal untuk tren turun
                   const int Rates_total,     // jumlah bar saat ini
                   const int Prev_calculated, // jumlah bar pada tick sebelumnya
                   const double &Close[],     // harga penutupan
                   const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;

       bool BuySignal=false;
       bool SeriesTest=ArrayGetAsSeries(BuyArrow);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(SellArrow[index1] && SellArrow[index1]!=EMPTY_VALUE && BuyArrow[index] && BuyArrow[index]!=EMPTY_VALUE) BuySignal=true;
       if(BuySignal && counter<=NumberofAlerts)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          SeriesTest=ArrayGetAsSeries(Close);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          SeriesTest=ArrayGetAsSeries(Spread);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          Bid+=_Point*Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("sinyal BUY \n Ask=",Ask,"\n Bid=",Bid,"\n waktu saat ini=",text,"\n Simbol=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": alert sinyal BUY","sinyal BUY di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": sinyal BUY di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //| Fungsi sinyal jual                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // teks nama indikator untuk email dan pesan push
                    double &SellArrow[],       // buffer indikator dengan sinyal untuk tren turun
                    double &BuyArrow[],        // buffer indikator dengan sinyal untuk tren naik
                    const int Rates_total,     // jumlah bar saat ini
                    const int Prev_calculated, // jumlah bar pada tick sebelumnya
                    const double &Close[],     // harga penutupan
                    const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;

       bool SellSignal=false;
       bool SeriesTest=ArrayGetAsSeries(SellArrow);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(BuyArrow[index1] && BuyArrow[index1]!=EMPTY_VALUE && SellArrow[index] && SellArrow[index]!=EMPTY_VALUE) SellSignal=true;
       if(SellSignal && counter<=NumberofAlerts)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          SeriesTest=ArrayGetAsSeries(Close);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          SeriesTest=ArrayGetAsSeries(Spread);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          Bid+=_Point*Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("sinyal SELL \n Ask=",Ask,"\n Bid=",Bid,"\n waktu saat ini=",text,"\n Simbol=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": alert sinyal SELL","sinyal SELL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": sinyal SELL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Mengambil timeframe sebagai string                                |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
  3. Menambahkan beberapa panggilan ke fungsi BuySignal() dan SellSignal() setelah siklus perhitungan indikator dalam blok OnCalculate():
    //---    
       BuySignal("JBrainTrend1Stop_Alert",BuyStopBuffer,SellStopBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("JBrainTrend1Stop_Alert",SellStopBuffer,BuyStopBuffer,rates_total,prev_calculated,close,spread);
    //---  

Di mana BuyStopBuffer dan SellStopBuffer adalah nama buffer indikator untuk menyimpan sinyal tren naik dan turun (garis stop untuk long dan short). Nilai nol atau EMPTY_VALUE harus ada dalam buffer indikator jika tidak ada tren yang sesuai.

Diasumsikan bahwa hanya satu panggilan ke fungsi BuySignal() dan SellSignal() yang akan digunakan dalam blok OnCalculate() dari kode indikator.

Tempatkan file terkompilasi JMA.mq5 ke dalam MQL5\Indicators.


Gambar.1. Indikator JBrainTrend1Stop_Alert di chart

Gambar.1. Indikator JBrainTrend1Stop_Alert di chart

Gambar.2. Indikator JBrainTrend1Stop_Alert. Menghasilkan peringatan

Gambar.2. Indikator JBrainTrend1Stop_Alert. Menghasilkan peringatan

Daftar
Komentar 0