Startseite Technischer Indikator Beitrag

ColorX2MA_Alert - Ihr neuer Trading-Indikator für MetaTrader 5

Anhang
16477.zip (22.84 KB, Herunterladen 0 mal)

Der ColorX2MA Indikator bringt Ihnen endlich die Möglichkeit, Alerts direkt in MetaTrader 5 zu nutzen! Sie können sich über E-Mails und Push-Benachrichtigungen auf Ihrem Mobilgerät informieren lassen.

Um diese Alerts zu implementieren, wurden folgende Anpassungen im Code des Indikators vorgenommen:

  1. Neue Eingabeparameter wurden eingeführt:
    //---- Eingabevariablen für Alerts 
    input uint NumberofBar=1;                    //Bar-Nummer für das Signal
    input bool SoundON=true;                     //Alerts aktivieren
    input uint NumberofAlerts=2;                 //Anzahl der Alerts
    input bool EMailON=false;                    //Signal per E-Mail versenden
    input bool PushON=false;                     //Signal an mobile Geräte senden
    
  2. Am Ende des Indikatorcodes wurden drei neue Funktionen hinzugefügt: BuySignal(), SellSignal() und GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Funktion für Kaufsignal                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,// Text des Indikators für E-Mail und Push-Nachrichten
                   double &ColorArray[],// Farbindex-Puffer
                   int ColorIndex,// Farbindex im Farbindex-Puffer zum Generieren eines Signals
                   const int Rates_total,     // die aktuelle Anzahl der Balken
                   const int Prev_calculated, // die 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(ColorArray);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) 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("KAUF Signal 
     Ask=",Ask,"
     Bid=",Bid,"
     currtime=",text,"
     Symbol=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": KAUF Signal Alert","KAUF Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": KAUF Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Funktion für Verkaufssignal                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // Text des Indikators für E-Mail und Push-Nachrichten
                    double &ColorArray[],       // Farbindex-Puffer
                    int ColorIndex,             // Farbindex im Farbindex-Puffer zum Generieren eines Signals
                    const int Rates_total,     // die aktuelle Anzahl der Balken
                    const int Prev_calculated, // die 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(ColorArray);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) 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("VERKAUF Signal 
     Ask=",Ask,"
     Bid=",Bid,"
     currtime=",text,"
     Symbol=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": VERKAUF Signal Alert","VERKAUF Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": VERKAUF Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Die Zeiteinheit als String erhalten                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Ein paar Aufrufe zu den Funktionen BuySignal() und SellSignal() wurden nach den Berechnungsschleifen im OnCalculate() Block hinzugefügt:
    //---     
       BuySignal("X2MA_Alert",ColorX2MA,1,rates_total,prev_calculated,close,spread);
       SellSignal("X2MA_Alert",ColorX2MA,2,rates_total,prev_calculated,close,spread);
    //--- 
    

Hierbei steht ColorX2MA für den Namen des Farbindex-Puffers, der die Linienfarbe in Form eines Index speichert.

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

Der Indikator nutzt die Klassen der SmoothAlgorithms.mqh Bibliothek (bitte in den Ordner <terminal_data_folder>\MQL5\Include kopieren). Die Nutzung der Klassen wurde ausführlich in dem Artikel "Durchschnittsbildung von Preiserien für Zwischenberechnungen ohne zusätzliche Puffer" beschrieben.

Abb.1. Der ColorX2MA_Alert Indikator auf dem Chart

Abb.1. Der ColorX2MA_Alert Indikator auf dem Chart

Abb.2. Der ColorX2MA_Alert Indikator. Generierung von Alerts.

Abb.2. Der ColorX2MA_Alert Indikator. Generierung von Alerts.

Verwandte Beiträge

Kommentar (0)