Oorspronkelijke auteur:
Paul Stringer
Deze indicator herkent Harami-patronen en biedt meldingen, e-mails en push-notificaties.
Om de meldingen, e-mailberichten en push-notificaties te implementeren, zijn de volgende wijzigingen aangebracht in de code van de indicator:
- Nieuwe invoerparameters toegevoegd:
input uint AantalBars=1;//Aantal bars voor het signaal input bool GeluidAan=true; //Meldingen inschakelen input uint AantalMeldingen=2;//Aantal meldingen input bool EMailAan=false; //E-mail voor het signaal inschakelen input bool PushAan=false; //Push-meldingen naar mobiele apparaten inschakelen
- Drie nieuwe functies toegevoegd aan het einde van de indicatorcode: BuySignal(), SellSignal() en GetStringTimeframe()
//+------------------------------------------------------------------+ //| Functie voor koop signaal | //+------------------------------------------------------------------+ void BuySignal(string SignaalNaam, // tekst van de indicatornaam voor e-mail en pushberichten double &KoopPijlen[], // indicatorbuffer met koop signalen const int TotaalBars, // het huidige aantal bars const int Vorige_berekend, // het aantal bars op de vorige ticking const double &Sluit[], // sluitprijs const int &Spread[]) // spread { //--- static uint teller=0; if(TotaalBars!=Vorige_berekend) teller=0; bool KoopSignaal=false; bool SerieTest=ArrayGetAsSeries(KoopPijlen); int index; if(SerieTest) index=int(AantalBars); else index=TotaalBars-int(AantalBars)-1; if(NormalizeDouble(KoopPijlen[index],_Digits) && KoopPijlen[index]!=EMPTY_VALUE) KoopSignaal=true; if(KoopSignaal && teller<=AantalMeldingen) { teller++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string tekst=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); SerieTest=ArrayGetAsSeries(Sluit); if(SerieTest) index=int(AantalBars); else index=TotaalBars-int(AantalBars)-1; double Vraag=Sluit[index]; double Bod=Sluit[index]; SerieTest=ArrayGetAsSeries(Spread); if(SerieTest) index=int(AantalBars); else index=TotaalBars-int(AantalBars)-1; Bod+=Spread[index]*_Point; string sVraag=DoubleToString(Vraag,_Digits); string sBod=DoubleToString(Bod,_Digits); string sPeriode=GetStringTimeframe(ChartPeriod()); if(GeluidAan) Alert("KOOP signaal \n Vraag=",Vraag,"\n Bod=",Bod,"\n huidige tijd=",tekst,"\n Symbool=",Symbol()," Periode=",sPeriode); if(EMailAan) SendMail(SignaalNaam+": KOOP signaal melding","KOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode); if(PushAan) SendNotification(SignaalNaam+": KOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode); } //--- } //+------------------------------------------------------------------+ //| Functie voor verkoop signaal | //+------------------------------------------------------------------+ void SellSignal(string SignaalNaam, // tekst van de indicatornaam voor e-mail en pushberichten double &VerkoopPijlen[], // indicatorbuffer met verkoop signalen const int TotaalBars, // het huidige aantal bars const int Vorige_berekend, // het aantal bars op de vorige ticking const double &Sluit[], // sluitprijs const int &Spread[]) // spread { //--- static uint teller=0; if(TotaalBars!=Vorige_berekend) teller=0; bool VerkoopSignaal=false; bool SerieTest=ArrayGetAsSeries(VerkoopPijlen); int index; if(SerieTest) index=int(AantalBars); else index=TotaalBars-int(AantalBars)-1; if(NormalizeDouble(VerkoopPijlen[index],_Digits) && VerkoopPijlen[index]!=EMPTY_VALUE) VerkoopSignaal=true; if(VerkoopSignaal && teller<=AantalMeldingen) { teller++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string tekst=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); SerieTest=ArrayGetAsSeries(Sluit); if(SerieTest) index=int(AantalBars); else index=TotaalBars-int(AantalBars)-1; double Vraag=Sluit[index]; double Bod=Sluit[index]; SerieTest=ArrayGetAsSeries(Spread); if(SerieTest) index=int(AantalBars); else index=TotaalBars-int(AantalBars)-1; Bod+=Spread[index]*_Point; string sVraag=DoubleToString(Vraag,_Digits); string sBod=DoubleToString(Bod,_Digits); string sPeriode=GetStringTimeframe(ChartPeriod()); if(GeluidAan) Alert("VERKOOP signaal \n Vraag=",Vraag,"\n Bod=",Bod,"\n huidige tijd=",tekst,"\n Symbool=",Symbol()," Periode=",sPeriode); if(EMailAan) SendMail(SignaalNaam+": VERKOOP signaal melding","VERKOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode); if(PushAan) SendNotification(SignaalNaam+": VERKOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode); } //--- } //+------------------------------------------------------------------+ //| Tijdframe als string ophalen | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Een paar aanroepen toegevoegd aan de functies BuySignal() en SellSignal() na de berekeningen van de indicator in de OnCalculate() blok:
//--- BuySignal("Harami_Alert",KoopBuffer,totaal_bars,vorige_berekend,sluit,spread); SellSignal("Harami_Alert",VerkoopBuffer,totaal_bars,vorige_berekend,sluit,spread); //---
Waar KoopBuffer en VerkoopBuffer de namen zijn van de indicatorbuffers voor het opslaan van de koop- en verkoop signalen. Voor de lege waarden in de indicatorbuffers moeten ofwel nullen, of EMPTY_VALUE worden ingesteld.
Het is de bedoeling dat er slechts één aanroep naar de BuySignal() en SellSignal() functies zal worden gebruikt in het OnCalculate() blok van de indicatorcode.
Deze indicator is oorspronkelijk geschreven in MQL4 en voor het eerst gepubliceerd in de Code Base op 14.06.2016.

Fig. 1. Harami_Alert indicator op de grafiek
Fig. 2. Harami_Alert. Genereren van 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
