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:
- 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
- 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)); //---- }
- 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
Fig.2. De BalanceOfPower_Histogram_Alert indicator genereert meldingen.
Gerelateerde berichten
- PCA Synthetics: Automatische Coëfficiëntselectie voor MetaTrader 5
- iExposure Indicator: Beheer je Handelsposities Efficiënt met MetaTrader 5
- Efficiënt Grafische Objecten Kopiëren in MetaTrader 5 met ChartObjectsCopyPaste
- Efficiëntie Ratio (ER) Berekenen met de CEROnRingBuffer voor MetaTrader 5
- Correlatiecoëfficiënt: Een Onmisbare Indicator voor MetaTrader 5
