Der BrainTrend2Sig ist ein Semaphore-Signalindikator, der mit nützlichen Funktionen wie Alerts, E-Mail-Benachrichtigungen und Push-Nachrichten ausgestattet ist.
Um diese neuen Funktionen zu integrieren, wurden folgende Änderungen im Indikatorcode vorgenommen:
- Neue Eingabeparameter wurden hinzugefügt:
input uint NumberofBar=1;// Anzahl der Balken für das Signal input bool SoundON=true; // Alerts aktivieren input uint NumberofAlerts=2;// Anzahl der Alerts input bool EMailON=false; // E-Mail-Benachrichtigung aktivieren input bool PushON=false; // Push-Nachrichten aktivieren
- Drei neue Funktionen wurden am Ende des Indikatorcodes hinzugefügt: BuySignal(), SellSignal() und GetStringTimeframe().
//+------------------------------------------------------------------+ //| Funktion für Kaufsignal | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname, // Text des Indikatornamens für E-Mail und Push-Nachrichten double &BuyArrow[], // Indikatorpuffer mit Kaufsignalen const int Rates_total, // aktuelle Anzahl der Balken const int Prev_calculated, // Anzahl der Balken beim vorherigen Tick const double &Close[], // Schlusskurs 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 signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod); if(EMailON) SendMail(SignalSirname+": BUY signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); if(PushON) SendNotification(SignalSirname+": BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Funktion für Verkaufssignal | //+------------------------------------------------------------------+ void SellSignal(string SignalSirname, // Text des Indikatornamens für E-Mail und Push-Nachrichten double &SellArrow[], // Indikatorpuffer mit Verkaufssignalen const int Rates_total, // aktuelle Anzahl der Balken const int Prev_calculated, // Anzahl der Balken beim vorherigen Tick const double &Close[], // Schlusskurs 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 signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod); if(EMailON) SendMail(SignalSirname+": SELL signal alert","SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); if(PushON) SendNotification(SignalSirname+": SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Zeitrahmen als String erhalten | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Einige Aufrufe an BuySignal() und SellSignal() Funktionen wurden nach den Berechnungsschleifen des Indikators im OnCalculate() Block hinzugefügt://---
BuySignal("BrainTrend2SigAlert",BuyBuffer,rates_total,prev_calculated,close,spread);
SellSignal("BrainTrend2SigAlert",SellBuffer,rates_total,prev_calculated,close,spread);
//---
Die Variablen BuyBuffer und SellBuffer sind die Namen der Indikatorpuffer, die die Kauf- und Verkaufssignale speichern. In den Indikatorpuffern sollten entweder Nullen oder EMPTY_VALUE als leere Werte gesetzt werden.
Es wird angenommen, dass nur ein Aufruf der BuySignal() und SellSignal() Funktionen im OnCalculate() Block des Indikatorcodes verwendet wird.

Abb.1. BrainTrend2SigAlert Indikator im Chart

Abb.2. BrainTrend2SigAlert Indikator. Generierung von Alerts
Verwandte Beiträge
- Tägliche prozentuale Veränderung in MT5 – Indikator für MetaTrader 5
- Uniformitätsfaktor-Indikator für MetaTrader 5: Analysiere deine Preisbewegungen
- Boom Index Spike Pattern – Ein Leitfaden für MetaTrader 5 Trader
- Marktfazilitätsindex (BW MFI) – Ein hilfreicher Indikator für MetaTrader 5
- Open Range Breakout Indikator für MetaTrader 5: Ein unverzichtbares Tool für Trader