Diskussion zum Artikel "Mehrere Indikatoren in einem Chart (Teil 04): Weiterentwicklung zum Expert Advisor"
Neuer Artikel Mehrere Indikatoren auf einem Chart (Teil 04): Start mit EA wurde veröffentlicht:
Autor: Daniel Jose
Hallo Daniel, ich habe deine Artikel verfolgt, aber was ist mit Teil 03?
Es gab ein kleines Problem bei der Beantragung der Freigabe zur Veröffentlichung, aber ich habe die Veröffentlichung von Teil 03 bereits genehmigt, er wird auch bald verfügbar sein, dieses Problem wurde eher durch die Anzahl der Artikel verursacht, die ich bereits geschickt habe ... es gibt derzeit noch 15 weitere Artikel zu analysieren, die alle mit der Entwicklung dieses EA zu tun haben, und mit jedem Artikel werden die Dinge komplexer .... aber danke, dass Sie die Serie verfolgt haben ... freuen Sie sich auf viel Neues ab Artikel 05, ab dann wird es sich wirklich lohnen, denn es wird etwas Großes werden, diese ersten paar sind nur eine Einführung in das, was kommen wird...😁👍
Hallo Daniel,
ich habe Probleme mit mehrfarbigen Indikatoren und deine Artikel, die ich sehr schätze, deuten darauf hin, dass du vielleicht die Lösung kennst.
Ich möchte eine Funktion erstellen, die alle Indikatorattribute setzt, ohne die #property Optionen zu verwenden, z.B. #property indicator_color1 clrCrimson,clrWhite,clrLime
In dem unten stehenden Testprogramm stelle ich fest, dass das Programm mit dem #property indicator_color1 clrCrimson,clrWhite,clrLime richtig funktioniert, während das Programm nicht richtig funktioniert, wenn ich es auskommentiere.In diesem Fall scheint es, dass nur einige der Datenpunkte geplottet werden, als ob ein "höherer" Zeitrahmen verwendet wird oder mehrere Datenpunkte übersprungen werden. Ich vermute, dass die Eigenschaft color directive weitere Attribute setzt, die ich nicht identifiziert habe, wenn mehrere Farben angegeben werden.
Das zweite Problem ist, dass ich offensichtlich die Details und Anforderungen der Verwendung von mehrfarbigen Diagrammen nicht verstehe. Ich habe die Dokumentation durchsucht und keine Artikel gefunden, die einen Überblick über die Verwendung von mehrfarbigen Indikatoren geben. Während das erste Diagramm die Farbe korrekt ändert, ändert das zweite Diagramm, das die Tiefststände aufzeichnet, die Farben nicht entsprechend meinem Funktionsaufruf. Für diese Darstellung sind alle drei Eigenschaften erforderlich: type2, color2 und width2. Ich bin auch ratlos, warum die Eigenschaftsdeklarationen 2 statt 3 verwenden. Ich habe den Laguerre Adaptive Filter Indikator von Mladen verwendet, um festzustellen, dass die Eigenschaftsindikatoren die Plotnummer 2 und nicht die Indikatornummer 3 verwenden, um korrekt angezeigt zu werden.
Für Vorschläge, Hinweise oder Hilfe bin ich sehr dankbar.
Mit freundlichen Grüßen, CapeCoddah
Für Vorschläge, Hinweise oder Hilfe bin ich sehr dankbar.
Mit freundlichen Grüßen, CapeCoddah
Ich kann verstehen, dass Sie ein wenig verwirrt sind... aber die ganze Verwirrung liegt darin, dass Sie nicht wirklich auf die Details in Ihrem Code achten. Ich werde versuchen, einige der Details zu erklären, die in dem Kommentar stehen, dann werde ich ein wenig über Ihren Code sprechen....
Der erste Punkt ist, dass Sie sogar einen mehrfarbigen Indikator erzeugen können, ohne #property indicator_colorN zu verwenden, aber für den Benutzer und auch für Sie ist es praktischer, sicherer und einfacher, den Code zu verstehen und zu ändern, denn alles, was Sie tun müssen, ist, zu den Eigenschaften zu gehen, um die dort vorhandenen Farben zu ändern, und für den Benutzer ist es einfacher, weil er nur die zu ändernde Farbe auswählen und die Änderung vornehmen muss, und zwar in dem Standardfenster, das MT5 für die Indikatoren erstellt. Sie machen es schon irgendwie richtig, wenn Sie den Befehl PlotIndexSetInteger verwenden, um die Farbänderungen zu generieren, und das ist der Weg, wenn wir #property indicator_colorN nicht verwenden, aber wenn wir die Eigenschaften verwenden, macht es oft keinen Sinn, den Befehl PlotIndexSetInteger zu verwenden, um andere Farben zu setzen, Das liegt daran, dass die Sache komplizierter zu pflegen und verwirrender für den Benutzer sein kann, da er vielleicht nicht wirklich versteht, was der Farbstandard zu sagen versucht, selbst wenn der Code Ihnen gehört und Sie der einzige sind, der den Indikator verwendet, macht es nicht viel Sinn, außer in seltenen Fällen, wenn Sie ein dynamisches Farbmuster erstellen.
Nun zum zweiten Punkt: Das Problem in diesem Fall ist, dass Sie die Anzahl der Dinge, die der Indikator plotten wird ( 2 für 2 Linien ) mit den Objekteigenschaften ( in diesem Fall Linie ) verwechseln und für die Linie, die geplottet werden soll, müssen Sie tatsächlich mindestens 3 Informationen deklarieren, nämlich TypeN, ColorN, WidthN, wobei das N die Nummer des Objekts angibt, mit Übung und Zeit werden Sie am Ende diese kleinen Unterschiede zwischen der Indikatoreigenschaft und den Eigenschaften der Objekte, die er verwendet, verstehen... Gib nicht auf... lerne weiter und bald werden die Dinge klarer werden... 😁👍
Jetzt zeige ich dir mal einen Teil deines Codes... Ich werde dir nicht genau zeigen, wie du ihn reparieren kannst (wenn ich das tue, macht es keinen Spaß... .... 😁👍✌ ), aber ich möchte, dass du auf die folgende Tatsache achtest, und das ist wichtig:
Buf=Set_IndexBuffer5(Buf, dataHi, INDICATOR_DATA , DRAW_COLOR_LINE , 4 , "High" , clrYellow , clrWhite , clrDodgerBlue ); Buf=Set_IndexBuffer5(Buf, dataHic, INDICATOR_COLOR_INDEX ); Buf=Set_IndexBuffer5(Buf, dataLo, INDICATOR_DATA , DRAW_COLOR_LINE , 4 , "Low" , clrYellow , clrWhite , clrDodgerBlue ); Buf=Set_IndexBuffer5(Buf, dataLoc, INDICATOR_COLOR_INDEX );
Beachten Sie, dass ich zwei Dinge in Ihrem Code markiert habe... sehen wir uns nun an, was passiert, wenn der Code im Diagramm abgespielt wird....
Sehen Sie, dass nur eine der Beschriftungen so ist, wie Sie es im Code deklariert haben, nur die HIGH .... und die LOW ?!?! wo ist sie ?!?! das ist der erste Punkt, den Sie korrigieren sollten, denn die Tatsache, dass die LOW-Marke nicht angezeigt wird, zeigt an, dass das verwendete Farbmuster das ist, was in #property indicator_color2 deklariert ist, d.h. Sie haben an diesem Punkt einen Fehler, wenn Sie versuchen, die Eigenschaften von Indikator 2 zu entfernen, die tatsächlich die LOW-Linie erzeugen, auch wenn Sie den Rest des Codes beibehalten, wird die HIGH-Linie gezeichnet, aber die LOW-Linie wird nicht....warum?!?! weil Sie in der Tat nicht die Informationen definieren, die notwendig sind, um die LOW-Linie zu plotten, und zwar dynamisch über die Verwendung des PlotIndexSetInteger-Aufrufs... es scheint seltsam ... aber das ist, was passiert ....
Wenn es Ihnen gelingt, dies zu beheben, können Sie, wenn Sie wirklich den dynamischen Weg der Deklaration der Daten des Zeilenobjekts mit PlotIndexSetInteger nutzen wollen, die #property indicator_color Kompilierungsbefehle aus der Szene entfernen, da die notwendigen Daten dynamisch gesetzt werden, aber wenn Sie sich diese Mühe nicht machen wollen, ist das in Ordnung....
Jetzt möchte ich, dass du dir das obige Bild ansiehst und es mit den Farben vergleichst, die du in #property indicator_color verwendest ... beobachte diese Farben sehr genau .... wenn du das tust, wirst du dort etwas Seltsames bemerken .... noch einmal, ich werde nicht sagen, dass du den Spaß nicht verlieren sollst, aber versuche, verschiedene Farben zu verwenden, ohne eine von ihnen zu wiederholen ... wenn du sie wiederholst, wird es schwieriger zu verstehen, wo der Fehler liegt ... 😁👍
Nun noch ein letztes Detail: Die Tatsache, dass du denkst, dass er nur einige Punkte aufzeichnet und andere überspringt, kann zwei Gründe haben: Das Farbmuster kontrastiert nicht mit dem Hintergrund des Diagramms, versuchen Sie, Farben zu verwenden, die mit dem Hintergrund des Diagramms kontrastieren, und der zweite, aber ich glaube nicht, dass es tatsächlich der Fall ist, ist, dass es einen Fehler im OnCalcule-Ereignis geben kann, Sie geben -1 oder den Wert von i zurück, das Richtige ist, rates_total zurückzugeben, also ändern Sie dies im Code, um Probleme in der Zukunft zu vermeiden...
Hallo Daniel,
ich war verwirrt: Ich dachte, die Zeicheneigenschaften würden wie bei MQ4 über die Pufferspezifikation definiert, während zumindest bei den DRAW_COLOR... Spezifikationen die Zeicheneigenschaften über den sequentiellen Plot-Identifier definiert werden. Ich habe nicht herausgefunden, ob die DRAW_LINE usw. auch Plot-Spezifikationen erfordern. Außerdem hat die indicator_colorX-Eigenschaft eigentlich zwei Funktionen, zunächst zum Zählen und Einstellen der Anzahl der Farben und dann zum Einstellen jeder angegebenen Farbe in die richtige Array-Position.Ich hänge zwei Dateien an, Color Test, das jetzt korrekt funktioniert, obwohl es noch weitere Verfeinerungen benötigt, und MACD Original2_1 von MLADEN, das leicht modifiziert wurde. Das Programm von Mladen ist interessant, da er zwei Plots definiert hat, aber nur einen Farbindexpuffer verwendet.
Vielen Dank für Ihre Hilfe

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Mehrere Indikatoren in einem Chart (Teil 04): Weiterentwicklung zum Expert Advisor :
In meinen früheren Artikeln habe ich erklärt, wie man einen Indikator mit mehreren Unterfenstern erstellt, was bei der Verwendung von nutzerdefinierten Indikatoren interessant wird. Dieses Mal werden wir sehen, wie man mehrere Fenster einem Expert Advisor hinzufügen kann.
Als ich mich entschied, etwas Neues mit Hilfe von OOP (Objektorientierte Programmierung) zu erstellen, tat ich dies, weil ich bereits wusste, dass dieser Ansatz große Vorteile bietet, einschließlich Sicherheit und Vererbung. Es gibt auch Polymorphismus, aber wir werden ihn später bei der Erstellung eines auftragsübergreifenden Systems verwenden. In diesem speziellen Fall werden wir einen der Vorteile von OOP nutzen - die Vererbung. C_TemplateChart ist bereits eine voll funktionsfähige Klasse. Da möchte man sich nicht die Mühe machen, alles noch einmal neu zu programmieren, oder das Risiko eingehen, der Klasse Code hinzuzufügen, der verhindert, dass die Klasse an anderen Stellen verwendet werden kann. Die Lösung ist die Vererbung, die das Hinzufügen von neuem Code oder neuen Funktionen ermöglicht, ohne den ursprünglichen Code zu verändern.
Die Verwendung von Vererbung hat eine Reihe von Vorteilen, darunter die folgenden: bereits getesteter Code bleibt getestet; die Komplexität wächst, ohne dass die Größe des Codes im gleichen Maße zunimmt; nur neue Funktionen müssen wirklich getestet werden; was sich nicht ändert, wird einfach vererbt, was für Stabilität sorgt. Mit anderen Worten: Die Dinge verbessern sich mit minimalem Aufwand, aber mit maximaler Sicherheit. Um dies zu verstehen, sehen wir uns das folgende Diagramm an.
Autor: Daniel Jose