Laman utama Indikator Teknikal Siaran

RJTX_Matches_Smoothed_Alert: Indikator Terbaik untuk MetaTrader 5

Lampiran
22712.zip (22.92 KB, Muat turun 0 kali)

Penulis sebenar:

Rafael Jimenez Tocino

Indikator RJTX_Matches_Smoothed yang mempunyai pemberitahuan, emel, dan notifikasi untuk telefon pintar.

Berikut adalah perubahan yang telah dibuat pada kod indikator untuk melaksanakan pemberitahuan, mesej emel, dan notifikasi:

  1. Variabel input baru telah ditambah kepada input indikator:
    input uint NumberofBar=1;                 // Nombor bar untuk mengaktifkan isyarat
    input bool SoundON=true;           // Aktifkan pemberitahuan
    input uint NumberofAlerts=2;       // Bilangan pemberitahuan
    input bool EMailON=false;          // Aktifkan penghantaran isyarat melalui emel
    input bool PushON=false;           // Aktifkan penghantaran isyarat ke peranti mudah alih
    


  2. Tiga fungsi baru telah ditambah di akhir indikator: BuySignal(), SellSignal(), dan GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Fungsi isyarat beli                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // nama indikator untuk mesej emel dan notifikasi
                   double &BuyArrow[],        // buffer indikator dengan isyarat beli
                   const int Rates_total,     // bilangan bar semasa
                   const int Prev_calculated, // bilangan bar pada tick sebelumnya
                   const double &Close[],     // harga tutup
                   const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool BuySignal=false;
       bool SeriesTest=ArrayGetAsSeries(BuyArrow);
       int index,index1;
       if(SeriesTest)
        {
         index=int(NumberofBar);
         index1=index+1;
        }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(!BuyArrow[index1] && BuyArrow[index]) 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]*_Point;
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("BUY signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": BUY signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Fungsi isyarat jual                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // nama indikator untuk mesej emel dan notifikasi
                    double &SellArrow[],       // buffer indikator dengan isyarat jual
                    const int Rates_total,     // bilangan bar semasa
                    const int Prev_calculated, // bilangan bar pada tick sebelumnya
                    const double &Close[],     // harga tutup
                    const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool SellSignal=false;
       bool SeriesTest=ArrayGetAsSeries(SellArrow);
       int index,index1;
       if(SeriesTest)
        {
         index=int(NumberofBar);
         index1=index+1;
        }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(!SellArrow[index1] && SellArrow[index]) 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]*_Point;
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("SELL signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": SELL signal alert","SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Mendapatkan jangka masa sebagai string                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    


  3. Beberapa panggilan kepada fungsi BuySignal() dan SellSignal() telah ditambah selepas kitaran pengiraan indikator dalam blok OnCalculate()
    //---     
       BuySignal("RJTX_Matches_Smoothed_Alert",BuyBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("RJTX_Matches_Smoothed_Alert",SellBuffer,rates_total,prev_calculated,close,spread);
    //---
    


Di mana BuyBuffer dan SellBuffer adalah nama buffer indikator untuk menyimpan isyarat beli dan jual. Sama ada sifar atau EMPTY_VALUE mesti ditambah kepada buffer indikator sebagai nilai kosong.

Hanya satu panggilan kepada setiap fungsi BuySignal() dan SellSignal() yang diandaikan digunakan dalam kod indikator dalam blok OnCalculate().

Indikator ini menggunakan kelas perpustakaan SmoothAlgorithms.mqh (untuk disalin ke folder <terminal_data_directory>\MQL5\Include). Penggunaan kelas ini telah diterangkan dengan terperinci dalam artikel Averaging Price Series for Intermediate Calculations Without Using Additional Buffers.

Indikator ini pertama kali dilaksanakan dalam MQL4 dan diterbitkan dalam Code Base pada 23 Disember 2015.


Fig.1. Indikator RJTX_Matches_Smoothed_Alert pada carta

Fig.1. Indikator RJTX_Matches_Smoothed_Alert pada carta


Fig. 2. Indikator RJTX_Matches_Smoothed_Alert. Pemberitahuan

Fig. 2. Indikator RJTX_Matches_Smoothed_Alert. Pemberitahuan

Siaran berkaitan

Komen (0)