Das Problem der Umstellung von MT4 auf MT5. Oder, genauer gesagt, die Unfähigkeit, einige Algorithmen in MT5 ohne Fehler auszuführen. - Seite 4

 
Eugeni Neumoin:

Es gibt kein Problem mit OnCalculate(). Die gesamte GUI funktioniert über OnChartEvent() . Es gibt mehr als 400 Schaltflächen in der grafischen Benutzeroberfläche. Einige der Schaltflächen interagieren in keiner Weise mit der Zeitreihe. Die Funktionen OnCalculate() und OnTrade() können bis zum nächsten Tick warten. Dies ist psychologisch nicht spürbar. Und mit OnChartEvent() wird es noch komplizierter. Hier ist die menschliche Psychologie im Spiel. Der Programmbenutzer drückt die GUI-Taste. Und er/sie bekommt nicht die Antwort, die er/sie sich wünscht. Wie ist seine/ihre Reaktion? Eine der Reaktionen ist, dass er/sie die gleiche Taste ein zweites Mal drückt. Ich habe es so eingerichtet, dass ein zweiter Druck auf viele der Tasten die mit dieser Taste verbundene Funktion deaktiviert. Ich nehme Ihren Vorschlag vorweg, die Funktion der Schaltfläche auf andere Weise zu deaktivieren. Aber es gibt das gleiche Programm für MT4. Dort funktioniert es normal. Es wird sich zeigen, dass MT4 einen Algorithmus für die Interaktion mit der grafischen Oberfläche hat, während MT5 einen anderen hat. Ein solches Verhalten desselben Programms kann nur zur Ablehnung führen.

Ich tat etwas ähnliches, wenn die Übersetzung zu MT5 - ich aktiviert Ausfahrt von OnChartEvent(). Ich will nicht lügen, deshalb ist die GUI gerade gestorben.

Und in meinem Fall erfolgt der Verweis auf die Zeitreihe in OnTimer() nach 5 Minuten. Ich werde es nach 2 Minuten tun. Ich werde prüfen, was passieren wird.

Artem, Ihre Vorschläge waren schon früher nützlich.

Nein, es wird sicherlich keine Vorschläge geben, die Logik der Arbeit mit Grafiken zu ändern - der plattformübergreifende Code sollte auf dieselbe Weise funktionieren.

  1. Die Anwendung auf Zeitreihen sollte mindestens alle zwei Minuten erfolgen - nur so ist gewährleistet, dass sie immer aktuell sind. D.h., in mehreren... Indikatoren, muss dieser Teil des Codes standardmäßig sein.
  2. In MQL5 muss das Diagramm, anders als in MQL4, mit CartRedraw() aktualisiert werden, um die Änderungen des Diagramms nach allen notwendigen Manipulationen mit allen grafischen Objekten, die auf einmal aktualisiert werden können, anzuzeigen - Sie müssen das Diagramm nicht nach jeder Änderung eines Elements aktualisieren. Ich weiß nicht, ob ich mich klar ausgedrückt habe. Wenn z.B. ein Benutzer auf eine Schaltfläche geklickt hat und zusätzlich etwas gezeichnet werden soll, z.B. ein aus mehreren Elementen bestehendes Tabellenobjekt, dann sollen alle Elemente gezeichnet werden und erst dann soll der Graph einmal aktualisiert werden. Nicht nach jedem gezeichneten Element eines einzelnen Objekts zu aktualisieren.
    Wenn der Benutzer auf die Schaltfläche geklickt hat, aber nichts sieht, kann es durchaus sein, dass tatsächlich alles vorhanden ist, nur die Grafik noch nicht aktualisiert wurde (sie aktualisiert sich erst mit dem Eintreffen des Häkchens).
 
Artyom Trishkin:

Nein, es wird sicherlich nicht vorgeschlagen, die Grafiklogik zu ändern - der plattformübergreifende Code sollte auf dieselbe Weise funktionieren.

Das Einzige, was ich vorschlagen kann, um die Schaltflächen zu verbessern, ist, dass es in jedem Fall, wenn die erforderliche Zeitreihe noch nicht verfügbar ist, nicht möglich ist, eine Grafik auf ihren Daten zu erstellen. In diesem Fall müssen wir den Moment abwarten, in dem die Daten verfügbar sind, und die Schaltflächen während der Wartezeit inaktiv machen - zum Beispiel ähnlich wie bei Windows-Oberflächen: Wenn keine Aktion auf der Schaltfläche verfügbar ist, wird die Schaltfläche ausgegraut. Diese Logik kann für beide Plattformen vorhanden sein, so dass es keinen Unterschied im Code gibt.

 

Ich habe ChartRedraw() ausgelöst, wenn ich große Blöcke verlasse, z.B. OnChartEvent() und andere. An dieser Funktion ist also nichts auszusetzen.

Über Tooltips. Sie sind wie ein Indikator dafür, dass alles funktioniert, wenn Sie auf eine Zahl oder ein Symbol klicken.

Wenn Sie auf die Zahl und das Symbol klicken, muss eines der Elemente OnChartEvent() - CHARTEVENT_OBJECT_CLICK ausgelöst werden. Sie wird nicht ausgelöst, wenn der Tooltip nicht erscheint. Ich würde gerne wissen, warum das passiert. CHARTEVENT_OBJECT_CLICK funktioniert nicht .

Und ich werde den Zugang zu Zeitreihen genau im Auge behalten.

 
Eugeni Neumoin:

Ich habe ChartRedraw() ausgelöst, wenn ich große Blöcke verlasse, z.B. OnChartEvent() und andere. An dieser Funktion ist also nichts auszusetzen.

Über Tooltips. Sie sind wie ein Indikator dafür, dass alles funktioniert, wenn Sie auf eine Zahl oder ein Symbol klicken.

Wenn Sie auf die Zahl und das Symbol klicken, muss eines der Elemente OnChartEvent() - CHARTEVENT_OBJECT_CLICK ausgelöst werden. Sie wird nicht ausgelöst, wenn der Tooltip nicht erscheint. Ich würde gerne wissen, warum das passiert. CHARTEVENT_OBJECT_CLICK funktioniert nicht .

Und ich werde den Zugang zu Zeitreihen genau im Auge behalten.

Loggen Sie ganz am Anfang des Graph Event Handlers den Parameter sparam - dann wird jede Aktion protokolliert. Dann beginnen Sie, die Ausgabe einzuschränken - wenn es ein Objektklick-Ereignis gibt (id==CHARTEVENT_OBJECT_CLICK), dann geben Sie sparam in das Protokoll aus. Und so kommen Sie langsam zur Ursache.

 
Artyom Trishkin:

Loggen Sie ganz am Anfang des Graph Event Handlers den Parameter sparam - dann wird jede Aktion protokolliert. Dann beginnen Sie, die Ausgabe einzuschränken - wenn es ein Objektklick-Ereignis gibt (id== CHARTEVENT_OBJECT_CLICK), dann geben Sie sparam in das Protokoll aus. Und so kommen Sie langsam zur Ursache.

Das ist genau die Art und Weise, wie ich die Fehlersuche durchgeführt habe. Und im Code sind die Bits zum Debuggen in OnChartEvent() immer in der kommentierten Form vorhanden. Aber danke. Ich werde es auf diese Weise tun. Ich werde nach der Ursache suchen.
 

Um Probleme mit der Zahlen- und Symbolbindung zu vermeiden, müssen Sie die Priorität von Zahlen und Symbolen mit OBJPROP_ZORDER erhöhen.

In MT4 funktioniert es auch ohne diese Funktion. Allerdings habe ich die Priorität in MT4 vorsichtshalber erhöht. Außerdem hatten die Wellensymbole einen höheren Stellenwert als die Zahlen.

Ich habe das Problem gelöst.

Ich versuche, alle Zeitreihen nach 2 Minuten zu ändern - ich wähle verschiedene Varianten für eine möglichst reibungslose Durchführung dieser Aufgabe.

Der Prozess hat begonnen...

 
Eugeni Neumoin:

Um Probleme mit der Zahlen- und Symbolbindung zu vermeiden, müssen Sie die Priorität von Zahlen und Symbolen mit OBJPROP_ZORDER erhöhen.

In MT4 funktioniert es auch ohne diese Funktion. Allerdings habe ich die Priorität in MT4 vorsichtshalber erhöht. Außerdem hatten die Wellensymbole einen höheren Stellenwert als die Zahlen.

Ich habe das Problem gelöst.

Ich versuche, alle Zeitreihen nach 2 Minuten zu ändern - ich wähle verschiedene Varianten für eine möglichst reibungslose Durchführung dieser Aufgabe.

Der Prozess hat begonnen...

Die Glätte hat nichts damit zu tun :)
Sie müssen nur mindestens einmal alle zwei Minuten auf alle funktionierenden TFs zugreifen. Ich greife in der Regel alle 90 Sekunden zu. Sie können die Zugriffszeiten für die verschiedenen Händler aufteilen, um sie nicht alle auf einmal abrufen zu müssen. Allerdings sollte jede Seite mindestens einmal alle zwei Minuten aufgerufen werden.
 
Artyom Trishkin:
Glätte ist hier keine Option :)
Sie müssen nur mindestens einmal alle zwei Minuten auf alle funktionierenden cf's zugreifen. Ich rufe normalerweise alle 90 Sekunden an. Sie können die Zugriffszeiten für die verschiedenen Verkehrsarten aufteilen, so dass Sie nicht alle auf einmal abrufen müssen. Allerdings sollte jede Seite mindestens einmal alle zwei Minuten aufgerufen werden.

Es gibt Bremsen.

Aber wir müssen uns mit dem begnügen, was wir haben.

Es ist unmöglich, die Unermesslichkeit zu begreifen).

 
Artyom Trishkin:
Glätte ist hier keine Option :)
Sie müssen nur mindestens einmal alle zwei Minuten auf alle funktionierenden cf's zugreifen. Ich rufe normalerweise alle 90 Sekunden an. Sie können die Zugriffszeiten für die verschiedenen Verkehrsarten aufteilen, so dass Sie nicht alle auf einmal abrufen müssen. Allerdings sollte jede Seite mindestens einmal alle zwei Minuten aufgerufen werden.

Es ist unmöglich, sie zu trennen. Wenn mindestens ein Handel nicht aktualisiert wird, kann der Indikator einige grafische Konstruktionen falsch darstellen.

Andererseits habe ich die Verfügbarkeit von Zeitreihen vor OnCalculate und OnChartEvent überprüft. Wie vorgeschlagen.

Die Aktualisierung von Zeitreihen und die Überprüfung der Verfügbarkeit von Zeitreihen verursachen erhebliche Verzögerungen.

Es kommt immer noch zu Unterbrechungen beim Zugriff auf die Zeitreihe. Wie ich bereits bei der Erstellung des Zweigs in einem der ersten Beiträge sagte. Dies bestätigt, dass wir die Zeitreihen programmatisch aktualisieren müssen.

Dies ist die erste.

Zweitens. Warum muss sich jeder Entwickler die Mühe machen, den Zugriff auf Zeitreihen zu organisieren?

Warum gibt es nicht irgendeinen zusätzlichen "Mechanismus", der diese Schwierigkeiten beseitigt?

Wenn jemand diesen Ärger braucht, verbietet ihm niemand, das zu benutzen, was jetzt verfügbar ist. Und für diejenigen, die der Meinung sind, dass ein universeller alternativer Zugang zu Zeitreihen in Ordnung ist, ist es besser, wenn dieser Zugang von den Entwicklern gemacht wird.

Mehrere Leute haben mich gebeten, ein Programm von MT4 nach MT5 zu übersetzen. Ich habe es getan. Ich bin mit der Übersetzung nicht zufrieden. Aber solange ich das Programm heruntergeladen habe, habe ich keine Beschwerden. Vielleicht sind sie ja damit zufrieden. Obwohl ich das bezweifle.

Ich möchte noch etwas von meiner Seite hinzufügen. Ich habe aufgehört, mit der Optimierung des Zugriffs auf Zeitreihen zu experimentieren. Dies ist eine unproduktive Nutzung der Zeit. Es gibt noch mehr interessante Dinge zu tun. Diejenigen, die daran interessiert sind, sollten mit MT5 arbeiten. Das Einzige, was aus MT5 herausgekaut werden kann, ist die Kurshistorie. Für den Einsatz im NS-Unterricht.

 
Eugeni Neumoin:

Andererseits wurde die Verfügbarkeit der Zeitreihen vor den Funktionen OnCalculate und OnChartEvent geprüft. Wie vorgeschlagen.

Die Aktualisierung von Zeitreihen und die Überprüfung der Verfügbarkeit von Zeitreihen führt zu starken Verlangsamungen.

Es wurde vorgeschlagen, dies mit einer Zeitschaltuhr alle anderthalb Minuten zu tun. Nicht vor jedem Tick, und schon gar nicht bei einem Chart-Ereignis.

Der Zugang zu Zeitreihen im MT5 ist wirklich nicht ideal. Aber wenn Sie ein Problem lösen müssen, anstatt eine Ausrede zu finden, ist es möglich.

Grund der Beschwerde: