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

AroonOscillatorSignAlert - Indikator für den MetaTrader 5

Ansichten:
728
Rating:
(17)
Veröffentlicht:
2016.12.22 12:58
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Ein Pfeilsignal Indikator, basierend auf dem AroonOscillator Oszillator, welcher die überkauften und überverkauften Bereiche verlässt. Der Indikator sendet Alarme, E-Mails und Push-Benachrichtigungen an Mobilgeräte.

Um das Senden von Alarmen, E-Mails und Push-Benachrichtigungen an Smartphone zu implementieren, wurden die folgenden Änderungen im Code des Indikators vorgenommen:

  1. Es wurden neue Inputvariablen in die Eingabeparametern des Indikators hinzugefügt
    input uint NumberofBar=1;//Nummer des Balkens für das Signal
    input bool SoundON=true; //Alarme aktivieren
    input uint NumberofAlerts=2;//Anzahl von Alarmen
    input bool EMailON=false; //Aktivieren das Senden eines Signals per E-Mail
    input bool PushON=false; //Aktivieren das Senden eines Signals an Mobilgerät
    
    
  2. Am Ende des Codes des Indikators wurden drei neue Funktionen hinzugefügt: BuySignal(), SellSignal() und GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Buy signal function                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // Text des Namens des Indikators für E-Mails und Push-Benachrichtigungen
                   double &BuyArrow[],        // Indikator-Puffer mit Buy-Signalen
                   const int Rates_total,     // die aktuelle Anzahl von Balken
                   const int Prev_calculated, // die Anzahl der Balken auf dem vorherigen Tick
                   const double &Close[],     // Schlusskurs
                   const int &Spread[])       // Spread
      {
    u//---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool BuySignal=false;
       bool SeriesTest=ArrayGetAsSeries(BuyArrow);
       int index;
       if(SeriesTest) index=int(NumberofBar);
       else index=Rates_total-int(NumberofBar)-1;
       if(NormalizeDouble(BuyArrow[index],_Digits) && 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+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          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);
         }
    
    u//---
      }
    //+------------------------------------------------------------------+
    //| Sell signal function                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // Text des Namens des Indikators für E-Mails und Push-Benachrichtigungen
                    double &SellArrow[],       // Indikator buffer with sell signals
                    const int Rates_total,     // die aktuelle Anzahl von Balken
                    const int Prev_calculated, // die Anzahl der Balken auf dem vorherigen Tick
                    const double &Close[],     // Schlusskurs
                    const int &Spread[])       // Spread
      {
    u//---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool SellSignal=false;
       bool SeriesTest=ArrayGetAsSeries(SellArrow);
       int index;
       if(SeriesTest) index=int(NumberofBar);
       else index=Rates_total-int(NumberofBar)-1;
       if(NormalizeDouble(SellArrow[index],_Digits) && 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+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          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);
         }
    u//---
      }
    //+------------------------------------------------------------------+
    //|  Getting the timeframe as a string                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
    
  3. Es wurden einige Aufrufe der BuySignal() und SellSignal() Funktionen nach den Zyklen der Berechnungen des Indikators im OnCalculate() Block hinzugefügt
    BuySignal("iWPRSign",BuyBuffer,rates_total,prev_calculated,close,spread);
        SellSignal("iWPRSign",SellBuffer,rates_total,prev_calculated,close,spread);
    
    

wobei BuyBuffer und SellBuffer die Namen der Indikator-Puffern für das Speichern von Buy- und Sell-Signalen sind. Als leere Werte sind entweder Nullen oder EMPTY_VALUE in den Indikator-Puffern zu setzen.

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

Abb.1. Der AroonOscillatorSignAlert Indikator auf dem Chart

Abb.1. Der AroonOscillatorSignAlert Indikator auf dem Chart

Abb.2. Der AroonOscillatorSignAlert Indikator. Generierung eines Alarms.

Abb.2. Der AroonOscillatorSignAlert Indikator. Generierung eines Alarms.

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

MaxPriceDistribution MaxPriceDistribution

Ein senkrechtes Histogramm mit der Verteilung von Highs.

MinPriceDistribution MinPriceDistribution

Ein senkrechtes Histogramm mit der Verteilung von Tiefs.

ADXDMI_HTF ADXDMI_HTF

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

Exp_ADXDMI Exp_ADXDMI

Das Exp_ADXDMI Handelssystem, basierend auf Signalen des ADXDMI Indikators.