Problem mit ZigZag-Indikator - Seite 2

 
Ich habe vergessen, die Indikatorwerte zu markieren, das Minimum stimmt überein, aber das Maximum stimmt nicht überein, wie ich im zweiten Diagramm zu zeigen versuchte...
 
aed71:

Das folgende Diagramm zeigt den Minimalwert (Cursorpunkt, Datenfenster und Ausgabe sind identisch)

Das folgende Diagramm zeigt 6 Ticks später den höchsten Wert des Diagramms. Das Datenfenster und die Cursorpunkte sind identisch, aber die Ausgabe ist nicht identisch und gibt sowohl einen niedrigen als auch einen hohen Wert aus.

2.

Ich habe überprüft, dass iCustom() den Indikator korrekt lädt. Der niedrige Wert ist derselbe, aber der hohe Wert ist es nicht. Könnte es mit dem ZigZag-Indikator zusammenhängen?

Was ich falsch mache, kann ich nicht verstehen.


Ich sehe nur einen Wert, der von Ihrem ZigZag-Indikator kommt

Dieser Wert, was ist das?

 
aed71:

Das folgende Diagramm zeigt den Minimalwert (Cursorpunkt, Datenfenster und Ausgabe sind identisch)

Das folgende Diagramm zeigt 6 Ticks später den höchsten Wert des Diagramms. Das Datenfenster und die Cursorpunkte sind identisch, aber die Ausgabe ist nicht identisch und gibt sowohl einen niedrigen als auch einen hohen Wert aus.

2.

Ich habe überprüft, dass iCustom() den Indikator korrekt lädt. Der niedrige Wert ist derselbe, aber der hohe Wert ist es nicht. Könnte es mit dem ZigZag-Indikator zusammenhängen?

Was ich falsch mache, kann ich nicht verstehen.

Sie verwenden den ZigZag in Ihrem iCustom Beispiel falsch. Der Standard-ZigZag von MetQuotes hat DREI (nicht zwei) Puffer (Modi oder Linienindex in iCustom)

  1. Modus = 0: Hält sowohl den oberen als auch den unteren ZigZag-Punkt.
  2. Modus = 1: Hohe Punkte, aber nicht unbedingt nur ZigZag-Punkte (da er auch Wiederholungspunkte enthält).
  3. Modus = 2: Low Points, aber nicht unbedingt nur ZigZag-Punkte (da auch Repaint-Punkte enthalten sind).

Sie müssen den ersten Puffer (Modus 0) mit den anderen beiden Puffern vergleichen, um zu entscheiden, ob es sich um einen High Point oder einen Low Point handelt (wenn z. B. Puffer 1 und Puffer 3 denselben Wert haben, handelt es sich um einen Low ZigZag-Punkt, und wenn Puffer 1 und Puffer 2 denselben Wert haben, handelt es sich um einen High Point).

Um besser zu verstehen, wie ein ZigZag funktioniert und wie er sich neu färbt, empfehle ich, mit meinem ZigZagZug-Indikator herumzuspielen. Verwenden Sie in Ihrem Code jedoch den MetaQuotes ZigZag, da er schneller ist. Meine Version verarbeitet aufgrund der zusätzlichen Funktionen mehr Daten und ist daher langsamer.

PS! Wenn Puffer 1 (Modus = 0) einen Wert von 0,0 hat, die anderen Puffer aber Werte ungleich Null haben, dann handelt es sich um ältere Repaint-Punkte und NICHT um ZigZag-Punkte.

In Ihrem Code verwenden Sie den Mode 0 Puffer als Low und den Mode 1 Puffer als High. Das ist völlig falsch.

 
FMIC:

Sie verwenden den ZigZag in Ihrem iCustom Beispiel falsch. Der Standard-ZigZag von MetQuotes hat DREI (nicht zwei) Puffer (Modi oder Zeilenindex in iCustom)

  1. Modus = 0: Hält sowohl den oberen als auch den unteren ZigZag-Punkt.
  2. Modus = 1: Hohe Punkte, aber nicht unbedingt nur ZigZag-Punkte (da er auch Wiederholungspunkte enthält).
  3. Modus = 2: Low Points, aber nicht unbedingt nur ZigZag-Punkte (da auch Repaint-Punkte enthalten sind).

Sie müssen den ersten Puffer (Modus 0) mit den anderen beiden Puffern vergleichen, um zu entscheiden, ob es sich um einen High Point oder einen Low Point handelt (wenn z. B. Puffer 1 und Puffer 3 denselben Wert haben, handelt es sich um einen Low ZigZag-Punkt, und wenn Puffer 1 und Puffer 2 denselben Wert haben, handelt es sich um einen High Point).

Um besser zu verstehen, wie ein ZigZag funktioniert und wie er sich neu färbt, empfehle ich, mit meinem ZigZagZug-Indikator herumzuspielen. Verwenden Sie in Ihrem Code jedoch den MetaQuotes ZigZag, da er schneller ist. Meine Version verarbeitet aufgrund der zusätzlichen Funktionen mehr Daten und ist daher langsamer.

PS! Wenn Puffer 1 (Modus = 0) einen Wert von 0,0 hat, die anderen Puffer aber Werte ungleich Null haben, dann handelt es sich um ältere Repaint-Punkte und NICHT um ZigZag-Punkte.

In Ihrem Code verwenden Sie den Mode 0 Puffer als Low und den Mode 1 Puffer als High. Das ist völlig falsch.


Schauen Sie hier https://www.mql5.com/en/forum/149492/page2#912747 outsidebars ist ein Problem für die alte codierte Zigzag

Die gelbe Linie zeigt einen besseren Weg, wie Zigzag angezeigt werden muss

 
deVries:


Schauen Sie hier https://www.mql5.com/en/forum/149492/page2#912747 outsidebars ist ein Problem für den alten Code Zigzag

Die gelbe Linie zeigt einen besseren Weg, wie der Zickzackkurs angezeigt werden muss.


Außenstehende Balken haben nichts mit dem aktuellen Dilemma von "aed71" zu tun. Seine Verwendung des ZigZag ist einfach falsch.

Bitte weichen Sie nicht von dem aktuellen Problem ab, da Sie die Situation nur verwirren werden.

Außerdem habe ich auch einen Link zu meinem ZigZagZug-Code angegeben, der dieses Problem nicht hat.

 
FMIC:

Sie verwenden den ZigZag in Ihrem iCustom Beispiel falsch. Der Standard-ZigZag von MetQuotes hat DREI (nicht zwei) Puffer (Modi oder Zeilenindex in iCustom)

  1. Modus = 0: Hält sowohl den oberen als auch den unteren ZigZag-Punkt.
  2. Modus = 1: Hohe Punkte, aber nicht unbedingt nur ZigZag-Punkte (da er auch Wiederholungspunkte enthält).
  3. Modus = 2: Low Points, aber nicht unbedingt nur ZigZag-Punkte (da auch Repaint-Punkte enthalten sind).

Sie müssen den ersten Puffer (Modus 0) mit den anderen beiden Puffern vergleichen, um zu entscheiden, ob es sich um einen High Point oder einen Low Point handelt (wenn z. B. Puffer 1 und Puffer 3 denselben Wert haben, handelt es sich um einen Low ZigZag-Punkt, und wenn Puffer 1 und Puffer 2 denselben Wert haben, handelt es sich um einen High Point).

Um besser zu verstehen, wie ein ZigZag funktioniert und wie er sich neu färbt, empfehle ich, mit meinem ZigZagZug-Indikator herumzuspielen. Verwenden Sie in Ihrem Code jedoch den MetaQuotes ZigZag, da er schneller ist. Meine Version verarbeitet aufgrund der zusätzlichen Funktionen mehr Daten und ist daher langsamer.

PS! Wenn Puffer 1 (Modus = 0) einen Wert von 0 hat, die anderen Puffer aber Werte haben, dann handelt es sich um ältere Repaint-Punkte.


Toll, danke für die wichtigen Hinweise! Jetzt habe ich verstanden, warum es nicht funktioniert...

Ich denke, der ursprüngliche Code von Metaquotes ZigZag ist nicht korrekt, da er nur 2 Puffer hat. Also dachte ich, dass einer von ihnen hoch und der andere niedrig sein sollte...

Tatsächlich stimmt auch der Titel nicht überein, wie ich kürzlich gesehen habe. Jemand sollte das überprüfen!

Ich beziehe mich auf den Code hier https://www.mql5.com/en/code/7796

//+------------------------------------------------------------------+
//|                                        Custom Moving Average.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_chart_window
#property indicator_buffers 1
#property  indicator_color1 Red
//---- indicator parameters
extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
//---- indicator buffers
double ExtMapBuffer[];
double ExtMapBuffer2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(2);
//---- drawing settings
   SetIndexStyle(0,DRAW_SECTION);
//---- indicator buffers mapping
   SetIndexBuffer(0,ExtMapBuffer);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexEmptyValue(0,0.0);
//---- indicator short name
   IndicatorShortName("ZigZag("+ExtDepth+","+ExtDeviation+","+ExtBackstep+")");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int    shift, back,lasthighpos,lastlowpos;
   double val,res;
   double curlow,curhigh,lasthigh,lastlow;

   for(shift=Bars-ExtDepth; shift>=0; shift--)
     {
      val=Low[Lowest(NULL,0,MODE_LOW,ExtDepth,shift)];
      if(val==lastlow) val=0.0;
      else 
        { 
         lastlow=val; 
         if((Low[shift]-val)>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer[shift+back];
               if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0; 
              }
           }
        } 
      ExtMapBuffer[shift]=val;
      //--- high
      val=High[Highest(NULL,0,MODE_HIGH,ExtDepth,shift)];
      if(val==lasthigh) val=0.0;
      else 
        {
         lasthigh=val;
         if((val-High[shift])>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer2[shift+back];
               if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0.0; 
              } 
           }
        }
      ExtMapBuffer2[shift]=val;
     }

   // final cutting 
   lasthigh=-1; lasthighpos=-1;
   lastlow=-1;  lastlowpos=-1;

   for(shift=Bars-ExtDepth; shift>=0; shift--)
     {
      curlow=ExtMapBuffer[shift];
      curhigh=ExtMapBuffer2[shift];
      if((curlow==0)&&(curhigh==0)) continue;
      //---
      if(curhigh!=0)
        {
         if(lasthigh>0) 
           {
            if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0;
            else ExtMapBuffer2[shift]=0;
           }
         //---
         if(lasthigh<curhigh || lasthigh<0)
           {
            lasthigh=curhigh;
            lasthighpos=shift;
           }
         lastlow=-1;
        }
      //----
      if(curlow!=0)
        {
         if(lastlow>0)
           {
            if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
            else ExtMapBuffer[shift]=0;
           }
         //---
         if((curlow<lastlow)||(lastlow<0))
           {
            lastlow=curlow;
            lastlowpos=shift;
           } 
         lasthigh=-1;
        }
     }
  
   for(shift=Bars-1; shift>=0; shift--)
     {
      if(shift>=Bars-ExtDepth) ExtMapBuffer[shift]=0.0;
      else
        {
         res=ExtMapBuffer2[shift];
         if(res!=0.0) ExtMapBuffer[shift]=res;
        }
     }
  }
 
aed71:


Super, danke für die wichtigen Hinweise! Jetzt habe ich verstanden, warum es nicht funktioniert...

Ich denke, der ursprüngliche Code von Metaquotes ZigZag ist nicht korrekt, da es nur 2 Puffer hat. Also dachte ich, dass einer von ihnen hoch und der andere niedrig sein sollte...

Tatsächlich stimmt auch der Titel nicht überein, wie ich kürzlich gesehen habe. Jemand sollte das überprüfen!

Ich beziehe mich auf den Code hier https://www.mql5.com/en/code/7796


Benutzen Sie diesen Code nicht! Das ist uralt!

Verwenden Sie den Code, der derzeit durch die LiveUpdates gepusht wird. Verwenden Sie die aktuelle Version 600+ oder zumindest die Version 509.

PS! ACHTUNG! Verwenden Sie außerdem nur "ZigZag" im Namen und nicht "ZigZag.ex4" in der iCustom.

 
FMIC:


Verwenden Sie diesen Code nicht! Das ist uralt!

Verwenden Sie den Code, der derzeit über die LiveUpdates bereitgestellt wird. Verwenden Sie die aktuelle Version 600+ oder zumindest die Version 509.

PS! ACHTUNG! Verwenden Sie außerdem nur "ZigZag" im Namen und nicht "ZigZag.ex4" in der iCustom.


Hallo FMIC,

Vielen Dank für die Tipps. Ich habe ex4 am Ende der Datei hinzugefügt, um nicht zu vergessen, sie zu kompilieren. Leider hat mein neuer Build 610 ZigZag durch den alten ersetzt.

Ich beschloss, Ihre zu verwenden, da Zeit ist kein Problem für mich. Ich habe auch hier einige Probleme, ich wäre dankbar, wenn Sie mir helfen können.

Ich habe den gleichen Code wie oben angegeben verwendet, nur den Dateinamen mit Ihrer Version geändert. Ich verwende die Parameter 6,5,3; das ist der einzige Unterschied zu Ihren Standardeinstellungen.

Was ich konfrontiert einige Probleme:

Erstens lädt der Indikator jedes Mal in jedem Tick, um zh,zl Werte zu lesen. Und am Ende gibt er alle Ladungen wieder frei (was man auf dem Bild nicht sehen kann) und sagt etwas wie "2014.02.22 09:35:09.171 2013.11.01 22:55 Custom indicator ZigZagZug EURUSD,M15: removed". Bitte sehen Sie sich die angehängte Log-Datei an. Verursacht es später irgendwelche Speicherprobleme?

Zweitens ist im Journal der Zähler cnt von cnt8 auf cnt84 gesprungen, was seltsam ist. In den Protokollen springt er nicht. Ich denke, ich sollte die Protokolle als korrekte Werte betrachten.

Der dritte und kritischste Punkt ist, dass er zwei Tiefstwerte gefunden hat, was er nicht sollte. In der Abbildung möchte ich die Höchst- und Tiefstwerte der grauen Zickzacklinien erhalten, aber wenn ich alle Höchst- und Tiefstwerte im Protokoll aufschreibe, sind sie genau dieselben mit den rosa und cyanfarbenen Punkten. Ich brauche jedoch nur die Zickzack-Werte. Ich habe die anderen Puffer überprüft, aber sie brachten nicht die richtigen Werte. Hat jemand einen Vorschlag? Oder sollte ich mit dem klassischen Zickzack gehen (für Build 610?)

Danke!

ZickZackZug

 
aed71:


Hallo FMIC,

Danke für die Tipps. Ich habe ex4 am Ende der Datei hinzugefügt, um nicht zu vergessen, es zu kompilieren. Leider hat mein neuer Build 610 ZigZag durch den alten ersetzt.

Ich beschloss, Ihre zu verwenden, da Zeit ist kein Problem für mich. Ich habe auch hier einige Probleme, ich wäre dankbar, wenn Sie mir helfen können.

Ich habe den gleichen Code wie oben angegeben verwendet, nur den Dateinamen mit Ihrer Version geändert. Ich verwende die Parameter 6,5,3; das ist der einzige Unterschied zu Ihren Standardeinstellungen.

Irgendwelche Vorschläge? Oder sollte ich das klassische Zickzack (für Build 610) verwenden?

Vielen Dank!

Es spricht nichts dagegen, den neuen 610 ZigZag zu verwenden. Ich empfehle Ihnen sogar, diesen zu verwenden, damit er mit zukünftigen Builds kompatibel ist. Verwenden Sie nicht den alten ZigZag oder gar meinen ZigZag.

Mein ZigZagZug-Indikator verwendet zusätzliche Parameter und in einer anderen Reihenfolge und Art, so dass Sie nicht einfach einen ähnlichen iCustom verwenden können, den Sie jetzt verwenden. Er ist völlig anders.

Außerdem verwende ich 7 Puffer in dem Indikator für die zusätzlichen Funktionen. Er soll als visuelles Lernwerkzeug für das Verständnis des ZigZag verwendet werden und nicht wirklich für den Einsatz in einem EA.

PS! Es ist normal, dass ein Indikator während eines Backtests eines EAs mit iCustom mehrmals geladen und entladen wird. Es hängt alles davon ab, wie der EA und der Indikator kodiert sind. Um dies zu verhindern und einen EA schneller zu machen, kodiere ich normalerweise nur den wesentlichen Code in den EA selbst um, um nicht von externen Indikatoren abhängig zu sein, aber das ist ein anderes Thema, das nicht direkt mit Ihrem Fall zu tun hat. Nur eine Anregung für Ihre zukünftigen EAs.

 
aed71:


Hallo FMIC,

... Ich möchte die Höchst- und Tiefstwerte der grauen Zickzacklinien erhalten, aber wenn ich alle Höchst- und Tiefstwerte im Protokoll aufschreibe, sind sie genau die gleichen wie bei Ihren rosa und cyanfarbenen Punkten. Ich brauche aber nur die Zickzack-Werte. ...

Danke!


Wie bereits in einem früheren Beitrag erläutert, können Sie nicht nur den Hoch- und Tiefpuffer verwenden, um ZigZag-Punkte zu erhalten, da diese auch neu gestrichene Punkte enthalten (aqua- und magentafarbene Kreise auf ZigZagZug). Beim Standard-ZigZag ist das auch so, aber man sieht sie einfach nicht. Deshalb zeigt mein Indikator sie an, damit Sie ihn besser verstehen können.

Sie müssen die Hoch- und Tiefpuffer mit dem ersten Puffer vergleichen, der sowohl Hoch- als auch Tiefstwerte enthält, um NUR die Zickzackpunkte herauszufiltern.

ACHTUNG! Sie müssen den ersten Puffer (Modus 0) mit den anderen beiden Puffern vergleichen, um zu entscheiden, ob es sich um einen High-Punkt oder einen Low-Punkt handelt (z. B. wenn sowohl Puffer 1 als auch Puffer 3 denselben Wert haben, handelt es sich um einen Low-ZigZag-Punkt, und wenn sowohl Puffer 1 als auch Puffer 2 denselben Wert haben, handelt es sich um einen High-Punkt).

Wenn Sie möchten, können Sie Ihre Datei an einen Beitrag anhängen, und ich werde sie korrigieren, damit Sie sehen können, wie man sie richtig benutzt ( ATTACH it, don't use SRC so to be long post ).