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

 
fxsaber:

no es posible cambiar la historia en el fin de semana, así que no hay manera de comprobarlo.

Posiblemente. Por eso se encontró el problema el fin de semana.

// Демонстрация лагов HistorySelect при удалении нескольких ордеров.
#property script_show_inputs

input int inAmount = 5; // Количество ордеров

#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/332/Benchmark.mqh
#define _B2(A) _B(A, 10)

// true - ордер есть в истории, false - иначе.
bool HistorySelectOrder( const ulong Ticket )
{
  return((HistoryOrderGetInteger(Ticket, ORDER_TICKET) == Ticket) ||
         (_B2(HistorySelect(0, INT_MAX)) && (HistoryOrderGetInteger(Ticket, ORDER_TICKET) == Ticket)));
}

void OnStart()
{
  HistorySelect(0, INT_MAX); // Создали исторический кеш.
        
  MqlTradeRequest Request = {0};
  MqlTradeResult Result;
                        
  // Выставляем ордера
  Request.action = TRADE_ACTION_PENDING;
  Request.symbol = _Symbol;
  Request.volume = 0.01;
  Request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK) - 1000 * _Point;
  Request.type = ORDER_TYPE_BUY_LIMIT;
        
  for (int i = 0; i < inAmount; i++)
    if (!OrderSend(Request, Result) || (Result.retcode != TRADE_RETCODE_DONE))
      Print("Good!");
            
  // Удаляем ордера
  Request.action = TRADE_ACTION_REMOVE;

  for (int i = OrdersTotal() - 1; i >= 0; i--)
  {
    Request.order = OrderGetTicket(i);

    if (OrderSend(Request, Result) && (Result.retcode == TRADE_RETCODE_DONE) &&
        !HistorySelectOrder(Request.order)) // Проверяем наличие удаленного ордера в истории.
      Print("OrderSend BUG!");
  }
}


Resultado.

2020.09.27 15:46:11.940 Alert: Time[Test6.mq5 523: HistorySelect(0,INT_MAX)] = 39 mсs.
2020.09.27 15:46:11.988 Alert: Time[Test6.mq5 523: HistorySelect(0,INT_MAX)] = 253 mсs.
2020.09.27 15:46:12.034 Alert: Time[Test6.mq5 523: HistorySelect(0,INT_MAX)] = 190 mсs.
2020.09.27 15:46:12.083 Alert: Time[Test6.mq5 523: HistorySelect(0,INT_MAX)] = 218 mсs.
2020.09.27 15:46:12.130 Alert: Time[Test6.mq5 523: HistorySelect(0,INT_MAX)] = 250 mсs.

Se retrasa (puede llegar a varios milisegundos) después de borrar la segunda orden.

 
Renat Fatkhullin:

Cambia al conteo de microsegundos. Los milisegundos ya no son apropiados.

¿Por qué el servidor de MT5 ejecuta las órdenes pendientes en 100-200 milisegundos? (en un conocido corredor en A)

 
fxsaber:

Tal vez. Por eso se encontró un problema el fin de semana.


Resultado.

Retrasos (pueden llegar a ser de varios milisegundos) después de borrar la segunda orden.

La eliminación de los pedidos conlleva la desactivación completa de la caché del historial seleccionado.

En el modo normal, la velocidad de muestreo de la historia se llevó a decenas de microsegundos.

 
secret:

¿Por qué el servidor de MT5 ejecuta las órdenes pendientes en 100-200 milisegundos? (en un conocido corredor en A)

¿Ejecuta o acepta?

Sin los detalles de N operaciones (para que pueda ver el cuadro completo, no una sola orden arrancada. incluyendo pings) no se puede discutir.

 
Renat Fatkhullin:

Al borrar las órdenes se desactiva por completo la memoria caché de la historia seleccionada.

Sin embargo, el primer borrado va bien. El segundo tiene problemas. ¿Con qué está relacionada esta discapacidad?

 
fxsaber:

Tendré que buscarlo en el foro. Recuerdo haber mostrado cómo el acceso genérico a la historia es superior al mecanismo regular sólo en el Probador.

Este fueel caso.

Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
  • 2017.12.08
  • www.mql5.com
С 6 декабря 2017 года в стандартную поставку MetaTrader 5 стали входить так называемые Generic-классы, реализующие эффективные алгоритмы для хранен...
 
Renat Fatkhullin:

¿Ejecuta o acepta?

Sin detalles sobre N operaciones (para que pueda ver el panorama general, no una orden individual arrancada. incluyendo pings) no podemos discutir.

Sí, lo es.

Si el precio toca una orden pendiente de Límite con un tick y rebota, y este tick dura menos de 100-200 ms. Entonces, aproximadamente en el 30-50% de los casos se produce un deslizamiento. Es decir, la orden no tiene tiempo suficiente para ser ejecutada por el precio del tick.

La duración del tick se comprueba con el archivo de tick del broker, por lo que los pings no tienen nada que ver.

Tampoco creo en la alta carga de los servidores ya que sólo unos pocos operadores en esos momentos se mueven según los números de orden.

El deslizamiento por falta de liquidez tampoco tiene nada que ver. Aparece sólo en ticks cortos. El tamaño del lote también es pequeño.

Hasta ahora asumo un retraso artificial de la ejecución por parte del broker.

Lleva mucho tiempo recopilar estadísticas sobre varias operaciones. Pero es posible, si ayuda a responder la pregunta.

 
secret:

Ejecuta.

Si el precio toca una orden de Límite con un tick y rebota, y ese tick dura menos de 100-200 ms. Entonces, aproximadamente el 30-50% de los casos la orden se ejecuta con un deslizamiento. Es decir, la orden no tiene tiempo suficiente para ser ejecutada por el precio del tick.

La duración del tic se mide por el archivo de tics del broker, por lo que los pings no tienen nada que ver.

Tampoco creo en la alta carga de los servidores ya que sólo unos pocos operadores en esos momentos se mueven según los números de orden.

El deslizamiento por falta de liquidez tampoco tiene nada que ver. Aparece sólo en ticks cortos. El tamaño del lote también es pequeño.

Hasta ahora asumo un retraso artificial de la ejecución por parte del broker.

Lleva mucho tiempo recopilar las estadísticas de varias operaciones. Pero es posible, si ayuda a responder la pregunta.

Hay que investigarlo en detalle, pero si es forex, es probable que sea una operación en el siguiente tick.

Necesito registros y una tabla de gráficos de garrapatas.
 
secret:

Si el precio toca una orden de Límite con un tick y rebota, y ese tick dura menos de 100-200 ms. Entonces se produce un deslizamiento en un 30-50% de los casos. Es decir, la orden no consigue ejecutarse al precio del tick.

MT5 no tiene nada que ver. En las cuentas demo habrá una ejecución perfecta.
 

Cansado de depurar las instantáneas. Finalmente lo hizo perfecto. Un asesor, nada. Dos - perfecto. 20 - desastre: la CPU está por debajo del 100%. HistorySelect se retrasa muchos milisegundos.

Parece que MT5 no está pensado para hacer funcionar muchos Asesores Expertos simultáneamente.