BrainTrend1Sig_Alert is een krachtige semafoor-signaalindicator die je waarschuwt met alerts, e-mails en pushnotificaties.
Om de alerts, e-mailberichten en pushnotificaties te implementeren, zijn er enkele wijzigingen aangebracht in de indicatorcode:
- Nieuwe invoerparameters zijn toegevoegd:
input uint NumberofBar=1;// Bar nummer voor het signaal input bool SoundON=true; // Activeer alerts input uint NumberofAlerts=2;// Aantal alerts input bool EMailON=false; // Activeer e-mailen van het signaal input bool PushON=false; // Activeer verzenden van het signaal naar mobiele apparaten
- Er zijn drie nieuwe functies toegevoegd aan het einde van de indicatorcode: BuySignal(), SellSignal() en GetStringTimeframe().
//+------------------------------------------------------------------+ //| Buy signaal functie | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname, // tekst van de indicatornaam voor e-mail en pushberichten double &BuyArrow[], // indicatorbuffer met koop-signalen const int Rates_total, // het huidige aantal bars const int Prev_calculated, // het aantal bars bij de vorige tick const double &Close[], // slotprijs const int &Spread[]) // spread { //--- static uint counter=0; if(Rates_total!=Prev_calculated) counter=0; bool BuySignal=false; bool SeriesTest=ArrayGetAsSeries(BuyArrow); int index; if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; if(NormalizeDouble(BuyArrow[index],_Digits) && BuyArrow[index]!=EMPTY_VALUE) BuySignal=true; if(BuySignal && counter<=NumberofAlerts) { counter++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); SeriesTest=ArrayGetAsSeries(Close); if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; double Ask=Close[index]; double Bid=Close[index]; SeriesTest=ArrayGetAsSeries(Spread); if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; Bid+=Spread[index]; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriod=GetStringTimeframe(ChartPeriod()); if(SoundON) Alert("BUY signaal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbool=",Symbol()," Periode=",sPeriod); if(EMailON) SendMail(SignalSirname+": BUY signaal alert","BUY signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod); if(PushON) SendNotification(SignalSirname+": BUY signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Verkoop signaal functie | //+------------------------------------------------------------------+ void SellSignal(string SignalSirname, // tekst van de indicatornaam voor e-mail en pushberichten double &SellArrow[], // indicatorbuffer met verkoop-signalen const int Rates_total, // het huidige aantal bars const int Prev_calculated, // het aantal bars bij de vorige tick const double &Close[], // slotprijs const int &Spread[]) // spread { //--- static uint counter=0; if(Rates_total!=Prev_calculated) counter=0; bool SellSignal=false; bool SeriesTest=ArrayGetAsSeries(SellArrow); int index; if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; if(NormalizeDouble(SellArrow[index],_Digits) && SellArrow[index]!=EMPTY_VALUE) SellSignal=true; if(SellSignal && counter<=NumberofAlerts) { counter++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); SeriesTest=ArrayGetAsSeries(Close); if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; double Ask=Close[index]; double Bid=Close[index]; SeriesTest=ArrayGetAsSeries(Spread); if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; Bid+=Spread[index]; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriod=GetStringTimeframe(ChartPeriod()); if(SoundON) Alert("SELL signaal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbool=",Symbol()," Periode=",sPeriod); if(EMailON) SendMail(SignalSirname+": SELL signaal alert","SELL signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod); if(PushON) SendNotification(SignalSirname+": SELL signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Verkrijgen van de tijdsperiode als een string | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Er zijn een paar aanroepen van de BuySignal() en SellSignal() functies toegevoegd na de indicatorberekeningen in de OnCalculate() blok:
//---
BuySignal("BrainTrend1Sig_Alert",BuyBuffer,rates_total,prev_calculated,close,spread);
SellSignal("BrainTrend1Sig_Alert",SellBuffer,rates_total,prev_calculated,close,spread);
//---Waar BuyBuffer en SellBuffer de namen zijn van de indicatorbuffers voor het opslaan van de koop- en verkoop-signalen. Lege waarden moeten worden ingesteld in de indicatorbuffers als nullen of EMPTY_VALUE.
Er wordt aangenomen dat er slechts één aanroep van de BuySignal() en SellSignal() functies zal worden gebruikt in het OnCalculate() blok van de indicatorcode.

Fig.1. BrainTrend1Sig_Alert indicator op de grafiek

Fig.2. BrainTrend1Sig_Alert indicator. Alerts 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