Beranda Indikator Teknis Postingan

wlxBW5ZoneAlert: Indikator Canggih untuk MetaTrader 5

Lampiran
16121.zip (3.5 KB, Unduh 0 kali)

Penulis Asli:

Wellx

Indikator sinyal semaphore ini didasarkan pada nilai dari Accelerator Oscillator dan Awesome Oscillator yang dikembangkan oleh Bill Williams. Fitur utama dari indikator ini adalah kemampuannya untuk memberikan notifikasi, mengirim email, dan push-notifikasi ke perangkat mobile.

Beberapa perubahan telah dilakukan pada kode indikator ini untuk mengimplementasikan notifikasi, pesan email, dan push-notifikasi:

  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 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 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
      {
    u//---
       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,"
     currtime=",text,"
     Symbol=",Symbol()," Period=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": notifikasi sinyal BUY","Sinyal BUY di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": Sinyal BUY di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         }
    
    u//---
      }
    //+------------------------------------------------------------------+
    //| Fungsi sinyal jual                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // teks nama indikator untuk email dan pesan push
                    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
      {
    u//---
       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,"
     currtime=",text,"
     Symbol=",Symbol()," Period=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": notifikasi sinyal SELL","Sinyal SELL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": Sinyal SELL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         }
    u//---
      }
    //+------------------------------------------------------------------+
    //|  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():
    u//---     
       BuySignal("wlxBW5ZoneAlert",BuyBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("wlxBW5ZoneAlert",SellBuffer,rates_total,prev_calculated,close,spread);
    u//---
            

Di mana BuyBuffer dan SellBuffer adalah nama buffer indikator untuk menyimpan sinyal beli dan jual. 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.

Indikator ini menggunakan kelas pustaka SmoothAlgorithms.mqh (salin ke <folder_data_terminal>\MQL5\Include). Penggunaan kelas-kelas ini telah dijelaskan secara mendalam dalam artikel "Rata-rata Seri Harga untuk Perhitungan Intermediate Tanpa Menggunakan Buffer Tambahan".

Awalnya, indikator ini ditulis dalam MQL4 dan pertama kali dipublikasikan di Code Base pada tanggal 08.03.2008.

Gambar.1. Indikator wlxBW5ZoneAlert di chart

Gambar.1. Indikator wlxBW5ZoneAlert di chart

Gambar.2. Indikator wlxBW5ZoneAlert. Menghasilkan notifikasi.

Gambar.2. Indikator wlxBW5ZoneAlert. Menghasilkan notifikasi.

Postingan terkait

Komentar (0)