Errores, fallos, preguntas - página 2778
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Otro Terminal, pero 20 gráficos (diferentes símbolos), comenzó al mismo tiempo.
He comprobado en el AUDUSD dónde viene el pico:
2020.06.13 09: 16: 35.151 342152 (USDJPY, H1) Cantidad = 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) Cantidad = 606
2020.06.13 09: 16: 35.152 342152 (EURAUD, H1) Cantidad = 240
2020.06.13 09: 16: 35.152 342152 (EURCHF, H1) Cantidad = 240
2020.06.13 09: 16: 35.152 342152 (GBPCHF, H1) Cantidad = 240
2020.06.13 09: 16: 35.152 342152 (EURCHF, H1) Min = 141
2020.06.13 09: 16: 35.152 342152 (EURGBP, H1) Cantidad = 240
2020.06.13 09: 16: 35.152 342152 (CHFJPY, H1) Cantidad = 240
2020.06.13 09: 16: 35.152 342152 (AUDJPY, H1) Cantidad = 240
2020.06.13 09: 16: 35.152 342152 (AUDJPY, H1) Min = 47
2020.06.13 09: 16: 35.152 342152 (EURUSD, H1) Cantidad = 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) Cantidad = 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) Cantidad = 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) Cantidad = 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) Cantidad = 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) Cantidad = 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
Y aquí es cuando entran las tapas:
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) Cantidad = 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) Cantidad = 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) Cantidad = 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) Cantidad = 480
2020.06.13 09: 17: 35.151 342152 (AUDCHF, H1) Min = 126
2020.06.13 09: 17: 35.151 342152 (CADCHF, H1) Cantidad = 480
2020.06.13 09: 17: 35.151 342152 (AUDCHF, H1) Max = 10477
2020.06.13 09: 17: 35.151 342152 (EURCAD, H1) Cantidad = 480
2020.06.13 09: 17: 35.151 342152 (GBPUSD, H1) Cantidad = 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) Cantidad = 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) Cantidad = 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) Cantidad = 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) Cantidad = 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) Cantidad = 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
Así que todo ocurrió al mismo tiempo. Pero esto podría ser un problema de MT5. Lo comprobaré con otros terminales simultáneos.
A juzgar por los registros, la desaceleración de uno no coincidió con la del otro, es decir, no fue simultánea. Así que el problema está en el propio terminal.
Los programas MQL5 trabajan (métodos Get/Set) con un gráfico a través de una cola de transacciones.
Esto permite liberar la GUI y el propio terminal de los inevitables bloqueos que serían un problema para los programas MQL5.
La asincronía transaccional permite escribir o leer rápidamente en modos separados y habilita el modo de sincronización inmediatamente al mezclar los métodos Set y Get.
Es decir, es mejor hacer asíncrono Set 1000 veces y luego Get 1000 veces en lugar de hacer alternativamente Get & Set, convirtiendo la cola en un proceso síncrono. Porque tienes que asegurarte de que el conjunto asíncrono anterior estaba exactamente superpuesto y ahora puedes leerlo.
Hay que utilizar las funciones del sistema con cuidado y guardarlas en caché siempre que sea posible.
Hay que utilizar las funciones del sistema con cuidado y almacenarlas en caché siempre que sea posible.
Por la tarde, el problema es un poco diferente - las funciones ChartGetInteger y similares son MUY lentas de ejecutar.
Al cambiar de la build 2009 a la build 2485, el tiempo de ejecución de ChartGetInteger aumentó de 5ms a 200-250ms de pico, especialmente se convierte en un problema cuando hay más de 50 gráficos abiertos.
Sistema: Terminal Windows 10 build 18363, Intel Core i7-7700HQ @ 2.80GHz, 19 / 31 GB de memoria, 262 / 640 GB de disco, monitor 4K, NVidia 1050Ti
Se utilizó elcódigo de la descripción del problema:https://www.mql5.com/en/forum/342152
Posibles causas del problema:
Bichos, errores, problemas
Sergey Dzyublik, 2020.06.13 19:20
He comparado la implementación de la función ChartGetInteger para dos versiones de MT5 2009 y MT5 2485, quizás el problema sea el siguiente:
1. En 2485 para leer los campos "atómicos" de un objeto gráfico utilizamos operaciones bastante lentas:
mfence; lock mov eax,[rax+2C];
Mientras que en la compilación 2009 esto se hace utilizando: lock xadd [rcx+2C],eax
2. También parece que la lógica y el posible tiempo de permanencia en ntdll_RtlEnterCriticalSection han cambiado significativamente.
Anteriormente, en 2009, una sección crítica sólo comprobaba un par de valores recibidos, sin ninguna operación atómica.
Y en el 2485, los objetos de la lista vinculada del gráfico podrían ser enumerados adicionalmente.
Es de suponer que el problema pudo ocurrir cuando se solucionó el fallo al trabajar con funciones de gráfico como parte de la migración al nuevo compilador (hace unos 2-3 meses).
Se adjunta el código del ensamblador para la llamada a ChartGetInteger en MT5 (build 2485).
Compruébalo.
Pasos para la reproducción:
1. Tome un terminal MT limpio, abra un gráfico en él, ejecute el EA compilado arriba en ese gráfico.
2. Después de abrir los 95 nuevos gráficos, expanda la ventana del gráfico a todo el ancho del espacio del gráfico en MT, si no lo ha hecho antes.
3. Para pasar de una pestaña de gráfico a otra y registrar desde el registro los valores de ejecución de ChartGetInteger.
Para cerrar todos los gráficos abiertos, puedes mantener pulsado CTRL+W
Resultado de MT5 (build 2009):
Resultado de MT5 (buidl 2485):
Comparación de resultados y conclusiones:
1. El número de registros que aparecen en la versión 2009 es mucho mayor que el de la versión 2485.
La función ChartGetInteger en "condiciones normales" se hizo más rápida después de cambiar a la build 2485.
2. El tiempo de ejecución máximo para la build 2009 - 15 ms, y para la build 2485 - 310 ms.
La función ChartGetInteger en "condiciones desfavorables" se vuelve hasta 20 veces más lenta después de cambiar a la compilación 2485.
3. del mismo modo que se puede estimar la velocidad de apertura de 95 cartas a ojo.
En ambas construcciones, se nota la complejidad "exponencial" del número de gráficos abiertos antes, así como una ejecución significativamente más rápida en la construcción de 2009.
A juzgar por los registros, la desaceleración de uno no coincidió con la del otro, es decir, no fue simultánea. Así que el problema está en el propio terminal.
El registro sólo se imprime cada minuto (¡la traducción estropeó la marca de tiempo!), podría comprobarlo con más precisión, pero no merece la pena.
Lo he probado en varios terminales y se ve claramente que los picos NO son simultáneos. Esto es claramente una cosa de MT5.
Los programas MQL5 trabajan (métodos Get/Set) con un gráfico a través de una cola de transacciones.
Esto permite liberar la GUI y el propio terminal de los inevitables bloqueos que serían un problema para los programas MQL5.
La asincronía transaccional permite escribir o leer rápidamente en modos separados y habilita el modo de sincronización inmediatamente al mezclar los métodos Set y Get.
Es decir, es mejor hacer asíncrono Set 1000 veces y luego Get 1000 veces en lugar de hacer alternativamente Get & Set, convirtiendo la cola en un proceso síncrono. Porque tienes que asegurarte de que el conjunto asíncrono anterior estaba exactamente superpuesto y ahora puedes leerlo.
Hay que utilizar las funciones del sistema con cuidado y guardarlas en caché siempre que sea posible.
Por lo que sé, la llamada a ChartRedraw no provoca el redibujado inmediato del gráfico, sino que el redibujado sólo se produce cuando se llama a algún método Get.
intente intercambiar estas dos líneas
entonces no habrá nada asíncrono en la medición y ver qué pasa. Será aún más rápido.
Llevo mucho tiempo sin entender qué es lo que no le gusta al compilador de esta línea.
Olvidé escribir si. Pensé que sería una buena idea para masticar el mensaje para estos tontos.
Me pidió que hiciera una descripción y un ejemplo para todos los errores y advertencias del compilador hace unos 5 años, quizás más.
Tal vez puedas hacerlo mejor.
Los programas MQL5 trabajan (métodos Get/Set) con un gráfico a través de una cola de transacciones.
Esto permite liberar la interfaz gráfica de usuario y el propio terminal de los inevitables bloqueos que serían un problema para los programas MQL5.
La asincronía transaccional permite escribir o leer rápidamente en modos separados y habilita el modo de sincronización inmediatamente al mezclar los métodos Set y Get.
Es decir, es mejor hacer asíncrono Set 1000 veces y luego Get 1000 veces en lugar de hacer alternativamente Get & Set, convirtiendo la cola en un proceso síncrono. Porque tienes que asegurarte de que el conjunto asíncrono anterior estaba exactamente superpuesto y ahora puedes leerlo.
Hay que utilizar las funciones del sistema con cuidado y guardarlas en caché siempre que sea posible.
Entiendo correctamente que no sólo los métodos Set son asíncronos sino también los Get?
Ilyas se equivocó aquí , ¿no?
¿Y Slava tenía razón cuando dijo que el método ChartXYToTimePrice es asíncrono? Después de todo, el método ChartXYToTimePrice probablemente se refiere a los métodos Get.
La documentación sólo habla de la asincronía de los métodos Set.