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
Ansichten:
746
Rating:
(19)
Veröffentlicht:
2018.11.09 07:47
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Wirklicher Autor:

Paul Stringer

Der Indikator definiert die Harami-Muster und bietet Hinweise, E-Mails und Push-Benachrichtigungen

Folgendes wurde geändert, damit der Indikator Alarme, E-Mails un Push-Benachrichtigungen erzeugen kann:

  1. Neu eingeführte Eingabeparameter
    input uint NumberofBar=1;//Barnummer für das Signal
    input bool SoundON=true; // Aktiviert Alerts
    input uint NumberofAlerts=2;//Anzahl von Alerts
    input bool EMailON=false; // Aktiviert Emails
    input bool PushON=false; // Aktiviert das Senden auf Handys
    
  2. Ergänzt wurden drei neue Funktionen am Ende des Codes des Indikators: BuySignal(), SellSignal() und GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Funktion der Kaufsignale                                         |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // Text des Indikatornamens für E-Mail und Push-Benachrichtigung
                   double &BuyArrow[],        // Indikatorpuffer mit den Kaufsignalen
                   const int Rates_total,     // aktuelle Anzahl der Bars
                   const int Prev_calculated, // die Anzahl der Bar des vorherigen Ticks
                   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(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]*_Point;
          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);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Funktion der Verkaufssignale                                     |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // Text des Indikatornamens für E-Mail und Push-Benachrichtigung
                    double &SellArrow[],       // Indikatorpuffer mit den Verkaufssignalen
                    const int Rates_total,     // aktuelle Anzahl der Bars
                    const int Prev_calculated, // die Anzahl der Bar des vorherigen Ticks
                    const double &Close[],     // Schlusskurs
                    const int &Spread[])       // Spread
      {
    //---
       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]*_Point;
          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);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Abfrage des Zeitrahmens als Zeichenkette                        |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    


  3. Ergänzt wurden eine paar Funktionsaufrufe von BuySignal() und SellSignal() im Block von OnCalculate() in der Schleife der Indikatorberechnung.
    //---     
       BuySignal("Harami_Alert",BuyBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("Harami_Alert",SellBuffer,rates_total,prev_calculated,close,spread);
    //---   
    

Dabei sind BuyBuffer und SellBuffer die Namen der Indikatorpuffer zur Speicherung der Kauf- und Verkaufssignale. Als Leer-Wert für die Indikatorpuffer sollte entweder Null oder EMPTY_VALUE festgelegt werden.

Es wird davon ausgegangen, dass nur ein einziger Aufruf der Funktionen BuySignal() und SellSignal() im Block von OnCalculate() des Indikatorcodes verwendet wird.

Ursprünglich wurde der Indikator in MQL4 geschrieben und als Erstes in der Code Base am 14.06.2016 veröffentlicht.

Abb. 1. Der Indikator Harami_Alert auf dem Chart

Abb. 1. Der Indikator Harami_Alert auf dem Chart


Abb. 2. Harami_Alert. Alarmieren

Abb. 2. Harami_Alert. Alarmieren

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

WPR_Histogram_Vol_HTF WPR_Histogram_Vol_HTF

Der Indikator WPR_Histogram_Vol mit in den Eingabeparameter bestimmbarem Zeitrahmen.

TimeZonePivotsOpenSystem TimeZonePivotsOpenSystem

Der Indikator kennzeichnet die Kerzen, die den TimeZonePivots-Kanal durchbrechen.

WPR_Histogram_Vol WPR_Histogram_Vol

Williams’ Percent Range Oszillator dargestellt als farbiges Histogramm unter Verwendung der Volumina

Exp_BrainTrend2_AbsolutelyNoLagLwma_X2MACandle_MMRec Exp_BrainTrend2_AbsolutelyNoLagLwma_X2MACandle_MMRec

Drei unabhängige Handelssysteme mit den Indikatoren BrainTrend_V2, AbsolutelyNoLagLWMA und X2MACandle innerhalb eines einzigen EA mit der Möglichkeit, das Volumen eines bevorstehenden Handels in Abhängigkeit von den Ergebnissen der vorherigen Positionen für dieses Handelssystem zu ändern.