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 inputuint NumberofBar=1; //Bar nummer voor het signaalinputbool SoundON=true; //Meldingen inschakeleninputuint NumberofAlerts=2; //Aantal meldingeninputbool EMailON=false; //E-mailmelding inschakeleninputbool 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 constint Rates_total, // het huidige aantal bars constint Prev_calculated, // het aantal bars op de vorige tik constdouble &Close[], // sluitprijs constint &Spread[]) // spread { //--- staticuint 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; doubleAsk=Close[index]; doubleBid=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 constint Rates_total, // het huidige aantal bars constint Prev_calculated, // het aantal bars op de vorige tik constdouble &Close[], // sluitprijs constint &Spread[]) // spread { //--- staticuint 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; doubleAsk=Close[index]; doubleBid=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.


Reactie 0