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 input uint AantalBars=1; //Bar nummer voor het signaal input bool GeluidAan=true; //Waarschuwingen inschakelen input uint AantalWaarschuwingen=2; //Aantal waarschuwingen input bool EMailAan=false; //E-mail voor het signaal inschakelen input bool 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 const int TotaalBars, // het huidige aantal bars const int Vorige_berekening,// het aantal bars op de vorige tick const double &Sluiten[], // sluitprijs const int &Spread[]) // spread { //--- static uint 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; double Vraag=Sluiten[index]; double Bod=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 const int TotaalBars, // het huidige aantal bars const int Vorige_berekening, // het aantal bars op de vorige tick const double &Sluiten[], // sluitprijs const int &Spread[]) // spread { //--- static uint 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; double Vraag=Sluiten[index]; double Bod=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.
Gerelateerde berichten
- id_digits_object: Een Onmisbare Indicator voor MetaTrader 5
- Volume Profile + Range v6.0: De Ideale Indicator voor MetaTrader 5
- BykovTrend_HTF_Signal: Dé Indicator voor MetaTrader 5 voor Trendanalyse
- X2MA_HTF_Signal_BG: Een Onmisbare Indicator voor MetaTrader 5
- Prijs in het Poolse Coördinatensysteem - Indicator voor MetaTrader 5
