Diskussion zum Artikel "Der Indikator Market Profile (Teil 2) Optimierung und Rendering auf Leinwand"

 

Neuer Artikel Der Indikator Market Profile (Teil 2) Optimierung und Rendering auf Leinwand :

Der Artikel befasst sich mit einer optimierten Version des Indikators Market Profile, bei der das Rendering mit mehreren grafischen Objekten durch das Rendering auf einem Hintergrund - einem Objekt der Klasse CCanvas - ersetzt wird.

Im letzten Artikel haben wir uns mit dem Marktprofil-Indikator befasst. Wie sich herausstellt, verbraucht die Erstellung eines Marktprofils mit gewöhnlichen grafischen Objekten ziemlich viele Ressourcen. Jeder Preispunkt zwischen Tief und Hoch des Tagesbalkens wird mit rechteckigen grafischen Objekten in der Anzahl der Balken gefüllt, die dieses Preisniveau im Laufe des Tages erreicht haben. Dies gilt für jede Position - sie alle enthalten viele grafische Objekte, und alle diese Objekte werden für jeden Tag, an dem das Profildiagramm gezeichnet wird, erstellt und gezeichnet. Wenn ein Indikator Tausende von grafischen Objekten erstellt, kann dies zu erheblichen Verlangsamungen bei der Handhabung anderer grafischer Objekte und der Neuzeichnung des Charts führen. 

Drei Handelstage lang wird das Marktprofil letztlich so aussehen:


Autor: Artyom Trishkin

 
Warum nicht das perfekte Bandprofil schreiben
 
__zeus__ #:
Warum nicht ein perfektes Bandprofil schreiben?

Was ist mit "perfekt" gemeint?

 
__zeus__ #:
Warum nicht das perfekte Volumenprofil schreiben
Ich unterstütze Igor in seiner Frage
 

Das ist ein interessantes Thema. Ich bin auch auf Canvas umgestiegen, um mein Profil anzuzeigen. Aber diese Methode hat einige Nachteile. Wenn grafische Figuren "gezeichnet und vergessen" werden, skaliert mt5 sie selbst, wenn man den Chart bewegt, die TF ändert, usw. Aktionen, dann sollte Canvas immer neu gezeichnet werden, bei jedem CHARTEVENT_CHART_CHANGE, auch wenn VP irgendwo in der Geschichte ist, auf bereits unveränderten Daten. Und diese Daten müssen beschafft werden und nicht immer sind sie (Tickdaten) im mt5-Cache, hier entweder den Speicher speichern und prüfen, ob sich die VP-Grenzen geändert haben oder ständig von mt5 anfordern (jetzt habe ich es so implementiert), was nicht schnell funktioniert und so werden die Daten nicht immer vollständig gegeben, und nicht sofort sicher.

Das Zeichnen ist ein Teil des Problems. Der zweite Teil ist, dass ein Trader nicht immer nur ein Bild braucht, um es zu bewundern, er braucht Signale, die auf diesem Bild basieren, wie POC, VHL, VLL, "entry into the void", etc. Und wir können Ereignisse nur an grafische Objekte binden (bedingt, wir können sie in einem Array irgendwo im Indikator aufbewahren, aber es ist immer noch wünschenswert zu visualisieren, wo dieses Niveau ist, wo der Alarm ausgelöst wurde). Das heißt, wir brauchen immer noch grafische Objekte für die Kanvas-VP, obwohl sie natürlich um eine oder sogar mehrere Größenordnungen kleiner sind als bei der Darstellung der VP durch grafische Objekte.

Generell lässt sich zusammenfassen, dass wir (noch?) kein volumetrisches Terminal von mt5 bekommen können (und wir brauchen Cluster, Deltas usw.).

Das Bild ist ein Beispiel dafür, wie VP auf einer Impulswelle aussieht, POC wird durch eine Linie dargestellt, hier sind Tick-Volumina, wenn es echte Volumina gäbe, würde ich mit ihnen arbeiten (finam, amp global). Wie die Praxis des Vergleichs von Tick-Volumen und realen Volumina bei älteren TFs gezeigt hat, stimmen sie entweder überein oder liegen sehr nahe beieinander, außer in Fällen, in denen große Volumina durch die Hoch- oder Tiefkerzen gehen; hier sind die Tick-Volumina machtlos, uns zu helfen.



 
Nikolay Kuznetsov #:

Das ist ein interessantes Thema. Ich bin auch auf Canvas umgestiegen, um mein Profil anzuzeigen. Aber diese Methode hat einige Nachteile. Wenn grafische Figuren "gezeichnet und vergessen" werden, skaliert mt5 sie selbst, wenn man den Chart bewegt, die TF ändert, usw. Aktionen, dann sollte Canvas immer neu gezeichnet werden, bei jedem CHARTEVENT_CHART_CHANGE, auch wenn VP irgendwo in der Geschichte ist, auf bereits unveränderten Daten. Und diese Daten müssen beschafft werden und nicht immer sind sie (Tickdaten) im mt5-Cache, hier entweder den Speicher speichern und prüfen, ob sich die VP-Grenzen geändert haben oder ständig von mt5 anfordern (jetzt habe ich es so implementiert), was nicht schnell funktioniert und die Daten nicht immer vollständig gegeben sind, und nicht sofort sicher.

Das Zeichnen ist ein Teil des Problems. Der zweite Teil ist, dass ein Trader nicht immer nur ein Bild braucht, um es zu bewundern, er braucht Signale, die auf diesem Bild basieren, wie POC, VHL, VLL, "entry into the void", etc. Und wir können Ereignisse nur an grafische Objekte binden (bedingt, wir können sie in einem Array irgendwo im Indikator aufbewahren, aber es ist immer noch wünschenswert zu visualisieren, wo dieses Niveau ist, wo der Alarm ausgelöst wurde). D.h. wir brauchen immer noch grafische Objekte für die Canvas-VP, obwohl sie natürlich um eine oder sogar mehrere Größenordnungen kleiner sein werden als bei der Darstellung der VP durch grafische Objekte.

Im Allgemeinen lautet die Zusammenfassung wie folgt: Wir können (noch?) kein volumetrisches Terminal von mt5 bekommen (und wir brauchen Cluster, Deltas, etc.).

Das Bild ist ein Beispiel dafür, wie VP auf einer Impulswelle aussieht, POC wird durch eine Linie dargestellt, hier sind Tick-Volumina, wenn es echte Volumina gäbe, würde ich mit ihnen arbeiten (finam, amp global). Wie die Praxis des Vergleichs von Tick-Volumen und realen Volumina bei älteren TFs gezeigt hat, stimmen sie entweder überein oder liegen sehr nahe beieinander, außer in Fällen, in denen große Volumina durch die Hoch- oder Tiefkerzen gehen; hier sind die Tick-Volumina machtlos, uns zu helfen.



Das ist nicht ganz so. Dies sind keine Nachteile, sondern Eigenschaften, die Sie kennen müssen, um das Tool mit maximalen Möglichkeiten und Handlungsfreiheit zu nutzen.
Alles ist möglich, auch wenn es sich um 3D-Cluster handelt.
Hier ist ein MQL5-Beispiel , das nur Canvas verwendet, ohne OpenCL zu nutzen. Wenn Sie OpenCL (d. h. eine Grafikkarte) verwenden, können Sie eine erhebliche Beschleunigung (um das Dutzendfache) erreichen.