Laman utama Indikator Teknikal Siaran

iWPRSignAlert: Penunjuk Hebat untuk MetaTrader 5

Lampiran
15837.zip (3.06 KB, Muat turun 0 kali)

iWPRSignAlert adalah indikator yang menggunakan isyarat panah semaphore berdasarkan osilator Williams’ Percent Range klasik. Ia berfungsi untuk memberi amaran apabila harga memasuki kawasan terlebih beli atau terlebih jual, dengan ciri-ciri seperti pemberitahuan, penghantaran emel, dan notifikasi ke perangkat mudah alih.

Bagi meningkatkan fungsi pemberitahuan dalam indikator ini, beberapa perubahan telah dilakukan pada kod indikator:

  1. Diperkenalkan parameter input baru:
    input uint NumberofBar=1;//Bilangan bar untuk isyarat
    input bool SoundON=true;//Aktifkan amaran
    input uint NumberofAlerts=2;//Bilangan amaran
    input bool EMailON=false;//Aktifkan penghantaran emel isyarat
    input bool PushON=false;//Aktifkan penghantaran isyarat ke perangkat mudah alih
    
  2. Menambah tiga fungsi baru di akhir kod indikator: BuySignal(), SellSignal(), dan GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Fungsi isyarat beli                                            |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // nama indikator untuk 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;
       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("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 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;
       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("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 timeframe dalam bentuk string                        |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Menambah beberapa panggilan kepada fungsi BuySignal() dan SellSignal() selepas pengiraan indikator dalam 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 isyarat beli dan jual. Pastikan nilai kosong dalam buffer indikator adalah sama ada nol atau EMPTY_VALUE.

Dianggap bahawa hanya satu panggilan kepada fungsi BuySignal() dan SellSignal() akan digunakan dalam blok OnCalculate() dalam kod indikator.

Fig.1. Penunjuk iWPRSignAlert

Fig.1. Penunjuk iWPRSignAlert di carta

Fig.2. Penunjuk iWPRSignAlert menjana amaran

Fig.2. Penunjuk iWPRSignAlert. Menjana amaran.

Siaran berkaitan

Komen (0)