Errori, bug, domande - pagina 2778
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Un altro Terminale, ma 20 grafici (simboli diversi), è partito allo stesso tempo.
Ho controllato su AUDUSD dove arriva il picco:
2020.06.13 09: 16: 35.151 342152 (USDJPY, H1) Quantità = 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) Quantità = 240
2020.06.13 09: 16: 35.152 342152 (EURCHF, H1) Quantità = 240
2020.06.13 09: 16: 35.152 342152 (GBPCHF, H1) Quantità = 240
2020.06.13 09: 16: 35.152 342152 (EURCHF, H1) Min = 141
2020.06.13 09: 16: 35.152 342152 (EURGBP, H1) Quantità = 240
2020.06.13 09: 16: 35.152 342152 (CHFJPY, H1) Quantità = 240
2020.06.13 09: 16: 35.152 342152 (AUDJPY, H1) Quantità = 240
2020.06.13 09: 16: 35.152 342152 (AUDJPY, H1) Min = 47
2020.06.13 09: 16: 35.152 342152 (EURUSD, H1) Quantità = 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) Quantità = 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) Quantità = 240
2020.06.13 09: 16: 35.152 342152 (AUDNZD, H1) Max = 2402
2020.06.13 09: 16: 35.152 342152 (AUDNZD, H1) Media = 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) Quantità = 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) Media = 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) Quantità = 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) Quantità = 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
Ed è qui che entrano in gioco le cime:
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) Quantità = 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) Quantità = 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) Quantità = 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) Quantità = 480
2020.06.13 09: 17: 35.151 342152 (AUDCHF, H1) Min = 126
2020.06.13 09: 17: 35.151 342152 (CADCHF, H1) Quantità = 480
2020.06.13 09: 17: 35.151 342152 (AUDCHF, H1) Max = 10477
2020.06.13 09: 17: 35.151 342152 (EURCAD, H1) Quantità = 480
2020.06.13 09: 17: 35.151 342152 (GBPUSD, H1) Quantità = 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) Media = 664
2020.06.13 09: 17: 35.152 342152 (EURJPY, H1) Media = 664.13 09: 17: 35.152 342152 (EURNZD, H1) Quantità = 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) Quantità = 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) Quantità = 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) Quantità = 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) Quantità = 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) Media = 638
2020.06.13 09: 17: 35.152 342152 (USDCAD, H1) Max = 10488
2020.06.13 09: 17: 35.152 342152 (USDCAD, H1) Media = 666
2020.06.13 09: 17: 35.152 342152 (CHFJPY, H1) Media = 656
Quindi è successo tutto nello stesso momento. Ma questo potrebbe essere ancora un problema di MT5. Controllerò con altri terminali simultanei.
A giudicare dai registri, la decelerazione in uno non ha coinciso con la decelerazione nell'altro, cioè non simultaneamente. Quindi il problema è nel terminale stesso.
I programmi MQL5 lavorano (metodi Get/Set) con un grafico tramite una coda di transazione.
Questo permette di liberare la GUI e il terminale stesso dagli inevitabili blocchi che sarebbero un problema per i programmi MQL5.
L'asincronia transazionale permette di scrivere o leggere rapidamente in modalità separate e abilita immediatamente la modalità di sincronizzazione quando si mescolano i metodi Set e Get.
Cioè, è meglio fare asincrono Set 1000 volte e poi Get 1000 volte invece di fare alternativamente Get & Set, trasformando la coda in un processo sincrono. Perché dovete assicurarvi che il precedente Set asincrono era esattamente sovrapposto e ora potete leggerlo.
Dovete usare le funzioni di sistema con attenzione e metterle in cache quando possibile.
Dovete usare le funzioni di sistema con attenzione e metterle in cache dove possibile.
Pomeriggio, il problema è un po' diverso - le funzioni ChartGetInteger e simili sono MOLTO lente da eseguire.
Quando si passa dalla build 2009 alla build 2485, il tempo di esecuzione di ChartGetInteger è aumentato da 5ms a 200-250ms, questo problema è particolarmente evidente con 50+ grafici aperti.
Sistema: Terminale Windows 10 build 18363, Intel Core i7-7700HQ @ 2.80GHz, 19 / 31 GB di memoria, 262 / 640 GB di disco, monitor 4K, NVidia 1050Ti
È stato usato il codice della descrizione del problema:https://www.mql5.com/en/forum/342152
Possibili cause del problema:
Bug, bug, problemi
Sergey Dzyublik, 2020.06.13 19:20
Ho confrontato l'implementazione della funzione ChartGetInteger per due versioni di MT5 2009 e MT5 2485, forse il problema è il seguente:
1. Nel 2485 per leggere i campi "atomici" di un oggetto grafico si usano operazioni piuttosto lente:
mfence; lock mov eax,[rax+2C];
Mentre nella build 2009 questo viene fatto usando: lock xadd [rcx+2C],eax
2. Sembra anche che la logica e il possibile tempo di permanenza in ntdll_RtlEnterCriticalSection siano significativamente cambiati.
In precedenza, nel 2009, una sezione critica controllava solo una coppia di valori ricevuti, senza alcuna operazione atomica.
E nel 2485, gli oggetti linked-list del grafico potrebbero anche essere enumerati.
Presumibilmente, il problema potrebbe accadere quando il crash è stato risolto quando si lavora con le funzioni del grafico come parte della migrazione al nuovo compilatore (circa 2-3 mesi fa).
Il codice assembler per la chiamata ChartGetInteger in MT5 (build 2485) è allegato.
Guarda qui.
Passi per la riproduzione:
1. Prendi un terminale MT pulito, apri un grafico su di esso, esegui l'EA compilato sopra su quel grafico.
2. Dopo aver aperto tutti i 95 nuovi grafici, espandete la finestra del grafico fino a raggiungere l'intera larghezza dello spazio del grafico in MT, se questo non è stato fatto prima.
3. Per passare da una scheda all'altra del grafico e registrare dal registro i valori runtime di ChartGetInteger.
Per chiudere tutti i grafici aperti, potete tenere premuto CTRL+W
Risultato di MT5 (build 2009):
Risultato di MT5 (buidl 2485):
Confronto dei risultati e conclusioni:
1. Il numero di record che vengono visualizzati nel 2009 è molto di più dei record nel 2485.
La funzione ChartGetInteger in "condizioni normali" è diventata più veloce dopo il passaggio alla build 2485.
2. Il tempo di esecuzione massimo per la build 2009 - 15 ms, e per la build 2485 - 310 ms.
La funzione ChartGetInteger in "condizioni sfavorevoli" diventa fino a 20 volte più lenta dopo il passaggio alla build 2485.
3. allo stesso modo in cui si può stimare a occhio la velocità di apertura di 95 carte.
Per entrambe le build, la complessità "esponenziale" del numero di grafici aperti in precedenza è evidente, così come l'esecuzione significativamente più veloce nella build 2009.
A giudicare dai registri, la decelerazione in uno non ha coinciso con la decelerazione nell'altro, cioè non simultaneamente. Quindi il problema è nel terminale stesso.
Il registro viene stampato solo ogni minuto (la traduzione ha incasinato l'orario!!), potrei controllare con più precisione, ma non ne vale la pena.
L'ho provato su diversi terminali e mostra chiaramente che i picchi NON sono simultanei. Questa è chiaramente una cosa di MT5.
I programmi MQL5 lavorano (metodi Get/Set) con un grafico tramite una coda di transazione.
Questo permette di liberare la GUI e il terminale stesso dagli inevitabili blocchi che sarebbero un problema per i programmi MQL5.
L'asincronia transazionale permette di scrivere o leggere rapidamente in modalità separate e abilita immediatamente la modalità di sincronizzazione quando si mescolano i metodi Set e Get.
Cioè, è meglio fare asincrono Set 1000 volte e poi Get 1000 volte invece di fare alternativamente Get & Set, trasformando la coda in un processo sincrono. Perché dovete assicurarvi che il precedente Set asincrono era esattamente sovrapposto e ora potete leggerlo.
Dovete usare le funzioni di sistema con attenzione e metterle in cache quando possibile.
Per quanto ne so, la chiamata ChartRedraw non causa il ridisegno immediato del grafico, che avviene solo quando viene chiamato un metodo Get.
prova a scambiare queste due linee
allora non ci sarà nulla di asincrono nella misurazione e vediamo cosa succede. Sarà ancora più veloce.
Sono stato muto per molto tempo, non capendo cosa non piace al compilatore di questa linea.
Ho dimenticato di scrivere se. Ho pensato che sarebbe stata una buona idea masticare il messaggio per questi idioti.
Mi ha chiesto di fare una descrizione e un esempio per tutti gli errori e gli avvertimenti del compilatore circa 5 anni fa, forse di più.
Forse puoi fare di meglio.
I programmi MQL5 lavorano (metodi Get/Set) con un grafico tramite una coda di transazione.
Questo permette di liberare la GUI e il terminale stesso dagli inevitabili blocchi che sarebbero un problema per i programmi MQL5.
L'asincronia transazionale permette di scrivere o leggere rapidamente in modalità separate e abilita immediatamente la modalità di sincronizzazione quando si mescolano i metodi Set e Get.
Cioè, è meglio fare asincrono Set 1000 volte e poi Get 1000 volte invece di fare alternativamente Get & Set, trasformando la coda in un processo sincrono. Perché dovete assicurarvi che il precedente Set asincrono era esattamente sovrapposto e ora potete leggerlo.
Dovete usare le funzioni di sistema con attenzione e metterle in cache quando possibile.
Ho capito bene che non solo i metodi Set sono asincroni ma anche Get?
Ilyas si è sbagliato qui , vero?
E Slava aveva ragione quando ha detto che il metodo ChartXYToTimePrice è asincrono? Dopo tutto, il metodo ChartXYToTimePrice si riferisce molto probabilmente ai metodi Get.
La documentazione parla solo dell'asincronicità dei metodi Set.