BrainTrend1Sig_Alert: Indikator dengan Notifikasi untuk MetaTrader 5

Mike 2017.01.20 01:40 16 0 0
Lampiran

BrainTrend1Sig_Alert adalah indikator sinyal semaphore yang dilengkapi dengan notifikasi, email, dan pemberitahuan push. Ini sangat membantu trader untuk tetap terhubung dengan peluang trading yang ada.

Berikut adalah beberapa perubahan yang dilakukan pada kode indikator untuk menerapkan notifikasi, pesan email, dan pemberitahuan push:

  1. Menambahkan parameter input baru:
    input uint NumberofBar=1;//Jumlah bar untuk sinyal
    input bool SoundON=true; //Aktifkan notifikasi suara
    input uint NumberofAlerts=2;//Jumlah notifikasi
    input bool EMailON=false; //Aktifkan pengiriman email sinyal
    input bool PushON=false; //Aktifkan pengiriman notifikasi ke perangkat seluler
    
  2. Menambahkan tiga fungsi baru di akhir kode indikator: BuySignal(), SellSignal(), dan GetStringTimeframe():
    //+------------------------------------------------------------------+
    //| Fungsi sinyal beli                                            |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,// nama indikator untuk pesan email dan notifikasi
          double &BuyArrow[],// buffer indikator dengan sinyal beli
          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;
       if(SeriesTest) index=int(NumberofBar);
       else index=Rates_total-int(NumberofBar)-1;
       if(NormalizeDouble(BuyArrow[index],_Digits) && 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+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("Sinyal BUY 
     Ask=",Ask,"
     Bid=",Bid,"
     waktu saat ini=",text,"
     Simbol=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": Notifikasi 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,// nama indikator untuk pesan email dan notifikasi
          double &SellArrow[],// buffer indikator dengan sinyal jual
          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;
       if(SeriesTest) index=int(NumberofBar);
       else index=Rates_total-int(NumberofBar)-1;
       if(NormalizeDouble(SellArrow[index],_Digits) && 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+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("Sinyal SELL 
     Ask=",Ask,"
     Bid=",Bid,"
     waktu saat ini=",text,"
     Simbol=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": Notifikasi 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);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Mendapatkan 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 di blok OnCalculate():
    //---
    BuySignal("BrainTrend1Sig_Alert",BuyBuffer,rates_total,prev_calculated,close,spread);
    SellSignal("BrainTrend1Sig_Alert",SellBuffer,rates_total,prev_calculated,close,spread);
    //---

Di mana BuyBuffer dan SellBuffer adalah nama buffer indikator untuk menyimpan sinyal beli dan jual. Nilai nol atau EMPTY_VALUE harus diatur di buffer indikator sebagai nilai kosong.

Disarankan untuk hanya menggunakan satu panggilan ke fungsi BuySignal() dan SellSignal() di blok OnCalculate() dari kode indikator.

Fig.1. Indikator BrainTrend1Sig_Alert di grafik

Fig.1. Indikator BrainTrend1Sig_Alert di grafik

Fig.2. Indikator BrainTrend1Sig_Alert. Menghasilkan notifikasi

Fig.2. Indikator BrainTrend1Sig_Alert. Menghasilkan notifikasi

Daftar
Komentar 0