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

Mike 2017.01.18 18:53 86 0 0
Anhang

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 inputuint NumberofBar=1;                    //Bar-Nummer für das Signalinputbool SoundON=true;                     //Alerts aktiviereninputuint NumberofAlerts=2;                 //Anzahl der Alertsinputbool EMailON=false;                    //Signal per E-Mail versendeninputbool 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
                   constint Rates_total,     // die aktuelle Anzahl der Balken
                   constint Prev_calculated, // die Anzahl der Balken beim vorherigen Tick
                   constdouble &Close[],     // Schlusskurs
                   constint &Spread[])       // Spread
      {
    //---
       staticuint 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;
          doubleAsk=Close[index];
          doubleBid=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
                    constint Rates_total,     // die aktuelle Anzahl der Balken
                    constint Prev_calculated, // die Anzahl der Balken beim vorherigen Tick
                    constdouble &Close[],     // Schlusskurs
                    constint &Spread[])       // Spread
      {
    //---
       staticuint 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;
          doubleAsk=Close[index];
          doubleBid=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.

Liste
Kommentar 0