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

 
fxsaber:

No entiendes nada. Cuando volvemos, estamos entrando en las funciones On de la cola generada. Esto puede provocar una pausa que impida al primer OrderSend enviar el segundo correcto.

¿En qué consiste la pausa/retraso? ¿En la copia de 3 estructuras?

OnTradeTransaction( параметры )
{
        поместить параметры в очередь
        OnMain();
}

Se propone acumular la cola guardando todas las funciones On después de la devolución, esperando la función On, que dirá que el primer OrderSend ha terminado. Y luego sólo enviar el segundo OrderSend.

No es necesario acumular todos los eventos. No espere a que se copie el siguiente evento: puede procesar los eventos antes de la devolución y enviar el segundo OrderSend en cuanto lleguen los requisitos previos para ello

Tampoco se da cuenta de que la posición de toma puede ser ejecutada durante el primer OrderSend, pero su OnTradeTransaction estará en la cola más tarde (en el mismo microsegundo, pero más tarde) que el OnTradeTransaction final del primer OrderSend.

¿Y cómo le ayuda en esa situación?

bool HandleNextEvent(ENUM_EVENT_TYPE);

Será el último tanto aquí como allí

 
fxsaber:

No entiendes nada. Cuando volvemos, estamos entrando en las funciones On de la cola generada. Esto puede provocar una pausa que impida que el primer OrderSend envíe el segundo correcto inmediatamente después del primero.

Se propone acumular la cola guardando todas las funciones On después de la devolución, esperando la función On, en la que habrá un mensaje sobre el final del primer OrderSend. Y luego sólo enviar el segundo OrderSend.

Al mismo tiempo, no entiendes que la posición tomada puede ser ejecutada durante el primer OrderSend, pero su OnTradeTransaction estará en la cola más tarde (en el mismo microsegundo, pero más tarde) que el OnTradeTransaction final del primer OrderSend.

No hay cola. El nuevo evento se procesará después del actual, y se ignorarán todos los eventos ocurridos durante este periodo.

 
La cola, o pila, es formada por usted, MQ no lo hace.
 

En mi opinión, la solución al problema sería poder "suscribir" un pedido. Es decir, que el terminal genere un evento cuando se produzca una transacción sobre una orden.

Pero esto debería ser implementado por los desarrolladores, no por nosotros. Todas nuestras soluciones, de una manera u otra, volverán a la historia de los acuerdos. No tengo una criticidad tan microsegunda, pero es realmente

Pero es realmente molesto escribir bichos complejos para saber si una operación se ha superado o no, si se han disparado los niveles o si alguien ha corregido una posición en el terminal.

Aunque parezca algo sencillo -un evento sobre una operación en una posición- y todo sería mucho más fácil.

 
Maksim Emeliashin:

Pero son los desarrolladores los que tienen que ponerlo en práctica, no nosotros.

Los desarrolladores sólo deben proporcionar las herramientas. MQL es esencialmente un lenguaje de programación de bajo nivel (como C++). No lo utilizas en términos de tareas, sino en términos de cálculos. Y tú mismo tomas todas las decisiones de alto nivel. Puede que le falten herramientas, pero no soluciones prefabricadas

 
A100:

¿Qué es la pausa? ¿En la copia de 3 estructuras?

Al procesar una cola de eventos diversos.

¿Cómo le ayudaría en una situación así?

Será el último aquí o allá.

Estaré al tanto del cierre de la toma.

 
Алексей Тарабанов:

No hay cola. El nuevo evento se procesará después del evento actual y se ignorarán todos los eventos ocurridos durante este periodo.

Incompetente.

 
fxsaber:

Hay varios eventos en la cola para ser procesados.

Estaré atento al cierre en el tee.

Detengámonos en el hecho de que realmente (sin código conHandleNextEvent ) no entiendo las cosas elementales.

Como nota final, la diferencia entre elHandleNextEvent propuesto y lo que yo escribí es que es vía recursividad y yo lo tengo vía bucle. Además, la cola se forma inicialmente y puedes gestionarla... manejas algunos eventos a la vez y los pospones para otro momento, tienes total libertad.

 
¿Cuál es la razón por la que este EA no alerta?
const MqlTick GetMarketWatchTick( void )
{
  MqlTick Tick = {0};
  
  ::SymbolInfoTick(_Symbol, Tick);
  
  return(Tick);
}

const MqlTick GetLastHistoryTick()
{
  MqlTick Tick[1];
  
  ::CopyTicks(_Symbol, Tick, COPY_TICKS_ALL, 0, 1);
  
  return(Tick[0]);
}

void OnTick()
{
  if (GetMarketWatchTick().time_msc > GetLastHistoryTick().time_msc) // Тик из Обзора рынка свежее, чем последний тик из истории.
    Alert("Hello!");
}


Al mismo tiempo, el mismo cheque, cosido en el asesor de comercio de combate en el mismo Terminal, Alerta. ¿Cuál podría ser la razón?

 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

MT5 y Speed en acción

Anton, 2020.05.29 16:21

Script para la comprobación del tiempo máximo y medio:

2474.

        Last tick time. Selected orders: 0; max time: 0.187 ms; avr time: 0.022 ms; 100000 iterations
        Last 3 days. Selected orders: 1956; max time: 1.832 ms; avr time: 0.301 ms; 100000 iterations
        Orders total: 56561

Se ha convertido en algo muy bueno. Si lo ha cambiado - Gracias. Estaré atento al rendimiento en el modo de combate.


PS En el modo de combate, cuando se hacen intercambios, casi siempre se retrasa (sólo salen casos mayores de 5 milisegundos).

2020.06.03 13:57:27.895 Alert: Time[NewTicks.mqh 112: ::HistorySelect(TimeMsc/1000,INT_MAX)] = 14 ms.
2020.06.03 13:57:47.780 Alert: Time[NewTicks.mqh 112: ::HistorySelect(TimeMsc/1000,INT_MAX)] = 5 ms.
2020.06.03 14:03:49.844 Alert: Time[NewTicks.mqh 112: ::HistorySelect(TimeMsc/1000,INT_MAX)] = 9 ms.
2020.06.03 14:03:51.063 Alert: Time[NewTicks.mqh 112: ::HistorySelect(TimeMsc/1000,INT_MAX)] = 8 ms.
2020.06.03 14:03:55.115 Alert: Time[NewTicks.mqh 112: ::HistorySelect(TimeMsc/1000,INT_MAX)] = 12 ms.
2020.06.03 14:03:56.935 Alert: Time[NewTicks.mqh 112: ::HistorySelect(TimeMsc/1000,INT_MAX)] = 6 ms.

Por lo demás, parece ser mucho mejor que la 2470.