Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 239

 
Anatoli Kazharski #:

Wie kann ich herausfinden, ob ein Symbol Daten hat, so dass ich es nicht im [Market Watch]-Fenster belasse, wenn es keine hat?

SymbolInfoTick.

 
fxsaber #:

SymbolInfoTick.

Ich habe diese Option ausprobiert. Leider funktioniert sie nicht. Wenn ein Symbol zum ersten Mal zum [Market Watch]-Fenster hinzugefügt wird, gibt es noch keine Daten dazu und SymbolInfoTick gibt Nullwerte zurück.

Ich habe auch die CopyXXX-Funktionen getestet, aber sie haben keinen Timeout und das Warten auf Daten vom Server dauert etwa 45 Sekunden, was zu lange ist.

Ich brauche einen schnellen Weg, um herauszufinden, ob ein Zeichen unbrauchbar ist. Ich beziehe mich auf Fälle wie diesen:


//---

Solche Symbole haben keine Daten auf dem Server und brauchen eine Möglichkeit, sie zu identifizieren, damit sie nicht zum [Marktübersicht]-Fenster hinzugefügt oder aus der Liste entfernt werden, wenn sie es doch tun.

P.S. Vielleicht gibt es eine Möglichkeit, die Sperre beim Entfernen von Symbolen aus der Liste im Fenster[ Marktübersicht] aufzuheben?

 
Anatoli Kazharski #:

Ich habe diese Option ausprobiert. Leider funktioniert sie nicht. Wenn ein Symbol zum ersten Mal dem [Market Watch]-Fenster hinzugefügt wird, gibt es noch keine Daten dazu und SymbolInfoTick gibt Nullwerte zurück.

Es ist einfach, funktionierende Symbole von Hand zu erhalten.

  1. Fügen Sie alle Symbole mit ein paar Klicks zur Marktbeobachtung hinzu.
  2. In ein paar Sekunden werden die Ticks auf ihnen empfangen.
  3. Sortieren nach Zeit mit einem Mausklick.
  4. Löschen eines der Schwänze der erhaltenen Liste mit der Entf-Taste.
All dies kann bis zu einer halben Minute dauern.
 
Anatoli Kazharski #:

Ich habe diese Option ausprobiert. Leider funktioniert sie nicht. Wenn ein Symbol zum ersten Mal dem [Market Watch]-Fenster hinzugefügt wird, gibt es noch keine Daten dazu und SymbolInfoTick gibt Nullwerte zurück.

Ich habe auch die CopyXXX-Funktionen getestet, aber sie haben keinen Timeout und das Warten auf Daten vom Server dauert etwa 45 Sekunden, was zu lange ist.

Ich brauche einen schnellen Weg, um herauszufinden, ob ein Zeichen unbrauchbar ist. Ich beziehe mich auf Fälle wie diesen:


//---

Solche Symbole haben keine Daten auf dem Server und benötigen eine Möglichkeit, sie zu identifizieren, damit sie nicht zum [Market Watch]-Fenster hinzugefügt oder aus der Liste entfernt werden, wenn sie es sind.

P.S. Vielleicht gibt es eine Möglichkeit, die Sperre für das Entfernen von Symbolen aus der Liste im[Market Watch]-Fenster aufzuheben?

Ich kämpfe schon seit etwa 6 Jahren mit diesem Problem und bitte die Entwickler, hier für Ordnung zu sorgen.

Leider ist dieses Problem nicht gelöst worden, und im Moment gibt es Situationen, in denen sich das Terminal aufhängt, wenn jemand zum ersten Mal auf ein Finanzinstrument zugreift.

 
Anatoli Kazharski #:

Wie kann ich herausfinden, ob ein Symbol Daten hat, so dass ich es nicht im [Market Watch]-Fenster belasse, wenn es keine hat?

Ich verwende eine solche Prüfung in einer Schleife:

Aber danach kann ich die Symbole nicht mehr manuell aus dem [Market Watch]-Fenster entfernen , weder eines nach dem anderen noch alle auf einmal, während sich der Expert Advisor im Chart befindet:


Versuchen Sie, die Zeit des letzten Kurses zu überprüfen.

SymbolInfoInteger(name, SYMBOL_TIME);

Wenn 0, gibt es keine Daten.

Ich habe gerade die offenen Charts überprüft.

2024.01.05 10:38:43.783 !00 (GBPUSD,H1) USDCAD 2024.01.05 09:38:51
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) NZDUSD 2024.01.05 09:38:51
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) USDCAD 2024.01.05 09:38:51
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) EURGBP 2024.01.05 09:38:49
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) GBPUSD 2024.01.05 09:38:49
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) POZ3 1970.01.01 00:00:00
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) EDH4 1970.01.01 00:00:00
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) BRZ3 1970.01.01 00:00:00
 
Es ist möglich, durch Umschalten zwischen Servern zusätzliche Daten zu erhalten. Ich weiß nicht, ob sich dies durch Code umsetzen lässt.
 
Nauris Zukas #:
Es ist möglich, durch Umschalten zwischen Servern zusätzliche Daten zu erhalten. Ich weiß nicht, ob es möglich ist, dies durch den Code zu implementieren.

Wenn Sie mit "zwischen Servern" "zwischen Brokern" meinen, dann kaum, es sei denn, Sie versuchen, mit Profilen zu spielen.

Aber wenn ich wirklich zwischen verschiedenen Servern eines Brokers wechseln müsste (Open hatte viele, Finam hatte zwei), würde ich es über iptables/nftables und meine Bash-Skripte machen. Aber hier ist es einfacher für mich, ich habe Linux.

 
JRandomTrader #:

Wenn Sie mit "zwischen Servern" "zwischen Brokern" meinen.


.

 
Nauris Zukas #:


Ja, im Prinzip ist das möglich.

Da es aber keine Möglichkeit gibt, den Namen und die IP des Servers aus dem MQL-Programm herauszufinden, müssen Sie sie manuell herausfinden, indem Sie den Server wechseln und prüfen, zu welcher IP die Verbindung geht.

Dann ist es möglich, durch Änderungen in der Konfiguration der Firewall die Verbindung zu einem bestimmten Server zu verbieten (hier ist es notwendig, Pakete zu rejacken, nicht zu verwerfen, um Timeout zu vermeiden) und MT zu zwingen, zu einem anderen zu wechseln.

Auch hier ist es für mich nicht schwer, dies unter Linux zu tun, aber ich kann mir nicht vorstellen, wie man es unter Windows macht.

 
Alexey Viktorov #:

Versuchen Sie, den Zeitpunkt des letzten Zitats zu überprüfen.

Wenn 0, gibt es keine Daten.

Ich habe gerade mit den offenen Charts verglichen.

Dies gilt auch für einen ähnlichen Fall:

Ich habe diese Option ausprobiert. Leider passt sie nicht. Wenn ein Symbol zum ersten Mal zum [Market Watch]-Fenster hinzugefügt wird, gibt es noch keine Daten dazu und SymbolInfoTick liefert Nullwerte.

Wenn Ticks selten vorkommen, werden alle solchen Symbole ausgeschlossen.

fxsaber #:

Es ist einfach, funktionierende Symbole von Hand zu erhalten.

  1. Fügen Sie alle Symbole mit ein paar Klicks zum Market Watch hinzu.
  2. In ein paar Sekunden werden die Ticks auf ihnen empfangen.
  3. Sortieren mit einem Mausklick nach Zeit.
  4. Löschen eines der Schwänze der erhaltenen Liste mit der Entf-Taste.
All dies kann bis zu einer halben Minute dauern.

Nein. Sie brauchen eine Vollautomatik.

Vladimir Pastushak #:

Ich kämpfe schon seit 6 Jahren damit, und ich bitte die Entwickler, hier Ordnung zu schaffen.

Leider ist dieses Problem nicht gelöst, und im Moment gibt es Situationen, in denen sich das Terminal aufhängt, wenn jemand zum ersten Mal auf ein Finanzinstrument zugreift.

Ich habe es nur beim Aufruf der folgenden Funktionen bemerkt:

  • Bars()
  • iBars()
  • SeriesInfoInteger(symbol, PERIOD_M1, SERIES_BARS_COUNT)

//---

Terminal-Entwickler:

1. Schließen Sie die Möglichkeit aus, Symbole ohne Daten auf dem Handelsserver hinzuzufügen.

2. Machen Sie es möglich, die Blockierung des Löschens von Symbolen aus dem [Market Watch]-Fenster zu deaktivieren oder beheben Sie den Fehler, falls es sich um einen Fehler handelt. Jetzt kann dies nur durch einen Neustart des Terminals erfolgen.

3. Fügen Sie für Funktionen wie CopyXXX einen zusätzlichen optionalen Parameter hinzu, um den Timeout (maximale Zeit, die auf Daten vom Server gewartet werden kann) einzustellen.

Ich kann das im Moment nicht reproduzieren. Bis jetzt funktioniert es ohne Verzögerung. Aber es scheint, dass es in einigen Fällen vorkommen kann.

4. Behebung des Fehlers mit unendlichem Warten bei der Verwendung der Funktionen Bars(), iBars(), SeriesInfoInteger(symbol, PERIOD_M1, SERIES_BARS_COUNT) in Fällen, in denen:

  • keine Verbindung zum Server
  • keine Daten über das Symbol

Der Versuch, das Programm aus dem Chart zu löschen, kann dazu führen, dass das Terminal für mehrere Minuten hängen bleibt.

5. Behebung des Fehlers mit unendlichen Wartezeiten bei der Verwendung von Funktionen, wenn keine Verbindung zum Server besteht:

  • SeriesInfoInteger(Symbol, PERIOD_M1, SERIES_FIRSTDATE)
  • SeriesInfoInteger(Symbol, PERIOD_M1, SERIES_LASTBAR_DATE)
  • SeriesInfoInteger(Symbol, PERIOD_M1, SERIES_SERVER_FIRSTDATE)

In diesem Fall können Sie auch einen zusätzlichen optionalen Parameter hinzufügen, um den Timeout (maximale Wartezeit auf Daten vom Server) festzulegen.

//---

P.S. Bislang habe ich mich für die Variante mit der Prüfung auf Daten mit Funktionen wie CopyXXX entschieden. Ich werde aber beobachten, ob das oben beschriebene Problem wieder auftauchen wird.