Laman utama Indikator Teknikal Siaran

ColorX2MA_Alert: Indikator Berguna untuk MetaTrader 5

Lampiran
16477.zip (22.84 KB, Muat turun 0 kali)

Indikator ColorX2MA ini sangat menarik kerana ia dilengkapi dengan sistem amaran yang menghantar email dan notifikasi kepada peranti mudah alih.

Beberapa perubahan telah dilakukan pada kod indikator ini untuk mengimplementasikan sistem amaran, email, dan notifikasi:

  1. Parameter input baru telah diperkenalkan:
    //---- Pembolehubah input untuk amaran 
    input uint NumberofBar=1;                    //Nombor bar untuk isyarat
    input bool SoundON=true;                     //Aktifkan amaran
    input uint NumberofAlerts=2;                 //Bilangan amaran
    input bool EMailON=false;                    //Aktifkan penghantaran email untuk isyarat
    input bool PushON=false;                     //Aktifkan penghantaran isyarat ke peranti mudah alih
    
  2. Tiga fungsi baru telah ditambah di akhir kod indikator: BuySignal(), SellSignal(), dan GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Fungsi isyarat beli                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,// nama indikator untuk email dan mesej push
                   double &ColorArray[],// buffer indeks warna
                   int ColorIndex,// indeks warna dalam buffer untuk menghasilkan isyarat
                   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(ColorArray);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) 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,"
     currtime=",text,"
     Simbol=",Symbol()," Tempoh=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": 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,      // nama indikator untuk email dan mesej push
                    double &ColorArray[],       // buffer indeks warna
                    int ColorIndex,             // indeks warna dalam buffer untuk menghasilkan isyarat
                    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(ColorArray);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) 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,"
     currtime=",text,"
     Simbol=",Symbol()," Tempoh=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": 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. Beberapa panggilan kepada fungsi BuySignal() dan SellSignal() telah ditambah selepas kitaran pengiraan indikator dalam blok OnCalculate()
    //---     
       BuySignal("X2MA_Alert",ColorX2MA,1,rates_total,prev_calculated,close,spread);
       SellSignal("X2MA_Alert",ColorX2MA,2,rates_total,prev_calculated,close,spread);
    //--- 
    

    Di mana ColorX2MA adalah nama buffer indeks warna untuk menyimpan warna garis dalam bentuk indeks.

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

    Indikator ini menggunakan kelas dari perpustakaan SmoothAlgorithms.mqh (salin ke <terminal_data_folder>\MQL5\Include). Penggunaan kelas ini telah diterangkan dengan terperinci dalam artikel "Rata-Rata Siri Harga untuk Pengiraan Pertengahan Tanpa Menggunakan Buffer Tambahan".

    Fig1. Indikator ColorX2MA_Alert pada carta

    Fig1. Indikator ColorX2MA_Alert pada carta

    Fig.2. Indikator ColorX2MA_Alert. Menghasilkan amaran.

    Fig.2. Indikator ColorX2MA_Alert. Menghasilkan amaran.

    Siaran berkaitan

Komen (0)