Laman utama Indikator Teknikal Siaran

Indikator Balance Of Power Histogram Alert untuk MetaTrader 5

Lampiran
16403.zip (22.71 KB, Muat turun 0 kali)

Penulis asal:

RoboFx

Indikator Balance of Power (BOP) adalah sebuah histogram berwarna yang menunjukkan kekuatan dan arah trend semasa. Ia dilengkapi dengan penggera yang boleh menghantar email dan notifikasi push ke peranti mudah alih. Histogram ini akan berwarna mengikut nilai parameter input untuk tahap terlebih beli dan terlebih jual serta arah pergerakan histogram tersebut.

Berikut adalah perubahan yang telah dilakukan pada kod indikator untuk melaksanakan penggera, mesej email dan notifikasi push:

  1. Parameter input baru telah diperkenalkan.
    //---- Pembolehubah input untuk penggera 
    input uint NumberofBar=1;                    //Bilangan bar untuk isyarat
    input bool SoundON=true;                     //Aktifkan penggera
    input uint NumberofAlerts=2;                 //Bilangan penggera
    input bool EMailON=false;                    //Aktifkan pengiriman isyarat melalui email
    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 belian                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,// teks nama indikator untuk mesej email dan push
                   double &ColorArray[],// buffer indeks warna
                   int ColorIndex,// indeks warna dalam buffer indeks warna untuk menjana 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 BELIAN 
     Ask=",Ask,"
     Bid=",Bid,"
     masa semasa=",text,"
     Simbol=",Symbol()," Tempoh=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": amaran isyarat BELIAN","ISYARAT BELIAN di Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Simbol="+Symbol()+" Tempoh="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": ISYARAT BELIAN di Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Simbol="+Symbol()+" Tempoh="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //| Fungsi isyarat jual                                               |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // teks nama indikator untuk mesej email dan push
                    double &ColorArray[],       // buffer indeks warna
                    int ColorIndex,             // indeks warna dalam buffer indeks warna untuk menjana 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,"
     masa semasa=",text,"
     Simbol=",Symbol()," Tempoh=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": amaran isyarat JUAL","ISYARAT JUAL di Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Simbol="+Symbol()+" Tempoh="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": ISYARAT JUAL di 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("BalanceOfPower_Histogram_Alert",ColorIndBuffer,0,rates_total,prev_calculated,close,spread);
       SellSignal("BalanceOfPower_Histogram_Alert",ColorIndBuffer,7,rates_total,prev_calculated,close,spread);
    //---
    

Di mana ColorIndBuffer adalah nama buffer indeks warna untuk menyimpan warna candle dalam bentuk indeks.

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

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

Asalnya, indikator ini ditulis dalam MQL5 dan pertama kali diterbitkan di Kod Asas pada 07.02.2013.

Fig1. Indikator BalanceOfPower_Histogram_Alert pada carta

Fig1. Indikator BalanceOfPower_Histogram_Alert pada carta

Fig.2. Indikator BalanceOfPower_Histogram_Alert menjana penggera.

Fig.2. Indikator BalanceOfPower_Histogram_Alert menjana penggera.

Siaran berkaitan

Komen (0)