Beranda Indikator Teknis Postingan

BykovTrendAlert: Indikator Signal Trading untuk MetaTrader 5

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

Penulis Asli:

Ramdass - Konversi Saja

Indikator semafor sinyal BykovTrend ini dilengkapi dengan fitur notifikasi, pengiriman email, dan pemberitahuan ke perangkat mobile.

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

  1. Menambahkan parameter input baru:
    input uint JumlahBar=1;//Jumlah bar untuk sinyal
    input bool SuaraON=true; //Aktifkan notifikasi suara
    input uint JumlahNotifikasi=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 NamaSinyal,      // nama indikator untuk email dan pesan push
                   double &TandaBeli[],        // buffer indikator dengan sinyal beli
                   const int TotalBar,     // jumlah bar saat ini
                   const int SebelumnyaDihitung, // jumlah bar pada tick sebelumnya
                   const double &Tutup[],     // harga penutupan
                   const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(TotalBar!=SebelumnyaDihitung) counter=0;
    
       bool SinyalBeli=false;
       bool UjiSeri=ArrayGetAsSeries(TandaBeli);
       int index;
       if(UjiSeri) index=int(JumlahBar);
       else index=TotalBar-int(JumlahBar)-1;
       if(NormalizeDouble(TandaBeli[index],_Digits) && TandaBeli[index]!=EMPTY_VALUE) SinyalBeli=true;
       if(SinyalBeli && counter<=JumlahNotifikasi)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string teks=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          UjiSeri=ArrayGetAsSeries(Tutup);
          if(UjiSeri) index=int(JumlahBar);
          else index=TotalBar-int(JumlahBar)-1;
          double Tanya=Tutup[index];
          double Tawaran=Tutup[index];
          UjiSeri=ArrayGetAsSeries(Spread);
          if(UjiSeri) index=int(JumlahBar);
          else index=TotalBar-int(JumlahBar)-1;
          Tawaran+=Spread[index];
          string sTanya=DoubleToString(Tanya,_Digits);
          string sTawaran=DoubleToString(Tawaran,_Digits);
          string sPeriode=GetStringTimeframe(ChartPeriod());
          if(SuaraON) Alert("Sinyal BELI \n Tanya=",Tanya,"\n Tawaran=",Tawaran,"\n waktu saat ini=",teks,"\n Simbol=",Symbol()," Periode=",sPeriode);
          if(EmailON) SendMail(NamaSinyal+": Peringatan sinyal BELI","Sinyal BELI di Tanya="+sTanya+", Tawaran="+sTawaran+", Tanggal="+teks+" Simbol="+Symbol()+" Periode="+sPeriode);
          if(PushON) SendNotification(NamaSinyal+": Sinyal BELI di Tanya="+sTanya+", Tawaran="+sTawaran+", Tanggal="+teks+" Simbol="+Symbol()+" Periode="+sPeriode);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Fungsi sinyal jual                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string NamaSinyal,      // nama indikator untuk email dan pesan push
                    double &TandaJual[],      // buffer indikator dengan sinyal jual
                    const int TotalBar,     // jumlah bar saat ini
                    const int SebelumnyaDihitung, // jumlah bar pada tick sebelumnya
                    const double &Tutup[],     // harga penutupan
                    const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(TotalBar!=SebelumnyaDihitung) counter=0;
    
       bool SinyalJual=false;
       bool UjiSeri=ArrayGetAsSeries(TandaJual);
       int index;
       if(UjiSeri) index=int(JumlahBar);
       else index=TotalBar-int(JumlahBar)-1;
       if(NormalizeDouble(TandaJual[index],_Digits) && TandaJual[index]!=EMPTY_VALUE) SinyalJual=true;
       if(SinyalJual && counter<=JumlahNotifikasi)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string teks=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          UjiSeri=ArrayGetAsSeries(Tutup);
          if(UjiSeri) index=int(JumlahBar);
          else index=TotalBar-int(JumlahBar)-1;
          double Tanya=Tutup[index];
          double Tawaran=Tutup[index];
          UjiSeri=ArrayGetAsSeries(Spread);
          if(UjiSeri) index=int(JumlahBar);
          else index=TotalBar-int(JumlahBar)-1;
          Tawaran+=Spread[index];
          string sTanya=DoubleToString(Tanya,_Digits);
          string sTawaran=DoubleToString(Tawaran,_Digits);
          string sPeriode=GetStringTimeframe(ChartPeriod());
          if(SuaraON) Alert("Sinyal JUAL \n Tanya=",Tanya,"\n Tawaran=",Tawaran,"\n waktu saat ini=",teks,"\n Simbol=",Symbol()," Periode=",sPeriode);
          if(EmailON) SendMail(NamaSinyal+": Peringatan sinyal JUAL","Sinyal JUAL di Tanya="+sTanya+", Tawaran="+sTawaran+", Tanggal="+teks+" Simbol="+Symbol()+" Periode="+sPeriode);
          if(PushON) SendNotification(NamaSinyal+": Sinyal JUAL di Tanya="+sTanya+", Tawaran="+sTawaran+", Tanggal="+teks+" Simbol="+Symbol()+" Periode="+sPeriode);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //| Mendapatkan timeframe dalam bentuk 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("BykovTrendAlert",TandaBeli,total_bar,prev_calculated,tutup,spread);
       SellSignal("BykovTrendAlert",TandaJual,total_bar,prev_calculated,tutup,spread);
    //--- 

Di mana TandaBeli dan TandaJual adalah nama buffer indikator untuk menyimpan sinyal beli dan jual. Nilai kosong di buffer indikator, baik nol atau EMPTY_VALUE, harus diatur.

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

Indikator ini pertama kali diimplementasikan dalam MQL4 dan dipublikasikan di Code Base pada 28.09.2007.

Gambar 1. Indikator BykovTrendAlert pada grafik

Gambar 1. Indikator BykovTrendAlert pada grafik


Gambar 2. Indikator BykovTrendAlert Menghasilkan notifikasi.

Gambar 2. Indikator BykovTrendAlert Menghasilkan notifikasi.

Postingan terkait

Komentar (0)