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

Ideal ZigZag - Indikator für den MetaTrader 4

Ansichten:
1339
Rating:
(19)
Veröffentlicht:
2016.04.15 13:57
Aktualisiert:
2016.11.22 07:34
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance



Vorteile:

  1. Die zeitintensivste Funktion ist iBarShift, die alle überflüssigen Zyklen ersetzt, um die Spitzen zu finden.
  2. Alle nötigen Informationen jeder Bar sind nicht nur für die zurückliegenden Bars verfügbar, sondern stehen auch zu jeden Zeitpunkt einem Adviser zur Verfügung.
  3. Keine abgehängten Spitzen
  4. Eine effiziente Methode, die Spitzen zu finden, ist verfügbar
  5. Sehr schnell
  6. Arbeitet auch korrekt bei eine TF-Wechsel mit den zurückliegenden Balken.
  7. Perfekt für eine Verwendung durch einen EA.


Nachteile:

1. Speicher-Anforderungen. Dieser Indikator verwendet 5 Puffer anstelle von 2 (oder sogar 1) in anderen ähnlichen Implementierungen. Aber ("imho") das ist guter Preis für die Vorteile, #6 und #7. Keine der schnellen ZigZags, die ich gesehen habe, kann zurückliegende Bars ohne einer kompletten Neuberechnung berechnen. Meiner tut's. Darüber hinaus in einer effizienten Art und Weise

2. Zusätzliche Linien stehen zur Verfügung. Dies ist erforderlich, um die Daten für alle externe Codes sichtbar zu machen. Diese Zeilen sollten nie sichtbar sein.


Prinzip:

Der ZZ wird innerhalb des Kanals gezeichnet.

Die Kanal kann definiert werden als Punkte (XLab_ZZ) oder in Prozent (XLab_ZZP)


Spitzen-Abruf:

extern int ChannelWidth = 100;

#property indicator_chart_window
#property indicator_buffers 1

#property indicator_color1 Red
#property indicator_width1 3

datetime LastTime;

int init()
{
   LastTime = 0;
   
   return(0);
}

bool GetValue(double dir, int bar, int prevBar, double& peak, int& peakBar, datetime& peakTime)
{
   if (dir < 0)
   {
      datetime t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 2, bar);
      int i = iBarShift(Symbol(), 0, t);

      if (i == prevBar)
      {
         t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 2, bar + 1);
         i = iBarShift(Symbol(), 0, t);
      }

      double v = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 1, i);
      
      if (v == EMPTY_VALUE)
      {
         t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 2, bar + 1);
         i = iBarShift(Symbol(), 0, t);
         v = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 1, i);
      }
      
      peak = v;
      peakBar = i;
      peakTime = t;
   }
   else if (dir > 0)
   {
      t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 3, bar);
      i = iBarShift(Symbol(), 0, t);

      if (i == prevBar)
      {
         t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 3, bar + 1);
         i = iBarShift(Symbol(), 0, t);
      }

      v = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 0, i);
      
      if (v == EMPTY_VALUE)
      {
         t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 3, bar + 1);
         i = iBarShift(Symbol(), 0, t);
         v = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 0, i);
      }
      
      peak = v;
      peakBar = i;
      peakTime = t;
   }
   else 
   {
      return (false);
   }
   
   return (true);
}

int start()
{
   if (LastTime == Time[0]) return (0);
   LastTime = Time[0];
   
   double dir = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 4, 1);
   double rdir = -dir;

   if (dir == EMPTY_VALUE) return (0);
   
   double v1, v2, v3, v4, v5;
   int    i1, i2, i3, i4, i5;
   datetime t1, t2, t3, t4, t5;
   
   GetValue(dir, 1, 0, v1, i1, t1);
   GetValue(rdir, i1, 0, v2, i2, t2);
   GetValue(dir, i2, i1, v3, i3, t3);
   GetValue(rdir, i3, i2, v4, i4, t4);
   GetValue(dir, i4, i3, v5, i5, t5);

   SetPt("1", v1, t1);
   SetPt("2", v2, t2);
   SetPt("3", v3, t3);
   SetPt("4", v4, t4);
   SetPt("5", v5, t5);
   
   Print(v1, "   ", v2, "  ", v3, "  ", v4, " ", v5, " ", i1, "  ", i2, "  ", i3, " ", i4, " ", i5);

   return(0);
}

void SetPt(string name, double price, datetime time)
{
   ObjectCreate(name, OBJ_ARROW, 0, time, price);
   ObjectSet(name, OBJPROP_ARROWCODE, 108);
   ObjectSet(name, OBJPROP_PRICE1, price);
   ObjectSet(name, OBJPROP_TIME1, time);
}

Dieses Beispiel ist ein Indikator, der (einmal pro Bar) die ersten fünf Spitzen (einschließlich der sich aktuell bildende) markiert.

Achtung! Dieser Code kann zu Fehler führen, wenn der Zero-Bar-Modus ist aktiviert


Zero-Bar-Mode:

Bestimmt durch die DrawZeroBar Variable. Standardmäßig deaktiviert.

Es wird nicht empfohlen, diese Option zu verwenden, vor allem bei einer Verwendung durch einen EA


Genießen Sie es ;) . Zögern Sie nicht, Fragen zu stellen.

Bitte melden Sie mir jeden Fehler, den Sie finden. Danke.

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

FiboPivotCandleBar FiboPivotCandleBar

Dieser Indikator ist eine Kombination mehrerer Indikatoren: Fibonacci, Pivot Point, ZigZag und MACD, die dieser Indikator vereint.

MACD und Volumina MACD und Volumina

Gewöhnlicher MACD, der auch das Volumen anzeigt.

ALGLIB - Numerische Analyse Bibliothek ALGLIB - Numerische Analyse Bibliothek

ALGLIB Math. Funktionen Bibliothek (v. 3.5.0) portiert auf MQL4.

Skype Control Library Skype Control Library

Bibliothek für Skype.