Beranda Indikator Teknis Postingan

DSSBressertSignAlert: Indikator Canggih untuk MetaTrader 5

Lampiran
16115.zip (21.84 KB, Unduh 0 kali)

Halo para trader! Kali ini kita akan membahas tentang DSSBressertSignAlert, indikator yang sangat berguna bagi kalian yang menggunakan MetaTrader 5. Indikator ini berbasis pada algoritma DSSBressert dan dilengkapi dengan fitur notifikasi yang dapat mengirimkan email dan notifikasi push ke perangkat mobile kalian.

Berikut adalah beberapa perubahan yang telah dilakukan pada kode indikator ini untuk mengimplementasikan fitur notifikasi:

  1. Menambahkan parameter input baru:
  2. 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
    
  3. Menambahkan tiga fungsi baru di akhir kode indikator: BuySignal(), SellSignal(), dan GetStringTimeframe():
  4. //+------------------------------------------------------------------+
    //| Fungsi Sinyal Beli                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // Nama indikator untuk 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
      {
    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 BELI 
     Ask=",Ask,"
     Bid=",Bid,"
     waktu sekarang=",text,"
     Simbol=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": notifikasi sinyal BELI","Sinyal BELI di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": Sinyal BELI di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
         }
    
    u//---
      }
    //+------------------------------------------------------------------+
    //| Fungsi Sinyal Jual                                              |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // Nama indikator untuk 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
      {
    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 JUAL 
     Ask=",Ask,"
     Bid=",Bid,"
     waktu sekarang=",text,"
     Simbol=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": notifikasi sinyal JUAL","Sinyal JUAL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": Sinyal JUAL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
         }
    u//---
      }
    //+------------------------------------------------------------------+
    //| Mendapatkan timeframe sebagai string                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
  5. Menambahkan beberapa pemanggilan fungsi BuySignal() dan SellSignal() setelah siklus perhitungan indikator di blok OnCalculate():
  6. u//---     
       BuySignal("DSSBressertSignAlert",BuyBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("DSSBressertSignAlert",SellBuffer,rates_total,prev_calculated,close,spread);
    u//---

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

Perlu diingat bahwa hanya satu pemanggilan fungsi BuySignal() dan SellSignal() yang akan digunakan dalam blok OnCalculate() dari kode indikator ini.

Indikator ini juga menggunakan kelas dari pustaka SmoothAlgorithms.mqh (salin ke <terminal_data_folder>\MQL5\Include). Penggunaan kelas ini sudah dijelaskan secara rinci dalam artikel "Rata-rata Harga untuk Perhitungan Sementara Tanpa Menggunakan Buffer Tambahan".


Gambar 1. Indikator DSSBressertSignAlert pada chart

Gambar 1. Indikator DSSBressertSignAlert pada chart

Gambar 2. Indikator DSSBressertSignAlert. Menghasilkan notifikasi.

Gambar 2. Indikator DSSBressertSignAlert. Menghasilkan notifikasi.

Postingan terkait

Komentar (0)