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

 
Andrey Khatimlianskii:

Identificar una ruptura en la comunicación

No sé cómo hacerlo.

 
fxsaber:

No sé cómo hacerlo.

¿Qué le hace pensar que se producen y que OnTrade se pierde? ¿De la documentación?

 
Andrey Khatimlianskii:

¿Qué le hace pensar que se producen y que OnTrade se pierde? ¿De la documentación?

Porque Relogin restablece la caché histórica, que (supongo) está dopada a través del mecanismo OnTrade.

 
fxsaber:

No estoy seguro de cómo hacerlo.

Sin salir del tiempo de MT5 intertiki, si es posible. Y con las operaciones comerciales en relación con el orden en el DC sin ayuda interna, no se me ocurre nada.

 
Valeriy Yastremskiy:

No salir del tiempo intermedio de la MT5, si es posible. Y con las operaciones comerciales en relación con el orden en el DC sin ayuda interna, no se me ocurre nada.

No lo entiendo.

 
fxsaber:

No lo entiendo.

Sí, algo está mal. El tiempo entre ticks es sólo para los ticks que faltan debido a una interrupción de la comunicación. Y en cuanto a las consultas y la corrección de las respuestas sobre las órdenes, las operaciones y los estados de posición, si la respuesta se pierde o se cambia por un fallo de comunicación y se retrasa por ello, parece que no hay soluciones baratas. Volver a consultar en el siguiente tic no siempre es una opción.

La solución para mí sería una función incorporada para seguir el estado de las operaciones/posiciones con respecto a las órdenes de apertura, modificación, cierre parcial y cierre total de una posición. La solicitud de seguimiento del resultado podría establecerse en el propio pedido. Y obtener el resultado en el tick actual y no en el siguiente.

 
fxsaber:

¿Pueden decirme qué hacer para no tener que lidiar con esto mientras comercio?

2020.09.15 22:17:04.633 Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 13 ms.
2020.09.15 22:17:04.638 Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 18 ms.
2020.09.15 22:17:04.640 Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 20 ms.

A juzgar por el tiempo de registro, todo ocurrió en 7ms.

Si quieres tener una discusión constructiva, danos las condiciones completas de la prueba (servidor, tipo de cuenta, número de símbolos seleccionados, número de EAs, etc.).


El código de medición en tiempo de ejecución de SymbolInfoTick:

void OnTick()
  {
   MqlTick Tick;
//---
   ulong start,end,max_time=0,avr_time=0;
   int   count=1000;
   for(int i=0; i<count; i++)
     {
      start=GetMicrosecondCount();
      SymbolInfoTick(_Symbol, Tick);
      end=GetMicrosecondCount()-start;
      //---
      if(end>max_time)
         max_time=end;
      avr_time+=end;
     }
   Print("SymbolInfoTick max time: ",DoubleToString(max_time/1000.0,3)," ms; avr time: ",DoubleToString(avr_time/1000.0/count,3)," ms; ",count," iterations");
  }

En el servidor MetaQuotes-Demo (20 símbolos seleccionados, Netting, 4 posiciones abiertas):

2020.09.16 12:34:22.429 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.017 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:27.148 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.022 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:27.456 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.002 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:27.751 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.021 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:28.145 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.003 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:28.652 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.002 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:30.051 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.020 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:30.259 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.019 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:30.861 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.019 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:31.159 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.020 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:32.376 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.002 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:32.658 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.017 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:34:34.867 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.017 ms; avr time: 0.000 ms; 1000 iterations

131 símbolos seleccionados, 10 posiciones abiertas:

2020.09.16 12:44:50.554 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.003 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:52.337 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.019 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:54.960 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.019 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:55.587 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.020 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:55.863 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.016 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:56.187 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.002 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:56.958 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.018 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:44:59.989 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.003 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:00.298 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.021 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:07.609 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.024 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:07.891 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.017 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:08.790 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.019 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:09.617 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.019 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:09.933 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.002 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:11.841 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.002 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:13.416 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.022 ms; avr time: 0.000 ms; 1000 iterations
2020.09.16 12:45:13.709 SymbolInfoTick (EURUSD,H1)      SymbolInfoTick max time: 0.017 ms; avr time: 0.000 ms; 1000 iterations
Windows 10 build 18363, Intel Xeon  E5-2630 v4 @ 2.20 GHz, 52 / 63 Gb memory
Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Anton:

A juzgar por el tiempo de las entradas del registro, todo ocurrió en 7ms.

Son tres EAs diferentes.

Si quieres una discusión constructiva, entonces da todas las condiciones de la prueba en su totalidad (servidor, tipo de cuenta, número de símbolos seleccionados, número de EAs, etc.).

Cuenta real, RannForex-Server, 16 símbolos, gráfico M1 abierto en cada uno (5000 barras como máximo), en cada uno de ellos se ejecuta un EA, que accede sólo a su propio símbolo.

Puede haber unas 50 posiciones y el mismo número de órdenes a la vez. No hay indicadores, y sólo se utilizan CopyTicksRange (ticks frescos) y SymbolInfoTick para obtener los precios. No hay ninguna referencia a los bares.

 
fxsaber:

Se trata de tres EAs diferentes repartidos.

Cuenta real, servidor RannForex, 16 símbolos, gráfico M1 abierto en cada uno (5000 barras como máximo), en cada uno se ejecuta un EA que sólo accede a su propio símbolo.

Puede haber unas 50 posiciones y el mismo número de órdenes a la vez.

Si entiendo bien, no hay un EA allí, sino un probador de estrés en cada símbolo. Esto cambia las cosas por completo. Y muestra la ocultación de las condiciones iniciales.

Es decir, 16 hilos en un procesador de 8(4+HT) (+N hilos de terminal de trabajador en paralelo) sin parar y sin retrasos irrumpen en un objeto de base de datos de símbolos sincronizado. Los bloqueos de lectura/escritura se confunden porque hay una escritura constante de ticks.

Por lo general, en un perfil de este tipo, dependiendo de la inclinación del procesador y su dominio de los hilos, cada hilo puede pasar del 60% al 80% del tiempo de espera.

Y esto es así independientemente del tipo de tarea.

 
Renat Fatkhullin:

Si he entendido bien, no hay un EA allí, sino un probador de estrés en cada símbolo.

Entendido erróneamente. Cada EA es puramente comercial (en el probador por las garrapatas reales no se ralentiza) y no depende de los demás. Toda la lógica de negociación se ejecuta sólo en OnTick, sin spam de órdenes de negociación, sin recursividad, sin globalización y sin recursos.

OnTrade*, OnBook no se utilizan. Segundo temporizador y OnChartEvent para el caso de que se pulsen determinadas teclas.


Estoy seguro de que una implementación adecuada (por ti o por mí) de las instantáneas reducirá en gran medida el número de llamadas a las funciones regulares del entorno. En consecuencia, los retrasos se reducirán drásticamente.

Nunca pensé que llegaría a los trucos de las instantáneas. Estoy estudiando la cuestión, ya que la implementación estándar de MT5-advisor es penosa, por desgracia.

Razón de la queja: