Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 104
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
Wie viele Instrumente werden auf dem Markt überprüft?
61.
In Build 1907 sind die Bugs auf wundersame Weise verschwunden. Ich weiß nicht einmal, ob ich zurückgehen soll, um sie zu finden, oder ob hier gerade etwas repariert worden ist...
Frage zur Konstruktion von Indikatoren
#property indicator_chart_window
#property indicator_buffers 12
#property indicator_plots 6
#property indicator_type1 DRAW_COLOR_LINE
#property indicator_type2 DRAW_COLOR_LINE
#property indicator_type3 DRAW_COLOR_LINE
#property indicator_type4 DRAW_COLOR_LINE
#property indicator_type5 DRAW_COLOR_LINE
#property indicator_type6 DRAW_COLOR_LINE
SetIndexBuffer(0,upper_line,INDICATOR_DATA);
SetIndexBuffer(1,upper_line_color,INDICATOR_COLOR_INDEX);
PlotIndexSetString(0,PLOT_LABEL,"Upper Line");
PlotIndexSetInteger(0,PLOT_LINE_STYLE,UpperStyle);
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,UpperWidth);
PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,2);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,UpperTrendUp);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,UpperTrendDw);
// ==========
SetIndexBuffer(2,awera_line,INDICATOR_DATA);
SetIndexBuffer(3,awera_line_color,INDICATOR_COLOR_INDEX);
PlotIndexSetString(1,PLOT_LABEL,"Average Line");
PlotIndexSetInteger(1,PLOT_LINE_STYLE,AverageStyle);
PlotIndexSetInteger(1,PLOT_LINE_WIDTH,AverageWidth);
PlotIndexSetInteger(1,PLOT_COLOR_INDEXES,2);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,0,AverageTrendUp);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,1,AverageTrendDw);
// ==========
SetIndexBuffer(4,lower_line,INDICATOR_DATA);
SetIndexBuffer(5,lower_line_color,INDICATOR_COLOR_INDEX);
PlotIndexSetString(2,PLOT_LABEL,"Lower Line");
PlotIndexSetInteger(2,PLOT_LINE_STYLE,LowerStyle);
PlotIndexSetInteger(2,PLOT_LINE_WIDTH,LowerWidth);
PlotIndexSetInteger(2,PLOT_COLOR_INDEXES,2);
PlotIndexSetInteger(2,PLOT_LINE_COLOR,0,LowerTrendUp);
PlotIndexSetInteger(2,PLOT_LINE_COLOR,1,LowerTrendDw);
Wie viele Farbpuffer können verwendet werden?
Wie sind die Puffer miteinander verbunden?
#property indicator_buffers 12 // Insgesamt 12 Puffer deklarieren
#property indicator_plots 6 // grafische Konstruktionen
Verstehe ich das richtig, dass der Indikator bei Angabe von indicator_type 1 bis 6 versteht, dass farbige Linien für 6 grafische Darstellungen gezeichnet werden sollen?
#property indicator_type1 DRAW_COLOR_LINE
#property indicator_type2 DRAW_COLOR_LINE
#property indicator_type3 DRAW_COLOR_LINE
#property indicator_type4 DRAW_COLOR_LINE
#property indicator_type5 DRAW_COLOR_LINE
#property indicator_type6 DRAW_COLOR_LINE
// =====
SetIndexBuffer(0,upper_line,INDICATOR_DATA); // Erster Puffer für Daten
SetIndexBuffer(1,upper_line_color,INDICATOR_COLOR_INDEX); // Zweiter Puffer für Farbdaten
PlotIndexSetString(0,PLOT_LABEL, "Upper Line"); // Eigenschaften des ersten Puffers ändern
PlotIndexSetInteger(0,PLOT_LINE_STYLE,UpperStyle);// Eigenschaften des ersten Puffers ändern
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,UpperWidth);//Eigenschaften des ersten Puffers ändern
PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,2);// Eigenschaften des ersten Puffers ändern
PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,UpperTrendUp);// Eigenschaften des ersten Puffers ändern
PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,UpperTrendDw);// Eigenschaften des ersten Puffers ändern
SetIndexBuffer(2,awera_line,INDICATOR_DATA); // Dritter Puffer
SetIndexBuffer(3,awera_line_color,INDICATOR_COLOR_INDEX); // Vierter Puffer für Farben
PlotIndexSetString(1,PLOT_LABEL, "Durchschnittslinie"); // Puffereigenschaften für SetIndexBuffer(2,awera_line,INDICATOR_DATA) ändern;
PlotIndexSetInteger(1,PLOT_LINE_STYLE,AverageStyle); // Eigenschaften des Puffers für SetIndexBuffer(2,awera_line,INDICATOR_DATA) ändern;
PlotIndexSetInteger(1,PLOT_LINE_WIDTH,AverageWidth); // Eigenschaften des Puffers für SetIndexBuffer(2,awera_line,INDICATOR_DATA) ändern;
PlotIndexSetInteger(1,PLOT_COLOR_INDEXES,2); // Eigenschaften des Puffers für SetIndexBuffer(2,awera_line,INDICATOR_DATA) ändern;
PlotIndexSetInteger(1,PLOT_LINE_COLOR,0,AverageTrendUp); // Eigenschaften des Puffers für SetIndexBuffer(2,awera_line,INDICATOR_DATA) ändern;
PlotIndexSetInteger(1,PLOT_LINE_COLOR,1,AverageTrendDw); // Eigenschaften des Puffers für SetIndexBuffer(2,awera_line,INDICATOR_DATA) ändern;
Frage zur Konstruktion von Indikatoren
#property indicator_chart_window
#property indicator_buffers 12
#property indicator_plots 6
#property indicator_type1 DRAW_COLOR_LINE
#property indicator_type2 DRAW_COLOR_LINE
#property indicator_type3 DRAW_COLOR_LINE
#property indicator_type4 DRAW_COLOR_LINE
#property indicator_type5 DRAW_COLOR_LINE
#property indicator_type6 DRAW_COLOR_LINE
SetIndexBuffer(0,upper_line,INDICATOR_DATA);
SetIndexBuffer(1,upper_line_color,INDICATOR_COLOR_INDEX);
PlotIndexSetString(0,PLOT_LABEL,"Upper Line");
PlotIndexSetInteger(0,PLOT_LINE_STYLE,UpperStyle);
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,UpperWidth);
PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,2);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,UpperTrendUp);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,UpperTrendDw);
// ==========
SetIndexBuffer(2,awera_line,INDICATOR_DATA);
SetIndexBuffer(3,awera_line_color,INDICATOR_COLOR_INDEX);
PlotIndexSetString(1,PLOT_LABEL,"Average Line");
PlotIndexSetInteger(1,PLOT_LINE_STYLE,AverageStyle);
PlotIndexSetInteger(1,PLOT_LINE_WIDTH,AverageWidth);
PlotIndexSetInteger(1,PLOT_COLOR_INDEXES,2);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,0,AverageTrendUp);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,1,AverageTrendDw);
// ==========
SetIndexBuffer(4,lower_line,INDICATOR_DATA);
SetIndexBuffer(5,lower_line_color,INDICATOR_COLOR_INDEX);
PlotIndexSetString(2,PLOT_LABEL,"Lower Line");
PlotIndexSetInteger(2,PLOT_LINE_STYLE,LowerStyle);
PlotIndexSetInteger(2,PLOT_LINE_WIDTH,LowerWidth);
PlotIndexSetInteger(2,PLOT_COLOR_INDEXES,2);
PlotIndexSetInteger(2,PLOT_LINE_COLOR,0,LowerTrendUp);
PlotIndexSetInteger(2,PLOT_LINE_COLOR,1,LowerTrendDw);
Wie viele Farbpuffer können verwendet werden?
Wie sind die Puffer miteinander verbunden?
#property indicator_buffers 12 // Insgesamt 12 Puffer deklarieren
#property indicator_plots 6 // grafische Konstruktionen
Verstehe ich das richtig, dass der Indikator bei Angabe von indicator_type 1 bis 6 versteht, dass farbige Linien für 6 grafische Darstellungen gezeichnet werden sollen?
#property indicator_type1 DRAW_COLOR_LINE
#property indicator_type2 DRAW_COLOR_LINE
#property indicator_type3 DRAW_COLOR_LINE
#property indicator_type4 DRAW_COLOR_LINE
#property indicator_type5 DRAW_COLOR_LINE
#property indicator_type6 DRAW_COLOR_LINE
// =====
SetIndexBuffer(0,upper_line,INDICATOR_DATA); // Erster Puffer für Daten
SetIndexBuffer(1,upper_line_color,INDICATOR_COLOR_INDEX); // Zweiter Puffer für Farbdaten
PlotIndexSetString(0,PLOT_LABEL, "Upper Line"); // Eigenschaften des ersten Puffers ändern
PlotIndexSetInteger(0,PLOT_LINE_STYLE,UpperStyle);// Eigenschaften des ersten Puffers ändern
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,UpperWidth);//Eigenschaften des ersten Puffers ändern
PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,2);// Eigenschaften des ersten Puffers ändern
PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,UpperTrendUp);// Eigenschaften des ersten Puffers ändern
PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,UpperTrendDw);// Eigenschaften des ersten Puffers ändern
SetIndexBuffer(2,awera_line,INDICATOR_DATA); // Dritter Puffer
SetIndexBuffer(3,awera_line_color,INDICATOR_COLOR_INDEX); // Vierter Puffer für Farben
PlotIndexSetString(1,PLOT_LABEL, "Durchschnittslinie"); // Puffereigenschaften für SetIndexBuffer(2,awera_line,INDICATOR_DATA) ändern;
PlotIndexSetInteger(1,PLOT_LINE_STYLE,AverageStyle); // Eigenschaften des Puffers für SetIndexBuffer(2,awera_line,INDICATOR_DATA) ändern;
PlotIndexSetInteger(1,PLOT_LINE_WIDTH,AverageWidth); // Eigenschaften des Puffers für SetIndexBuffer(2,awera_line,INDICATOR_DATA) ändern;
PlotIndexSetInteger(1,PLOT_COLOR_INDEXES,2); // Eigenschaften des Puffers für SetIndexBuffer(2,awera_line,INDICATOR_DATA) ändern;
PlotIndexSetInteger(1,PLOT_LINE_COLOR,0,AverageTrendUp); // Eigenschaften des Puffers für SetIndexBuffer(2,awera_line,INDICATOR_DATA) ändern;
PlotIndexSetInteger(1,PLOT_LINE_COLOR,1,AverageTrendDw); // Eigenschaften des Puffers für SetIndexBuffer(2,awera_line,INDICATOR_DATA) ändern;
Für Ihre Frage sollten Sie besser einen eigenen Zweig anlegen. In diesem Zweig geht es um Funktionen, hier sollte es keine Diskussionen geben.
Um das Prinzip des Zeichnens besser zu verstehen, implementieren Sie die Funktionalität schrittweise. Sie haben eine Linie gebaut - überprüfen Sie ihre Funktionalität, fügen Sie die nächste hinzu.
Jede grafische Reihe (in diesem Fall eine Farblinie) kann nur einen Farbpuffer haben. Jeder Puffer kann viele Farben enthalten.
In der Version 1907 sind die Bugs auf wundersame Weise verschwunden. Ich weiß nicht einmal, ob ich zurückgehen soll, um sie zu finden, oder ob hier gerade etwas repariert worden ist...
Die Fehler sind verschwunden, die Probleme mit der Ereigniswarteschlange jedoch nicht. Nach einigen Stunden beginnt das Terminal, die CPU bis zu 95 % zu belasten. Und irgendetwas sagt mir, dass Zecken übersprungen werden.
@Slava, hat sich an ChartEvent in den 19xx-Builds etwas geändert? Wird das Problem in Ihren Builds reproduziert?
Die Fehler sind verschwunden, nicht aber die Probleme mit der Ereigniswarteschlange. Nach einigen Betriebsstunden beginnt das Terminal, die CPU zu 95 % auszulasten. Und irgendetwas sagt mir, dass die Zecken fehlen.
@Slava, hat sich an ChartEvent in den 19xx-Builds etwas geändert? Ist Ihr Problem reproduzierbar?
So sieht die Überwachung der Ressourcen nach 15 Stunden Arbeit des Terminals aus (die minimale Häufigkeit, mit der der Spion Ereignisse sendet, beträgt 500 ms):
Obwohl die CPU-Last nach dem Start mehrere Stunden lang nahe bei 0 liegt.
So sieht die Ressourcenüberwachung nach 15 Stunden Betrieb des Terminals aus (die Mindestübertragungsrate von Spyware-Ereignissen beträgt 500 ms):
Obwohl die CPU-Belastung nach dem Start einige Stunden lang nahe bei 0 liegt.
Bild 1908 - keine Änderung.
Die Möglichkeit, die Operatoren der Basistypstruktur zu ersetzen, bietet in einigen Situationen mehr Flexibilität.
Hier ist ein Beispiel für eine der Techniken zur benutzerdefinierten Sortierung eines Arrays von Strukturen
Ergebnis
Dies ist wahrscheinlich ein altes Fahrrad.
Die Möglichkeit, Operatoren von Basistyp-Strukturen zu ersetzen, ermöglicht in einigen Situationen Flexibilität.
Es gibt ein paar Punkte. In Mql muss der <-Operator unbedingt eine Methode der Klasse/Struktur sein.
Dies bedeutet, dass sie nicht für eingebettete oder unveränderliche Strukturen gesetzt werden kann.
Dies kann ein wenig verbessert werden, indem man eine Vergleichsfunktion in der Vorlage hinzufügt, die standardmäßig den <-Operator aufruft
UPD: Ich schreibe überall < als Operator, weil er in der Regel überladen ist und nicht >, das ist nicht streng, aber allgemein akzeptiert.Es gibt ein paar Punkte. In Mql muss der <-Operator eine Methode der Klasse/Struktur sein.
Das bedeutet, dass er nicht für eingebettete Strukturen oder für unveränderliche Strukturen gesetzt werden kann.
Ergebnis
Dieser Weg kann noch etwas verbessert werden, indem man eine Vergleichsfunktion in der Vorlage hinzufügt, die standardmäßig den <-Operator aufruft
Wenn Sie typedef verwenden, dann müssen Sie eine Sortierfunktion nicht nur für Strukturen, sondern auch für numerische Standardtypen definieren. Oder vielleicht verstehe ich nicht, wovon Sie sprechen.