Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Facebook!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Indikatoren

ColorXdinMA_Alert - Indikator für den MetaTrader 5

Ansichten:
1042
Rating:
(19)
Veröffentlicht:
2017.02.24 11:10
Aktualisiert:
2023.03.29 15:01
\MQL5\Include\
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Echter Autor: dimeon

Der trendfolgende MA ColorXdinMA sendet Alerts, E-Mails und Push-Benachrichtigungen an Smartphone.

Für das Senden von Alerts, E-Mails und Push-Benachrichtigungen wurden im Code des Indikators die folgenden Änderungen vorgenommen:

  1. Vor der Deklaration der Eingabevariablen wird die Aufzählung für Varianten der vom Indikator generierten Signale an der globalen Ebene deklariert
    //+----------------------------------------------------+
    //| Aufzählung für Varianten der von Indikator generierten Signale  |
    //+----------------------------------------------------+
    enum ENUM_SIGNAL_MODE
      {
       MODE_SIGNAL,  //Ausbruchssignale
       MODE_TREND    //Ausbruchssignale und Trendsignale
      };
  2. Es wurden neue Eingabevariablen den Eingabeparametern hinzugefügt
    //---- Eingabevariablen für Alerts
    input ENUM_SIGNAL_MODE SignMode=MODE_SIGNAL; //Variante des Signals
    input uint NumberofBar=1;                    //Nummer des Balkens für das Senden des Signals
    input bool SoundON=true;                     //Alerts aktivieren
    input uint NumberofAlerts=2;                 //Anzahl der Alerts
    input bool EMailON=false;                    //Senden des Signals per E-Mail aktivieren
    input bool PushON=false;                     //Senden des Signals an Mobilgeräte aktivieren
  3. Es wurden drei neue Funktionen BuySignal(), SellSignal() und GetStringTimeframe() am Ende des Codes hinzugefügt
    //+------------------------------------------------------------------+
    //| Buy signal function                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,// Text des Namens des Indikators für E-Mails und Push-Benachrichtigungen
                   double &ColorArray[],// Farbindex-Puffer
                   int ColorIndex,// Farbindex im Farbindex-Puffer für das Senden des Signals
                   const int Rates_total,     // aktuelle Anzahl der Balken
                   const int Prev_calculated, // Anzahl der Balken auf dem 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(SignMode==MODE_SIGNAL)
         {
          if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) BuySignal=true;
         }
       else
         {
          if(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+=_Point*Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SignMode==MODE_SIGNAL || (SignMode==MODE_TREND && ColorArray[index1]!=ColorIndex))
            {
             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);
            }
          else
            {
             if(SoundON) Alert("Up Trend signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
             if(EMailON) SendMail(SignalSirname+": Up Trend signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
             if(PushON) SendNotification(SignalSirname+": Up Trend signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
            }
         }

    //---
      }
    //+------------------------------------------------------------------+
    //| Sell signal function                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,// Text des Namens des Indikators für E-Mails und Push-Benachrichtigungen
                    double &ColorArray[],       // Farbindex-Puffer
                    int ColorIndex,             // Farbindex im Farbindex-Puffer für das Senden des Signals
                    const int Rates_total,     // aktuelle Anzahl der Balken
                    const int Prev_calculated, // Anzahl der Balken auf dem vorherigen Tick
                    const double &Close[],     // Schlusspreis
                    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(SignMode==MODE_SIGNAL)
         {
          if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) SellSignal=true;
         }
       else
         {
          if(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+=_Point*Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SignMode==MODE_SIGNAL || (SignMode==MODE_TREND && ColorArray[index1]!=ColorIndex))
            {
             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);
            }
          else
            {
             if(SoundON) Alert("Down trend signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
             if(EMailON) SendMail(SignalSirname+": Down trend signal alert","SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
             if(PushON) SendNotification(SignalSirname+": Down trend signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
            }
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Erhalten der Timeframe als String                              |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
  4. Es wurden einige Aufrufe von BuySignal() und SellSignal() in den OnCalculate() Block nach den Berechnungsschleifen hinuzugefügt
    //---    
       BuySignal("ColorXdinMA_Alert",ColorXdinMA,1,rates_total,prev_calculated,close,spread);
       SellSignal("ColorXdinMA_Alert",ColorXdinMA,2,rates_total,prev_calculated,close,spread);
    //--- 

Wobei: ColorXdinMA — Name des Farbindex-Puffers für das Speichern der Farben des Indikators, 1 und 2 — Farbennummern im Index-Puffer, welche das Steigen oder Fallen des MAs bedeuten. 

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

Der Indikator verwendet Klassen der Bibliothek SmoothAlgorithms.mqh (kopieren Sie diese nach <terminal_data_folder>\MQL5\Include). Die Klassen wurden im Artikel <a0>"Bildung von Kursreihenmittelwerten für Zwischenberechnungen ohne zusätzliche Puffer"</a0> ausführlich beschrieben.

Abb.1. Der ColorXdinMA_Alert Indikator auf dem Chart

Abb.1. Der ColorXdinMA_Alert Indikator auf dem Chart

Abb.2. Der ColorXdinMA_Alert Indikator. Die Erzeugung eines Alerts für Ausbruchssignal

Abb.2. Der ColorXdinMA_Alert Indikator. Die Erzeugung eines Alerts für Ausbruchssignal

Abb.3. Der ColorXdinMA_Alert Indikator. Die Erzeugung eines Alerts für Trendsignal

Abb.3. Der ColorXdinMA_Alert Indikator. Die Erzeugung eines Alerts für Trendsignal

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/17111

Fractal_WeightOscillator Fractal_WeightOscillator

Ein Oszillator, der eine gewichtete und geglätte Summe der vier Indikatoren Fractal_RSI, Fractal_MFI, Fractal_WPR und Fractal_DeMarker darstellt.

Fractal_MFI Fractal_MFI

Fraktaler Money Flow Index.

FT BillWillams Trader FT BillWillams Trader

Der EA basiert auf den Indikatoren iAlligator, Alligator, iMA und Moving Average.

ZeroLagEA-AIP v0.0.4 ZeroLagEA-AIP v0.0.4

Handel anhand des benutzerdefinierten Indikators ZeroLag MACD.