Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Mira la hora del registro. Todo esto ocurrió en un ms, y al lado (en el mismo ms) un montón de OnBooks.
Puedes contar todos los eventos mediante contadores, pero incluso visualmente puedes ver que hay más OnBooks.
¿No has escrito que utilizas órdenes Async?
Me preguntaba, ¿qué algoritmo utilizan para controlar la ejecución de las operaciones?
Andrew, los números allí son microsegundos fijos cuando OnFunctions se dispara, y todo se imprime juntos entonces de la matriz. Los OnBooks en total pueden ser más - voy a contar, pero no está claro por qué saltan por delante de los OnTicks en la cola o qué. ¿O no todos los OnTick se corresponden con un OnBook?
bienvenido al mundo de la red ))))
Lo más fácil es ejecutarNetstat - a -b bajo el administrador.
Verás puertos y software, no quiero molestar, pero creo que el servidor de MT5 pasa asincrónicamente paquetes con diferente información que el terminal pone en los "estantes" necesarios.
HH: ¿Sabes lo de Print() y la omisión de impresiones si sacas muchas a la vez? - Sólo tienes que escribir tu información en el archivo, así lo guardarás todo y en orden, pero no te olvides de cerrar el archivo antes de cerrarlo. En teoría y Print() en los registros en el archivo debe ser completa, pero no han comprobado y en general no confío en si una gran cantidad de datos de salida. Se discute aquíhttps://www.mql5.com/ru/forum/329730, muy a menudo se discuten las "huellas perdidas" ))) - búsqueda
Andrew, los números son microsegundos fijos cuando se disparan las OnFunctions, y luego se imprimen todos juntos desde el array. Puede que haya más OnBooks en total - los contaré, pero no está claro por qué saltan por delante de los OnTicks en la cola. ¿O no todos los OnTick se corresponden con un OnBook?
Lo tengo.
De todos modos, hay muchos OnBooks por ahí. Es difícil sacar conclusiones con un registro así.
Creí que habías escrito que utilizabas órdenes Async.
Me preguntaba, ¿qué algoritmo utilizan para controlar la ejecución de las operaciones?
En OnTradeTransaction()+ función de comprobación si no hay respuesta del servidor durante mucho tiempo.
Generalmente por arte de magia.
Reservo 65535 símbolos mágicos para cada símbolo al configurar un EA,
y al enviar una orden le asigno un número mágico único que no se cruza con otros símbolos de ninguna manera.
que no se solapa en absoluto con otros instrumentos.
Así es como establezco el número mágico inicial para un símbolo
Magia - ulong (8 bytes) por ejemplo
GAZR-3.12
Byte[7] (byte alto) es "G"
Byte[6] es "A"
Byte[5] para "Z"
El byte[4] es "R
Byte[3] es "3
Byte[2] es "12"
Byte[1] y Byte[0] son reserva de magos (65535)
Así es como paso por los magos al enviar un pedido:
Pero esto sólo funciona para FORTS, ya que los nombres de los símbolos están estandarizados.
Añadido
Si el pedido se envía con éxito, entonces
recuerda el tiempo
Y luego (si no hay respuesta en OnTradeTransaction)
Y luego la propia funciónFindOrderBuyMagic
Añadido por
"Buena idea" añadir el identificador de EA (0-255) al 1er byte del autómata,
pero aún no lo necesito, así que no lo he hecho :)
En OnTradeTransaction()+ función de comprobación si no hay respuesta del servidor durante mucho tiempo.
Gracias por el consejo.
1. El segundo y los siguientes terminales del broker son de pago y no tengo estrategias en las que opere sólo con acciones(carteras de acciones).
2. Si va a emitir elGetMicrosecondCount() acumulado, entonces
hazlo sin temporizador en OnDeinit(), cuando el EA salga, todo se imprimirá.
Por favor, envíenme el enlace del corredor, es posible en la LC.
Esta es una rama interesante... :-)
bienvenido al mundo de la red ))))
Lo más fácil es ejecutarNetstat - a -b bajo el administrador.
Verás puertos y software, no me quiero molestar, pero creo que el servidor de MT5 pasa asincrónicamente paquetes con diferente información que el terminal pone en los "estantes" necesarios.
SZZY: sobre Print() y la omisión de impresiones si se imprimen muchas a la vez, ¿lo sabes? - Sólo tienes que escribir tu información en el archivo, así lo guardarás todo y en orden, pero no te olvides de cerrar el archivo antes de cerrarlo. En teoría y Print() en los registros en el archivo debe ser completa, pero no han comprobado y en general no confío en si una gran cantidad de datos de salida. Se discute aquíhttps://www.mql5.com/ru/forum/329730, muy a menudo se discuten las "huellas perdidas" ))) - búsqueda
Igor, la pérdida de impresiones es discutida por aquellos que no han abierto el archivo de registro, cien veces y el propio Rinat Fatkullin escribió que no se pierde nada en el archivo de registro. Pero para tu post no fue en vano :) He añadido la salida en un archivo separado, además he hecho el segundo archivo, donde la salida un poco diferente (recogiendo todos los eventos en CArrayObj) para evitar posibles errores de mi diseño, que ordena dos matrices, es decir, pongo todo en CArrayObj de dos matrices, a continuación, ordenar por microsegundos y la salida con el marcado de lo que el evento Tick o Libro.
Y sí, ¿qué tiene que ver eso con los puertos, qué tiene que ver? Sólo estoy probando la cola de eventos de EA. Si se produce un tick, deben formarse dos eventos - OnTick, y el correspondiente OnBook, y OnBook siempre se pone en cola, y OnTick puede desaparecer si ya hay OnTick en la cola (como en manual), es decir . la situación cuando uno tras otro OnTick sin OnTick puede ser sólo si 1. los OnTicks van "sin cola" 2. hay un retraso del sistema de OnBook, esto es lo que quiero comprobar, esto puede explicar el retraso de segundos, previamente identificado por los colegas. Si este retraso se debe a los paquetes asíncronos y al análisis sintáctico, tal vez, pero hasta ahora sólo compruebo el hecho de su ingreso en el EA. Cómo hacer la prueba teniendo en cuenta el resto de los matices, aún no lo he pensado.
Aquí está el nuevo código, en la apertura voy a probar la corrección del trabajo y ejecutar para el día.
s.w. La razón también puede ser: si Tick pasó a los mismos precios sin cambiar la copa - OnBook no se forma? No soy un especialista en el comercio de acciones, que me puede decir. Pensaba que OnTick siempre provoca OnBook.
Pero me pregunto si el responsable está satisfecho con las respuestas a su pregunta.
Ya he recibido todas las respuestas y he sacado mis propias conclusiones.
Necesito analizar la tira de operaciones durante un periodo de tiempo determinado: precios de las operaciones, volúmenes realizados, etc.
También necesito simular el funcionamiento del algoritmo en el probador de estrategias.
El evento OnTick se adapta perfectamente a esto, los resultados de las operaciones reales y los resultados del modelado en el probador coinciden con un pequeño error para mi satisfacción.
Si necesita un análisis más rápido de la tira, puede utilizar OnTimer.
Y no es necesario que cada tick que llegue al terminal se coloque en OnBook - esto es lo específico de la ejecución de órdenes de mercado.
Y cada tic que entra en el terminal no tiene por qué entrar en OnBook: son las particularidades de la ejecución de órdenes de mercado.
Por el contrario, cada tick(evento) que llega al manejador OnTick debe ser sincronizado con OnBook.
Hay tres eventos en el manejador OnTick, el cambio de precio de la mejor oferta, el cambio de precio de la mejor demanda, y la operación (última).
Si el precio de compra o venta cambia sin que haya una operación, esto será un evento y OnTick recibirá estos eventos.
Y OnBook también tiene que atrapar estos eventos, pero sus propios eventos, su manejador, de lo contrario habrá un desajuste de precios de oferta y demanda entre los manejadores.
Y si OnTick recibe un último evento, significa que una operación ha pasado.
La operación genera el evento en OnTick, porque después de la operación el precio o el volumen de las ofertas y demandas a cambiar en el mercado.
Es un círculo vicioso.
Tanto en OnTick como en OnBook, existe un evento de Mejor Oferta y Mejor Demanda.
Estos eventos deben ser siempre sincrónicos en ambos manejadores.
Y el evento dura por sí mismo, genera un evento en OnBook después de la operación.
Por lo tanto, cualquier evento que llegue al manejador OnTick debe reflejarse sincrónicamente en OnBook.