BykovTrendAlert: Indikator Signal Trading untuk MetaTrader 5

Mike 2017.01.18 18:49 33 0 0
Lampiran

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:
    inputuint JumlahBar=1;//Jumlah bar untuk sinyalinputbool SuaraON=true; //Aktifkan notifikasi suarainputuint JumlahNotifikasi=2;//Jumlah notifikasiinputbool EmailON=false; //Aktifkan pengiriman email sinyalinputbool 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
                   constint TotalBar,     // jumlah bar saat ini
                   constint SebelumnyaDihitung, // jumlah bar pada tick sebelumnya
                   constdouble &Tutup[],     // harga penutupan
                   constint &Spread[])       // spread
      {
    //---
       staticuint 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;
          doubleTanya=Tutup[index];
          doubleTawaran=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
                    constint TotalBar,     // jumlah bar saat ini
                    constint SebelumnyaDihitung, // jumlah bar pada tick sebelumnya
                    constdouble &Tutup[],     // harga penutupan
                    constint &Spread[])       // spread
      {
    //---
       staticuint 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;
          doubleTanya=Tutup[index];
          doubleTawaran=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.

Daftar
Komentar 0