Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Twitter!
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

WeightOscillator_Alert - Indikator für den MetaTrader 5

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

Der WeightOscillator Trendindikator. 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("WeightOscillator_Alert",ColorBuffer,0,rates_total,prev_calculated,close,spread);
       SellSignal("WeightOscillator_Alert",ColorBuffer,4,rates_total,prev_calculated,close,spread);
    //---  

Wobei: ColorBuffer — Name des Farbindex-Puffers für das Speichern der Farben des Indikators, 0 und 4 — Farbennummern im Index-Puffer, bei welchen der Oszillator jeweils im überkauften oder überverkauften Markt liegt. 

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 WeightOscillator_Alert Indikator auf dem Chart

Abb.1. Der WeightOscillator_Alert Indikator auf dem Chart

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

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

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

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

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

Fractional_Bands_HTF Fractional_Bands_HTF

Der Fractional_Bands Indikator mit der Option, Zeitrahmen in den Eingabeparametern auszuwählen.

Chart on Chart Chart on Chart

Der Chart on Chart Indikator gibt den Chart eines Symbols auf dem aktuellen Chart aus.

Fractal_Keltner_x5_Cloud Fractal_Keltner_x5_Cloud

Zwei fraktale Keltner-Kanäle realisiert als Wolke.

eur usd m5 eur usd m5

Der Expert Advisor funktioniert im Martingale-Modus basierend auf Signalen des iStochastic (Stochastic Oscillator) Indikators.