Laman utama Indikator Teknikal Siaran

Panduan Lengkap ColorParabolic_Alert: Indikator Hebat untuk MetaTrader 5

Lampiran
17846.zip (3.9 KB, Muat turun 0 kali)

Salam traders! Hari ini kita akan bercakap tentang ColorParabolic, satu indikator isyarat semaphore yang sangat berguna dengan ciri amaran, penghantaran email, dan notifikasi push. Ini pasti memberi kelebihan kepada anda dalam trading!

Berikut adalah perubahan yang telah dibuat pada kod indikator ini untuk menambah baik fungsi amaran, mesej email, dan notifikasi push:

  • Parameter 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 penghantaran isyarat melalui email
    input bool PushON=false; //Aktifkan penghantaran isyarat ke peranti mudah alih
    

  • Tiga fungsi baru telah ditambah pada akhir kod indikator: BuySignal(), SellSignal(), dan GetStringTimeframe()

    //+------------------------------------------------------------------+
    //| Fungsi isyarat beli                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // Nama indikator untuk mesej email dan push
                   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]*_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 email dan push
                    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]*_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 timeframe sebagai string                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    

  • Beberapa panggilan kepada fungsi BuySignal() dan SellSignal() telah ditambah selepas kitaran pengiraan indikator dalam blok OnCalculate()

    //---     
       BuySignal("ColorParabolic_Alert",BuyBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("ColorParabolic_Alert",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 sama ada sifar atau EMPTY_VALUE perlu ditetapkan.

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

Fig1. ColorParabolic_Alert on a chart

Fig1. ColorParabolic_Alert pada carta

Fig.2. The ColorParabolic_Alert indicator. Generating alerts.

Fig.2. Indikator ColorParabolic_Alert. Menghasilkan amaran.

Siaran berkaitan

Komen (0)