JBrainTrend1Stop_Alert: Der Trendindikator für MetaTrader 5 mit Alarmfunktionen

Mike 2017.01.20 02:09 28 0 0
Anhang

JBrainTrend1Stop ist ein Trendindikator, der mit Alarmen, E-Mail-Benachrichtigungen und Push-Nachrichten ausgestattet ist.

Im Folgenden erkläre ich die Änderungen, die am Indikator-Code vorgenommen wurden, um die Alarmfunktionen, E-Mail-Benachrichtigungen und Push-Nachrichten zu implementieren:

  1. Neue Eingabeparameter wurden eingeführt:
    input uint NumberofBar=1;// Anzahl der Balken für das Signal
    input bool SoundON=true; // Alarme aktivieren
    input uint NumberofAlerts=2;// Anzahl der Alarme
    input bool EMailON=false; // E-Mail-Benachrichtigungen aktivieren
    input bool PushON=false; // Push-Benachrichtigungen aktivieren
    
  2. Drei neue Funktionen wurden am Ende des Indikator-Codes 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 Signalen für einen Aufwärtstrend
                   double &SellArrow[],       // Indikatorpuffer mit Signalen für einen Abwärtstrend
                   const int Rates_total,     // Aktuelle Anzahl der Balken
                   const int Prev_calculated, // Anzahl der Balken im 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,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(SellArrow[index1] && SellArrow[index1]!=EMPTY_VALUE && BuyArrow[index] && 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+=_Point*Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("KAUF-Signal Ask=",Ask," Bid=",Bid," currtime=",text," Symbol=",Symbol()," Zeitraum=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": KAUF-Signal-Alarm","KAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Zeitraum="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": KAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Zeitraum="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //| Funktion für Verkaufssignal                                              |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // Text des Indikatornamens für E-Mail- und Push-Nachrichten
                    double &SellArrow[],       // Indikatorpuffer mit Signalen für einen Abwärtstrend
                    double &BuyArrow[],        // Indikatorpuffer mit Signalen für einen Aufwärtstrend
                    const int Rates_total,     // Aktuelle Anzahl der Balken
                   const int Prev_calculated, // Anzahl der Balken im 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,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(BuyArrow[index1] && BuyArrow[index1]!=EMPTY_VALUE && SellArrow[index] && 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+=_Point*Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("VERKAUF-Signal Ask=",Ask," Bid=",Bid," currtime=",text," Symbol=",Symbol()," Zeitraum=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": VERKAUF-Signal-Alarm","VERKAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Zeitraum="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": VERKAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Zeitraum="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Die Zeitspanne als String abrufen                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
  3. Ein paar Aufrufe der BuySignal() und SellSignal() Funktionen wurden nach den Berechnungsschleifen des Indikators im OnCalculate() Block hinzugefügt:
    //---    
       BuySignal("JBrainTrend1Stop_Alert",BuyStopBuffer,SellStopBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("JBrainTrend1Stop_Alert",SellStopBuffer,BuyStopBuffer,rates_total,prev_calculated,close,spread);
    //---  

Bei BuyStopBuffer und SellStopBuffer handelt es sich um die Namen der Indikatorpuffer, die die Signale für Aufwärts- und Abwärtstrends (Stoplinien für Long- und Short-Positionen) speichern. Ein Wert von Null oder EMPTY_VALUE sollte in den Indikatorpuffern vorhanden sein, wenn kein entsprechender Trend besteht.

Es wird angenommen, dass nur ein Aufruf der Funktionen BuySignal() und SellSignal() im OnCalculate() Block des Indikatorcodes verwendet wird.

Die kompilierte Datei des JMA.mq5 Indikators sollte in das Verzeichnis MQL5\Indicators platziert werden.


Abb.1. JBrainTrend1Stop_Alert Indikator im Chart

Abb.1. JBrainTrend1Stop_Alert Indikator im Chart

Abb.2. JBrainTrend1Stop_Alert Indikator. Alarme generieren

Abb.2. JBrainTrend1Stop_Alert Indikator. Alarme generieren

Liste
Kommentar 0