Cierre de medios lotes. - página 17

 
SDC:

No estás pensando de forma lógica en absoluto. ¿Cómo te ayudaría modificar el número mágico más que conocer el OrderOpenTime()? Es exactamente lo mismo.


Porque necesito hacer múltiples cierres parciales con una orden... Si hago un OrderClose() y lo comparo con el OrderOpenTime() y luego hago otro OrderClose() con la misma orden, pero de nuevo, lo comparo usando el OrderOpenTime(), no funcionará, porque habrá una orden cerrada dentro del historial y no cerrará la segunda función OrderClose()...

Ahora bien, si pudiera OrderClose() utilizando un Magicnumber 1234 y luego después de que el OrderClose() se completara, podría modificar el número mágico de las órdenes a 12345, por lo tanto, la primera función que llamó al MagicNumber 1234 ya no sería aplicable a la orden restante ya que a la orden restante se le ha asignado ahora un número mágico 12345. Ahora con este MagicNumber 12345, podría entonces utilizarlo con otra función OrderClose() (suponiendo que sea aplicable) y repetir el proceso hasta que lo que tengo, esté funcionando y corriendo como quiero.

Hasta entonces, OrderOpenTime() sólo puede funcionar una vez...
 
Acabo de pensar, y corrígeme si me equivoco, pero ¿qué pasa si utilizo OrderOpenTime() Y OrderCloseTime()?

Si comparo el OrderOpenTime() actual con las posiciones cerradas históricamente en el mismo Symbol() y no encuentro ninguna coincidencia, entonces CloseOrder() se ejecutará. Ahora, si se llama a la segunda función CloseOrder() (un precio más alto que el primer CloserOrder(), y quiero cerrar algunos lotes más en la misma orden), podría comparar el OrderOpenTime() Y el OrderCloseTime(). Si el OrderOpenTime(OpenPosition) == OrderOpenTime(History) && OrderCloseTime(history) > OrderOpenTime(OpenPosition) ENTONCES OrderClose () la segunda función...?
 

Bueno, usted nunca dijo nada acerca de múltiples cierres parciales antes, usted dijo que sólo quería medio cierre de la orden, pero de todos modos usted está pensando demasiado en esto y completamente perdiendo lo obvio.

¿Por qué OrderOpenTime() sólo funciona una vez?

staticdatetime partclosedonce;

staticdatetime partclosedtwice;

si la orden cumple con el criterio de cierre de parte nivel 1 y el opentime no coincide con partclosedonce, lo cierra en parte, agrega el timestamp a partclosedonce.

si la orden cumple los criterios de cierre parcial de nivel 1 y su fecha de apertura coincide con partclosedonce, ya se cerró parcialmente una vez, por lo que no se cierra parcialmente de nuevo.

si la orden cumple con el criterio de cierre parcial nivel 2 y no coincide con partclosedtwice, cerrarla parcialmente y añadir la marca de tiempo a la variable, partclosedtwice.

 

También deberías evitar hacer algo con OrdersHistory. Si ejecuta un backtest largo puede tener cientos, incluso miles de órdenes en el historial, su EA estaría comparando su orden abierta con todas ellas en cada tick. Es muy lento hacer eso y tus backtests se volverán dolorosamente más lentos, ya que cuanto más tiempo se ejecuten, más grande será el historial.

 
SDC:

También deberías evitar hacer algo con OrdersHistory. Si ejecuta un backtest largo puede tener cientos, incluso miles de órdenes en el historial, su EA estaría comparando su orden abierta con todas ellas en cada tick. Es muy lento hacer eso y tus backtests se volverán dolorosamente más lentos, ya que cuanto más tiempo se ejecuten, más grande será el historial.


¿De qué otra manera puedo hacerlo entonces...?
 

¡Acabo de mostrarte cómo hacerlo! Si hay una forma más sencilla de hacerlo que esa me gustaría saber cuál es. Hazlo con el historial si quieres, yo sólo te daba mi opinión de hacerlo así es todo.

 
SDC:

¡Acabo de mostrarte cómo hacerlo! Si hay una forma más sencilla de hacerlo que esa me gustaría saber cuál es. Hazlo con el historial si quieres, yo sólo te daba mi opinión de hacerlo así es todo.


Oh, veo que static datetime contiene la fecha y la hora de OrderClose() para que pueda compararla con la hora de apertura inicial de la orden actual, en lugar de mirar cualquier cosa que tenga que ver con el historial?
 

 
Muy bueno - ¡gracias por tu ayuda!

¡Static Datetime es bastante nuevo para mí, así que voy a trabajar en esto mañana y ver donde llego! Esperemos que entonces consiga solucionar esta molesta parte de mi código :)
 
SDC:

Bueno, usted nunca dijo nada acerca de múltiples cierres parciales antes, usted dijo que sólo quería medio cierre de la orden, pero de todos modos usted está pensando demasiado en esto y completamente perdiendo lo obvio.

¿Por qué OrderOpenTime() sólo funciona una vez?

staticdatetime partclosedonce;

staticdatetime partclosedtwice;

si la orden cumple con el criterio de cierre de parte nivel 1 y el opentime no coincide con partclosedonce, lo cierra en parte, agrega el timestamp a partclosedonce.

si la orden cumple los criterios de cierre parcial de nivel 1 y su fecha de apertura coincide con partclosedonce, ya se cerró parcialmente una vez, por lo que no se cierra parcialmente de nuevo.

si la orden cumple con el criterio de cierre parcial nivel 2 y no coincide con partclosedtwice, cerrarla parcialmente y añadir la marca de tiempo a la variable, partclosedtwice.


¡Pinchar! Esto ha funcionado de maravilla. ¡También es mucho más fácil de lo que imaginaba! Apenas empecé a mirarlo, 5 minutos después, lo tengo funcionando :) ¡Muchas gracias por tu ayuda! Ahora incorporaré mis múltiples funciones OrderClose() y veré si puedo hacerlo funcionar. ¡Una vez que haya hecho esto, voy a hacer otro hilo para devolver la ayuda que he recibido de otros aquí! Creo que esto es definitivamente algo que otros podrían utilizar en una sola entrada concisa.

No estoy fuera de peligro todavía, pero ese datetime estático está funcionando perfectamente con este orderclose(). No veo por qué no debería para los otros tampoco :)