De ColorX2MA indicator is een handige tool die je waarschuwt met e-mails en push-notificaties op je mobiele apparaten. Dit maakt het makkelijker om op de hoogte te blijven van belangrijke signalen in de markt.
Om de meldingen te implementeren, zijn er een aantal wijzigingen aangebracht in de code van de indicator:
- Nieuwe invoerparameters zijn toegevoegd:
//---- Invoervariabelen voor waarschuwingen inputuint AantalBars=1; //Bar nummer voor het signaalinputbool GeluidAan=true; //Waarschuwingen inschakeleninputuint AantalWaarschuwingen=2; //Aantal waarschuwingeninputbool EMailAan=false; //E-mail voor het signaal inschakeleninputbool PushAan=false; //Verstuur het signaal naar mobiele apparaten
- Drie nieuwe functies zijn toegevoegd aan het einde van de indicatorcode: BuySignal(), SellSignal() en GetStringTimeframe()
//+------------------------------------------------------------------+//| Koop signaal functie |//+------------------------------------------------------------------+void BuySignal(string SignalNaam,// tekst van de indicatornaam voor email en pushberichten double &KleurArray[],// kleurindex buffer int KleurIndex,// kleurindex in de kleurindex buffer om een signaal te genereren constint TotaalBars, // het huidige aantal bars constint Vorige_berekening,// het aantal bars op de vorige tick constdouble &Sluiten[], // sluitprijs constint &Spread[]) // spread { //--- staticuint teller=0; if(TotaalBars!=Vorige_berekening) teller=0; bool KoopSignaal=false; bool SerieTest=ArrayGetAsSeries(KleurArray); int index,index1; if(SerieTest) { index=int(AantalBars); index1=index+1; } else { index=TotaalBars-int(AantalBars)-1; index1=index-1; } if(KleurArray[index1]!=KleurIndex && KleurArray[index]==KleurIndex) KoopSignaal=true; if(KoopSignaal && teller<=AantalWaarschuwingen) { teller++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string tekst=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); SerieTest=ArrayGetAsSeries(Sluiten); if(SerieTest) index=int(AantalBars); else index=TotaalBars-int(AantalBars)-1; doubleVraag=Sluiten[index]; doubleBod=Sluiten[index]; SerieTest=ArrayGetAsSeries(Spread); if(SerieTest) index=int(AantalBars); else index=TotaalBars-int(AantalBars)-1; Bod+=Spread[index]; 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(SignalNaam+": KOOP signaal waarschuwing","KOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode); if(PushAan) SendNotification(SignalNaam+": KOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode); } //--- } //+------------------------------------------------------------------+//| Verkopen signaal functie |//+------------------------------------------------------------------+void SellSignal(string SignalNaam, // tekst van de indicatornaam voor email en pushberichten double &KleurArray[], // kleurindex buffer int KleurIndex, // kleurindex in de kleurindex buffer om een signaal te genereren constint TotaalBars, // het huidige aantal bars constint Vorige_berekening, // het aantal bars op de vorige tick constdouble &Sluiten[], // sluitprijs constint &Spread[]) // spread { //--- staticuint teller=0; if(TotaalBars!=Vorige_berekening) teller=0; bool VerkoopSignaal=false; bool SerieTest=ArrayGetAsSeries(KleurArray); int index,index1; if(SerieTest) { index=int(AantalBars); index1=index+1; } else { index=TotaalBars-int(AantalBars)-1; index1=index-1; } if(KleurArray[index1]!=KleurIndex && KleurArray[index]==KleurIndex) VerkoopSignaal=true; if(VerkoopSignaal && teller<=AantalWaarschuwingen) { teller++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string tekst=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); SerieTest=ArrayGetAsSeries(Sluiten); if(SerieTest) index=int(AantalBars); else index=TotaalBars-int(AantalBars)-1; doubleVraag=Sluiten[index]; doubleBod=Sluiten[index]; SerieTest=ArrayGetAsSeries(Spread); if(SerieTest) index=int(AantalBars); else index=TotaalBars-int(AantalBars)-1; Bod+=Spread[index]; 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(SignalNaam+": VERKOOP signaal waarschuwing","VERKOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode); if(PushAan) SendNotification(SignalNaam+": VERKOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode); } //--- } //+------------------------------------------------------------------+//| Verkrijg de tijdsperiode als een string |//+------------------------------------------------------------------+string GetStringTimeframe(ENUM_TIMEFRAMES tijdsperiode) { //---- return(StringSubstr(EnumToString(tijdsperiode),7,-1)); //---- }
- Er zijn een paar aanroepen aan de BuySignal() en SellSignal() functies toegevoegd na de berekeningscycli van de indicator in het OnCalculate() blok
//--- BuySignal("X2MA_Alert",KleurX2MA,1,totaal_bars,vorige_berekening,sluiten,spread); SellSignal("X2MA_Alert",KleurX2MA,2,totaal_bars,vorige_berekening,sluiten,spread); //---
Hierbij is ColorX2MA de naam van de kleurindex buffer voor het opslaan van de lijnkleur 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 uitvoerig beschreven in het artikel "Averaging Price Series for Intermediate Calculations Without Using Additional Buffers".

Fig1. De ColorX2MA_Alert indicator op de grafiek
Fig.2. De ColorX2MA_Alert indicator. Waarschuwingen genereren.


Reactie 0