MT5 y la velocidad en acción - página 25

 
A100:
Naturalmente, no se ejecuta ningún experto/indicador/script, sólo se construye manualmente. La latencia indicada es reproducible en cualquier tableta moderna media de 64 bits. Si tienes un ordenador i7, no creo que te hayas encontrado con este retraso

¿es el apk o el sistema exe el que se ralentiza?

 
Hoy es el día libre. Sólo un símbolo en Market Watch. EA está ejecutando OnTimer una vez por segundo. Encontré este registro.
2020.09.06 00:37:09.187         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 8 ms.
2020.09.06 03:57:17.902         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 1731 ms.
2020.09.06 03:57:18.463         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 2292 ms.
2020.09.06 03:59:49.233         Alert: Time[MT4Orders.mqh 1788: ::PositionGetTicket(Index)] = 2 ms.
2020.09.06 04:35:54.170         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 04:55:34.486         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:10:54.387         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 211 ms.
2020.09.06 05:10:54.387         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 895 ms.
2020.09.06 05:23:20.484         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:24:41.484         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:47:41.492         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:50:41.172         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:55:45.176         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:57:32.169         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 06:17:11.177         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 06:28:03.184         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 06:30:22.482         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 06:48:07.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 07:45:12.490         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 08:23:24.172         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 08:24:26.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 08:37:57.183         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 09:08:37.180         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 09:12:58.497         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 09:57:20.486         Alert: Ping = 10000.000
2020.09.06 09:57:21.680         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 195 ms.
2020.09.06 09:57:54.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 10:47:56.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 11:06:21.175         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 11:11:50.208         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 1023 ms.
2020.09.06 11:11:50.537         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 1049 ms.
2020.09.06 11:11:51.502         Alert: Ping = 10000.000
2020.09.06 11:11:52.370         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 187 ms.
2020.09.06 11:19:41.502         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 11:38:00.176         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 13:49:02.493         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 14:03:28.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 14:45:05.175         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 16:43:51.196         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 17:00:17.494         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 17:40:02.486         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 17:54:00.180         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 18:16:47.173         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.

En el otro Terminal, la Optimización se ejecuta en paralelo en seis Agentes locales de los ocho posibles.

Si se trata de interrupciones de la red, ¿por qué afecta a la obtención del último tic del Market Watch y a la obtención del último tic del historial de tics?


ZZY El registro de la Terminal está en el mismo tramo.

2020.09.06 01:48:38.338 Network '': scanning network for access points
2020.09.06 01:48:40.195 Network '': scanning network finished
2020.09.06 03:57:04.504 Network '': connection to RannForex-Server lost
2020.09.06 03:57:15.249 Network '': authorized on RannForex-Server through as.eu 6 (ping: 56.41 ms, build 2560)
2020.09.06 03:57:15.249 Network '': previous successful authorization performed from xx.xx.xx.xx on 2020.09.05 21:59:42
2020.09.06 03:57:15.678 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 03:57:15.678 Network '': trading has been enabled - hedging mode
2020.09.06 03:57:17.500 Network '': scanning network for access points
2020.09.06 03:57:20.416 Network '': scanning network finished
2020.09.06 05:10:52.296 Network '': connection to RannForex-Server lost
2020.09.06 05:10:53.033 Network '': authorized on RannForex-Server through as.eu 6 (ping: 56.31 ms, build 2560)
2020.09.06 05:10:53.033 Network '': previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 05:10:59
2020.09.06 05:10:53.299 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 05:10:53.299 Network '': trading has been enabled - hedging mode
2020.09.06 09:57:18.310 Network '': scanning network for access points
2020.09.06 09:57:20.396 Network '': scanning network finished
2020.09.06 09:57:20.396 Network '': auto connecting to a better access point with 93 % quality (previous: 77 %)
2020.09.06 09:57:20.397 Network '': connection to RannForex-Server lost
2020.09.06 09:57:21.151 Network '': authorized on RannForex-Server through as.eu 5 (ping: 41.60 ms, build 2560)
2020.09.06 09:57:21.151 Network '': previous successful authorization performed from 
xx.xx.xx.xx  on 2020.09.06 05:10:59
2020.09.06 09:57:21.208 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 09:57:21.208 Network '': trading has been enabled - hedging mode
2020.09.06 11:08:16.952 Network '': connection to RannForex-Server lost
2020.09.06 11:11:48.892 Network '': authorized on RannForex-Server
2020.09.06 11:11:48.892 Network '': previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 11:11:55
2020.09.06 11:11:48.970 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 11:11:48.970 Network '': trading has been enabled - hedging mode
2020.09.06 11:11:49.152 Network '': scanning network for access points
2020.09.06 11:11:51.319 Network '': scanning network finished
2020.09.06 11:11:51.319 Network '': auto connecting to a better access point with 92 % quality (previous: 91 %)
2020.09.06 11:11:51.320 Network '': connection to RannForex-Server lost
2020.09.06 11:11:52.035 Network '': authorized on RannForex-Server through as.eu 5 (ping: 43.31 ms, build 2560)
2020.09.06 11:11:52.035 Network '': previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 11:11:55
2020.09.06 11:11:52.088 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 11:11:52.088 Network '': trading has been enabled - hedging mode
2020.09.06 17:11:49.928 Network '': scanning network for access points
2020.09.06 17:11:52.112 Network '': scanning network finished
 
fxsaber:

Si se trata de interrupciones de la red, ¿por qué afecta a la obtención del último tic del Market Watch y a la obtención del último tic del historial de tics?

Un análisis cuidadoso ha demostrado que CopyTicks se ralentiza cuando hay interrupciones en la red.

2020.09.06 21:22:24.105         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 1619 ms.
2020.09.06 21:22:24.515         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 2347 ms.
2020.09.06 21:22:53.814         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 274 ms.
2020.09.06 21:22:53.814         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 686 ms.

2020.09.06 21:20:59.301 Network connection to RannForex-Server lost
2020.09.06 21:22:21.043 Network authorized on RannForex-Server
2020.09.06 21:22:21.043 Network previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 11:11:59
2020.09.06 21:22:21.508 Network terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 21:22:21.508 Network trading has been enabled - hedging mode
2020.09.06 21:22:21.915 Network scanning network for access points
2020.09.06 21:22:28.819 Network scanning network finished
2020.09.06 21:22:45.523 Network connection to RannForex-Server lost
2020.09.06 21:22:52.951 Network authorized on RannForex-Server through as.eu 6 (ping: 56.55 ms, build 2560)
2020.09.06 21:22:52.951 Network previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 21:22:28
2020.09.06 21:22:53.024 Network terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 21:22:53.024 Network trading has been enabled - hedging mode
 
fxsaber:


if (OrderSend(Request, Result))
    _B2(HistorySelect(0, INT_MAX)); // В каком месте самострел?

En primer lugar, para su información.

"Si lacomprobación de la estructura básica (comprobación del puntero) tiene éxito, se devuelve true -no indica la ejecución exitosa de la operación comercial. Para obtener una descripción más detallada del resultado de la ejecución de la función, se deben analizar los campos de la estructura deresultados."


En segundo lugar, según su lógica, si se abre un pedido, no se añade a la lista de pedidos, sino que se invalida completamente la caché)?

Usted puede que optimizar todo el código, que tiene HistorySelect será el último lugar para las preguntas sobre el tiempo de ejecución) Utilizar el almacenamiento en caché. Puede invalidarlo, por ejemplo, una vez al día, pero acelerará significativamente su EA.

 
Andrey Pogoreltsev:

Bueno, en primer lugar

Hay que ejecutar el código para entenderlo correctamente, o leerlo muy bien desde una hoja de cálculo.

En segundo lugar, según su lógica, si se abre un pedido, no se añade a la lista de pedidos, sino que se invalida la caché por completo)?

La lista de pedidos no cambia. Lee el código.

 
fxsaber:

para entender el código correctamente, hay que ejecutarlo o leerlo muy bien de la hoja.

La lista de pedidos no cambia. Lee el código.

Aquí

if (OrderSend(Request, Result))
    _B2(HistorySelect(0, INT_MAX)); // В каком месте самострел?

Veo esta lógica:

  1. Si una solicitud de comercio se envía con éxito al servidor
  2. Seleccionamos toda la historia

Pero puede ser que la petición ya haya sido rechazada en el servidor - no hay ninguna comprobación de esto en este código. ¿Qué sentido tiene seleccionar la historia? ¿Qué queremos ver allí?

Aquí, en estas dos líneas de código, personalmente no veo el sentido. Lo vería si hubiera un control para cambiar la historia antes de seleccionarla. Por supuesto, estas dos líneas no dan una imagen completa de la tarea. Pero no me queda clara la relación entre el envío exitoso de una solicitud al servidor y la selección de todo el historial. Aunque el servidor envíe una solicitud con éxito, la lista de órdenes de mercado y posiciones se modificará. ¿Qué tiene que ver la lista de la historia?

 
Artyom Trishkin:

Aquí es donde

Veo esta lógica:

  1. Si la solicitud de comercio se envía con éxito al servidor
  2. Seleccionar todo el historial

Pero podría ser que la solicitud ya haya sido rechazada en el servidor - no hay ninguna comprobación de esto en este código. ¿Qué sentido tiene seleccionar la historia? ¿Qué queremos ver allí?

Aquí, en estas dos líneas de código, personalmente no veo el sentido. Lo vería si hubiera un control para cambiar la historia antes de seleccionarla. Por supuesto, estas dos líneas no dan una imagen completa de la tarea. Pero no me queda clara la relación entre el envío exitoso de una solicitud al servidor y la selección de todo el historial. Aunque el servidor envíe una solicitud con éxito, la lista de órdenes de mercado y posiciones se modificará. ¿Qué tiene esto que ver con la lista de la historia?

Si - para deshacerse de la advertencia del compilador. No tiene nada más que hacer.

Este hilo no es para enseñar a escribir EAs. Su objetivo es eliminar los puntos débiles de la Terminal. Los desarrolladores necesitan un código sencillo, conciso y reproducible para entenderlo. No escribo nada de este tipo para mí, por supuesto. El hecho es que el Asesor de Combate registra los frenos. Empiezo a indagar y me doy cuenta de que la ralentización se produce cuando alguien (al menos a mano) modifica una posición. Esto restablece la caché del historial, aunque el historial no cambia, por supuesto.


El código demuestra perfectamente el problema. Nunca hay necesidad de abarrotar el código de reproducción con comprobaciones innecesarias. Su trabajo es mostrar claramente el problema. Y cuando se arregla - para probar que todo funciona correctamente ahora.

 
fxsaber:

para entender el código correctamente, hay que ejecutarlo o leerlo muy bien de la hoja.

La lista de pedidos no cambia. Lee el código.

Considera que soy muy bueno leyendo de la hoja :)


Este código lo tomaste de otro lugar y tienes ahí una nueva creación de posición, que se ejecuta, ¿no?

Si no, todo el sentido de tu código se reduce a actualizar el TP de la posición actual e invalidar la caché porque sí, lo cual también es muy extraño.

En cualquiera de estos dos casos no se utiliza ninguna lógica para optimizar la operación de caché. Además, su solución no es escalable, ya que conduce a un aumento de la frenada a medida que el historial crece.

 
fxsaber:

El código demuestra perfectamente el problema. No hay necesidad de abarrotar el código de reproducción con comprobaciones innecesarias. Su trabajo es mostrar claramente el problema. Y cuando se corrige - para probar que todo funciona correctamente ahora.

Así que según tu lógica, este código de aquí

int v = 0.0;

for (int i = 0; i < 1000000; i++) {
    v = i;
}

std::cout << "The last number: " << v << std::endl;

demuestra la lentitud del procesador?

 
Andrey Pogoreltsev:

Has sacado este código de algún sitio y lo tienes ahí creando una nueva posición, que sí se ejecuta, ¿no?

Pregunta retórica: ¿qué pretende conseguir con esto?
Andrey Pogoreltsev:

Así que, según tu lógica, este código de aquí

muestra la lentitud del procesador?

No voy a contestar más ya que estás diciendo tonterías.