Home Technische indicator Bericht

Balance of Power Histogram Alert: Een Krachtige Indicator voor MetaTrader 5

Bijlage
16403.zip (22.71 KB, Downloaden 0 keer)

Reële auteur:

RoboFx

De Balance of Power (BOP) indicator is nu beschikbaar als een kleurrijk histogram dat de sterkte en richting van de huidige trend weergeeft. Deze indicator bevat meldingen en kan e-mails en push-notificaties naar je mobiele apparaten sturen. Het histogram is gekleurd op basis van de ingestelde parameters voor overbought en oversold niveaus, evenals de bewegingsrichting van het histogram.

Om de meldingen, e-mailberichten en push-notificaties te implementeren, zijn de volgende wijzigingen aangebracht in de indicatorcode:

  1. Nieuwe invoerparameters geïntroduceerd:
    //---- Invoervariabelen voor meldingen 
    input uint NumberofBar=1;                    //Bar nummer voor het signaal
    input bool SoundON=true;                     //Meldingen inschakelen
    input uint NumberofAlerts=2;                 //Aantal meldingen
    input bool EMailON=false;                    //E-mailmelding inschakelen
    input bool PushON=false;                     //Stuur melding naar mobiele apparaten
    
  2. Drie nieuwe functies toegevoegd aan het einde van de indicatorcode: BuySignal(), SellSignal() en GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Koop signaal functie                                            |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,// tekst van de indicatornaam voor e-mail en pushberichten
                   double &ColorArray[],// kleurindexbuffer
                   int ColorIndex,// kleurindex in de kleurindexbuffer om een signaal te genereren
                   const int Rates_total,     // het huidige aantal bars
                   const int Prev_calculated, // het aantal bars op de vorige tik
                   const double &Close[],     // sluitprijs
                   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("KOOP signaal 
     Ask=",Ask,"
     Bid=",Bid,"
     currtime=",text,"
     Symbool=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": KOOP signaal melding","KOOP signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": KOOP signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Verkoop signaal functie                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // tekst van de indicatornaam voor e-mail en pushberichten
                    double &ColorArray[],       // kleurindexbuffer
                    int ColorIndex,             // kleurindex in de kleurindexbuffer om een signaal te genereren
                    const int Rates_total,     // het huidige aantal bars
                    const int Prev_calculated, // het aantal bars op de vorige tik
                    const double &Close[],     // sluitprijs
                    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("VERKOOP signaal 
     Ask=",Ask,"
     Bid=",Bid,"
     currtime=",text,"
     Symbool=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": VERKOOP signaal melding","VERKOOP signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": VERKOOP signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Verkrijg de tijdsperiode als een tekenreeks                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Een paar aanroepen naar de BuySignal() en SellSignal() functies toegevoegd na de indicatorberekeningen in het OnCalculate() blok
    //---     
       BuySignal("BalanceOfPower_Histogram_Alert",ColorIndBuffer,0,rates_total,prev_calculated,close,spread);
       SellSignal("BalanceOfPower_Histogram_Alert",ColorIndBuffer,7,rates_total,prev_calculated,close,spread);
    //---
    

Hierbij is ColorIndBuffer de naam van de kleurindexbuffer voor het opslaan van de kaarskleur in de vorm van een index.

Het is de bedoeling dat er slechts één aanroep naar de BuySignal() en SellSignal() functies wordt gebruikt in het OnCalculate() blok van de indicatorcode.

De indicator maakt gebruik van de klassen van de SmoothAlgorithms.mqh bibliotheek (kopieer deze naar <terminal_data_folder>\MQL5\Include). Het gebruik van de klassen is uitgebreid beschreven in het artikel "Gemiddelde Prijsseries voor Tussentijdse Berekeningen Zonder Gebruik van Extra Buffers".

Oorspronkelijk is deze indicator geschreven in MQL5 en voor het eerst gepubliceerd in de Code Base op 07.02.2013.

Fig1. De BalanceOfPower_Histogram_Alert indicator op de grafiek

Fig1. De BalanceOfPower_Histogram_Alert indicator op de grafiek

Fig.2. De BalanceOfPower_Histogram_Alert indicator genereert meldingen.

Fig.2. De BalanceOfPower_Histogram_Alert indicator genereert meldingen.

Gerelateerde berichten

Reactie (0)