Laman utama Indikator Teknikal Siaran

iDeMarkerSignAlert: Indikator untuk MetaTrader 5 dengan Notifikasi

Lampiran
15838.zip (3.08 KB, Muat turun 0 kali)

Indikator panah semafor ini berasaskan osilator DeMarker klasik yang membantu anda mengenal pasti keadaan terlebih beli dan terlebih jual. Apa yang menarik tentang indikator ini adalah ia dilengkapi dengan sistem notifikasi, termasuk pengiriman emel dan notifikasi push ke peranti mudah alih.

Untuk menambah fungsi notifikasi, beberapa perubahan telah dibuat pada kod indikator ini:

  1. Menambah parameter input baru:
    input uint NumberofBar=1;//Bar nombor untuk isyarat
    input bool SoundON=true; //Aktifkan notifikasi bunyi
    input uint NumberofAlerts=2;//Bilangan notifikasi
    input bool EMailON=false; //Aktifkan penghantaran emel isyarat
    input bool PushON=false; //Aktifkan penghantaran isyarat ke peranti mudah alih
    
  2. Menambah tiga fungsi baru di akhir kod indikator: BuySignal(), SellSignal(), dan GetStringTimeframe():
    //+------------------------------------------------------------------+
    //| Fungsi isyarat beli                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // teks 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 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("ISYARAT BELI 
     Ask=",Ask,"
     Bid=",Bid,"
     masa sekarang=",text,"
     Simbol=",Symbol()," Tempoh=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": amaran isyarat beli","ISYARAT BELI pada Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Simbol="+Symbol()+" Tempoh="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": ISYARAT BELI pada Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Simbol="+Symbol()+" Tempoh="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //| Fungsi isyarat jual                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // teks 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 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("ISYARAT JUAL 
     Ask=",Ask,"
     Bid=",Bid,"
     masa sekarang=",text,"
     Simbol=",Symbol()," Tempoh=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": amaran isyarat jual","ISYARAT JUAL pada Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Simbol="+Symbol()+" Tempoh="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": ISYARAT JUAL pada Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Simbol="+Symbol()+" Tempoh="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //| Mendapatkan tempoh masa sebagai string                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Menambah beberapa panggilan kepada fungsi BuySignal() dan SellSignal() 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. Nilai kosong dalam buffer indikator harus ditetapkan sama ada kepada sifar atau EMPTY_VALUE.

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

Fig.1. Indikator iDeMarkerSignAlert pada carta

Fig.1. Indikator iDeMarkerSignAlert pada carta

Fig.2. Indikator iDeMarkerSignAlert menjana amaran

Fig.2. Indikator iDeMarkerSignAlert. Menjana amaran.

Siaran berkaitan

Komen (0)