BrainTrend2Sig is een handige semaphore signaalindicator die nu ook waarschuwingen, e-mails en push-notificaties ondersteunt.
Hieronder vind je de belangrijkste wijzigingen die zijn doorgevoerd in de code van de indicator om deze functionaliteiten te implementeren:
- Nieuwe invoerparameters zijn toegevoegd:
input uint AantalBars=1;//Aantal bars voor het signaal input bool GeluidAan=true; //Waarschuwingen inschakelen input uint AantalWaarschuwingen=2;//Aantal waarschuwingen input bool EmailAan=false; //E-mail waarschuwings inschakelen input bool PushAan=false; //Push-notificaties inschakelen
- Drie nieuwe functies zijn toegevoegd aan het einde van de indicatorcode: BuySignal(), SellSignal() en GetStringTimeframe()
//+------------------------------------------------------------------+ //| Functie voor koop signaal | //+------------------------------------------------------------------+ void BuySignal(string SignaalNaam, // naam van de indicator voor e-mail en push berichten double &KoopPijl[], // buffer van de indicator met koop signalen const int TotaleBars, // het huidige aantal bars const int Vorige_berekening, // het aantal bars op de vorige tick const double &Sluit[], // sluitprijs const int &Spread[]) // spread { //--- static uint teller=0; if(TotaleBars!=Vorige_berekening) teller=0; bool KoopSignaal=false; bool SerieTest=ArrayGetAsSeries(KoopPijl); int index; if(SerieTest) index=int(AantalBars); else index=TotaleBars-int(AantalBars)-1; if(NormalizeDouble(KoopPijl[index],_Digits) && KoopPijl[index]!=EMPTY_VALUE) 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(Sluit); if(SerieTest) index=int(AantalBars); else index=TotaleBars-int(AantalBars)-1; double Vraag=Sluit[index]; double Bod=Sluit[index]; SerieTest=ArrayGetAsSeries(Spread); if(SerieTest) index=int(AantalBars); else index=TotaleBars-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 huidig tijd=",tekst,"\n Symbool=",Symbol()," Periode=",sPeriode); if(EmailAan) SendMail(SignaalNaam+": KOOP signaal waarschuwing","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, // naam van de indicator voor e-mail en push berichten double &VerkoopPijl[], // buffer van de indicator met verkoop signalen const int TotaleBars, // het huidige aantal bars const int Vorige_berekening, // het aantal bars op de vorige tick const double &Sluit[], // sluitprijs const int &Spread[]) // spread { //--- static uint teller=0; if(TotaleBars!=Vorige_berekening) teller=0; bool VerkoopSignaal=false; bool SerieTest=ArrayGetAsSeries(VerkoopPijl); int index; if(SerieTest) index=int(AantalBars); else index=TotaleBars-int(AantalBars)-1; if(NormalizeDouble(VerkoopPijl[index],_Digits) && VerkoopPijl[index]!=EMPTY_VALUE) 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(Sluit); if(SerieTest) index=int(AantalBars); else index=TotaleBars-int(AantalBars)-1; double Vraag=Sluit[index]; double Bod=Sluit[index]; SerieTest=ArrayGetAsSeries(Spread); if(SerieTest) index=int(AantalBars); else index=TotaleBars-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 huidig tijd=",tekst,"\n Symbool=",Symbol()," Periode=",sPeriode); if(EmailAan) SendMail(SignaalNaam+": VERKOOP signaal waarschuwing","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); } //--- } //+------------------------------------------------------------------+ //| Verkrijgen van de tijdsframe als string | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES tijdsframe) { //---- return(StringSubstr(EnumToString(tijdsframe),7,-1)); //---- }
- Een paar aanroepen van BuySignal() en SellSignal() functies zijn toegevoegd na de berekeningscycli van de indicator in het OnCalculate() blok //---
BuySignal("BrainTrend2SigAlert",KoopBuffer,rates_total,prev_calculated,close,spread);
SellSignal("BrainTrend2SigAlert",VerkoopBuffer,rates_total,prev_calculated,close,spread);
//---
Hierbij zijn KoopBuffer en VerkoopBuffer de namen van de indicatorbuffers voor het opslaan van de koop- en verkoop signalen. De indicatorbuffers moeten ofwel nullen of EMPTY_VALUE bevatten als lege waarden.
Het is de bedoeling dat er slechts één aanroep naar de BuySignal() en SellSignal() functies wordt gebruikt in het OnCalculate() blok van de indicatorcode.

Fig.1. BrainTrend2SigAlert indicator op de grafiek

Fig.2. BrainTrend2SigAlert indicator. Waarschuwingen genereren
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
- Verbeter je Handelsstrategieën met de ColorXADX Indicator voor MetaTrader 5