Problem mit ZigZag-Indikator - Seite 4

 
aed71:

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 können.

Ihre ursprünglichen Fragen in diesem Thread waren:

  1. Wie greife ich richtig auf die Daten des ZigZag-Indikators zu, indem ich die Funktion "iCustom" verwende?
  2. Wie sammelt und verarbeitet man die ZigZag-Hoch- und Tiefpunkte für die statistische Analyse?

Mein Skript liefert Ihnen Beispielcode und das Wissen, um diese beiden Fragen zu beantworten, so dass Sie dieses Wissen nun auf andere Anwendungen anwenden können, z. B. auf einen EA, den Sie entwickeln möchten. Alles, was Sie tun müssen, ist, meinen Code für die Verwendung von iCustom() und das Testen der ZigZag-Hoch- und Tiefpunkte zu verwenden und ihn auf Ihren EA-Code anzuwenden.

Die andere von Ihnen erwähnte Frage, wie Sie die ZigZag-Daten in einem EA verwenden können, der speziell auf die Bedürfnisse der Optimierung einer Strategie zugeschnitten ist, die Sie bereits in einem anderen EA einsetzen, wurde hier in diesem Thread jedoch nicht hinreichend ausführlich dargelegt oder beschrieben. Ich kann Ihnen also im Grunde keinen Rat geben oder helfen, weil ich nicht weiß, was Sie brauchen.

Wenn Sie den Artikel zu meinem ZigZagZug-Indikator in der Codebase lesen, werden Sie sehen, dass die Verwendung des ZigZag in Strategien und EAs wegen der ständigen Neuzeichnung nicht einfach ist und ein sorgfältiges Verständnis seiner Funktionsweise und seiner möglichen Verwendung in verschiedenen Strategien und EAs erfordert.

Mit anderen Worten, die Verbindung zwischen ZigZag-Daten und einer EA-Strategie ist komplex und muss gut definiert werden. Ohne etwas über Ihre derzeitige Strategie zu wissen oder darüber, wie sie optimiert werden soll, kann ich Ihnen daher keine weitere Hilfe oder Beratung anbieten.

Da es verständlich ist, dass Sie sich nicht öffentlich äußern möchten, habe ich Ihnen sogar angeboten, dies unter vier Augen und ohne Kosten zu tun. Ich bin Softwareentwickler und berechne normalerweise Gebühren für diese Dienstleistungen.

Abgesehen von dem, was ich Ihnen bereits angeboten habe, kann ich nicht mehr tun oder Ihnen weitere Ratschläge geben, ohne die Art des Problems zu verstehen, das Sie lösen wollen.

 

Hallo!

ich habe es geschafft, meinen Code zu korrigieren. Es war ein Fehler in der Logik der Schleifen, jetzt funktioniert es gut, soweit ich es getestet habe.

Diejenigen, die interessiert sind, können es verwenden. Es ist für die Verwendung als Experte gedacht und verwendet den metaquotes Standard ZigZag Indikator.

Was es tut, findet im Grunde die echten Hoch- und Tiefpunkte im Zigzag-Indikator. Es kann verwendet werden, um Hoch- und Tiefpunkte in historischen Daten zu finden, auch für Perioden- und Amplitudenanalysen.

Es ist nicht in Echtzeit! Er geht zurück zu den letzten Hoch- und Tiefstwerten, so dass er je nach der letzten Trendlänge zurückgehen und die Werte korrigieren könnte. Verwenden Sie es nicht vor einem schnellen Test im Strategietester.

FMIC, vielen Dank für Ihre Bemühungen und Hilfe.

Dateien:
 

Hallo aed71,

Es gibt noch ein paar Logikfehler in Ihrem Code.

  1. Ihre so genannte "Tickschleife" ist in Wirklichkeit eine "New Bar Condition", da Sie die "Time[0]" auf eine Zeitänderung testen, um einen neuen Balken zu erkennen. Ich schlage vor, den Kommentar zu ändern, damit der Code nicht falsch dargestellt wird.
  2. Sie weisen dem Array Werte zu, bevor Sie die Bedingungen testen, und dann testen Sie bestimmte Variablen mehrmals, ohne sie wieder löschen zu müssen. Das verlangsamt nur Ihren Code und macht es außerdem schwierig, der Logik zu folgen.
  3. Die Art und Weise, wie Sie die Wiederholungspunkte finden, ist falsch und überhaupt nicht robust. Du solltest wirklich studieren, wie der ZigZag funktioniert, um die Wiederholungspunkte richtig zu finden. Lesen Sie seinen Code oder den von ZigZagZug (je nachdem, was für Sie leichter zu verstehen ist), um seine Logik zu verstehen.
  4. Du speicherst unnötigerweise Nullwerte in dem Array. Warum wird der Zähler ständig erhöht und dem Array hinzugefügt, auch wenn kein ZigZag-Punkt verfügbar ist? Sie verschwenden nur wertvolle Ressourcen (RAM und CPU-Zyklen) ohne Notwendigkeit. Das verlangsamt die Ausführung Ihres Codes. Verwenden Sie lieber dynamisch wachsende Arrays als statische, da Sie eine bestimmte Größenanforderung nicht im Voraus garantieren können.
  5. Um die Daten anschließend zu analysieren, z. B. Wellenperioden oder Frequenzen, müssen Sie auch den Zeitindex und/oder den Bar-Shift-Index im Auge behalten.

Mit freundlichen Grüßen,
FMIC

 
FMIC:

Hallo aed71,

Es gibt noch ein paar Logikfehler in Ihrem Code.

  1. Ihre so genannte "Tickschleife" ist in Wirklichkeit eine "New Bar Condition", da Sie die "Time[0]" auf eine Zeitänderung testen, um einen neuen Balken zu erkennen. Ich schlage vor, den Kommentar zu ändern, damit der Code nicht falsch dargestellt wird.
  2. Sie weisen dem Array Werte zu, bevor Sie die Bedingungen testen, und dann testen Sie bestimmte Variablen mehrmals, ohne sie wieder löschen zu müssen. Das verlangsamt nur Ihren Code und macht es außerdem schwierig, der Logik zu folgen.
  3. Die Art und Weise, wie Sie die Wiederholungspunkte finden, ist falsch und überhaupt nicht robust. Du solltest wirklich studieren, wie der ZigZag funktioniert, um die Wiederholungspunkte richtig zu finden. Lesen Sie seinen Code oder den von ZigZagZug (je nachdem, was für Sie leichter zu verstehen ist), um seine Logik zu verstehen.
  4. Du speicherst unnötigerweise Nullwerte in dem Array. Warum wird der Zähler ständig erhöht und dem Array hinzugefügt, auch wenn kein ZigZag-Punkt verfügbar ist? Sie verschwenden nur wertvolle Ressourcen (RAM und CPU-Zyklen) ohne Notwendigkeit. Das verlangsamt die Ausführung Ihres Codes. Verwenden Sie lieber dynamisch wachsende Arrays als statische, da Sie eine bestimmte Größenanforderung nicht im Voraus garantieren können.
  5. Um die Daten anschließend zu analysieren, z. B. Wellenperioden oder Frequenzen, müssen Sie auch den Zeitindex und/oder den Bar-Shift-Index im Auge behalten.

Mit freundlichen Grüßen,
FMIC

Nochmals vielen Dank für Ihre Kommentare;

Ich bin kein guter Programmierer, so dass der Code selbst vielleicht nicht perfekt ist :-) Lassen Sie mich jedoch versuchen, meine Logik zu erklären;

1-) Der Kommentarteil könnte in "jeder neue Takt" geändert werden...

2-) 4-) 5-) Die Logik der Verwendung großer Arrays besteht darin, dass ich nach einem neuen Prozess die nullwertigen Balken zwischen den Hochs oder zwischen Hoch und Tief zählen werde, um die Periode, Amplitude usw. zu finden. Ich muss also das Array initialisieren, bevor ich es verwende, und ich muss mich nicht mit dem Zeitindex usw. befassen. Nur mehr Puffer, was für mein Projekt derzeit kein großes Problem darstellt.

3-) Ich habe den Zickzack- und Zickzack-Zug mehrmals verfolgt. Im Zickzack-Zug hat man zwar echte Hochs und Tiefs am Ende, aber wenn man diese Werte in ein Array einträgt, sieht man, dass es dazwischen Tiefs oder Hochs gibt. Sie lassen sich nicht vermeiden, egal ob Sie die Kombination aus Modus0 und Modus1/Modus2 verwenden. Es gibt immer Zwischentiefs und -hochs. Im Zickzackzug kann man diese Punkte deutlich sehen. Außerdem sehe ich, dass es Fälle gibt, in denen mode0 Null ist, aber mode1 oder mode2 größer als Null sind, was falsche Punkte sind. Daher habe ich beschlossen, zusätzlichen Code einzufügen, um diese Punkte zu vermeiden.

Wie ich bereits erwähnt habe, ist dies vielleicht nicht der beste Code, um Zickzackpunkte zu finden, aber der Code selbst funktioniert in meinen Tests korrekt. Ich habe mehrere Male getestet. Ich empfehle immer, dass diejenigen, die ihn verwenden wollen, ihn vorher testen sollten.

Haben Sie ihn getestet? Gibt er nicht die richtigen Punkte an. Wenn Sie sagen, er sei nicht robust oder fehlerhaft, nehme ich an, dass Ihre Tests fehlgeschlagen sind, oder?

Danke!

 
aed71:

Nochmals vielen Dank für eure Kommentare;

Ich bin kein guter Programmierer, so dass der Code selbst vielleicht nicht perfekt ist :-) Lassen Sie mich jedoch versuchen, meine Logik zu erklären;

1-) Der Kommentarteil könnte in "jeder neue Takt" geändert werden...

2-) 4-) 5-) Die Logik der Verwendung großer Arrays besteht darin, dass ich nach einem neuen Prozess die nullwertigen Balken zwischen den Hochs oder zwischen Hoch und Tief zählen werde, um die Periode, Amplitude usw. zu finden. Ich muss also das Array initialisieren, bevor ich es verwende, und ich muss mich nicht mit dem Zeitindex usw. befassen. Nur mehr Puffer, was für mein Projekt derzeit kein großes Problem darstellt.

3-) Ich habe den Zickzack- und Zickzack-Zug mehrmals verfolgt. Im Zickzack-Zug hat man zwar echte Hochs und Tiefs am Ende, aber wenn man diese Werte in ein Array einträgt, sieht man, dass es dazwischen Tiefs oder Hochs gibt. Man kann sie nicht vermeiden, egal ob man die Kombination aus Modus0 und Modus1/Modus2 verwendet. Es gibt immer Zwischentiefs und -hochs. Im Zickzackzug kann man diese Punkte deutlich sehen. Außerdem sehe ich, dass es Fälle gibt, in denen mode0 Null ist, aber mode1 oder mode2 größer als Null sind, was falsche Punkte sind. Daher habe ich beschlossen, zusätzlichen Code einzufügen, um diese Punkte zu vermeiden.

Wie ich bereits erwähnt habe, ist dies vielleicht nicht der beste Code, um Zickzackpunkte zu finden, aber der Code selbst funktioniert in meinen Tests korrekt. Ich habe mehrere Male getestet. Ich empfehle immer, dass diejenigen, die ihn verwenden wollen, ihn vorher testen sollten.

Haben Sie ihn getestet? Gibt er nicht die richtigen Punkte an. Wenn Sie sagen, er sei nicht robust oder fehlerhaft, nehme ich an, dass Ihre Tests fehlgeschlagen sind, oder?

Danke!


Sie verstehen den Punkt nicht! Der Code, den ich Ihnen zur Verfügung gestellt habe, zeigt Ihnen, wie Sie die High/Low ZigZag-Punkte richtig identifizieren können; dennoch entscheiden Sie sich dafür, ihn zu ignorieren und es auf Ihre eigene Art und Weise zu tun, was den Code schwieriger zu verstehen und langsamer macht sowie mehr Ressourcen verbraucht, als nötig ist. Warum?
 
Fernando Carreiro #:

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.

Du wirst nicht glauben, wie sehr mir das geholfen hat, vielen Dank