Fehler, Irrtümer, Fragen - Seite 2778
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
Ein anderes Terminal, aber 20 Charts (verschiedene Symbole), wurde zur gleichen Zeit gestartet.
Ich habe beim AUDUSD überprüft, wo die Spitze liegt:
2020.06.13 09: 16: 35.151 342152 (USDJPY, H1) Quantity = 240
2020.06.13 09: 16: 35.151 342152 (USDJPY, H1) Min = 38
2020.06.13 09: 16: 35.151 342152 (USDJPY, H1) Max = 2235
2020.06.13 09: 16: 35.151 342152 (USDJPY, H1) Avg = 472
2020.06.13 09: 16: 35.151 342152 (CADCHF, H1) Avg = 240
2020.06.13 09: 16: 35.151 342152 (CADCHF, H1) Min = 48
2020.06.13 09: 16: 35.151 342152 (CADCHF, H1) Max = 2323
2020.06.06.13 09: 16: 35.152 342152 (CADCHF, H1) Avg = 606
2020.06.13 09: 16: 35.152 342152 (EURAUD, H1) Menge = 240
2020.06.13 09: 16: 35.152 342152 (EURCHF, H1) Menge = 240
2020.06.13 09: 16: 35.152 342152 (GBPCHF, H1) Menge = 240
2020.06.13 09: 16: 35.152 342152 (EURCHF, H1) Min = 141
2020.06.13 09: 16: 35.152 342152 (EURGBP, H1) Menge = 240
2020.06.13 09: 16: 35.152 342152 (CHFJPY, H1) Menge = 240
2020.06.13 09: 16: 35.152 342152 (AUDJPY, H1) Menge = 240
2020.06.13 09: 16: 35.152 342152 (AUDJPY, H1) Min = 47
2020.06.13 09: 16: 35.152 342152 (EURUSD, H1) Menge = 240
2020.06.13 09: 16: 35.152 342152 (EURUSD, H1) Min. = 23
2020.06.13 09: 16: 35.152 342152 (EURUSD, H1) Max = 2368
2020.06.13 09: 16: 35.152 342152 (AUDUSD, H1) Quantity = 240
2020.06.13 09: 16: 35.152 342152 (EURUSD, H1) Avg = 607
2020.06.13 09: 16: 35.152 342152 (AUDUSD, H1) Min = 74
2020.06.13 09: 16: 35.152 342152 (GBPJPY, H1) Avg = 240
2020.06.13 09: 16: 35.152 342152 (AUDNZD, H1) Avg = 240
2020.06.13 09: 16: 35.152 342152 (USDCHF, H1) Avg = 240
2020.06.06.13 09: 16: 35.152 342152 (AUDNZD, H1) Min = 122
2020.06.13 09: 16: 35.152 342152 (AUDCHF, H1) Quantity = 240
2020.06.13 09: 16: 35.152 342152 (AUDNZD, H1) Max = 2402
2020.06.13 09: 16: 35.152 342152 (AUDNZD, H1) Avg = 660
2020.06.06.13 09: 16: 35.152 342152 (AUDCHF, H1) Min = 157
2020.06.13 09: 16: 35.152 342152 (AUDCHF, H1) Max = 2354
2020.06.13 09: 16: 35.152 342152 (AUDCHF, H1) Avg = 663
2020.06.13 09: 16: 35.152 342152 (GBPCHF, H1) Min = 32
2020.06.06.13 09: 16: 35.152 342152 (GBPCHF, H1) Max = 2380
2020.06.13 09: 16: 35.152 342152 (GBPCHF, H1) Avg = 616
2020.06.13 09: 16: 35.152 342152 (EURCHF, H1) Max = 2327
2020.06.13 09: 16: 35.152 342152 (EURCHF, H1) Avg = 618
2020.06.13 09: 16: 35.152 342152 (EURGBP, H1) Min = 36
2020.06.13 09: 16: 35.152 342152 (EURGBP, H1) Max = 2233
2020.06.13 09: 16: 35.152 342152 (EURGBP, H1) Avg = 503
2020.06.13 09: 16: 35.152 342152 (CHFJPY, H1) Min = 11
2020.06.13 09: 16: 35.152 342152 (EURGBP, H1)13 09: 16: 35.152 342152 (CHFJPY, H1) Max = 2387
2020.06.13 09: 16: 35.152 342152 (CHFJPY, H1) Avg = 657
2020.06.13 09: 16: 35.152 342152 (AUDJPY, H1) Max = 2292
2020.06.13 09: 16: 35.152 342152 (AUDJPY, H1) Avg = 612
2020.06.13 09: 16: 35.152 342152 (EURNZD, H1) Quantity = 240
2020.06.13 09: 16: 35.152 342152 (EURNZD, H1) Min = 54
2020.06.13 09: 16: 35.152 342152 (EURNZD, H1) Max = 2361
2020.06.13 09: 16: 35.152 342152 (EURNZD, H1) Avg = 612
2020.06.06.13 09: 16: 35.152 342152 (AUDCAD, H1) Avg = 240
2020.06.13 09: 16: 35.152 342152 (AUDCAD, H1) Min = 121
2020.06.13 09: 16: 35.152 342152 (EURCAD, H1) Avg = 240
2020.06.13 09: 16: 35.152 342152 (AUDCAD, H1) Max = 2328
2020.06.13 09: 16: 35.152 342152 (AUDCAD, H1) Avg = 605
2020.06.13 09: 16: 35.152 342152 (AUDUSD, H1) Max = 2361
2020.06.13 09: 16: 35.152 342152 (AUDUSD, H1) Avg = 611
2020.06.13 09: 16: 35.152 342152 (GBPJPY, H1) Min = 13
2020.06.13 09: 16: 35.152 342152 (GBPJPY, H1) Max = 2411
2020.06.13 09: 16: 35.152 342152 (GBPJPY, H1) Avg = 661
2020.06.13 09: 16: 35.153 342152 (GBPUSD, H1) Avg = 240
2020.06.13 09: 16: 35.13 09: 16: 35.153 342152 (GBPUSD, H1) Min = 113
2020.06.13 09: 16: 35.153 342152 (GBPUSD, H1) Max = 2362
2020.06.13 09: 16: 35.153 342152 (GBPUSD, H1) Avg = 667
2020.06.13 09: 16: 35.153 342152 (USDCAD, H1) Quantity = 240
2020.06.06.13 09: 16: 35.153 342152 (USDCAD, H1) Min = 151
2020.06.13 09: 16: 35.153 342152 (USDCAD, H1) Max = 2386
2020.06.13 09: 16: 35.153 342152 (EURAUD, H1) Min = 35
2020.06.13 09: 16: 35.153 342152 (USDCAD, H1) Avg = 671
2020.06.13 09: 16: 35.153 342152 (EURAUD, H1) Max = 2233
2020.06.13 09: 16: 35.153 342152 (EURAUD, H1) Avg = 478
2020.06.13 09: 16: 35.153 342152 (EURJPY, H1) Quantity = 240
2020.06.13 09: 16: 35.153 342152 (EURJPY, H1) Min = 10
2020.06.06.13 09: 16: 35.153 342152 (EURCAD, H1) Min = 123
2020.06.13 09: 16: 35.153 342152 (EURCAD, H1) Max = 2384
2020.06.13 09: 16: 35.153 342152 (EURCAD, H1) Avg = 658
2020.06.13 09: 16: 35.153 342152 (USDCHF, H1) Min = 32
2020.06.06.13 09: 16: 35.153 342152 (USDCHF, H1) Max = 2369
2020.06.13 09: 16: 35.153 342152 (USDCHF, H1) Avg = 614
2020.06.13 09: 16: 35.153 342152 (EURJPY, H1) Max = 2344
2020.06.13 09: 16: 35.153 342152 (EURJPY, H1) Avg = 658
Und hier kommen die Oberteile ins Spiel:
2020.06.13 09: 17: 35.151 342152 (USDJPY, H1) Avg = 480
2020.06.13 09: 17: 35.151 342152 (USDJPY, H1) Min = 38
2020.06.13 09: 17: 35.151 342152 (USDJPY, H1) Max = 17421
2020.06.06.13 09: 17: 35.151 342152 (USDJPY, H1) Avg = 533
2020.06.13 09: 17: 35.151 342152 (EURAUD, H1) Quantity = 480
2020.06.13 09: 17: 35.151 342152 (EURAUD, H1) Min = 35
2020.06.06.13 09: 17: 35.151 342152 (EURAUD, H1) Max = 17406
2020.06.13 09: 17: 35.151 342152 (EURAUD, H1) Avg = 518
2020.06.13 09: 17: 35.151 342152 (EURGBP, H1) Quantity = 480
2020.06.13 09: 17: 35.151 342152 (EURGBP, H1) Min = 36
2020.06.13 09: 17: 35.151 342152 (EURGBP, H1) Max = 17425
2020.06.13 09: 17: 35.151 342152 (EURGBP, H1) Avg = 515
2020.06.13 09: 17: 35.151 342152 (EURUSD, H1) Quantity = 480
2020.06.13 09: 17: 35.151 342152 (EURUSD, H1) Min = 18
2020.06.13 09: 17: 35.151 342152 (EURUSD, H1) Max = 17366
2020.06.13 09: 17: 35.151 342152 (EURCHF, H1) Max = 480
2020.06.13 09: 17: 35.151 342152 (EURUSD, H1) Avg = 618
2020.06.13 09: 17: 35.151 342152 (AUDCHF, H1) Max = 480
2020.06.13 09: 17: 35.151 342152 (USDCHF, H1) Menge = 480
2020.06.13 09: 17: 35.151 342152 (AUDCHF, H1) Min = 126
2020.06.13 09: 17: 35.151 342152 (CADCHF, H1) Menge = 480
2020.06.13 09: 17: 35.151 342152 (AUDCHF, H1) Max = 10477
2020.06.13 09: 17: 35.151 342152 (EURCAD, H1) Menge = 480
2020.06.13 09: 17: 35.151 342152 (GBPUSD, H1) Menge = 480
2020.06.13 09: 17: 35.152 342152 (EURCAD, H1) Min = 123
2020.06.13 09: 17: 35.152 342152 (GBPUSD, H1) Min = 112
2020.06.13 09: 17: 35.152 342152 (EURCAD, H1) Max = 10485
2020.06.13 09: 17: 35.152 342152 (EURCAD, H1) Avg = 663
2020.06.13 09: 17: 35.152 342152 (GBPUSD, H1) Max = 10435
2020.06.13 09: 17: 35.152 342152 (GBPUSD, H1) Avg = 661
2020.06.13 09: 17: 35.152 342152 (EURCHF, H1) Min = 71
2020.06.06.13 09: 17: 35.152 342152 (EURJPY, H1) Avg = 480
2020.06.13 09: 17: 35.152 342152 (USDCAD, H1) Avg = 480
2020.06.13 09: 17: 35.152 342152 (USDCAD, H1) Min = 54
2020.06.13 09: 17: 35.152 342152 (EURJPY, H1) Min = 10
2020.06.13 09: 17: 35.152 342152 (EURJPY, H1) Max = 10487
2020.06.13 09: 17: 35.152 342152 (EURJPY, H1) Avg = 664
2020.06.13 09: 17: 35.152 342152 (EURJPY, H1) Avg = 664.13 09: 17: 35.152 342152 (EURNZD, H1) Menge = 480
2020.06.13 09: 17: 35.152 342152 (EURNZD, H1) Min = 54
2020.06.13 09: 17: 35.152 342152 (EURNZD, H1) Max = 17426
2020.06.06.13 09: 17: 35.152 342152 (EURNZD, H1) Avg = 620
2020.06.13 09: 17: 35.152 342152 (USDCHF, H1) Min = 32
2020.06.13 09: 17: 35.152 342152 (USDCHF, H1) Max = 17427
2020.06.13 09: 17: 35.152 342152 (USDCHF, H1) Avg = 649
2020.06.13 09: 17: 35.152 342152 (GBPCHF, H1) Max = 480
2020.06.13 09: 17: 35.152 342152 (GBPCHF, H1) Min = 32
2020.06.13 09: 17: 35.152 342152 (GBPCHF, H1) Max = 17433
2020.06.13 09: 17: 35.152 342152 (GBPCHF, H1) Avg = 647
2020.06.13 09: 17: 35.152 342152 (AUDJPY, H1) Min = 480
2020.06.13 09: 17: 35.152 342152 (AUDJPY, H1) Min. = 47
2020.06.13 09: 17: 35.152 342152 (AUDJPY, H1) Max = 17415
2020.06.13 09: 17: 35.152 342152 (AUDJPY, H1) Avg = 640
2020.06.13 09: 17: 35.152 342152 (CADCHF, H1) Min = 48
2020.06.13 09: 17: 35.152 342152 (CADCHF, H1) Max = 17435
2020.06.13 09: 17: 35.152 342152 (CADCHF, H1) Avg = 637
2020.06.13 09: 17: 35.152 342152 (AUDCHF, H1) Avg = 662
2020.06.13 09: 17: 35.152 342152 (AUDUSD, H1) Quantity = 480
2020.06.13 09: 17: 35.152 342152 (AUDUSD, H1) Min = 43
2020.06.13 09: 17: 35.152 342152 (AUDUSD, H1) Max = 17416
2020.06.13 09: 17: 35.152 342152 (AUDUSD, H1) Avg = 620
2020.06.13 09: 17: 35.152 342152 (GBPJPY, H1) Quantity = 480
2020.06.13 09: 17: 35.13 09: 17: 35.152 342152 (GBPJPY, H1) Min = 13
2020.06.13 09: 17: 35.152 342152 (GBPJPY, H1) Max = 10468
2020.06.13 09: 17: 35.152 342152 (GBPJPY, H1) Avg = 660
2020.06.13 09: 17: 35.152 342152 (CHFJPY, H1) Quantity = 480
2020.06.06.13 09: 17: 35.152 342152 (CHFJPY, H1) Min = 11
2020.06.13 09: 17: 35.152 342152 (CHFJPY, H1) Max = 10474
2020.06.13 09: 17: 35.152 342152 (AUDNZD, H1) Quantity = 480
2020.06.13 09: 17: 35.152 342152 (AUDNZD, H1) Min = 61
2020.06.13 09: 17: 35.152 342152 (AUDNZD, H1) Max = 10491
2020.06.13 09: 17: 35.152 342152 (AUDNZD, H1) Avg = 663
2020.06.13 09: 17: 35.152 342152 (EURCHF, H1) Max = 17414
2020.06.13 09: 17: 35.152 342152 (EURCHF, H1) Avg = 646
2020.06.13 09: 17: 35.152 342152 (AUDCAD, H1) Max = 480
2020.06.13 09: 17: 35.152 342152 (AUDCAD, H1) Min = 100
2020.06.13 09: 17: 35.152 342152 (AUDCAD, H1) Max = 17421
2020.06.06.13 09: 17: 35.152 342152 (AUDCAD, H1) Avg = 638
2020.06.13 09: 17: 35.152 342152 (USDCAD, H1) Max = 10488
2020.06.13 09: 17: 35.152 342152 (USDCAD, H1) Avg = 666
2020.06.13 09: 17: 35.152 342152 (CHFJPY, H1) Avg = 656
Es geschah also alles zur gleichen Zeit. Es könnte sich aber auch um ein MT5-Problem handeln. Ich werde das mit anderen gleichzeitigen Terminals überprüfen.
Nach den Protokollen zu urteilen, fiel die Verlangsamung des einen nicht mit der Verlangsamung des anderen zusammen, d. h. nicht gleichzeitig. Das Problem liegt also im Terminal selbst.
MQL5-Programme arbeiten (Get/Set-Methoden) mit einem Diagramm über eine Transaktionswarteschlange.
Dies ermöglicht es, die GUI und das Terminal selbst von den unvermeidlichen Blockaden zu befreien, die für MQL5-Programme ein Problem darstellen würden.
Die transaktionale Asynchronie ermöglicht ein schnelles Schreiben oder Lesen in getrennten Modi und aktiviert den Synchronisationsmodus sofort, wenn Set- und Get-Methoden gemischt werden.
Das heißt, es ist besser, 1000-mal asynchron zu setzen und dann 1000-mal zu holen, anstatt abwechselnd zu holen und zu setzen, wodurch die Warteschlange zu einem synchronen Prozess wird. Denn Sie müssen sicherstellen, dass das vorherige asynchrone Set genau überlappt wurde und Sie es jetzt lesen können.
Sie müssen die Systemfunktionen mit Bedacht einsetzen und sie nach Möglichkeit in den Cache stellen.
Sie müssen die Systemfunktionen sorgfältig nutzen und sie nach Möglichkeit in den Cache stellen.
Guten Tag, das Problem ist ein wenig anders - die ChartGetInteger und ähnliche Funktionen sind SEHR langsam in der Ausführung.
Beim Wechsel von Build 2009 zu Build 2485 hat sich die ChartGetInteger-Laufzeit von 5ms auf 200-250ms Spitze erhöht, was vor allem dann zum Problem wird, wenn 50+ Charts geöffnet sind.
System: Terminal Windows 10 build 18363, Intel Core i7-7700HQ @ 2.80GHz, 19 / 31 GB Speicher, 262 / 640 GB Festplatte, 4K Monitor, NVidia 1050Ti
Es wurde derCode aus der Problembeschreibung verwendet:https://www.mql5.com/en/forum/342152
Mögliche Ursachen des Problems:
Bugs, Bugs, Probleme
Sergey Dzyublik, 2020.06.13 19:20
Ich habe die Implementierung der Funktion ChartGetInteger für zwei Versionen von MT5 2009 und MT5 2485 verglichen, vielleicht ist das Problem wie folgt:
1. In 2485 werden zum Lesen von "atomaren" Feldern eines Diagrammobjekts eher langsame Operationen verwendet:
mfence; lock mov eax,[rax+2C];
Während dies in der 2009er Version wie folgt geschieht: lock xadd [rcx+2C],eax
Es scheint auch, dass sich die Logik und die mögliche Verweildauer in ntdll_RtlEnterCriticalSection erheblich geändert haben.
Früher, im Jahr 2009, überprüfte ein kritischer Abschnitt nur ein Paar empfangener Werte, ohne jegliche atomare Operationen.
Und in 2485 konnten die verknüpften Listenobjekte des Diagramms zusätzlich aufgezählt werden.
Vermutlich konnte das Problem auftreten, als der Absturz bei der Arbeit mit Diagrammfunktionen im Rahmen der Umstellung auf den neuen Compiler (vor etwa 2-3 Monaten) behoben wurde.
Assembler-Code für ChartGetInteger-Aufruf in MT5 (Build 2485) ist beigefügt.
Sehen Sie sich das an.
Schritte zur Wiedergabe:
1. Nehmen Sie ein sauberes MT-Terminal, öffnen Sie einen Chart darauf und führen Sie den oben kompilierten EA auf diesem Chart aus.
2. Nachdem Sie alle 95 neuen Diagramme geöffnet haben, erweitern Sie das Diagrammfenster auf die volle Breite des Diagrammbereichs in MT, falls dies noch nicht geschehen ist.
3. Um von einer Registerkarte zu einer anderen zu wechseln und die ChartGetInteger-Laufzeitwerte im Protokoll aufzuzeichnen.
Um alle geöffneten Diagramme zu schließen, können Sie die Tastenkombination STRG+W drücken und gedrückt halten.
Ergebnis von MT5 (Build 2009):
MT5 Ergebnis (buidl 2485):
Vergleich der Ergebnisse und Schlussfolgerungen:
1. Die Anzahl der Datensätze, die in der Version 2009 angezeigt werden, ist wesentlich höher als die Anzahl der Datensätze in der Version 2485.
Die Funktion ChartGetInteger wurde unter "normalen Bedingungen" nach dem Wechsel zu Build 2485 schneller.
2. Die Spitzenlaufzeit für Build 2009 - 15 ms, und für Build 2485 - 310 ms.
Die Funktion ChartGetInteger wird unter "ungünstigen Bedingungen" nach dem Wechsel zu Build 2485 bis zu 20 Mal langsamer.
3. auf die gleiche Weise, wie man die Öffnungsgeschwindigkeit von 95 Seekarten nach Augenmaß schätzen kann.
Bei beiden Builds ist die "exponentielle" Komplexität aufgrund der Anzahl der früher geöffneten Diagramme sowie die deutlich schnellere Ausführung im Build 2009 zu erkennen.
Aus den Protokollen geht hervor, dass die Verlangsamung des einen nicht mit der Verlangsamung des anderen zusammenfiel, d. h. nicht gleichzeitig erfolgte. Das Problem liegt also im Terminal selbst.
Das Protokoll wird nur jede Minute ausgedruckt (die Übersetzung hat den Zeitstempel durcheinander gebracht!), ich könnte das genauer überprüfen, aber das ist es nicht wert.
Ich habe es an mehreren Terminals ausprobiert, und es zeigt deutlich, dass die Spitzenwerte NICHT gleichzeitig auftreten. Dies ist eindeutig eine Sache des MT5.
MQL5-Programme arbeiten (Get/Set-Methoden) mit einem Diagramm über eine Transaktionswarteschlange.
Dies ermöglicht es, die GUI und das Terminal selbst von den unvermeidlichen Blockaden zu befreien, die für MQL5-Programme ein Problem darstellen würden.
Die transaktionale Asynchronie ermöglicht ein schnelles Schreiben oder Lesen in getrennten Modi und aktiviert den Synchronisationsmodus sofort, wenn Set- und Get-Methoden gemischt werden.
Das heißt, es ist besser, 1000-mal asynchron zu setzen und dann 1000-mal zu holen, anstatt abwechselnd zu holen und zu setzen, wodurch die Warteschlange zu einem synchronen Prozess wird. Denn Sie müssen sicherstellen, dass das vorherige asynchrone Set genau überlappt wurde und Sie es jetzt lesen können.
Sie müssen die Systemfunktionen mit Bedacht einsetzen und sie nach Möglichkeit in den Cache stellen.
Soweit ich weiß, führt der Aufruf von ChartRedraw nicht zum sofortigen Neuzeichnen des Diagramms, sondern erst, wenn eine Get-Methode aufgerufen wird.
Versuchen Sie, diese beiden Zeilen zu vertauschen
dann gibt es nichts Asynchrones in der Messung und wir werden sehen, was passiert. Es wird noch schneller gehen.
Ich war lange Zeit dumm und habe nicht verstanden, was der Compiler an dieser Zeile nicht mag.
Vergessen zu schreiben, ob. Ich dachte, es wäre eine gute Idee, die Botschaft für solche Dummköpfe wiederzukäuen.
Er bat mich vor etwa 5 Jahren, vielleicht auch mehr, eine Beschreibung und ein Beispiel für alle Compilerfehler und -warnungen zu erstellen.
Vielleicht können Sie es besser machen.
MQL5-Programme arbeiten (Get/Set-Methoden) mit einem Diagramm über eine Transaktionswarteschlange.
Dies ermöglicht es, die GUI und das Terminal selbst von den unvermeidlichen Blockaden zu befreien, die für MQL5-Programme ein Problem darstellen würden.
Die transaktionale Asynchronie ermöglicht ein schnelles Schreiben oder Lesen in getrennten Modi und aktiviert den Synchronisationsmodus sofort, wenn Set- und Get-Methoden gemischt werden.
Das heißt, es ist besser, 1000-mal asynchron zu setzen und dann 1000-mal zu holen, anstatt abwechselnd zu holen und zu setzen, wodurch die Warteschlange zu einem synchronen Prozess wird. Denn Sie müssen sicherstellen, dass das vorherige asynchrone Set genau überlappt wurde und Sie es jetzt lesen können.
Sie müssen die Systemfunktionen mit Bedacht einsetzen und sie nach Möglichkeit in den Cache stellen.
Verstehe ich richtig, dass nicht nur Set-Methoden asynchron sind, sondern auch Get?
Ilyas war hier falsch, nicht wahr?
Und Slava hatte hier Recht, als er sagte, dass ChartXYToTimePrice Methode asynchron ist? Schließlich bezieht sich die Methode ChartXYToTimePrice höchstwahrscheinlich auf die Get-Methoden.
In der Dokumentation ist nur von der Asynchronität der Set-Methoden die Rede.