Beranda Indikator Teknis Postingan

BeginnerAlert: Indikator Canggih untuk MetaTrader 5

Lampiran
16448.zip (3.75 KB, Unduh 0 kali)

Penulis Asli:

EarnForex

Indikator BeginnerAlert ini sangat berguna untuk para trader, karena menunjukkan titik ekstrem trend (maksimum dan minimum) yang bisa dijadikan sebagai level support dan resistance. Dengan menggunakan indikator ini, kita bisa dengan mudah menentukan channel dari trend yang sedang berjalan. Selain itu, indikator ini dilengkapi dengan fitur notifikasi, yang akan mengirimkan email dan push-notifikasi ke perangkat mobile kita.

Indikator ini cukup sederhana, menggunakan periode tertentu untuk menemukan titik maksimum dan minimum, yang kemudian ditandai dengan titik-titik.

Berikut adalah beberapa perubahan yang dilakukan pada kode indikator untuk mengimplementasikan fitur notifikasi, pengiriman email, dan push-notifikasi:

  1. Menambahkan parameter input baru dalam kode indikator:
  2. input uint JumlahBar=1;//Jumlah bar untuk sinyal
    input bool SuaraAktif=true; //Aktifkan notifikasi suara
    input uint JumlahNotifikasi=2;//Jumlah notifikasi
    input bool EmailAktif=false; //Aktifkan pengiriman email
    input bool PushAktif=false; //Aktifkan pengiriman notifikasi ke perangkat mobile
    
  3. Menambahkan tiga fungsi baru di akhir kode indikator: BuySignal(), SellSignal(), dan GetStringTimeframe():
  4. //+------------------------------------------------------------------+
    //| Fungsi sinyal beli                                               |
    //+------------------------------------------------------------------+
    void BuySignal(string NamaSinyal,      // Nama indikator untuk email dan notifikasi
                   double &BuyArrow[],        // buffer indikator dengan sinyal beli
                   const int TotalBar,     // jumlah bar saat ini
                   const int Prev_hitung, // jumlah bar pada tick sebelumnya
                   const double &Close[],     // harga penutupan
                   const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(TotalBar!=Prev_hitung) counter=0;
    
       bool BuySignal=false;
       bool SeriesTest=ArrayGetAsSeries(BuyArrow);
       int index;
       if(SeriesTest) index=int(JumlahBar);
       else index=TotalBar-int(JumlahBar)-1;
       if(NormalizeDouble(BuyArrow[index],_Digits) && BuyArrow[index]!=EMPTY_VALUE) BuySignal=true;
       if(BuySignal && counter<=JumlahNotifikasi)
         {
          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(JumlahBar);
          else index=TotalBar-int(JumlahBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          SeriesTest=ArrayGetAsSeries(Spread);
          if(SeriesTest) index=int(JumlahBar);
          else index=TotalBar-int(JumlahBar)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SuaraAktif) Alert("Sinyal BUY \n Ask=",Ask,"\n Bid=",Bid,"\n waktu saat ini=",text,"\n Simbol=",Symbol()," Periode=",sPeriod);
          if(EmailAktif) SendMail(NamaSinyal+": Notifikasi sinyal BUY","Sinyal BUY di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
          if(PushAktif) SendNotification(NamaSinyal+": Sinyal BUY di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //| Fungsi sinyal jual                                                |
    //+------------------------------------------------------------------+
    void SellSignal(string NamaSinyal,      // Nama indikator untuk email dan notifikasi
                    double &SellArrow[],       // buffer indikator dengan sinyal jual
                    const int TotalBar,     // jumlah bar saat ini
                    const int Prev_hitung, // jumlah bar pada tick sebelumnya
                    const double &Close[],     // harga penutupan
                    const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(TotalBar!=Prev_hitung) counter=0;
    
       bool SellSignal=false;
       bool SeriesTest=ArrayGetAsSeries(SellArrow);
       int index;
       if(SeriesTest) index=int(JumlahBar);
       else index=TotalBar-int(JumlahBar)-1;
       if(NormalizeDouble(SellArrow[index],_Digits) && SellArrow[index]!=EMPTY_VALUE) SellSignal=true;
       if(SellSignal && counter<=JumlahNotifikasi)
         {
          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(JumlahBar);
          else index=TotalBar-int(JumlahBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          SeriesTest=ArrayGetAsSeries(Spread);
          if(SeriesTest) index=int(JumlahBar);
          else index=TotalBar-int(JumlahBar)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SuaraAktif) Alert("Sinyal SELL \n Ask=",Ask,"\n Bid=",Bid,"\n waktu saat ini=",text,"\n Simbol=",Symbol()," Periode=",sPeriod);
          if(EmailAktif) SendMail(NamaSinyal+": Notifikasi sinyal SELL","Sinyal SELL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
          if(PushAktif) SendNotification(NamaSinyal+": Sinyal SELL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //| Mendapatkan timeframe dalam bentuk string                       |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  5. Menambahkan beberapa panggilan ke fungsi BuySignal() dan SellSignal() setelah siklus perhitungan indikator dalam blok OnCalculate():
  6. //---     
       BuySignal("BeginnerAlert",BuyBuffer,total_bar,prev_calculated,Close,spread);
       SellSignal("BeginnerAlert",SellBuffer,total_bar,prev_calculated,Close,spread);
    //--- 
    

Di mana BuyBuffer dan SellBuffer adalah nama buffer indikator untuk menyimpan sinyal beli dan jual. Karena nilai kosong dalam buffer indikator baik nol atau EMPTY_VALUE harus diatur.

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

Awalnya, indikator ini ditulis dalam MQL4 dan pertama kali diterbitkan di Code Base pada 03.09.2008.

Gambar 1. Indikator BeginnerAlert di chart

Gambar 1. Indikator BeginnerAlert di chart

Gambar 2. Indikator BeginnerAlert Menghasilkan notifikasi.

Gambar 2. Indikator BeginnerAlert Menghasilkan notifikasi.

Postingan terkait

Komentar (0)