Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Telegram!
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
Ansichten:
811
Rating:
(16)
Veröffentlicht:
2016.12.22 14:06
Aktualisiert:
2023.03.29 15:00
\MQL5\Include\
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Ein Semaphore-Signalindikator basierend auf der elativen geglätteten Geschwindigkeit der Preisänderung ,welcher Alarme, E-Mails und Push-Benachrichtigungen an Mobilgeräte sendet.

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
    u//---     
       BuySignal("PPO_Sign",BuyBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("PPO_Sign",SellBuffer,rates_total,prev_calculated,close,spread);
    u//---   
    
    

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.

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

Dieser Indikator wurde ursprünglich in MQL4 geschrieben und am 08.03.2008 in der Code Base veröffentlicht.

Abb.1. Der PPO_SignAlert Indikator aus dem Chart

Abb.1. Der PPO_SignAlert Indikator aus dem Chart

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

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

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

BalanceOfPower_Histogram BalanceOfPower_Histogram

Der Balance of Power (BOP) Indikator als farbiges Histogramm der Stärke und der Richtung des aktuellen Trends.

Exp_RAVI_Histogram Exp_RAVI_Histogram

Das Exp_RAVI_Histogram Ausbruchssystem basierend auf Signalen des RAVI_Histogram Oszillators.

Exp_i-SpectrAnalysis_RVI Exp_i-SpectrAnalysis_RVI

Der Exp_i-SpectrAnalysis_RVI EA basiert auf den vom i-SpectrAnalysis_RVI Oszillator generierten Signalen.

CPrice CPrice

Die Instanz der Klasse gibt solche Daten wie Bid, Ask, High, Low, Schlusskurse und Eröffnungskurse der aktuellen oder einer in den Parametern angegebenen Kerze sowie die Eröffnungszeit der Kerze zurück.