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
Captura de todos los eventos por tic, comparándolos con los datos registrados anteriormente.
Todo en matrices.
En realidad, a veces hay frenos, cuando hay muchas garrapatas. Por eso hice un retraso entre comprobaciones de 1 segundo.
Se trata de la supervisión de muchos puestos.
Y si sólo se supervisan las posiciones de un robot en particular, es por supuesto más fácil allí.
Tengo una tarea sencilla, y no hay más de dos o tres docenas de pedidos en el trabajo.
Y por lo tanto voy a utilizar un temporizador para comprobar lo que hay en OrdersTotal() y escribir los volúmenes en las variables nuevas y antiguas con la sustitución en cada iteración, y si el volumen ha cambiado - tomar otras medidas.
Tengo una tarea sencilla, y no hay más de dos o tres docenas de pedidos en el trabajo.
Y por lo tanto voy a utilizar un temporizador para comprobar lo que hay en OrdersTotal() y escribir los volúmenes en las variables nuevas y antiguas con la sustitución en cada iteración, y si el volumen ha cambiado - tomar otras medidas.
El volumen no cambiará cuando se active una orden pendiente.
El volumen no cambiará cuando se active la orden pendiente.
Pues bien, filtro las órdenes por tipo en el bucle y calculo el volumen de la posición acumulada abierta.
Me entristece tener que malgastar recursos y perder mi tiempo, cuando MT5 me permite simplemente esperar un evento específico sin ningún estrés.
Pues bien, filtro las órdenes por tipo en el bucle y calculo el volumen de la posición acumulada abierta.
Es triste que tengas que entrenar así y desperdiciar recursos, cuando en MT5 puedes simplemente esperar un evento específico sin ningún estrés.Pues mt5 es un orden de magnitud superior a mt4.
Esto también se aplica a otras funciones.
En mi situación concreta, si repartimos una vez al día y recibimos un evento una vez al día, tendremos 60*60*24=86.400 esfuerzos adicionales. Y todavía no hay otra manera.
Depende de la tarea.
Si queremos capturar la apertura/cierre (no parcial) de una posición y el establecimiento/borrado de una orden, entonces no necesitamos recorrer la lista cada vez en un bucle.
Podemos simplemente comprobar los valores actuales y anteriores de OrdersTotal(). Si detectamos una diferencia, tenemos un evento, y entonces miramos el valor.
Hice todo usando la suma de hash de las propiedades de orden y posición. Tan pronto como haya cambiado -tenemos algún evento-, entonces miramos qué ha cambiado exactamente allí.
Pero tenía una tarea de seguimiento de todo, y de cualquier cambio.
En mi situación concreta, si las operaciones se ejecutan una vez al día y un evento tiene lugar una vez al día, tendremos que hacer 60*60*24=86.400 esfuerzos adicionales. Y no hay otra manera.
También existe este enfoque (si la aparición de una nueva orden sólo es posible desde el lado de la EA):
Si el pedido está ahí, actualice sus datos si es necesario. Esto es si el monitoreo de SL/TP/volumen es necesario. Si no es necesario, no hacemos nada más.
Si la orden se encuentra en la lista de cerradas (OrderCloseTime() > 0), entonces elimínela del array. La matriz sólo se repondrá cuando la orden sea abierta por un EA.
De este modo, no tendremos que repasar toda la lista de pedidos en cada tic. Las operaciones sólo son posibles con el propio array.
Voy a intentar comparar los valores de OrdersTotal() por ahora (gracias a @Artyom Trishkin), eso debería ser suficiente. No tendré cierres parciales.
Durante la inicialización, asignaré el valor -1 al antiguo, para que al inicio se realice siempre la comprobación completa, independientemente de la presencia de órdenes en el mercado.
Después de eso, aparecerá un nuevo pedido (evento) o se borrará el antiguo (evento) y ni siquiera importa el símbolo - podemos comprobar todo por completo, sigue siendo muchas veces menos frecuente que un alboroto interminable.
Voy a intentar comparar los valores de OrdersTotal() por ahora (gracias a @Artyom Trishkin), eso debería ser suficiente. No tendré cierres parciales.
Durante la inicialización, asignaré el valor -1 al antiguo, para que al inicio se realice siempre la comprobación completa, independientemente de la presencia de órdenes en el mercado.
Después de eso, la nueva orden aparecerá (evento) o la antigua se borrará (evento) e incluso el símbolo no importa - podemos ejecutar una comprobación completa en todos ellos, sigue siendo muchas veces menos frecuente que el golpeteo interminable.
Pero hay que manejarlo con cuidado, hoy me he encontrado con que una posición se ha cerrado y la otra se ha abierto en otra, y casi al mismo tiempo entre ticks.
Al final OrdersTotal() se quedó en 8. La lógica del Asesor Experto se confundió - no ha recalculado los nuevos datos