![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
In der Klasse CGraphic habe ich, wie von Ihnen gewünscht, den Farbtyp an allen Stellen durch uint ersetzt.
Außerdem habe ich der Klasse CCanvas neue Methoden hinzugefügt, die es ermöglichen, Primitive mit einer bestimmten Dicke zu zeichnen:
Im Einklang mit der Innovation von CCanvas habe ich die Eigenschaften von CCurve erweitert:
Wenn Sie eine Kurve mit Linien zeichnen, können Sie jetzt die Dicke der Linien und den Stil ihrer Enden festlegen.
Das ist einfach großartig.
Die Handhabung von Splines (Interpolation mit Bézier-Kurven) wurde überarbeitet. Seine Implementierung wurde von der Klasse CGraphics direkt in CCanvas verlagert, wodurch Splines außerhalb der Grafikbibliothek konstruiert werden können.
Außerdem wurde ein Algorithmus für das Rendern geschlossener Splines hinzugefügt.
Infolgedessen verfügt die Klasse CCanvas jetzt über zwei neue öffentliche Methoden.
Mit diesen Methoden können Splines in einem bestimmten Stil und mit einer bestimmten Dicke gezeichnet werden.
Da Bezier-Kurven Kreise und Ellipsen recht genau beschreiben, besteht keine offensichtliche Notwendigkeit, die Klasse CCanvas um neue Methoden zur Darstellung dieser Primitive mit einer bestimmten Dicke zu erweitern.
Beispiel für die Annäherung einer Ellipse durch Bézier-Kurven auf der Grundlage der Methode PolygoneSmooth:
Ergebnis:
Ein weiterer möglicher Schritt zur Vielseitigkeit der Grafikbibliothek: ein benutzerdefinierter Kurven-Zeichenmodus CURVE_CUSTOM.
Dieser Modus macht es überflüssig, die CGraphic-Klasse zu erben und die ...Plot-Methoden zu überladen, um eine Kurve anders zu zeichnen, als es die Standardwerkzeuge der Bibliothek erlauben.
Um diesen Modus CURVE_CUSTOM zu implementieren, werden der Klasse CCurve neue Eigenschaften hinzugefügt.
Sie basiert auf einem neuen Zeiger auf die Funktion PlotFucntion.
Dieser Ansatz eröffnet neue Möglichkeiten für das Zeichnen von Plots.
Lassen Sie uns als Beispiel das Zeichnen von Kerzenständern in der CGraphics-Bibliothek implementieren:
1. Lassen Sie uns eine Containerklasse erstellen, in der alle Daten einer einzelnen Kerze gespeichert werden.
Da die Klasse CCandle ein Nachkomme der Klasse CObject ist, können wir alle Kerzen, die wir zeichnen wollen, nacheinander in das Objekt der Klasse CArrayObj schreiben. Dieses Array wird als cbdata-Parameter in unsere benutzerdefinierte Zeichenmethode übernommen. Die Candlestick-Zeichnungsmethode sieht dann wie folgt aus.
3. Der Einfachheit halber werden alle Candlesticks nach dem Zufallsprinzip generiert. Wir erzeugen also nacheinander 10 Candlesticks und füllen das Objekt der Klasse CArrayObj mit ihnen. Dann erstellen wir ein CGraphics-Objekt und fügen ihm eine Kurve hinzu, wobei wir angeben, dass sie mit unserer Funktion PlotCandles gezeichnet werden soll. Wir müssen auch die Höchst- und Mindestwerte der y-Achse ändern, damit unsere Kerzen vollständig sichtbar sind.
Daraus ergibt sich das folgende Diagramm:
@Roman Konopelko
Es gibt einen kleinen Fehler in der Funktion CGraphic::SetDefaultParameters
Bei der Initialisierung von Farben sollte die Deckkraft berücksichtigt werden.
@Roman Konopelko
Es gibt einen kleinen Fehler in der Funktion CGraphic::SetDefaultParameters
Bei der Initialisierung von Farben sollte die Deckkraft berücksichtigt werden.
Bei diesem Beispiel friert der Computer ein. Was ich getan habe: Nachdem ich den Indikator im Editor auf das Diagramm gesetzt hatte, spielte ich mit verschiedenen Kombinationen von kommentierenden/dekommentierenden Zeilen 87 und 88 (wenn eine auf einmal, wenn zusammen)
Wiederhole die Leistung zweimal. Ich habe die Reihenfolge der Aktionen nicht aufgezeichnet. Das dritte Mal ist trivial, ich habe Angst, es zu überprüfen.
Hinzugefügt: Build 1607 x64
Bei diesem Beispiel friert der Computer ein. Was ich getan habe: Nachdem ich den Indikator im Editor auf das Diagramm gesetzt hatte, spielte ich mit verschiedenen Kombinationen von kommentierenden/dekommentierenden Zeilen 87 und 88 (wenn eine auf einmal, wenn zusammen)
Wiederhole die Leistung zweimal. Ich habe die Reihenfolge der Aktionen nicht aufgezeichnet. Das dritte Mal ist trivial, ich habe Angst, es zu überprüfen.
Hinzugefügt: Build 1607 x64
Ich habe den Rekord heute wiederholt - der Computer hängt sich auf, der RAM-Verbrauch ist von 2 GB auf 5,5 GB gestiegen. Es scheint gelungen zu sein, den Zeitplan zu schließen, aber der Computer hängt nun schon seit fünf Minuten.
Diesmal habe ich die Größe des Arrays begrenzt - nicht mehr als 300 Elemente. Wie Sie sehen können, hat es nicht geholfen 🤔.
Was sagt der Debugger?
Was sagt der Debugger?
Jbug hat es nicht verstanden, ich habe Folgendes getan: einen Indikator verschoben und ein oder zwei Zeilen auskommentiert/kommentiert und kompiliert. Am Ende habe ich von einem Tablet aus geschrieben, der Laptop ist ausgefallen...
Der Gbug hat es nicht geschafft, ich habe Folgendes getan: Ich bin mit dem Mauszeiger über den Indikator gefahren und habe ein oder zwei Zeilen auskommentiert und kompiliert. Am Ende habe ich von einem Tablet aus geschrieben, der Laptop ist ausgefallen...
Also, Laptop nach hartem Neustart kam wieder zum Leben, aber ich will nicht weiter zerstörerische Experiment durchzuführen - es gibt mehrere Expert Advisors auf dem Laptop laufen, so gibt es keine Lust, ein Einfrieren für eine ganze Stunde zu fangen.