ExitOnClose

Foro dedicado a esta excelente herramienta de desarrollo e implementación de sistemas de trading
Responder
agtlgtar
Mensajes: 28
Registrado: 23 Jun 2016 13:23

ExitOnClose

Mensaje por agtlgtar »

Hola a todos.
Tengo una estrategia, en NT, que está funcionando bien, respondiendo a las instrucciones escritas. En Initialize tengo ExitOnClose para salir antes del final de sesión. Y si hay alguna operación abierta, a la hora establecida la cierra con Exit on close perfectamente.
Llega un día, con Market Replay, que no actúa (no hay indicaciones en Orders (canceladas,p.e.), ni output, ni log). Y a partir de ese día ya no funciona en los siguientes.
Curiosamente, ExitLong y ExitShort siguen funcionando durante el día. Pero a esa hora de cierre de mi sesión, no actúan. Y las salidas se producen por SetStop exclusivamente.
¿A alguien le ha pasado o tiene alguna idea de porqué podría estar sucediendo?
Gracias.
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Re: ExitOnClose

Mensaje por cls »

Hola agtlgtar,

lo primero es que los métodos Exit y los métodos Set hacen lo mismo, salir. Y si usas ambos puedes provocar una concurrencia indeseada; por ejemplo provocar dos órdenes de salida. Lo normal es o bien usar métodos Set o bien programar a medida las salidas con métodos Exit. Pero no los dos.

Además del ExitOnClose hay otro parámetro - ExitOnCloseSeconds - para indicar los segundos antes del cierre de sesión en que cerrar todo. Asígnalo también por precaución.

Consulta las carpetas trace y log para ver si los ficheros de log te informan del motivo del mal funcionamiento. Puede ser una excepción de código, o un conflicto de órdenes que desestabiliza la posición de la estrategia. En esos ficheros encontrarás más información acerca del error.

Y como última opción debuga en Visual Studio la barra exacta en que debería cerrar todo para descubrir el error.

S2
agtlgtar
Mensajes: 28
Registrado: 23 Jun 2016 13:23

Re: ExitOnClose

Mensaje por agtlgtar »

Gracias cls. He tardado en contestarte para que me diese tiempo a probar algunas de las cosas que me indicabas.
-Lo 1º que he probado es la posible concurrencia por tener 2 salidas (aunque distintas y a precios diferentes). He escrito la estrategia solo con Set (en Initialize) y solo con Exit. Y, desgraciadamente, al llegar el mismo día de Market Replay, deja de funcionar ExitOnClose. Y ya no lo hace los siguientes días (ni la salida previa a ExitOnClose, que debía producirse con Exit. Por cierto que si funciona el resto del día).
-No me parece que sea un error de código: La he pasado muchos días y los resultados son correctos. Es al llegar a esa semana en concreto, que tras fallar el lunes ya falla todos los días.
-ExitOnClose lo tengo en true y ExitOnCloseSeconds con varios mies de segundos para que salga 5.5 h antes del cierre (¿no hay otra forma de cerrar?)
-He revisado log y trace: Parece que ExitOnClose se conecta al inicio de sesión. Pero luego lo único que aparece es la última entrada, seguida de la "conexión" de los Set y, finalmente, la salida tardía e incorrecta de SetStop de Initialize.
-Estoy con Visual, que apenas conozco. Lo he pasado y de momento no me responde. Tampoco veo como debugar una barra en concreto.
En fin, gracias de nuevo. sigo intentándolo. Si tienes más sugerencias, las acepto encantado.
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Re: ExitOnClose

Mensaje por cls »

Prueba a programar un bloque try-catch en los métodos OnBarUpdate, OnExecution y OnOrderUpdate (si no has sobrescrito estos dos último métodos, hazlo y pon un simple Print con los argumentos del método para que así sepas que va todo bien) para capturar cualquier excepción que se produzca en la gestión de órdenes y volcarla al log. En teoría, alguna excepción tiene que ocurrir si la estrategia deja de funcionarte como debe. (Si hubieran excepciones las podrías ver también en el fichero trace, ya que ninja las registra todas aunque tú no las captures en tus códigos).

La mejor opción para encontrar errores es con Visual Studio. Es algo complicado en NT7 y largo de explicar, tendrías que buscar en la ayuda/foro de nt cómo adjuntar el VS al NT. En NT8 es más simple; incluso se puede programar directamente en VS en vez de en el editor de NT. Está totalmente integrado.

En el debugging puedes detener la ejecución en cualquier barra con un breakpoint condicionado al número de barra por ejemplo. Para saber el número de barra en NT7 te tendrías que construir un indicador tan simple como Plot[0] = CurrentBar. En NT8 te lo da el propio DataBox.

Espero que te sirva de ayuda.

S2
agtlgtar
Mensajes: 28
Registrado: 23 Jun 2016 13:23

Re: ExitOnClose

Mensaje por agtlgtar »

Gracias de nuevo cls.
He logrado hacer correr VS. En las pestañas inferiores solo aparece información en output. Pero creo que ha sido suficiente.
Como le digo de cerrar 5.5h antes del cierre (que en el gráfico de NT del $ es a 23.00), ExitOnClose (eoc) se prepara así: EventuallyExitOnClose: nextExitOnClose=17:30:00
Esto sucede los días laborables, sábado y domingo.
Pero llega un sábado que escribe: EventuallyExitOnClose: nextExitOnClose=16:30:00.
Esta es la semana que "falla" eoc a las 17:30.
Prepara eoc a 16:30. Al llegar el jueves dice para el viernes nextExitOnClose=16:30:00. Pero el viernes dice para el sábado: nextExitOnClose=17:30:00. Y ya queda así para días sucesivos.
Si el problema es éste (faltaría saber porque el horario cambió), sería mejor dar la instrucción "cerrar a 17:30 h" . Y no 23h-5.5h=17:30.
He visto que existe Close At Time, pero no sé implementarla.
¿Hay otra forma de cerrar la sesión a un horario fijo?

Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Re: ExitOnClose

Mensaje por cls »

agtlgtar escribió:¿Hay otra forma de cerrar la sesión a un horario fijo?
Parece que el problema es con los datos del market replay.
Esa sesión la tendría configurada para cerrar el sábado a las 17:30 y ahí no hay mercado y como parece que es un dato que se hereda puede que no se sobrescriba hasta el siguiente cierre.
Esos ficheros no se pueden editar así que no parece que tenga solución.
Supongo que trabajarás con sesión 24/7, si no, prueba con ella.
También puedes probar con NT8. Esta tarde han liberado la versión pública. Los ficheros de market replay son diferentes y seguramente el de esa sesión no traiga esa anomalía. Pero tienes que migrar el código de la estrategia y hay bastantes cambios.


Otra cosa que puedes hacer es cerrar tú mismo todo. Chequea el time de la barra y si cumple la condición cierra.
Dicho así parece muy fácil, pero tienes que trabajar con sesiones. Cada vez que comience una sesión nueva averigua a qué hora cierra; esto te lo da alguna función que no me sé de memoria, tendrás que investigar un poco, pero es así como se hace ya que depende del día, del tipo de mercado, si es festivo, si no hay mercado, etc. La función tiene en cuenta todo eso.
Los pasos en el onbarupdate serían:
1.- Averigua si la barra es la primera de la sesión.
2.- Llama a la función que te devuelve la hora de fin de sesión.
3.- Asigna a una variable la hora límite de trading que quieras (una barra, dos, etc antes de la hora de término).
4.- Comprueba el time de cada barra con la hora límite y cierra si corresponde hacerlo.
Esto te funcionará seguro aunque los ficheros de market replay estén corruptos. En el peor de los casos en que te faltaran
barras en el fichero te cerraría al día siguiente cuando se vuelvan a dar las condiciones de timing para el cierre.

S2
agtlgtar
Mensajes: 28
Registrado: 23 Jun 2016 13:23

Re: ExitOnClose

Mensaje por agtlgtar »

Gracias cls.
Estoy en ello. Hay 2 cosas de tu explicación que no entiendo:
1-"Esa sesión la tendría configurada para cerrar el sábado a las 17:30 y ahí no hay mercado y como parece que es un dato que se hereda puede que no se sobrescriba hasta el siguiente cierre." ¿Teóricamente, el dato se hereda para el siguiente cierre: El domingo, también inexistente. O hasta el siguiente sábado?
Realmente el error continúa hasta el siguiente sábado.
También es curioso que los demás findes no se produce este error.
Quizás, como dices, sea un problema con los datos de ese día o esa semana.
2-¿Me puedes decir que significa sesión 24/7?
agtlgtar
Mensajes: 28
Registrado: 23 Jun 2016 13:23

Re: ExitOnClose

Mensaje por agtlgtar »

Bueno. Buscando en Help, he encontrado Session y me he instruído un poco al respecto.
En Control Center > tools he encontrado Session Manager. Efectivamente estaba puesto 24/7.
Quizá la sesión que debería probar es 24/5, que es exactamente igual pero sin sábado y domingo.
agtlgtar
Mensajes: 28
Registrado: 23 Jun 2016 13:23

Re: ExitOnClose

Mensaje por agtlgtar »

Perdón por insistir, pero no quiero dejar información falsa.
Puse que la sesión era 24/7 porque así me apereció en Tools al abrirlo.
Pero no está establecido en el gráfico. Así que los problemas que he comentado han sido haciendo correr el gráfico con sesión "Use instrument settings" en Data series.
Que no se lo que significará a estos efectos.
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Re: ExitOnClose

Mensaje por cls »

Buenas,
todos los instrumentos tienen establecida una Session template por defecto en el maestro (Tools/Instrument Manager). Ésa es la que se toma cuando pones "Use instrument settings".
24/7 son sesiones de 24 horas los 7 días de la semana.
La sesión te restringe los datos. Si tradeas un mercado de 24 h como el mini-sp pero le pones la sesión de metales de new york pues sólo verás las barras que caen dentro de ese horario.
Lo de que probaras con 24/7 era por asegurar que no se quedaba alguna barra fuera.

También puedes probar a crear una sesión a medida y ponerle las horas de cierre que tú quieras (en vez de tener que hacerlo por código) pero si el error está como parece en el fichero, no creo que te sirva. Pero puedes intentarlo.

Lo de que el dato se hereda, quiero decir que como no se ejecuta correctamente el cierre, no se refresca y sigue esperando a una barra que le permita cerrar el sábado, cosa que no ocurrirá nunca. Sospecho que el fichero contiene datos de configuración y de ahí el problema. Pero son suposiciones porque el fichero no se puede editar ni tampoco su formato es público. Así que no puedo saberlo con total certeza. De todos modos las indicaciones que te di trabajando con la sesión desde el código te tienen que funcionar seguro independientemente de que el fichero contenga errores.

S2
agtlgtar
Mensajes: 28
Registrado: 23 Jun 2016 13:23

Re: ExitOnClose

Mensaje por agtlgtar »

Gracias cls, pues gracias a tus indicaciones he logrado encontrar el problema.
Es el cambio de horario. Justo la semana que lo detecto es cuando se produce. De forma que, al poner "Use instrument settings", tal como me has dicho, se establece el de Forex (L a V de 17:00a17:00, horario EEUU-Este, equivale a 23:00a23:00 Madrid), corresponde al cierre que veo en el gráfico a 23h. Con ExitOnClose a menos 5.5h, daba cierre operativa a 17:30h, que es lo que yo quería.
Con el cambio horario, el cierre, con la hora española del gráfico, es a 22h, con lo que el cierre de la operativa me pasó a las 16:30.
Entiendo que 24/7 sería perfecto: No deja huecos y, por ello, corrige cambios de horario.
Pero veo que, según la Session template escogida, cambian los horarios de las barras, el de las ondas y el tamaño de las ondas. Los gráficos son distintos.
Así, si uso la Session Forex (o uno adaptado al horario español), el gráfico cambia.
¿Me puedes dar tu opinión al respecto?
Quiero agradecerte de nuevo, especialmente, tu paciencia y comprensión. Y, como no, tus conocimientos al respecto, que no dejan de asombrarme. Gracias de nuevo.
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Re: ExitOnClose

Mensaje por cls »

De nada agtlgtar. Encantado de ayudar.
Desde luego que si cambias de tipo de sesión, y sus horarios no coinciden, las barras que verás serán diferentes. Y por tanto afectará a tus indicadores, estrategias, etc.
Los horarios de las barras nunca cambian. Cada barra tiene su OHLC y su timestamp, y son inalterables. La barra la verás en el chart si su timestamp cae dentro del marco temporal de la sesión.
Si tu mercado es continuo lo normal sería usar 24/7.

S2
agtlgtar
Mensajes: 28
Registrado: 23 Jun 2016 13:23

Re: ExitOnClose

Mensaje por agtlgtar »

Ok. Pues muchas gracias de nuevo. Estoy con todo ello.
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Ninja Trader”