Startseite Technischer Indikator Beitrag

BrainTrend2SigAlert: Der ultimative Indikator für MetaTrader 5

Anhang
16695.zip (4.09 KB, Herunterladen 0 mal)

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:

  1. 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
    
  2. 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));
    //----
      }
    
  3. 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.1. BrainTrend2SigAlert Indikator im Chart

Abb.2. BrainTrend2SigAlert Indikator. Generierung von Alerts

Abb.2. BrainTrend2SigAlert Indikator. Generierung von Alerts

Verwandte Beiträge

Kommentar (0)