ColorX2MA_Alert: Indikator Cerdas untuk MetaTrader 5 dengan Notifikasi

Mike 2017.01.18 18:53 64 0 0
Lampiran

Indikator ColorX2MA adalah alat yang sangat berguna bagi trader, karena dilengkapi dengan fitur notifikasi yang dapat mengirimkan email dan pemberitahuan langsung ke perangkat mobile Anda.

Untuk meningkatkan fungsionalitas indikator ini, beberapa perubahan telah dilakukan pada kode indikator, termasuk penambahan fitur notifikasi. Berikut adalah beberapa perubahan yang telah diterapkan:

  1. Penambahan parameter input baru untuk notifikasi:
    //---- Variabel input untuk notifikasi inputuint JumlahBar=1;                    //Jumlah bar untuk sinyalinputbool SuaraAktif=true;                     //Aktifkan notifikasi suarainputuint JumlahNotifikasi=2;                 //Jumlah notifikasi yang akan dikiriminputbool EmailAktif=false;                    //Aktifkan pengiriman email untuk sinyalinputbool PushAktif=false;                     //Aktifkan pengiriman sinyal ke perangkat mobile
  2. Penambahan 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 &ArrayWarna[],// buffer indeks warna
                   int IndeksWarna,// indeks warna dalam buffer untuk menghasilkan sinyal
                   constint TotalRates,     // jumlah bar saat ini
                   constint Prev_calculated, // jumlah bar pada tick sebelumnya
                   constdouble &Close[],     // harga penutupan
                   constint &Spread[])       // spread
      {
    //---
       staticuint counter=0;
       if(TotalRates!=Prev_calculated) counter=0;
    
       bool SinyalBeli=false;
       bool UjiSeri=ArrayGetAsSeries(ArrayWarna);
       int index,index1;
       if(UjiSeri)
         {
          index=int(JumlahBar);
          index1=index+1;
         }
       else
         {
          index=TotalRates-int(JumlahBar)-1;
          index1=index-1;
         }
       if(ArrayWarna[index1]!=IndeksWarna && ArrayWarna[index]==IndeksWarna) SinyalBeli=true;
       if(SinyalBeli && counter<=JumlahNotifikasi)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          UjiSeri=ArrayGetAsSeries(Close);
          if(UjiSeri) index=int(JumlahBar);
          else index=TotalRates-int(JumlahBar)-1;
          doubleAsk=Close[index];
          doubleBid=Close[index];
          UjiSeri=ArrayGetAsSeries(Spread);
          if(UjiSeri) index=int(JumlahBar);
          else index=TotalRates-int(JumlahBar)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SuaraAktif) Alert("Sinyal BELI 
     Ask=",Ask,"
     Bid=",Bid,"
     currtime=",text,"
     Simbol=",Symbol()," Periode=",sPeriod);
          if(EmailAktif) SendMail(NamaSinyal+": Notifikasi sinyal BELI","Sinyal BELI di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
          if(PushAktif) SendNotification(NamaSinyal+": Sinyal BELI di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+//| Fungsi sinyal jual                                             |//+------------------------------------------------------------------+void SellSignal(string NamaSinyal,      // nama indikator untuk email dan pesan push
                    double &ArrayWarna[],       // buffer indeks warna
                    int IndeksWarna,             // indeks warna dalam buffer untuk menghasilkan sinyal
                    constint TotalRates,     // jumlah bar saat ini
                    constint Prev_calculated, // jumlah bar pada tick sebelumnya
                    constdouble &Close[],     // harga penutupan
                    constint &Spread[])       // spread
      {
    //---
       staticuint counter=0;
       if(TotalRates!=Prev_calculated) counter=0;
    
       bool SinyalJual=false;
       bool UjiSeri=ArrayGetAsSeries(ArrayWarna);
       int index,index1;
       if(UjiSeri)
         {
          index=int(JumlahBar);
          index1=index+1;
         }
       else
         {
          index=TotalRates-int(JumlahBar)-1;
          index1=index-1;
         }
       if(ArrayWarna[index1]!=IndeksWarna && ArrayWarna[index]==IndeksWarna) SinyalJual=true;
       if(SinyalJual && counter<=JumlahNotifikasi)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          UjiSeri=ArrayGetAsSeries(Close);
          if(UjiSeri) index=int(JumlahBar);
          else index=TotalRates-int(JumlahBar)-1;
          doubleAsk=Close[index];
          doubleBid=Close[index];
          UjiSeri=ArrayGetAsSeries(Spread);
          if(UjiSeri) index=int(JumlahBar);
          else index=TotalRates-int(JumlahBar)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SuaraAktif) Alert("Sinyal JUAL 
     Ask=",Ask,"
     Bid=",Bid,"
     currtime=",text,"
     Simbol=",Symbol()," Periode=",sPeriod);
          if(EmailAktif) SendMail(NamaSinyal+": Notifikasi sinyal JUAL","Sinyal JUAL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
          if(PushAktif) SendNotification(NamaSinyal+": Sinyal JUAL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+//| Mengambil timeframe dalam bentuk string                               |//+------------------------------------------------------------------+string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
  3. Penambahan beberapa panggilan untuk fungsi BuySignal() dan SellSignal() setelah siklus perhitungan indikator di blok OnCalculate()
    //---     
       BuySignal("X2MA_Alert",ArrayWarna,1,TotalRates,Prev_calculated,Close,Spread);
       SellSignal("X2MA_Alert",ArrayWarna,2,TotalRates,Prev_calculated,Close,Spread);
    //--- 

Di mana ArrayWarna adalah nama buffer indeks warna yang menyimpan warna garis dalam bentuk indeks.

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

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

Gambar 1. Indikator ColorX2MA_Alert di chart

Gambar 1. Indikator ColorX2MA_Alert di chart

Gambar 2. Indikator ColorX2MA_Alert. Menghasilkan notifikasi.

Gambar 2. Indikator ColorX2MA_Alert. Menghasilkan notifikasi.

Daftar
Komentar 0