Beranda Indikator Teknis Postingan

Fisher_org_v1_Sign_Alert: Indikator untuk MetaTrader 5 dengan Fitur Pemberitahuan

Lampiran
15880.zip (4.18 KB, Unduh 0 kali)

Penulis asli:

TrendLaboratory Ltd.

Indikator sinyal panah semaphore ini didasarkan pada osilator Fisher_org_v1 yang meninggalkan area overbought dan oversold, dengan fitur pemberitahuan, mengirim email, dan notifikasi push ke perangkat mobile.

Beberapa perubahan telah dilakukan pada kode indikator untuk menerapkan pemberitahuan, pesan email, dan notifikasi push:

  1. Menambahkan parameter input baru:
    input uint NumberofBar=1;//Jumlah bar untuk sinyal
    input bool SoundON=true; //Aktifkan pemberitahuan suara
    input uint NumberofAlerts=2;//Jumlah pemberitahuan
    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 SignalSirname,      // teks 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
      {
    u//---
       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+": Pemberitahuan sinyal BUY","Sinyal BUY di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": Sinyal BUY di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
         }
    
    u//---
      }
    //+------------------------------------------------------------------+
    //| Fungsi sinyal jual                                              |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // teks 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
      {
    u//---
       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+": Pemberitahuan sinyal SELL","Sinyal SELL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": Sinyal SELL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
         }
    u//---
      }
    //+------------------------------------------------------------------+
    //| Mendapatkan timeframe sebagai 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("iWPRSign",BuyBuffer,rates_total,prev_calculated,close,spread);
        SellSignal("iWPRSign",SellBuffer,rates_total,prev_calculated,close,spread);
    

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

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

Gambar 1. Indikator Fisher_org_v1_Sign pada grafik

Gambar 1. Indikator Fisher_org_v1_Sign pada grafik

Gambar 2. Indikator Fisher_org_v1_Sign Menghasilkan pemberitahuan.

Gambar 2. Indikator Fisher_org_v1_Sign Menghasilkan pemberitahuan.

Postingan terkait

Komentar (0)