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

 
¿Quizás con hacer un par de pruebas las preguntas desaparezcan?
 
traveller00:
¿Quizás con hacer un par de pruebas las preguntas desaparezcan?

Tal vez. Me gustaría tener más tiempo para hacer las pruebas yo mismo :(

 
traveller00:
¿Quizás con hacer un par de pruebas las preguntas desaparezcan?

Las pruebas sólo muestran una diferencia la primera vez que se inicia.

 
Slava:

Symbol(), las entradas _Symbol son equivalentes a NULL (donde se permite NULL en lugar del nombre del símbolo).

En este caso, no hay ninguna comprobación adicional de la existencia del símbolo actual, la presencia del símbolo actual en la vigilancia del mercado y las propiedades de llamada innecesarias del símbolo actual, ya que las propiedades del carácter actual se almacenan en la memoria caché

Es decir, si se especifica un parámetro de cadena normal en lugar de Symbol(), _Symbol o NULL, entonces se comprueba el programa completo y más llamadas a propiedades

Pregunta:

   string symbol=_Symbol;
   SymbolInfoInteger(symbol,...)
   SymbolInfoInteger(NULL,...)

- El comportamiento de las llamadas a SymbolInfoXXX en estos dos casos, ¿difieren en algo más que una comprobación?

symbol==_Symbol

?

 
traveller00:

Por cierto, de los registros frescos de hoy de la última versión de MT5:

Eran 3 EAs rondando un símbolo, cada uno en su propio gráfico. Y la petición continúa cada vez que hay un tic. Tales picos son, por supuesto, infrecuentes, pero de hecho 1 solicitud de nuevos ticks procedente del último tick se ejecutó 700 ms.

Llevo unas 12 horas de monitorización, pero ya veo que los lags traspasan todos los límites.

Time[Main.mqh 162 in ProcessTicks: CopyTicksRange(_Symbol,OldTicks,COPY_TICKS_INFO,LastTickParsed.time_msc)] = 8589203 mcs.

3 EAs, cada uno en su propio gráfico, todos en 1 símbolo, están solicitando ticks antiguos del tick anterior a través de CopyTicksRange. Y el retraso es de casi 9 segundos. Y parece que este no es el límite. Lo más probable es que el almacén de ticks sea un recurso compartido al que se accede de forma sincronizada, pero incluso con una sincronización muy mala no debería haber esos tiempos.

Algunos dirán que es un fallo puntual. Durante esas 12 horas de seguimiento, desgraciadamente se han producido más de un centenar de salidas de 1 segundo. Y ya no parecen ráfagas puntuales. Parece que a menudo entraban múltiples garrapatas al mismo tiempo, que es lo que está causando estos picos.

Incluso si cerramos los ojos al hecho de que 3 EAs lucharon por un recurso común, veamos el otro seguimiento:

ProcessTicks: CopyTicksRange(_Symbol,OldTicks,COPY_TICKS_INFO,LastTickParsed.time_msc)] = 1401285 mcs.

Sólo había 1 Asesor Experto en el símbolo. Y todavía un segundo y medio. No era el único, había otros EAs en otros símbolos, pero ¿no es multihilo? ¿O los ticks de los distintos símbolos pueden seguir frenando a los demás?

Esta es una funcionalidad básica para los EAs básicos. La plataforma se posiciona como una plataforma de negociación algorítmica. Dicho esto, la funcionalidad básica plantea fuertes interrogantes. Estoy seguro de que hay margen de mejora en alguna parte. O estaría muy agradecido de poder obtener los últimos ticks desde que la función ha sido llamada, como se sugiere aquí

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

MT5 y Speed en acción

fxsaber, 2021.03.01 07:28

Por favor, piense en esta característica.

int SymbolInfoTicks( const string Symb, MqlTick &Ticks[] ); // Возвращает свежие тики (не более сотни), пришедшие с предыдущего вызова этой функции.


El problema de obtener NUEVOS ticks sin saltos se resuelve ahora sólo a través de CopyTicks*. Es un mecanismo muy engorroso para esta tarea tan extendida. Es como disparar a los pájaros con un cañón.

De ahí los frenos, la retención de grandes cachés, etc.

 

Se ha minimizado el número de llamadas a SymbolInfoTick y CopyTicksRange:

  • Instantánea de SymbolInfoTick - no se llama más a menudo que una vez cada 100µs.
  • CopyTicksRange para ticks frescos sólo se llama si, efectivamente, un nuevo tick ha llegado a la Vigilancia del Mercado.


El terminal y la máquina (archivo de intercambio deshabilitado) con esta carga.


Como resultado, se ha podido reducir considerablemente el número de mensajes de retraso (se han realizado menos llamadas) de las funciones regulares.


Registro durante 50 minutos:

2021.03.05 19:31:45.429 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 154 mcs.
2021.03.05 19:32:58.939 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 161 mcs.
2021.03.05 19:33:01.583 ::SymbolInfoTick(_Symbol,Tick)] = 158 mcs.
2021.03.05 19:36:01.682 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 143 mcs.
2021.03.05 19:36:31.229 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 234 mcs.
2021.03.05 19:36:31.229 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 913 mcs.
2021.03.05 19:39:08.716 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 139 mcs.
2021.03.05 19:39:30.994 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 315 mcs.
2021.03.05 19:39:32.858 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 114 mcs.
2021.03.05 19:40:41.437 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 101 mcs.
2021.03.05 19:42:26.104 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 116 mcs.
2021.03.05 19:42:28.849 ::SymbolInfoTick(_Symbol,Tick)] = 109 mcs.
2021.03.05 19:43:10.977 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 481 mcs.
2021.03.05 19:43:53.945 ::SymbolInfoTick(_Symbol,Tick)] = 130 mcs.
2021.03.05 19:49:20.352 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 101 mcs.
2021.03.05 19:51:31.242 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 102 mcs.
2021.03.05 19:51:44.986 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 107 mcs.
2021.03.05 19:52:05.590 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 219 mcs.
2021.03.05 19:53:56.013 ::SymbolInfoTick(_Symbol,Tick)] = 236 mcs.
2021.03.05 19:55:41.453 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 105 mcs.
2021.03.05 19:55:47.109 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 148 mcs.
2021.03.05 19:55:47.110 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 265 mcs.
2021.03.05 19:59:26.011 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 186 mcs.
2021.03.05 20:00:01.569 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 117 mcs.
2021.03.05 20:01:19.704 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 109 mcs.
2021.03.05 20:02:07.285 ::SymbolInfoTick(_Symbol,Tick)] = 177 mcs.
2021.03.05 20:02:07.286 ::SymbolInfoTick(_Symbol,Tick)] = 198 mcs.
2021.03.05 20:02:07.286 ::SymbolInfoTick(_Symbol,Tick)] = 202 mcs.
2021.03.05 20:04:40.170 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 364 mcs.
2021.03.05 20:04:45.905 ::SymbolInfoTick(_Symbol,Tick)] = 143 mcs.
2021.03.05 20:04:45.906 ::SymbolInfoTick(_Symbol,Tick)] = 158 mcs.
2021.03.05 20:04:45.907 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 504 mcs.
2021.03.05 20:04:48.259 ::SymbolInfoTick(_Symbol,Tick)] = 104 mcs.
2021.03.05 20:04:54.727 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 104 mcs.
2021.03.05 20:05:39.642 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 101 mcs.
2021.03.05 20:07:40.189 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 101 mcs.
2021.03.05 20:09:21.844 ::SymbolInfoTick(_Symbol,Tick)] = 115 mcs.
2021.03.05 20:09:32.422 ::SymbolInfoTick(_Symbol,Tick)] = 107 mcs.
2021.03.05 20:10:02.423 ::SymbolInfoTick(_Symbol,Tick)] = 128 mcs.
2021.03.05 20:15:48.838 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 149 mcs.
2021.03.05 20:16:36.001 ::SymbolInfoTick(_Symbol,Tick)] = 105 mcs.
2021.03.05 20:17:51.499 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 480 mcs.
2021.03.05 20:17:51.638 ::SymbolInfoTick(_Symbol,Tick)] = 342 mcs.
2021.03.05 20:17:52.802 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 429 mcs.
2021.03.05 20:17:53.340 ::SymbolInfoTick(_Symbol,Tick)] = 142 mcs.
2021.03.05 20:19:21.512 ::SymbolInfoTick(_Symbol,Tick)] = 122 mcs.
2021.03.05 20:20:35.836 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 116 mcs.


No parece tan malo. No hubo transacciones comerciales. Qué tal ellos, voy a ver.


SIN EMBARGO, el fragmento resaltado muestra que tres EAs (diferentes personajes) se retrasaron casi simultáneamente. Es decir, el retraso es universal para el Terminal.

 
Slava:

Symbol(), las entradas _Symbol son equivalentes a NULL (donde se permite NULL en lugar del nombre del símbolo).

En este caso, no hay una comprobación extra de la existencia del símbolo actual, de la presencia del símbolo actual en la vigilancia del mercado y de las propiedades de llamada innecesarias del símbolo actual, ya que las propiedades del nodo actual se almacenan en la caché

Es decir, si se especifica un parámetro de cadena simple en lugar de Symbol(), _Symbol o NULL, entonces hay comprobaciones del programa completo y más propiedades de solicitud

Por favor, explíquelo de nuevo, porque hay diferentes interpretaciones de sus palabras por parte de los usuarios del foro.

 

En la Terminal con un EA/característica/símbolo.


2021.03.05 23:02:02.860 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 189 mcs.
2021.03.05 23:02:24.152 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 339 mcs.
2021.03.05 23:02:53.540 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 915 mcs.
2021.03.05 23:05:35.325 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 223 mcs.
2021.03.05 23:05:41.398 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 245 mcs.
2021.03.05 23:05:44.585 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 376 mcs.
2021.03.05 23:06:35.210 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 173 mcs.
2021.03.05 23:07:38.298 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 290 mcs.
2021.03.05 23:08:50.342 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 102 mcs.
2021.03.05 23:14:58.216 ::SymbolInfoTick(_Symbol,Tick)] = 447 mcs.

Un tronco así en 15 minutos. Parece ser una cuestión de lentitud de Windows después de todo. En este caso sí.

2021.03.05 23:49:20.792 Terminal        MetaTrader 5 x64 build 2815 started for MetaQuotes Software Corp.
2021.03.05 23:49:20.792 Terminal        Windows Server 2019 build 17763, Intel Core i7-7700 K  @ 4.20 GHz, 17 / 31 Gb memory, 3698 / 3725 Gb disk, IE 11, RDP, UAC, GMT+2
 

Un claro ejemplo de los frenos que provoca Market Watch.

Fíjese en los valores de la columna Procesador (segunda por la derecha).

 
Al retardo del Servidor se suma el del Terminal.

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

Indicadores: Ping

fxsaber, 2021.03.12 10:56

Acabo de recordar este gran indicador.

Es una imagen de la máquina con cero ping. Resulta que el retraso interno del terminal tiene una media de ~2ms. Rebota entre 0-9 ms.


Por ejemplo, el servidor recibió dos ticks: el primero y el segundo después de 10 ms. Así, en Terminal el segundo tick puede recibirse no en 10 ms después del primero, sino en 10-19 ms. En promedio, es 12 ms más tarde.

Si negocia a partir del mercado (mercados u órdenes pendientes al precio actual), será especialmente difícil de gestionar. Es difícil decir si los promotores podrán mejorar algo aquí.

Si miramos la bolsa de Moscú, la situación allí es similar. De hecho, operando a través del algo de MT5, tienes casi garantizado estar al final de la cola de ejecución, no teniendo tiempo de coger lo bueno, por desgracia.

Акцептирование SL/TP-ордеров
Акцептирование SL/TP-ордеров
  • 2020.11.24
  • www.mql5.com
В этой ветке пойдет речь об ордерах, которые создаются в результате срабатывания SL/TP-уровней открытых позиций...
Razón de la queja: