Hoofdauteur: Iin Zulkarnainn
Iin_MA_Signal is een handige semaphore signaalindicator die meldingen, e-mails en pushnotificaties biedt.
Voor de implementatie van meldingen, e-mailberichten en pushnotificaties zijn de volgende wijzigingen aangebracht in de indicatorcode:
- 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 melding inschakelen input bool PushAan=false; // Pushmelding naar mobiele apparaten inschakelen
- Drie nieuwe functies toegevoegd aan het einde van de indicatorcode: BuySignal(), SellSignal() en GetStringTimeframe()
//+------------------------------------------------------------------+ //| Koop signaal functie | //+------------------------------------------------------------------+ void BuySignal(string SignalNaam, // 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 tick const double &Sluit[], // slotprijs 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]; string sVraag=DoubleToString(Vraag,_Digits); string sBod=DoubleToString(Bod,_Digits); string sPeriode=GetStringTimeframe(ChartPeriod()); if(GeluidAan) Alert("KOOP signaal Vraag=",Vraag," Bod=",Bod," huidige tijd=",tekst," Symbool=",Symbol()," Periode=",sPeriode); if(EMailAan) SendMail(SignalNaam+": KOOP signaal melding","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); } //--- } //+------------------------------------------------------------------+ //| Verkoop signaal functie | //+------------------------------------------------------------------+ void SellSignal(string SignalNaam, // 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 tick const double &Sluit[], // slotprijs 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]; string sVraag=DoubleToString(Vraag,_Digits); string sBod=DoubleToString(Bod,_Digits); string sPeriode=GetStringTimeframe(ChartPeriod()); if(GeluidAan) Alert("VERKOOP signaal Vraag=",Vraag," Bod=",Bod," huidige tijd=",tekst," Symbool=",Symbol()," Periode=",sPeriode); if(EMailAan) SendMail(SignalNaam+": VERKOOP signaal melding","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); } //--- } //+------------------------------------------------------------------+ //| Tijdframe ophalen als string | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Een paar aanroepen van de BuySignal() en SellSignal() functies toegevoegd na de indicatorberekeningen in het OnCalculate() blok
//--- BuySignal("Iin_MA_Signal_Alert",KoopBuffer,aantal_totaal,vorige_berekend,sluit,spread); SellSignal("Iin_MA_Signal_Alert",VerkoopBuffer,aantal_totaal,vorige_berekend,sluit,spread); //---
Waar KoopBuffer en VerkoopBuffer de namen zijn van de indicatorbuffers voor het opslaan van de koop- en verkoop signalen. Lege waarden in de indicatorbuffers moeten worden ingesteld op nul of EMPTY_VALUE.
Er wordt aangenomen dat er slechts één aanroep naar de BuySignal() en SellSignal() functies zal worden gebruikt in het OnCalculate() blok van de indicatorcode.

Fig. 1. Iin_MA_Signal_Alert op de grafiek
Fig. 2. Iin_MA_Signal_Alert. Genereren van meldingen
Gerelateerde berichten
- BykovTrend_HTF_Signal: Dé Indicator voor MetaTrader 5 voor Trendanalyse
- Prijs in het Poolse Coördinatensysteem - Indicator voor MetaTrader 5
- Fibonacci ZigZag Indicator voor MetaTrader 5: Een Stapsgewijze Handleiding
- Open Range Breakout Indicator voor MetaTrader 5: Ontdek de Kracht van deze Tool
- Rate_AOModPips: Dé Indicator voor MetaTrader 5 voor Traders
