Si reformulamos el problema como "con qué frecuencia se llama al código MQL5 desde el núcleo terminal", entonces todo debería medirse mal:
Deberíamos eliminar todo el código MQL5 innecesario y dejar un par de contadores en una función desnuda para minimizar el coste de la propia medición
Encontrar un punto de entrada OnXXXX adecuado y un método de generación forzada de llamadas desde el núcleo. Aquí tenemos que hacer una construcción de prueba separada para la medición.
En este caso, después de haber construido un polígono, realmente se puede medir todos los gastos generales en las llamadas MQL5 y obtener una característica interesante. Como es nuestra costumbre, a continuación, optimizar todo varias veces.
Esta es una tarea interesante y nos ocuparemos de ella.
Si reformulamos el problema como "con qué frecuencia se llama al código MQL5 desde el núcleo terminal", entonces todo debería medirse mal:
Deberíamos eliminar todo el código MQL5 innecesario y dejar un par de contadores en una función desnuda para minimizar el coste de la propia medición
Encontrar un punto de entrada OnXXXX adecuado y un método de generación forzada de llamadas desde el núcleo. Aquí tenemos que hacer una construcción de prueba separada para la medición.
En este caso, después de haber construido un polígono, realmente se puede medir todos los gastos generales en las llamadas MQL5 y obtener una característica interesante. Como es nuestra costumbre, a continuación, optimizar todo varias veces.
Esta es una tarea interesante y lo haremos.
¡Gracias por no dejar cosas tan geeky sin atención!
Probablemente, necesitamos una construcción separada para medir la velocidad de llegada de los paquetes de cotización. Justo lo que quería medir.
si a través de OrderSendAsync envío dos limitadores (BuyLimit1_price < BuyLimit2_price) dentro del spread, ¿generará la bolsa dos ticks consecutivos con mejora bid-price al mismo tiempo (con precisión de 1ms)?
Permítanme explicar lo que esto hará.
Cuando se envía BuyLimit1 dentro del spread, nos llegará un tick desde la bolsa con la hora de su nacimiento (generará un nuevo Bid). Después de BuyLimit2 - otro tick con su hora de nacimiento. La diferencia de estos dos tiempos es la característica de velocidad de entrega de las órdenes de trading MT5 a la bolsa.
Para que las pérdidas monetarias de tal experimento sean mínimas, puede enviar no dos BuyLimits de forma asíncrona, sino BuyLimit y SellLimit dentro del spread y elegir algún instrumento comercial poco líquido.
Solo tienes que esperar 5-10 ms e intentarlo de nuevo.
Lo que pasa es que obtienes la confirmación de la transacción inmediatamente, pero los detalles completos de la transacción llegan de forma asíncrona después de eso. Puede tardar de 0 a N ms, normalmente entre 1-2 ms (depende del ping, claro).
Debido a esta circunstancia, la comparación con QLUA no es favorable a MT5.
fxsaber: Debido a esta circunstancia, es necesario ajustar ligeramente la comparación con QLUA no a favor de MT5.
No es necesario ajustar nada. Mi frase era para el caso general "en tu internet y tu ping puede ser cualquier cosa y en realidad dependiendo de tu red obtendrás una transacción en 0-N ms". Y es más probable que sea 0 ms que más.
Aquí está el código de verificación con control de todas las transacciones en modo asíncrono:
ulong ExtTicks=0;
//+------------------------------------------------------------------+//| Función de inicialización experta|//+------------------------------------------------------------------+intOnInit()
{
//--- salida del ping al servidor de comercio en milisegundosPrintFormat("AsyncTradesTest: last ping %.2f ms, build %d",TerminalInfoInteger(TERMINAL_PING_LAST)/1000.0,TerminalInfoInteger(TERMINAL_BUILD));
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//||//+------------------------------------------------------------------+voidOnTradeTransaction(constMqlTradeTransaction &trans,
constMqlTradeRequest &request,
constMqlTradeResult &result)
{
Print(EnumToString(trans.type)," ",trans.symbol,": ",trans.price," ",result.order," time: ",(GetMicrosecondCount()-ExtTicks)/1000.0," ms");
}
//+------------------------------------------------------------------+//| Función tick experto|//+------------------------------------------------------------------+voidOnTick()
{
staticbool started=false;
//--- ejecuta la serie una vez en el primer tickif(!started)
{
started=true;
//--- rellene la consultaMqlTradeRequest req={};
MqlTradeResult res={};
req.volume =1;
req.symbol =_Symbol;
req.price =SymbolInfoDouble(_Symbol,SYMBOL_ASK);
req.sl =0;
req.tp =0;
req.deviation =100;
req.type_filling=ORDER_FILLING_RETURN;
req.action =TRADE_ACTION_DEAL;
req.type =ORDER_TYPE_BUY;
req.magic =2016;
//--- ejecuta el bucle de operación
ExtTicks=GetMicrosecondCount();
Print("Start...");
OrderSendAsync(req,res);
}
}
Aquí está su salida en una cuenta real en este momento:
2016.09.1418:32:53.234 Test (BR-12.16,H1) TRADE_TRANSACTION_HISTORY_ADD BR-12.16: 0.00 time: 11.455 ms
2016.09.1418:32:53.232 Test (BR-12.16,H1) TRADE_TRANSACTION_DEAL_ADD BR-12.16: 47.130 time: 8.778 ms
2016.09.1418:32:53.231 Test (BR-12.16,H1) TRADE_TRANSACTION_ORDER_DELETE BR-12.16: 0.00 time: 8.457000000000001 ms
2016.09.1418:32:53.231 Test (BR-12.16,H1) TRADE_TRANSACTION_ORDER_UPDATE BR-12.16: 0.00 time: 8.202999999999999 ms
2016.09.1418:32:53.231 Test (BR-12.16,H1) TRADE_TRANSACTION_REQUEST : 0.044326441 time: 8.151 ms
2016.09.1418:32:53.228 Test (BR-12.16,H1) TRADE_TRANSACTION_ORDER_UPDATE BR-12.16: 0.00 time: 5.196 ms
2016.09.1418:32:53.228 Test (BR-12.16,H1) TRADE_TRANSACTION_REQUEST : 0.044326441 time: 5.171 ms
2016.09.1418:32:53.227 Test (BR-12.16,H1) TRADE_TRANSACTION_ORDER_ADD BR-12.16: 0.00 time: 4.184 ms
2016.09.1418:32:53.223 Test (BR-12.16,H1) Start...
2016.09.1418:32:49.753 Test (BR-12.16,H1) AsyncTradesTest: last ping 2.15 ms, build 1417
Usted debe leer de abajo hacia arriba.
Muestra todas las etapas de las transacciones con el total acumulado del tiempo empleado desde el inicio. Por tipos de transacción puede ver qué se añadió al terminal y cuándo.
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Si reformulamos el problema como "con qué frecuencia se llama al código MQL5 desde el núcleo terminal", entonces todo debería medirse mal:
En este caso, después de haber construido un polígono, realmente se puede medir todos los gastos generales en las llamadas MQL5 y obtener una característica interesante. Como es nuestra costumbre, a continuación, optimizar todo varias veces.
Esta es una tarea interesante y nos ocuparemos de ella.
¡Ya lo tengo!Sí, lo tenemos.
Lo siento, lo pasé por alto.
Si reformulamos el problema como "con qué frecuencia se llama al código MQL5 desde el núcleo terminal", entonces todo debería medirse mal:
En este caso, después de haber construido un polígono, realmente se puede medir todos los gastos generales en las llamadas MQL5 y obtener una característica interesante. Como es nuestra costumbre, a continuación, optimizar todo varias veces.
Esta es una tarea interesante y lo haremos.
¡Gracias por no dejar cosas tan geeky sin atención!
Probablemente, necesitamos una construcción separada para medir la velocidad de llegada de los paquetes de cotización. Justo lo que quería medir.
Por favor, haga otra prueba de velocidad MT5 en una cuenta real
Foro sobre trading, sistemas automatizados de trading y prueba de estrategias de trading
Probando 'CopyTicks'
fxsaber, 2016.09.13 11:11 AM
si a través de OrderSendAsync envío dos limitadores (BuyLimit1_price < BuyLimit2_price) dentro del spread, ¿generará la bolsa dos ticks consecutivos con mejora bid-price al mismo tiempo (con precisión de 1ms)?
Permítanme explicar lo que esto hará.
Cuando se envía BuyLimit1 dentro del spread, nos llegará un tick desde la bolsa con la hora de su nacimiento (generará un nuevo Bid). Después de BuyLimit2 - otro tick con su hora de nacimiento. La diferencia de estos dos tiempos es la característica de velocidad de entrega de las órdenes de trading MT5 a la bolsa.
Para que las pérdidas monetarias de tal experimento sean mínimas, puede enviar no dos BuyLimits de forma asíncrona, sino BuyLimit y SellLimit dentro del spread y elegir algún instrumento comercial poco líquido.
Antes de comparar, tenemos que "terminar" todo el complejo de operaciones comerciales
(recepción de datos, justificación de operaciones, recepción de confirmación de operaciones).
Añadido Build 1395, real
Foro sobre negociación, sistemas automatizados de negociación y comprobación de estrategias de negociación
FORTS. Preguntas sobre la ejecución
Renat Fatkhullin, 2016.08.23 16:35
Solo tienes que esperar 5-10 ms e intentarlo de nuevo.
Lo que pasa es que obtienes la confirmación de la transacción inmediatamente, pero los detalles completos de la transacción llegan de forma asíncrona después de eso. Puede tardar de 0 a N ms, normalmente entre 1-2 ms (depende del ping, claro).
Antes de comparar, tenemos que "terminar" todo el complejo de operaciones comerciales
(recepción de datos, justificación de operaciones, recepción de confirmación de operaciones).
Añadido Build 1395, real
Acabo de hacer una operación similar manualmente: 11.7 ms
No quiere ver el informe real, sino utilizar su propio método defectuoso para medir el tiempo de transacción.
Y no quiere admitir sus errores, prefiriendo creer cifras monstruosas de su script erróneo.
Acabo de hacer una operación similar manualmente: 11,7 ms.
¿De qué estás hablando, Renate?
Esto es un extracto del log de Temninal, ¡no de mi propio log!
Debido a esta circunstancia, es necesario ajustar ligeramente la comparación con QLUA no a favor de MT5.
No es necesario ajustar nada. Mi frase era para el caso general "en tu internet y tu ping puede ser cualquier cosa y en realidad dependiendo de tu red obtendrás una transacción en 0-N ms". Y es más probable que sea 0 ms que más.
Aquí está el código de verificación con control de todas las transacciones en modo asíncrono:
Aquí está su salida en una cuenta real en este momento:
Usted debe leer de abajo hacia arriba.
Muestra todas las etapas de las transacciones con el total acumulado del tiempo empleado desde el inicio. Por tipos de transacción puede ver qué se añadió al terminal y cuándo.
El tiempo total es de 11,45 ms.