Laman utama Indikator Teknikal Siaran

iMFISignAlert: Indikator Canggih untuk MetaTrader 5

Lampiran
15843.zip (3.11 KB, Muat turun 0 kali)

Hai trader! Pernah tak anda mendengar tentang indikator iMFISignAlert? Ini adalah indikator yang menggunakan sistem isyarat anak panah berdasarkan Money Flow Index (MFI) untuk membantu anda mengenal pasti keadaan overbought dan oversold. Yang menariknya, ia juga dilengkapi dengan ciri amaran, pengiriman email, dan notifikasi push ke peranti mudah alih!

Berikut adalah beberapa perubahan yang telah dilakukan pada kod indikator ini untuk menambah baik pengalaman anda:

  1. Parametr input baru telah diperkenalkan:
    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 pengiriman email
    input bool PushON=false;// Aktifkan pengiriman notifikasi push
    
  2. Tiga fungsi baru telah ditambah pada akhir kod indikator: BuySignal(), SellSignal(), dan GetStringTimeframe():
    //+------------------------------------------------------------------+
    //| Fungsi isyarat beli                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,// nama indikator untuk email dan notifikasi
          double &BuyArrow[],// buffer indikator untuk 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 email dan notifikasi
          double &SellArrow[],// buffer indikator untuk 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 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("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 sama ada sifar atau EMPTY_VALUE.

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

Fig.1. Indikator iMFISignAlert pada carta

Fig.1. Indikator iMFISignAlert pada carta

Fig.2. Indikator iMFISignAlert. Menghasilkan amaran.

Fig.2. Indikator iMFISignAlert. Menghasilkan amaran.

Siaran berkaitan

Komen (0)