エラー、バグ、質問 - ページ 2777

 
Alain Verleyen:

アップデート:

最大ピークが本格的に向上しました。

2020.06.13 08:18:25.187 342152(EURGBP, H1) Number = 23520
2020.06.13 08:18:25.187 342152(EURGBP, H1) Min = 33
2020.06.13 08:18:25.187 342152(EURGBP, H1) Max =81011
2020.06.13 08:18:25.187 342152(EURGBP, H1) Avg = 149

実験の純度を高めるため、このスクリプトは複数のチャートと複数のターミナルで並行して実行されなければならない。そして、ハングアップの時間を比較します。

 
Stanislav Korotky :

実験のため、このスクリプトを複数のチャートと複数のターミナルで並行して実行してください。そして、ヒコーキの時間を比較します。

しかし、1つのチャートですでに起こったことであれば、複数のチャートで改善されることはないでしょう。

複数のチャート/ターミナルで実行することで、何がより得られるのでしょうか?

 
Alain Verleyen:

OKですが、1つのチャートですでに起きていることであれば、複数のチャートで改善されることはありません。

複数のチャート/ターミナルで実行することで、何がより得られるのでしょうか?

もし、異なる端末で同じになるのであれば、問題はOSのプレーンにあることになります。

 
Stanislav Korotky :

これが異なる端末で同じであれば、OSに問題があることになります。

了解です。試してみます。
 
Stanislav Korotky :

実験のため、このスクリプトを複数のチャートと複数のターミナルで並行して実行してください。そして、ホバリング時間を比較します。

別のTerminalですが、20のチャート(異なるシンボル)が同時に起動しました。

ピークが来るところをAUDUSDで確認しました。

2020.06.13 09:16:35.151 342152 (USDJPY, H1) Number = 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 352152 (USDJPY, H1) Min = 38 2020.06.13 09:15:30151 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.14 09: 16: 35.151 342152 (CADCHF, H1) Min = 48 2020.06.14 09: 35.151 342152 (CADCHF) 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) Quantity = 240
2020.06.13 09: 16: 35.06.13 09: 35.152 342152(EURCHF、H1)数量= 240
2020.06.13 09:16:35.152 342152(GBPCHF、H1)数量= 240
2020.06.13 09:16:35.152 342152(EURCHF、H1)最小= 141
2020.06.13 09:16:35.152 342152(EURGBP、H1)数量= 240
2020.06.13 09:16:35.152342152152 342152 (CHFJPY, H1) Quantity = 240
2020.06.13 09: 16: 35.152 342152 (AUDJPY, H1) Quantity = 240
2020.06.13 09: 16: 35.152 342152 (AUDJPY, H1) Min = 47
2020.06.13 09: 16: 35.152 342152 (EURUSD, H1) Quantity = 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.13 06: 16: 35.152 352152 (AUDCHF, H2) Min = 157 2020.06.12.16:35.152342152(豪ドル円) 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.151 342152 (CHFJPY) Max = 249 2020.06.13 09: 16: 35.152 342152 (EURNZD, H1) 数量 = 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.13 09: 16: 35.1543425 (EURNZD, H2) Avg = 512 2020.06.14 09: 16: 16 35.154342154 (EURNZD, H3) 数量 = 550 2020.06.14 10: 35.16335 (EURNZD, H3)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.35.3422 (AUDCAD, H2) Avg = 240 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.155.352342152 (AUDUSD, H1)最大 = 2328 20:05: 16: 35.155 2020.06.13 10: 16: 16:35.155 342152 (AUDUSD, H1)平均 = 611 2020.06.13 09: 16: 35.155152 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)アベグ= 240
2020.06.13 09: 16: 35.158.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) 数量= 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: 15: 15: 35.153 352152 (USDCAD, H2) Min = 35 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.13 10: 35.153 35252 (EURAUD, H2) Avg = 2233 2020.06.14 09: 16:30 35.153 3424 (UVRAUD, H1) Avg = 2233 2020.06.15 09: 16: 35.15434215106.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.13 06: 16: 35.153 352152 (EURCAD, H2) Min = 234 2020.06.13 06: 16: 35.153 342152 (USDCHF) Avg = 234 2020.06.13 06: 16: 35.153 342152 (EURCAD, H1)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

そして、この時に登場するのがトップスです。

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.13 06: 17: 35.151 342152 (EURAUD, H1) Avg = 532 (USDJPY) Min: 35 2020.06.13 09: 17: 342151 (USDJPY, H1) Avg = 532 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) 数量 = 480
2020.06.13 06: 17: 35.151 342152 (EURAUD, H2) Avg = 518 2020.06.13 06: 16: 35.151 342152 (EURGBP, H2) 数量 = 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)数量= 480
2020.06.13 09:17:35.151 342152(EURUSD、H1)最小= 18
2020.06.13 09:17:35.151 342152(EURUSD、H1)最大= 17366
2020.06.13 09:17:35.151 352152(EURUSD、H1)最小= 18 2020.06.13 09:18:35.151 342152(EURUSD、H1)最小= 17366 2020.06.14 09:17:35.151 342152(EURCHF、H1)マックス= 480
2020.06.13 09:17:35.151 342152(EURUSD、H1)平均= 618
2020.06.13 09:17:35.151 342152(AUDCHF、H1)マックス= 480
2020.06.13 09:17:35.151 3.151 342152(USDCHF、H1) 数量=480
2020.06.13 09:17:35.151 342152(AUDCHF、H1) Min=126
2020.06.13 09:17:35.151 342152(CADCHF, H1)数量=480
2020.06.13 09:17:35.151 3.151 342152(AUDCHF、H1)マックス= 10477
2020.06.13 09:17:35.151 342152(EURCAD、H1)数量= 480
2020.06.13 09:17:35.151 342152(GBPUSD、H1)数量= 480
2020.06.13.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(ERCAD, 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 (USDJPY, H1) Avg = 480 2020.06.13 09: 17: 35.152 352152 (USDJPY) Avg = 480 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. "EuroJPYは、EURJPYとH1" "EURJPY は、"ユーロ円" "EURJPYは、" "ユーロ円" "ユーロ円" "H1 "です。13 09: 17: 35.152 342152 (EURNZD, H1) 数量 = 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.13 09: 16: 35.152342152 (EURNZD, H1) 数量 = 480 2020.06.14 09: 16: 35.163342152 (EURNZD) Max = 17442 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.152342152 (GBPCHF、H1)Min = 32。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.352342152 (ADCHF) H1.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) 数量 = 480
2020.06.13 09: 17: 35.152 342152 (CADCHF, H1) Evg = 762 2020.06.13 10: 17: 35.152342151 2020.06.13 09: 17: 35.152 342152 (AUDCHF) Avg = 762152 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) 数量 = 480
2020.06.13 09: 17: 35.152342152 (BUDUSD) H2.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) 数量 = 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) 数量=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 352152 (AUDNZD, H1) Avg = 663 2020.06.14 10: 17: 35.152 352152 (AUDNZD, H1) Max = 664 20: 06.14 09: 16: 18: 16: 18: 18: 17152 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

だから、すべてが同時に起こったのです。しかし、これはまだMT5の問題である可能性があります。他の同時接続端末で確認します。

 
Stanislav Korotky:

もし、異なる端末で同じになるのであれば、問題はOSのプレーンにあることになります。


MT5 (ビルド2009)で確認したところ、すべてが高速で、実行時間は5ms以下
MT5 (ビルド2485)では、すべてが遅くなり、実行時間はしばしば200msを超える(特に50以上のチャートを開いている場合)
問題点の説明からコードを使用してみました https://www.mql5.com/en/forum/342152

MT5 2009とMT5 2485の二つのバージョンのChartGetInteger関数実現を比較してみました、多分問題があるかと:
1............。
mfence; lock mov eax,[rax+2C];
2009年版では、次のようにしています。

2.また、ntdll_RtlEnterCriticalSectionのロジックと可能な滞留時間が大幅に変更されたようです。
以前(2009年)は、クリティカルセクションは受信値のペアをチェックするだけで、アトミックな操作は一切ありませんでした。
そして2485では、チャートのリンクリストオブジェクトをさらに列挙することができるようになった。


おそらく、新しいコンパイラへの移行の一環として、チャート関数で作業する際のクラッシュが修正されたとき(約2-3ヶ月前)に、この問題が発生する可能性があります。
MT5(build 2485)のChartGetInteger呼び出しの アセンブラコードを添付します。

 
Sergey Dzyublik :


MT5 (ビルド2009)で確認したところ、すべてが高速で、実行時間は5ms以下
MT5 (ビルド2485)では、すべてが遅くなり、実行時間はしばしば200msを超える(特に50以上のチャートを開いている場合)
問題記述のコードを使用しました https://www.mql5.com/en/forum/342152

ChartGetInteger関数の実現をMT5 2009とMT5 2485の2バージョンで比較しましたが、おそらく問題があると思います:
1.............。
mfence; lock mov eax,[rax+2C];
2009年版では、次のようにしています。

2.また、ntdll_RtlEnterCriticalSectionのロジックと可能な滞留時間が大幅に変更されたようです。
以前(2009年)は、クリティカルセクションは受信値のペアをチェックするだけで、アトミック演算は行わなかった。
そして2485では、チャート内のリンクリストオブジェクトをさらに列挙することができるようになった。


おそらく、新しいコンパイラへの移行の一環として、チャート関数で作業する際のクラッシュが修正されたとき(約2-3ヶ月前)に、この問題が発生する可能性があります。
MT5(build 2485)のChartGetInteger呼び出しの アセンブラコードを添付します。

公式ビルドは2005年ビルド、そして2085年ビルドとありますが、何かありますか?2007 Buildしか持ってない。
 
Sergey Dzyublik:

非同期と同期という言葉を何か勘違いしているようですね。
ある関数が非同期であると言う場合、その関数は現在の実行スレッドではなく、他のスレッドで実行されることを意味します。

メインスレッドから非同期のChartSetInteger関数を呼び出すと、実際の実行は別のスレッドで行われるため高速に実行できます。

一方、ChartGetIntegerの同期関数を呼び出すと、スレッドの同期が必要となり、さらに時間がかかる場合があります。
この遅延は、並列スレッドがチャート構造体のデータを常に更新している場合(例えば、ユーザーがチャートウィンドウを移動したり、履歴をスクロールしたりした場合)に特に顕著になります。
ほとんどの場合、シンプルさと信頼性のために、そのチャートデータ構造には1つの同期オブジェクトが使用されます。
データの細分化」で実行速度を向上させようとすると、今度はデッドロックが発生したり、データが更新されなかったり、もっと重要な場所で速度低下が発生したりすることがあるのです。
一般的に、すでに安定して動いているものには手を出さないほうがいいと言われています。

イリヤス

ピークがチャート・コメントをレンダリングしていると仮定します。そうでなければ、チャート・キューが空のとき、ChartGetXXX関数呼び出し(注、同期を伴う呼び出し)は0.13ミリ秒かかります。


例えば、こんなインジケータをスケッチしてみました。


ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR, 0)はマウス移動時に実行されます。
赤いグラフはこの関数の実行時間統計です。
画面全体をクリアにし、数千行のチャートを形成し、スケールを描き、テキスト情報ブロックを形成して画面に表示するBildChart関数に比べ、1桁の単純なクエリは何倍も遅く実行されます。

シンクロニシティ・アシンクロニシティによってそうなるはずだという学術的な話は、すべて「ブラック・イズ・ホワイト」として認識されています。
相場表の完全な配列があれば、カンヴァスをベースにした独自のチャートを作成し、そのチャートの特性の完全なテーブルを持ち、ナノ秒単位でアクセスすることができますので、問題ありません。そしてそれとともに、チャートのカンヴァスは別のスレッドでレンダリングされます。

ファイル:
 
この行でコンパイラが何を嫌っているのか理解できず、長い間呆然としていました。
  else (Type != -1) // expression has no effect

ifを書くのを忘れた。そんなアホな人に向けて、メッセージを綴るのはいかがなものかと。

 
Nikolai Semko:

単純に一桁の数字を問い合わせるだけでも、画面全体をクリアにして数千行のグラフを形成し、スケールを描き、テキスト情報ブロックを形成して画面に出力するBildChart関数より何倍も遅いのです。

私の知る限り、ChartRedrawを呼び出しても、すぐに再描画は行われず、何らかのGetメソッドが呼び出されたときに再描画が行われます。
また、ChartRedrawも基本的に同じ非同期メソッドなので、BuildChartの測定は信頼できません。