¿Con qué sustituir OnTradeTransaction() en mql4? - página 6

 
Vitaly Muzichenko:

No, pero tal vez estamos hablando de cosas diferentes.

Esto siempre funcionará.

Aún así me hizo abrir la terminal y comprobar... Aquí hay tres ejecuciones del mismo script y tres resultados.

Sólo hay una línea en el guión.

  Print("OrdersHistoryTotal ", OrdersHistoryTotal());
2020.01.27 18:28:51.063 Script 00 EURGBP,H4: removed
2020.01.27 18:28:51.063 00 EURGBP,H4: uninit reason 0
2020.01.27 18:28:51.063 00 EURGBP,H4: OrdersHistoryTotal 48
2020.01.27 18:28:51.063 00 EURGBP,H4: initialized
2020.01.27 18:28:51.043 Script Test\00 EURGBP,H4: loaded successfully
2020.01.27 18:28:38.203 Script 00 EURGBP,H4: removed
2020.01.27 18:28:38.193 00 EURGBP,H4: uninit reason 0
2020.01.27 18:28:38.193 00 EURGBP,H4: OrdersHistoryTotal 47
2020.01.27 18:28:38.193 00 EURGBP,H4: initialized
2020.01.27 18:28:38.183 Script Test\00 EURGBP,H4: loaded successfully
2020.01.27 18:28:16.443 Script 00 EURGBP,H4: removed
2020.01.27 18:28:16.443 00 EURGBP,H4: uninit reason 0
2020.01.27 18:28:16.443 00 EURGBP,H4: OrdersHistoryTotal 4
2020.01.27 18:28:16.443 00 EURGBP,H4: initialized
2020.01.27 18:28:16.423 Script Test\00 EURGBP,H4: loaded successfully

Me refiero a que si un EA está funcionando y un usuario decide cambiar el rango de visualización del historial con sus traviesas manos, el EA se volverá loco durante el segundo cambio. Ahora será más pequeño, ahora será más grande, ahora será diferente al memorizado. E incluso si la línea

  if(HT!=__TotalHist)

poner > en lugar de !=, la situación no cambiará. Si el EA se está ejecutando cuando la configuración se establece en "Hoy" y se cambia a "Todo el historial"... ¿qué sucede?

 
Aleksandr Volotko:

No se me ocurriría tocar OrderHistoryTotal(), ¿por qué debería hacerlo?

Por si acaso:))))

 
Alexey Viktorov:

Por si acaso:))))

:))) OrdersTotal() es suficiente para mí

Tal vez para hacer dos temporizadores? uno compara los valores OrdersTotal() incluso una vez en 100 ms, y el segundo para la seguridad una vez en un minuto (o con menos frecuencia) en un bucle - ningún ratón puede fallar allí, si uno de dos docenas de operaciones se cierra / abre una vez en 100500 veces un minuto más tarde - ciertamente no voy a morir, supongo, el depósito también.

 
Aleksandr Volotko:

:))) OrdersTotal() es suficiente para mí

Tal vez debería hacer dos temporizadores. Uno de ellos compara los valores de OrdersTotal() incluso una vez en 100 ms, y el segundo - una vez en un minuto (o con menos frecuencia) pasa por el bucle - ni un solo ratón puede pasar por allí, si una de las dos docenas de órdenes se cierra/abre un minuto más tarde, que 100500 veces - seguramente no moriré y supongo que también lo hará mi depósito.

¿Y cuántas órdenes abiertas al mismo tiempo proporciona el algoritmo?

 
Alexey Viktorov:

Aún así me hizo abrir la terminal y comprobar... Aquí hay tres ejecuciones del mismo script y tres resultados.

Sólo hay una línea en el script

Lo que quiero decir es que si el EA funciona y un usuario decidió cambiar el rango de visualización del historial con sus manos traviesas, el EA se volverá loco durante el segundo cambio. Ahora será más pequeño, ahora será más grande, ahora será diferente al memorizado. E incluso si la línea

La situación no cambiará si ponemos > en lugar de !=. Si se ejecuta el Asesor Experto en el momento en que la configuración es "Hoy" y se cambia a "Todo el historial"... ¿qué sucederá?

En cualquier caso, no será igual, y el código irá más allá. Pero si establecemossi(HT >__TotalHist), entonces tendremos problemas.

 
Alexey Viktorov:

¿Y cuántas órdenes abiertas estipula el algoritmo en total?

Dos o tres docenas como máximo.

 
Vitaly Muzichenko:

En cualquier caso, no será igual y el código seguirá adelante. Pero si (HT >__TotalHist)entonces hay un problema

Vitaly, habrá problemas en cualquier caso. Se mire como se mire, si el EA debe reaccionar a los cambios en la cantidad de órdenes en el historial, reaccionará independientemente de cómo haya cambiado la cantidad de órdenes. De hecho, la cantidad de pedidos en la historia sólo puede aumentar, por eso sugerí que sería menos peligroso, pero no resuelve el problema. Aunque lo haya escrito sólo para usted, no puede descartar la posibilidad de un cambio manual. Nunca se sabe qué tipo de mensaje de texto vendrá a tu mente)))

 
Aleksandr Volotko:

2-3 docenas como máximo

Para un número así, sería más fácil crear un array de entradas o incluso un array de estructuras con propiedades de orden y comprobar el cambio de tipo y la hora de cierre en cada tick. Esto nos permitirá rastrear la activación de una orden pendiente o el cierre de una posición. Y abriendo inmediatamente después de enviar OrderSend(), añade el tamaño del array y pon todo lo que necesites en él.

 
Esa es la cuestión, puedes agitar las órdenes 86400 veces al día, pero no querías hacerlo.
 
Aleksandr Volotko:
Esa es la cuestión, puedes agitar las órdenes 86400 veces al día, pero no querías hacerlo.

En ese caso, sería difícil vivir sin la biblioteca de Artem.