Beranda Indikator Teknis Postingan

ColorX2MA_Alert: Indikator Cerdas untuk MetaTrader 5 dengan Notifikasi

Lampiran
16477.zip (22.84 KB, Unduh 0 kali)

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 
    input uint JumlahBar=1;                    //Jumlah bar untuk sinyal
    input bool SuaraAktif=true;                     //Aktifkan notifikasi suara
    input uint JumlahNotifikasi=2;                 //Jumlah notifikasi yang akan dikirim
    input bool EmailAktif=false;                    //Aktifkan pengiriman email untuk sinyal
    input bool 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
                   const int TotalRates,     // jumlah bar saat ini
                   const int Prev_calculated, // jumlah bar pada tick sebelumnya
                   const double &Close[],     // harga penutupan
                   const int &Spread[])       // spread
      {
    //---
       static uint 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;
          double Ask=Close[index];
          double Bid=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
                    const int TotalRates,     // jumlah bar saat ini
                    const int Prev_calculated, // jumlah bar pada tick sebelumnya
                    const double &Close[],     // harga penutupan
                    const int &Spread[])       // spread
      {
    //---
       static uint 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;
          double Ask=Close[index];
          double Bid=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.

Postingan terkait

Komentar (0)