Diskussion zum Artikel "Horizontale Diagramm auf den Charts des MеtaTrader 5"

 

Neuer Artikel Horizontale Diagramm auf den Charts des MеtaTrader 5 :

Horizontale Diagramme sind in den Terminalcharts nicht üblich, können aber dennoch für eine Reihe von Aufgaben nützlich sein, z.B. bei der Entwicklung von Indikatoren, die Volumen- oder Preisverteilung für einen bestimmten Zeitraum anzeigen, bei der Erstellung verschiedener Versionen der Markttiefe usw. Der Artikel betrachtet die Erstellung und Verwaltung horizontaler Diagramme als Arrays von grafischen Primitiven.

  1. Es kann mehrere Diagramme geben (dies ist in den meisten Fällen der Fall).
  2. Die meisten Diagramme, die uns interessieren, bestehen aus Balken.
  3. Die Diagrammbalken sind horizontal angeordnet.

Lassen Sie uns an einem bekannten Beispiel sehen, wie solche Diagramme aussehen könnten:



Unten ist ein weiteres Beispiel. Gleiche Diagramme gezeichnet mit grafischen Primitiven:


In diesem Fall ist dies der Indikator, der die Verteilung der Tick-Volumina eines Tages anzeigt. Dieses Beispiel zeigt ganz deutlich, welche Aufgaben der Entwickler zu lösen hat:

  • Erstellen mehrere grafischer Objekte, Zuweisen der eindeutigen Namen und Platzieren auf dem Diagramm.
  • Skalieren und Verschieben der Objekte nach Bedarf.
  • Entfernen aus der Grafik, wenn die Arbeit des Indikators beendet ist.

Nochmals, wir sollten beachten, dass es mehrere Diagramme gibt, die es uns weiterhin ermöglichen, über eine Reihe von Diagrammen zu sprechen.

Nachfolgend ein letztes Beispiel:

Autor: Andrei Novichkov

 

Warum wurde die Include-Datei in das Verzeichnis mit den Indikatoren und nicht in den Include-Ordner gelegt?

#include "HDiagsE.mqh"

und nicht im Ordner "Include"?


Beim Herunterladen von der Website wird die Include-Datei im Include-Ordner geöffnet - ich musste die Zeile im Indikator von

#include "HDiagsE.mqh"

durch ersetzen.

#include <HDiagsE.mqh>
 
Vladimir Karputov:

Damit sich Anfänger nicht mit Verzeichnissen herumschlagen müssen, sondern einfach alle Dateien in den Ordner mit dem Indikator werfen. Wie Sie sehen können, bietet das Archiv keine Struktur zum Entpacken von Ordnern.

 
Alexey Kozitsyn:

Damit sich Anfänger nicht mit Verzeichnissen herumschlagen müssen, sondern einfach alle Dateien in den Ordner mit dem Indikator werfen. Wie Sie sehen können, bietet das Archiv keine Struktur zum Entpacken von Ordnern.

So werden Anfänger daran hängenbleiben. Nach und nach: Klick auf die eingebundene Datei - sie wird heruntergeladen und unten im Browser angezeigt - Klick auf die heruntergeladene Datei - die Datei wird in MetaEditor geöffnet (und MetaEditor hat die eingebundene Datei bereits in das richtige Include-Verzeichnis gelegt).

 
Vladimir Karputov:

Das ist genau die Art und Weise, wie Neulinge an die Sache herangeführt werden. Nach und nach: Klick auf die eingebundene Datei - sie wird heruntergeladen und unten im Browser angezeigt - Klick auf die heruntergeladene Datei - die Datei wird in MetaEditor geöffnet (und MetaEditor hat die eingebundene Datei bereits im richtigen Include-Verzeichnis abgelegt).

Glauben Sie wirklich, dass die Art und Weise, wie Sie herunterladen, für alle anderen gilt? Ich zum Beispiel habe zuerst das Archiv heruntergeladen, dann die Indikator-Datei geöffnet und gesehen, dass die Include-Datei in Anführungszeichen steht. Und der Meta-Editor hat nirgendwo etwas eingefügt.

Im Allgemeinen ist der Dialog nutzlos. Man kann es auf beide Arten machen, darüber muss man nicht diskutieren.

 
Im Allgemeinen ist der Artikel gut, vor allem wird nützlich sein, um Anfänger, die Idee ist mehr als klar offenbart, aber offenbart die Bedeutung, natürlich, für mich nichts Neues nicht öffnen, obwohl sehr viel wollte( solche tat...). Aber trotzdem danke für den Artikel!
 

Um ehrlich zu sein, würde ich mir eine andere Umsetzung wünschen. Absolut alles:

1. Es gibt keine Implementierung für das Zeichnen von Histogrammen auf dem Canvas (bzw. es gibt keinen Vergleich zwischen der Aktualisierungsgeschwindigkeit von Charts auf dem Canvas und Charts aus Graph Primitives). Obwohl Sie logischerweise, wenn Sie über horizontale Histogramme auf MT5-Charts schreiben, zumindest auf diese Methode des Zeichnens hinweisen sollten;

2. Warum sprechen Sie nur über Tick-Volumen? Ich würde zum Beispiel sehr gerne Ihren Indikator für reale Volumina anwenden, aber es scheint, dass ich das nicht kann!?

3) Soweit ich verstanden habe, werden alle Charts nach der "Preis/Zeit"-Bindung erstellt. Keine Erwähnung der Pixel-Bindung. Und die Implementierung von Histogrammen auf dieser Basis;

4. Es gibt eine Frage zu diesem Satz: "Vorhin wurde beiläufig erwähnt, dass für die Berechnung der Anzahl der Niveaus eine bessere Methode verwendet wird, als nur das Preisintervall in eine bestimmte Anzahl von Niveaus zu unterteilen". Warum ist es besser? 1, 10 и 100? Warum lässt man den Benutzer die Anzahl der Stufen nicht selbst festlegen?

5. Über den Timer:

  • Der iTimer-Parameter enthält die Häufigkeit, mit der der Timer ausgelöst wird. Wenn er ausgelöst wird, wird das Entstehen neuer Kerzen geprüft und die erforderlichen Maßnahmen werden durchgeführt. Wir könnten hier das Ergebnis des Aufrufs PeriodSeconds(SourcePeriod) einsetzen. Der Standardwert ist jedoch eine Sekunde, um den Zeitpunkt des Erscheinens neuer Kerzen genauer bestimmen zu können.

Warum sollte man einen Timer starten und zusätzliche Ressourcen aufwenden, um den Zeitpunkt des Erscheinens einer neuen Kerze zu bestimmen? Das kann (und sollte) in OnCalculate() geschehen. Und zwar ohne jede Sekunde die Funktion IsNewCandle() aufzurufen (außerdem ist sie so schwerfällig);

6. Wenn man den Chart mit dem Diagramm scrollt, tauchen Artefakte auf:


7. Keine Erwähnung, dass all diese Dinge auf neuen Builds (nach 1881) funktionieren, weil neue i-Funktionen verwendet werden;

8. Der Code ist überhaupt nicht kommentiert - eine totale Respektlosigkeit gegenüber denjenigen, die versuchen werden, Ihren Code selbst zu ändern. Wenn man die Dateien einfach ohne Artikel öffnet, braucht man eine Menge Zeit, um alles zu verstehen;

9. Beim Kompilieren von Indikator-Dateien wird eine Warnung angezeigt. Benutzer können Fragen haben;

10. "Vergessen Sie nicht, dass die beigefügten Indikatoren für Demonstrations- und Schulungszwecke gedacht sind und nicht im realen Handel verwendet werden können." - interessante Funktion. Ganz am Ende. Warum kann er nicht angewendet werden?

11. "Insbesondere sollte darauf geachtet werden, dass es keine Artefakte auf dem als Datenquelle verwendeten Zeitrahmen gibt." - Auch zu diesem Punkt würde ich gerne eine Klarstellung hören. Von welchen "Artefakten" ist hier die Rede;

12. das Wichtigste hätte ich fast vergessen. Wie wird die Korrektheit der gesammelten Daten garantiert? Sie verwenden ja nicht CopyTicks(). Wie wird dann die Validierung der Korrektheit der konstruierten Ebenen durchgeführt?

Und das ist sicher nicht die ganze Liste der Probleme.

Im Allgemeinen handelt es sich IMHO um eine unglückliche Implementierung für einen Tutorial-Artikel. Es wird für Anfänger schwer sein, während die Erfahrenen ihre eigene schneller (und besser) schreiben werden.

 

Ich werde versuchen, sie alle auf einmal zu beantworten ))

Es ist natürlich unwahrscheinlich, dass der Artikel erfahrenen Entwicklern etwas grundlegend Neues bietet. Der vorgeschlagene Code automatisiert nach meinem besten Wissen und Können einen sehr mühsamen Prozess der Erstellung solcher Diagramme. Ich habe mich dazu entschlossen, nachdem ich es leid war, alle Arten von Fehlern mit Bereichsüberläufen usw. abzufangen.

Ich hätte die Include-Datei auch in den Ordner include packen können, aber ich wollte diesen Ordner nicht überfrachten, weil jeder dort Include-Dateien ablegen will).

Bezüglich canvas. Ich habe es nicht getan, weil ich nichts Neues darüber sagen kann. Ich habe schon eine Menge sehr nützlicher Artikel über das Zeichnen auf Leinwand geschrieben. Ich bin zu dem Schluss gekommen, dass dieser Aspekt bereits ausreichend behandelt wurde.

Als Beispiel werden Tickvolumina genommen. Für den Code ist es wichtig, ein paar Arrays zu übergeben und das ist alles. Ich werde diesen Code zum Beispiel verwenden, um einen Tumbler für eine Reihe von Krypto-Börsen zu erstellen.

Deshalb gibt es keine Pixelbindung. Das ist nur die Canvas-Seite der Dinge. Und warum es keine Leinwand gibt, habe ich beantwortet.

Warum der Code nicht auskommentiert ist. Er WURDE auskommentiert, aber für die Verwendung in Verbindung mit Doxygen. Ich musste ihn entfernen. Und ich hätte auf Englisch kommentieren müssen, der Code wird nicht automatisch übersetzt, und darin bin ich nicht gut. Google zu benutzen ist nicht die beste Option, was wird es übersetzen?

Warum ist es nicht erlaubt, die Anzahl der Ebenen zu wählen? Darum geht es in dem Artikel einfach nicht. Genau das steht im Artikel. In dem Artikel geht es um das Zeichnen und Verwalten von Arrays grafischer Primitive, nicht um das Schreiben von Indikatoren. Der Entwickler wird entscheiden, wie er die Ausgangsdaten erhält. In diesem Artikel betrachte ich diese Aufgabe als zweitrangig und daher weniger wichtig. Ein funktionierender Indikator mit diesem Code wird bald auf dem Markt sein, aber nicht hier.

Trainingsindikatoren können im realen Handel nicht angewendet werden, da sie vom Zustand der Datenquelle abhängen. Bei Trainingsindikatoren wird davon ausgegangen, dass die Datenquelle in perfektem Zustand ist. Im Leben ist das nicht der Fall. Im Leben gibt es Löcher in den Zeitrahmen, und ich habe an sie gedacht, als ich über "Artefakte" schrieb. Ich füge meinen Artikeln nie Indikatoren bei, die für den realen Handel verwendet werden können, weil ich das für falsch halte.

Ich verwende CopyTick hier nicht und halte es für unnötig. Vielleicht wäre es sinnvoll, ein super-duper-genaues Diagramm auf eine Leinwand zu zeichnen, aber in diesem Fall, wo ziemlich stark gerundet wird, ist es nicht notwendig.

 
Andrei Novichkov:

Ich werde versuchen, sie alle auf einmal zu beantworten ))

Es stellt sich heraus, dass Sie ein "abstraktes Ding" geschrieben haben, das annähernd funktioniert, und das sogar in einer Umgebung, die es in der Praxis nicht gibt. Es gibt keine Worte.

Und das Rendering, wie ich oben erwähnt - krumm. Sehr gute PR für Ihre Produkte.

 
Alexey Kozitsyn:

Sie haben also ein "abstraktes Ding" geschrieben, das annähernd funktioniert, und das sogar in einer Umgebung, die es in der Praxis nicht gibt. Ich bin sprachlos.

Und das Rendering ist, wie ich oben schon sagte, schief. Sehr gute PR für Ihre Produkte.

Nein, es funktioniert nicht.

Und wenn es keine Worte gibt, braucht man auch nicht zu schreiben. Sie wissen sicher nicht, worüber Sie schreiben.

 
Andrei Novichkov:

Nein, es funktioniert nicht.

Und wenn es keine Worte gibt, braucht man auch nicht zu schreiben. Du verstehst sicher nicht ganz, worüber du schreibst.

Das ist das Ende davon. Vielleicht verstehe ich es nicht ganz, aber unter einem so großen Titel würde ich gerne viel mehr sehen als das, was es ist. Ich wünsche Ihnen viel Glück.