Fehler, Irrtümer, Fragen - Seite 2778

 
Alain Verleyen:

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.

 
Renat Fatkhullin:

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.



 
Schauen wir es uns an.
 
Renat Fatkhullin:
Sehen Sie sich das an.

Schritte zur Wiedergabe:

long chart_id;

int OnInit(){
   for(int i = 0; i < 95; ++i){
      ChartOpen(_Symbol, _Period);
   }

   chart_id = ChartID();
   EventSetMillisecondTimer(250);
   return(INIT_SUCCEEDED);
}

void OnTimer(){
  ulong t=GetMicrosecondCount();
  long autoscroll = ChartGetInteger(chart_id, CHART_AUTOSCROLL);
  ulong delay =(GetMicrosecondCount()-t)/1000;
  if (delay>0){
    Print("Execution delay: ",delay, " ms");
  }
}


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):

2020.06.14 15:33:43.173 Test123456 (EURUSD,H1)  Execution delay: 2 ms
2020.06.14 15:33:43.674 Test123456 (EURUSD,H1)  Execution delay: 3 ms
2020.06.14 15:33:44.177 Test123456 (EURUSD,H1)  Execution delay: 5 ms
2020.06.14 15:33:44.422 Test123456 (EURUSD,H1)  Execution delay: 4 ms
2020.06.14 15:33:44.673 Test123456 (EURUSD,H1)  Execution delay: 2 ms
2020.06.14 15:33:44.923 Test123456 (EURUSD,H1)  Execution delay: 3 ms
2020.06.14 15:33:45.173 Test123456 (EURUSD,H1)  Execution delay: 2 ms
2020.06.14 15:33:45.423 Test123456 (EURUSD,H1)  Execution delay: 2 ms
2020.06.14 15:33:45.672 Test123456 (EURUSD,H1)  Execution delay: 2 ms


MT5 Ergebnis (buidl 2485):

2020.06.14 15:33:12.947 Test123456 (EURUSD,H1)  Execution delay: 163 ms
2020.06.14 15:33:13.198 Test123456 (EURUSD,H1)  Execution delay: 1 ms
2020.06.14 15:33:13.293 Test123456 (EURUSD,H1)  Execution delay: 1 ms
2020.06.14 15:33:13.831 Test123456 (EURUSD,H1)  Execution delay: 287 ms
2020.06.14 15:33:14.702 Test123456 (EURUSD,H1)  Execution delay: 136 ms
2020.06.14 15:33:15.316 Test123456 (EURUSD,H1)  Execution delay: 3 ms
2020.06.14 15:33:15.677 Test123456 (EURUSD,H1)  Execution delay: 110 ms
2020.06.14 15:33:17.041 Test123456 (EURUSD,H1)  Execution delay: 221 ms


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.

 
Stanislav Korotky :

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.

 
Renat Fatkhullin :

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.

Es ist ein verständliches und gutes System. Aber ich glaube, dass es irgendwo eine Panne gibt, wie @Sergey Dzyubli auch gezeigt hat.
Sergey Dzyublik
Sergey Dzyublik
  • www.mql5.com
Добавил тему Вход через MQL5.community (OAuth) В настройках профиля появилась новая вкладка Приложения (https://www.mql5.com/ru/users/USER_NAME/apps): Эта функция позволяет людям авторизоваться на вашем сайте или в приложении, используя аккаунт MQL5.community. Технология проста и безопасна. Она Добавил...
 
Alexey Navoykov:
Soweit ich weiß, führt der Aufruf von ChartRedraw nicht zum sofortigen Neuzeichnen des Diagramms, sondern erst, wenn eine Get-Methode aufgerufen wird.
Und ChartRedraw ist im Wesentlichen die gleiche asynchrone Methode, so dass Ihre BuildChart Messung nicht zuverlässig ist.

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.

 
fxsaber:
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.

 
Renat Fatkhullin:

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.

Grund der Beschwerde: