Beranda Indikator Teknis Postingan

BrainTrend2SigAlert: Indikator dengan Notifikasi untuk MetaTrader 5

Lampiran
16695.zip (4.09 KB, Unduh 0 kali)

BrainTrend2Sig merupakan indikator sinyal semaphore yang kini dilengkapi dengan fitur notifikasi, email, dan push notification. Dengan fitur-fitur ini, kamu bisa lebih mudah mendapatkan sinyal trading yang akurat!

Berikut adalah beberapa perubahan yang dilakukan pada kode indikator untuk mengimplementasikan notifikasi, pesan email, dan push notification:

  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 yang akan dikirim
    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 pesan email dan push
          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
      {
    //---
       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 BUY 
     Ask=",Ask,"
     Bid=",Bid,"
     waktu saat ini=",text,"
     Simbol=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": Notifikasi sinyal BUY","Sinyal BUY pada Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": Sinyal BUY pada Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //| Fungsi sinyal jual                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,// nama indikator untuk pesan email dan push
          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
      {
    //---
       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 SELL 
     Ask=",Ask,"
     Bid=",Bid,"
     waktu saat ini=",text,"
     Simbol=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": Notifikasi sinyal SELL","Sinyal SELL pada Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": Sinyal SELL pada Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //| Mendapatkan timeframe sebagai string                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  5. Menambahkan beberapa panggilan untuk fungsi BuySignal() dan SellSignal() setelah siklus perhitungan indikator di blok OnCalculate():
  6. //---
    BuySignal("BrainTrend2SigAlert",BuyBuffer,rates_total,prev_calculated,close,spread);
    SellSignal("BrainTrend2SigAlert",SellBuffer,rates_total,prev_calculated,close,spread);
    //---

    Di mana BuyBuffer dan SellBuffer adalah nama buffer indikator untuk menyimpan sinyal beli dan jual. Nilai nol atau EMPTY_VALUE harus ditetapkan dalam buffer indikator sebagai nilai kosong.

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

    Gambar 1. Indikator BrainTrend2SigAlert di grafik

    Gambar 1. Indikator BrainTrend2SigAlert di grafik

    Gambar 2. Indikator BrainTrend2SigAlert. Menghasilkan notifikasi

    Gambar 2. Indikator BrainTrend2SigAlert. Menghasilkan notifikasi

    Postingan terkait

Komentar (0)