Problem mit ZigZag-Indikator - Seite 3

 
FMIC:


Wie bereits in einem früheren Beitrag erläutert, kann man nicht nur den Hoch- und Tiefpuffer verwenden, um ZigZag-Punkte zu erhalten, da sie auch neu gestrichene Punkte enthalten (bei mir sind es cyanfarbene und rosa Punkte). 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 High und Low Puffer mit dem ersten Puffer vergleichen, der sowohl Low als auch Highs enthält, um NUR ZigZag Punkte 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-Point oder einen Low-Point handelt (z. B. wenn sowohl Puffer 1 als auch Puffer 3 den gleichen Wert haben, handelt es sich um einen Low-ZigZag-Punkt, und wenn sowohl Puffer 1 als auch Puffer 2 den gleichen Wert haben, handelt es sich um einen High-Point).

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 ).


Hallo FMIC,

vielen Dank für deine Erklärung und Hilfe. Es ist mir noch nicht gelungen, die hohen und niedrigen Werte zu ermitteln. Das Problem ist, dass er sich (normalerweise) neu malt und ich die historischen Höchst- und Tiefstwerte nicht finden kann. Ich verwende auch Modus 0 und Modus 1 oder Modus 0 und Modus 2 im ursprünglichen Zickzack-Indikator, aber alle Ergebnisse haben bereits beide Werte. Ich meine, es gibt keine einzelne Linie mit zh (Modus 1) oder zl (Modus 2) mit Werten, aber kein zz (Modus 0). Daher konnte ich diese Methode nicht erfolgreich anwenden.

Außerdem habe ich den Index der iCustom() -Funktion verwendet, aber auch das war nicht erfolgreich. Es scheint sehr einfach zu sein, aber ich habe mehr als 1 Tag daran gearbeitet, konnte aber keine Lösung finden.

Bitte finden Sie meinen Code in der Anlage (Version 5). Für jede Hilfe bin ich sehr dankbar.

Dateien:
 

Ich führe einige weitere Tests und auch visuelle Tests durch. Ich habe sogar die iCustom Index auf 100 Ticks zurück, um zu vermeiden, repainting aber es tut. Das Problem ist, dass, wenn immer ein Aufruf der Zickzack-Indikator ist es auf die aktuellen Daten suchen; 100 Tick vor, 10 Ticks vor oder 1000 Ticks vor hat keinen Einfluss auf sie. Es ist also besser, den Index als 1 zu verwenden.

Mein Verständnis ist, dass ich eine weitere Schleife durchführen muss, die die Arrays überprüft und die Hochs und Tiefs korrigiert, indem sie die Daten eliminiert; wenn es z. B. zwei aufeinanderfolgende Hochs gibt, wird das niedrigste eliminiert und das Gegenteil für Tiefs getan. Meine anfängliche Überlegung ist, im Array wieder 100 Tage zurückzugehen und zu prüfen, ob es aufeinanderfolgende Höchststände gibt. Ich habe den Algorithmus noch nicht abgeschlossen.

Haben Sie eine bessere Idee? Einschließlich der Verwendung eines völlig anderen Ansatzes zur Ermittlung von Hochs und Tiefs in den historischen Daten?

 
aed71:

Ich führe einige weitere Tests und auch visuelle Tests durch. Ich habe sogar die iCustom Index auf 100 Ticks zurück, um zu vermeiden, repainting aber es tut. Das Problem ist, dass, wenn immer ein Aufruf der Zickzack-Indikator ist es auf die aktuellen Daten suchen; 100 Tick vor, 10 Ticks vor oder 1000 Ticks vor hat keinen Einfluss auf sie. Es ist also besser, den Index als 1 zu verwenden.

Mein Verständnis ist, dass ich eine weitere Schleife durchführen muss, die die Arrays überprüft und die Hochs und Tiefs korrigiert, indem sie die Daten eliminiert; wenn es z. B. zwei aufeinanderfolgende Hochs gibt, wird das niedrigste eliminiert und das Gegenteil für Tiefs getan. Meine anfängliche Überlegung ist, im Array wieder 100 Tage zurückzugehen und zu prüfen, ob es aufeinanderfolgende Höchststände gibt. Ich habe den Algorithmus noch nicht abgeschlossen.

Haben Sie eine bessere Idee? Einschließlich der Verwendung eines völlig anderen Ansatzes zur Ermittlung von Hochs und Tiefs in den historischen Daten?


Hallo aed71,

ich komme gerade von einer Arbeit zurück und es ist Zeit, ins Bett zu gehen. Ich werde mir Ihren Code morgen früh genauer ansehen und Ihnen eine korrekte Lösung anbieten.

Als kurze Anmerkung: Sie müssen nicht 1000 oder 100 Takte zurückblicken, sondern nur genug, um die Parameter"Tiefe" und "Backstep" zu berücksichtigen.

Da Sie nur die Daten sammeln und analysieren, sollten Sie ein Skript in Erwägung ziehen, das die gesamten historischen Daten sofort abarbeitet, anstatt einen EA mit Tick-Intervallen zu verwenden. Auf diese Weise müssen Sie sich nicht um die Neuberechnung kümmern.

Morgen werde ich Ihnen eine ausführlichere Erklärung geben.

Mit freundlichen Grüßen,
FMIC

 

Hallo FMIC,

Seit gestern arbeite ich an dem Algorithmus, wie man die falschen Hochs und Tiefs eliminiert und ich habe die angehängte Version dafür codiert. Es eliminiert irgendwie die falschen Signale, aber es löscht manchmal das ursprüngliche Signal, wo es das NICHT tun sollte.

Das Prinzip hinter dem Code ist:

Wenn es ein Hoch gibt, geht er bis zum letzten bekannten Tief zurück und prüft Schritt für Schritt, ob das aktuelle Hoch höher ist als das vorherige, dann löscht er das vorherige Hoch.

Dasselbe gilt für den Low-Teil. Ich habe einige Erklärungen zu dem Code hinzugefügt.

Zumindest habe ich keine gleichzeitigen Hochs und Tiefs mehr :-)

Jetzt muss ich den Fehler finden, der die ursprünglichen Hoch-/Tiefpunkte löscht.

Wenn Sie einen Blick auf meinen Code werfen können, können Sie den Fehler vielleicht in kurzer Zeit verstehen. Ich bin zu sehr konzentriert und kann vielleicht nicht einmal die einfachsten Fehler sehen...

Nochmals vielen Dank für Ihre Hilfe.

Dateien:
 

Guten Morgen "aed71",

ich habe mir Ihre letzte Datei noch nicht angesehen, aber hier ist mein Script (kein Indikator, kein EA), um einen bestimmten Zeitraum zu überprüfen und die ZigZag Highs und Lows in eine CSV-Datei auszugeben.

Hängen Sie das Sk ript einfach an ein Diagramm an, und es wird in Sekunden ausgeführt. Überprüfen Sie dann einfach die CSV-Datei, die im Ordner "MQL4\Files" erstellt wird. Ich habe ein Beispiel auf EURUSD Daily Chart für das Jahr 2013 ausgeführt.

Da es sich um ein Skript handelt, müssen Sie sich keine Gedanken über Repaints machen.

Mit freundlichen Grüßen,
FMIC

PS! Ich werde Ihre letzte Datei als nächstes überprüfen und Ihnen meine Kommentare geben.

EDIT: Ich habe mir Ihren letzten Code angesehen und er ist völlig durcheinander. Schauen Sie sich einfach meinen Code an und Sie werden sehen, dass das Testen auf Highs und Lows viel einfacher ist. Sie brauchen dieses ganze Durcheinander in Ihrem Code nicht. Hier ist ein Auszug (vollständiger Code in der ZIP-Datei):

if( dblZigZagPoint > 0 )  // Test if a ZigZag Point is found
{
   intZZCount++;  // Increment ZigZag Counter

   // Test if it is a High, Low or Unknown
   string strZZType = strZZUnknown;
   if( dblZigZagHigh > 0 ) strZZType = strZZHigh;
   else if( dblZigZagLow > 0 ) strZZType = strZZLow;
               
   // Output the ZigZag Point Data to CSV File
   FileWrite( intCSVFileHandle, intZZCount, strZZType, DoubleToString( dblZigZagPoint, intDigits ), Time[ intBarShift ] );
}
Dateien:
 
FMIC:

Guten Morgen "aed71",

ich habe mir Ihre letzte Datei noch nicht angesehen, aber hier ist mein Script (kein Indikator, kein EA), um einen bestimmten Zeitraum zu überprüfen und die ZigZag Highs und Lows in eine CSV-Datei auszugeben.

Hängen Sie das Sk ript einfach an einen Chart an und es läuft in Sekundenschnelle. Überprüfen Sie dann einfach die CSV-Datei, die im Ordner "MQL4\Files" erstellt wird. Ich habe ein Beispiel auf EURUSD Daily Chart für das Jahr 2013 ausgeführt.

Da es sich um ein Skript handelt, müssen Sie sich keine Gedanken über Repaints machen.

Mit freundlichen Grüßen,
FMIC

PS! Ich werde Ihre letzte Datei als nächstes überprüfen und Ihnen meine Kommentare geben.

EDIT: Ich habe mir deinen letzten Code angesehen und er ist völlig durcheinander.
Schauen Sie sich einfach meinen Code an und Sie werden sehen, dass die Prüfung auf Hochs und Tiefs viel einfacher ist.

Es gibtkeinen Grund für dieses ganze Durcheinander in Ihrem Code.


Tolle Arbeit, funktionierte reibungslos, sollte in den Code base.... aufgenommen werden. Ich danke Ihnen.

Ich habe zwei Fragen, wenn es Ihnen nichts ausmacht:

1-) Meine Daten, die ich heruntergeladen habe und die im Diagramm zu sehen sind, waren 4-stellig, aber die Ausgabe des Skripts war 5-stellig. Wie kann das möglich sein? Ich meine 5 Ziffern ohne Null am Ende.

Anzahl,Typ,Preis,DatumZeit

1,H,1.34962,2013.11.04 00:30:00

2,L,1.34861,2013.11.04 02:15:00

3,H,1.35015,2013.11.04 03:00:00

4,L,1.34417,2013.11.04 05:15:00

5,H,1.35127,2013.11.04 11:15:00

6,L,1.34910,2013.11.04 15:45:00

7,H,1.35236,2013.11.04 18:15:00

8,L,1.35045,2013.11.04 19:45:00

9,H,1.35203,2013.11.04 22:45:00

2-) Das Skript ist sehr nützlich, allerdings war dies der erste Teil meines Projekts, in dem ich die historischen Daten analysiere. Danach hatte ich vor, den Code in meinen Experten einzubinden und irgendwie die Korrelation zwischen der jüngeren Geschichte zu finden und dementsprechend über die weitere Optimierung der aktuellen Variablen zu entscheiden. Mit anderen Worten: Ich muss etwas Ähnliches auch im Experten ausführen. Wie wäre es also möglich, es in den Experten zu konvertieren?

Nochmals vielen Dank für Ihre Hilfe :-)


 
aed71:


Gute Arbeit, funktionierte reibungslos, sollte in den Code aufgenommen werden base.... Ich danke Ihnen.

Ich habe zwei Fragen, wenn es Ihnen nichts ausmacht:

1-) Meine Daten, die ich heruntergeladen habe und die ich im Diagramm sehe, waren 4-stellig, aber die Ausgabe des Skripts war 5-stellig. Wie kann das möglich sein? Ich meine 5 Ziffern ohne Null am Ende.

2-) Das Skript ist sehr nützlich, allerdings war dies der erste Teil meines Projekts, in dem ich die historischen Daten analysiere. Danach hatte ich vor, den Code in meinen Experten einzubinden und irgendwie die Korrelation zwischen der jüngeren Vergangenheit zu finden und dementsprechend eine weitere Optimierung der aktuellen Variablen zu beschließen. Mit anderen Worten: Ich muss etwas Ähnliches auch im Experten ausführen. Wie wäre es also möglich, es in den Experten zu konvertieren?

Nochmals vielen Dank für Ihre Hilfe :-)

  1. Wenn Sie einen 5-stelligen Broker haben, dann haben die Daten die 5 Ziffern. Das Problem bei vielen Indikatoren ist, dass sie die Funktion "IndicatorDigits()" nicht verwenden, so dass am Ende nur die Standardanzahl von Ziffern angezeigt wird, unabhängig davon, was der Broker bereitstellt. Wenn Sie sich meinen ZigZagZug-Code ansehen, werden Sie sehen, dass ich dies ausdrücklich eingestellt habe, um das Problem zu beheben, was MetaQuotes in ihrem eigenen Code nicht getan hat:

    // Set Number of Digits (Precision)
       IndicatorDigits( Digits );

  2. Was die Verwendung des Codes in einem Experten anbelangt, so hängt dies von vielen Dingen ab, z. B. von der Strategie und davon, wie sich die Repaints auf sie auswirken werden. Einige Strategien werden von den Repaints nicht beeinträchtigt, andere reagieren sehr empfindlich darauf. Bei einer "unbekannten" Strategie kann ich nicht viel Ratschläge geben. In diesem Fall müssten Sie sie genau beschreiben. Aber denken Sie daran, dass Sie nicht 1000 Bars zurückblicken müssen. Wenn Sie lernen, wie ZigZag funktioniert und wie es Hoch- und Tiefausbrüche nutzt und wie es zurückschaut, müssen Sie manchmal nur eine Strecke von (Tiefe + Backstep) Takten zurückschauen - je nach Strategie könnte es etwas mehr oder sogar weniger sein, aber niemals die 1000 oder 100, die Sie verwenden.

 

Danke für die Informationen über Ziffern. Es ist ein Kopfschmerz für mich, ich brauche zu lesen und zu verstehen, die Details davon...

Lassen Sie mich näher erläutern, was ich zu erreichen versuche. Ich habe einen recht profitablen Experten (derzeit), den ich in den letzten 10 Jahren getestet habe. Allerdings verhält sich der Experte nicht in jeder Bedingung gut, nicht sehr schlecht, aber in einigen Jahren/Monaten nicht vielversprechend. Er hat einige voroptimierte Variablen, die sich auf seine Rentabilität auswirken. Ich bin bereit, eine Korrelation zwischen der jüngeren Vergangenheit und heute zu finden, um die Variablen selbst zu optimieren.

Ich muss also die Höchst- und Tiefstwerte in den historischen Daten finden, um die Perioden und die Amplitude der historischen Daten zu berechnen. Ich werde versuchen, manuell eine Korrelation zwischen den jüngsten historischen Daten und den aktuellen profitablen Variablen des Experten zu finden. Wenn ich sie irgendwie finden kann, werde ich einen ähnlichen Code zu meinem Experten hinzufügen, der jeden Tag die statistischen Daten der letzten Woche überprüft und anhand der korrelierten Konstanten die Expertenvariablen selbst optimiert.

Das ist also die Strategie. Ich habe mich mit vielen anderen Methoden zur Analyse historischer Daten befasst, darunter Fourier, Hurts Cycles, Goertzel, MESA usw., aber ich bin zu dem Schluss gekommen, dass eine Methode, die über die vorhandenen Daten läuft, viel besser ist.

Ich brauche also keine Echtzeit-Hoch-Tief-Analyse, bei 15 Mio. Daten bin ich bereit, einen halben Tag Daten zu verlieren (fast 45 Ticks). Höchstwahrscheinlich werde ich die letzten 5 Tage betrachten, und 4,5 Tage Veränderung sind meiner Meinung nach genug, um die neuen optimierten Werte zu finden.

Was meinen Code betrifft, so denke ich, dass das Problem darin besteht, dass er beim Überprüfen der vorherigen Höchststände zu weit nach hinten geht und beim niedrigsten lokalen Wert aufhören sollte. Ich arbeite noch daran, da ich den Expertenteil des Tools benötige.

 
aed71:

Danke für die Informationen über Ziffern. Es ist ein Kopfschmerz für mich, ich brauche zu lesen und zu verstehen, die Details davon...

Lassen Sie mich näher erläutern, was ich zu erreichen versuche. Ich habe einen recht profitablen Experten (derzeit), den ich in den letzten 10 Jahren getestet habe. Allerdings verhält sich der Experte nicht in jeder Bedingung gut, nicht sehr schlecht, aber in einigen Jahren/Monaten nicht vielversprechend. Er hat einige voroptimierte Variablen, die sich auf seine Rentabilität auswirken. Ich bin bereit, eine Korrelation zwischen der jüngeren Vergangenheit und heute zu finden, um die Variablen selbst zu optimieren.

Ich muss also die Höchst- und Tiefstwerte in den historischen Daten finden, um die Perioden und die Amplitude der historischen Daten zu berechnen. Ich werde versuchen, manuell eine Korrelation zwischen den jüngsten historischen Daten und den aktuellen profitablen Variablen des Experten zu finden. Wenn ich sie irgendwie finden kann, werde ich einen ähnlichen Code zu meinem Experten hinzufügen, der jeden Tag die statistischen Daten der letzten Woche überprüft und entsprechend der korrelierten Konstanten die Expertenvariablen selbst optimiert.

Das ist also die Strategie. Ich habe mich mit vielen anderen Methoden zur Analyse historischer Daten befasst, darunter Fourier, Hurts Cycles, Goertzel, MESA usw., aber ich bin zu dem Schluss gekommen, dass eine Methode, die über die vorhandenen Daten läuft, viel besser ist.

Ich brauche also keine Echtzeit-Hoch-Tief-Analyse, bei 15 Mio. Daten bin ich bereit, einen halben Tag Daten zu verlieren (fast 45 Ticks). Höchstwahrscheinlich werde ich die letzten 5 Tage betrachten, und 4,5 Tage Veränderung sind meiner Meinung nach genug, um die neuen optimierten Werte zu finden.

Was meinen Code betrifft, so denke ich, dass das Problem darin besteht, dass er beim Überprüfen der vorherigen Höchststände zu weit nach hinten geht und beim niedrigsten lokalen Wert aufhören sollte. Ich arbeite noch daran, da ich den Expertenteil des Tools benötige.


Was Sie beschrieben haben, hilft nicht wirklich, die Natur des EA zu verstehen, um Ihnen Ratschläge zu geben.

Wenn Sie möchten, schicken Sie mir eine private Nachricht mit den Details und ich kann mir Ihren EA genau ansehen und den notwendigen Code dafür vorschlagen.

Alternativ kann ich nur vorschlagen, dass Sie versuchen, es so gut wie möglich zu implementieren, und wenn Sie ein bestimmtes Problem haben, das Sie lösen müssen, kommen Sie zurück zum Forum und posten Sie eine Anfrage speziell dafür und sehen, ob Benutzer helfen können.

 

OK Danke FMIC.

In der Tat war mein Problem über den Experten, die ich im Forum geteilt. Ihr Skript funktioniert gut vielen Dank dafür, aber im Grunde brauche ich es in Form von Experten, die in der Nähe von Echtzeit-Modus als auch arbeiten kann.