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

 
fxsaber:

¿Qué terminal crees que consume más CPU?

2 y he aquí por qué

 
fxsaber:

Para reducir la CPU recomiendo cerrar todas las subventanas del terminal (Market Watch, Navigator, Tools, etc.), minimizar todos los gráficos y minimizar el propio terminal.

Elimine todos los símbolos no utilizados de la Observación del Mercado. Es especialmente importante para los VPS.


Sugiero automatizar estas acciones de alguna manera. Antes de salir de su VPS, pulse y salga. Cuando entras en la prensa, lo ves todo.

Llevo mucho tiempo diciendo que los algotraders necesitan otra versión del terminal, ¡sin tanto tuneo!

Además de todo lo anterior, he añadido uno nuevo para cada EA:

ChartSetInteger(0,CHART_SHOW,false);

Todavía se retrasa :(

 
A100:

El 2º y por eso.

Sí, el segundo.

 
¿Cómo está diseñado SymbolInfoTick? No se entiende por qué puede funcionar durante decenas de milisegundos.
 

El b2560 pierde enormemente en rendimiento comparado con el b2592. Estamos esperando a que se solucione el fallo.

El hilo ha resultado útil.

 
fxsaber:

El b2560 pierde enormemente en rendimiento comparado con el b2592. A la espera de que se corrijan los errores.

b2593 ha sido corregido. Gracias.

 
Añadir la orden/operación al historial de operaciones provocará una reconstrucción completa de la caché de HistorySelect, no una parcial. Por lo tanto, tenemos retrasos en la activación de las órdenes.
// Демонстрация полного (не частичного) пересбора HistorySelect-кеша.
#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/321/Benchmark.mqh

input int inAlertTime = 1; // Нижний порог в миллисекундах

#define _B2(A) _B(A, inAlertTime)

const bool Init = EventSetTimer(1);

void OnTimer()
{
  static MqlTradeRequest Request = {0};
  static MqlTradeResult Result = {0};

  if (PositionSelectByTicket(Result.order)) // Если позиция открыта - закрываем.
  {
    Request.type = ORDER_TYPE_SELL;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
    Request.position = Result.order;
  }
  else // Иначе - открываем.
  {
    Request.action = TRADE_ACTION_DEAL;
    Request.type = ORDER_TYPE_BUY;
    Request.symbol = _Symbol;
    Request.volume = 0.1;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
    Request.position = 0;
  }

  if (OrderSend(Request, Result))
    _B2(HistorySelect(0, INT_MAX));
}

Resultado.
2020.09.08 20:23:32.103 Alert: Time[Test6.mq5 411: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:23:32.239 Alert: Time[Test6.mq5 411: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:31:59.863 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 9 ms.
2020.09.08 20:32:00.845 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:32:01.856 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 4 ms.
2020.09.08 20:32:02.846 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 7 ms.


Por qué es importante. Imaginemos que un robot HFT está funcionando. En la misma cuenta se ejecuta una operación a mano. Eso es todo, el robot HFT ha dejado caer el caché de HistorySelect con las consecuencias correspondientes. Por supuesto, la historia de HFT-robot no son 10K órdenes/operaciones, sino mucho más. Sería costoso reconstruir todo el caché para una historia así. Por eso es lógico que se añadan.


Está claro que la negociación manual no debe frenar a los robots. En el caso de la negociación algorítmica pura, el problema surge cuando se activan las órdenes.

 

Las funciones que permiten hacer instantáneas completas (matrices de estructuras) del entorno comercial actual (posiciones y órdenes) están muy ausentes.

Una variante a través de las funciones Posición* y Orden* provoca colisiones (negociación activa) al pasar estas dos listas en el bucle. Algo se ha perdido o no se ha contabilizado.

Las instantáneas completas evitarían estos problemas.


ZZY Instantáneas completas para Market Watch - aún no se ha evaluado la relevancia. Acercamiento de MT5 a HFT (LCI).

 

Consiguió (no a propósito) que el Terminal (y ninguno) entrara en un estado en el que la CPU estuviera al 100% y el tiempo de espera de OrderSend fuera superior a un segundo.

Probablemente no será fácil encontrar la causa.


ZZY Parece que estos frenos son causados por un diseño similar.

void OnTrade()
{
  OnTick();
}

No he conseguido crear ningún código para reproducirlo.


De hecho, es posible llevar el Terminal a un estado en el que las órdenes de comercio se ejecutarán en segundos (registro del Terminal) con un ping de 50 ms. Una vez que se eliminan los EAs, las órdenes comerciales comienzan a ejecutarse en 100ms.

 
fxsaber:

Las funciones que permiten hacer instantáneas completas (matrices de estructuras) del entorno comercial actual (posiciones y órdenes) están muy ausentes.

Una variante a través de las funciones Posición* y Orden* provoca colisiones (negociación activa) al pasar estas dos listas en el bucle. Algo se ha perdido o no se ha contabilizado.

Las instantáneas completas evitarían estos problemas.


ZZY Instantáneas completas para Market Watch - aún no se ha evaluado la relevancia. Acercamiento de MT5 a HFT (LCHI).

Y funciones a tiempo completo para seguir el orden-transacción-posición por billete y hacia atrás por posición de billete para entender cuál era el orden y los términos de la transacción. El seguimiento por estado de la historia es una realidad perversa.

El entorno de clicks completo es genial, pero aparentemente es caro y no suele ser necesario. aunque cuando el mercado se derrumba))))

Para mí, divido un orden y una orden. Una orden de ejecución es una orden pendiente. La orden de mercado es confusa.

No juzgue estrictamente por la opinión de los no profesionales.