Categorías
Strategy Builder

Intervalo Horario en el Strategy Builder

Intervalos horarios en el Strategy Builder. Ejemplo de configuración y uso.

En este artículo explico cómo crear y configurar un intervalo horario en el Strategy Builder. Un intervalo horario está formado por un instante Desde y un instante Hasta, y algunos de sus usos más comunes son:

  • Permitir o prohibir la operativa dentro del intervalo.
  • Detectar algún evento dentro del intervalo, como lecturas extremas de volumen u otros indicadores.

Para conocer más detalles sobre el funcionamiento del Strategy Builder puede leer el artículo acerca del Strategy Builder.

También puede consultar la documentación oficial de NinjaTrader 8 sobre el Strategy Builder .


Inputs y Variables

Primero abrimos el asistente desde el menú New / Strategy Builder. Y vamos recorriendo los diferentes pasos hasta llegar al apartado de Inputs y Variables.

Strategy Builder Inputs & Variables

Para definir el intervalo horario necesitamos dos parámetros: uno para la Hora Desde, y otro para la Hora Hasta. Pulsamos en la etiqueta add y rellenamos los campos para configurar el primer parámetro. El tipo del parámetro debe ser time.

Intervalo Horario Desde

Repetimos los pasos anteriores para crear el segundo parámetro Hora Hasta.

Intervalo Horario Hasta

De este modo ya tenemos los dos parámetros necesarios para que el usuario pueda configurar el intervalo horario cuando ejecute la estrategia.

Intervalo Horario. Configuración de Inputs

Pulsamos en el botón Next para ir al siguiente apartado de Condiciones y Acciones.


Condiciones y Acciones

Los usos más frecuentes de un intervalo horario son o para cerrar la posición, o bien para activar/desactivar la operativa. Pero para dar un enfoque más didáctico al artículo, voy a usar el intervalo para encontrar las barras que lo cumplen e imprimir un mensaje informativo; es decir, si el Time de la barra es mayor o igual que el parámetro Hora Desde, y a la vez menor o igual que el parámetro Hora Hasta, se escribirá un mensaje en la ventana Output.

Pulsamos en la etiqueta add de la sección Condiciones para añadir la primera condición.

Condiciones y Acciones

El diálogo que aparece sirve para configurar la primera condición. Para seleccionar el Time de la barra corriente, abro la carpeta Time, selecciono Time series y en Bars ago escribo un 0 (números mayores, se refieren a barras pasadas. Por ejemplo un 1 sería la barra anterior).

En el desplegable de los operadores elijo Greater equal. Y en la columna derecha abro la carpeta User input y selecciono HoraDesde. Por último pulso en OK.

Condición para la Hora Desde del Intervalo Horario

Y ya queda configurada la primera condición que obliga a que el Time de la barra corriente, sea mayor o igual que el parámetro Hora Desde. Para añadir la segunda condición, pulsamos en la etiqueta add.

Hora Desde

Con la segunda condición repito el mismo procedimiento con la salvedad de elegir el parámetro HoraHasta y el operador Less equal.

Condición de la Hora Hasta del Intervalo Horario

En la imagen siguiente se observa la configuración final del bloque de condiciones. El siguiente paso será añadir la acción que se quiere ejecutar si se cumplen estas condiciones. Para ello se pulsa en la etiqueta add del bloque de acciones.

Condiciones Intervalo Horario Desde-Hasta

Acciones

En el diálogo que se muestra, abrimos la carpeta Misc y seleccionamos Print. En el campo Message pulsamos en la etiqueta set para construir el cuerpo del mensaje.

Action Set Message

Ahora podemos ir añadiendo todas las cadenas de texto que queramos y separadas mediante un carácter elegible en el desplegable Separate strings with. Para personalizar la cadena de texto, pulsamos en la etiqueta set.

Set String

Y selecciono la entrada Current bar, para que se imprima el número de barra. Pulsamos en OK.

Set String with CurrentBar value

Para añadir otra cadena de texto al mensaje, pulso en la etiqueta add.

Add more strings

Y esta vez no pulsaré en set, sino que escribiré directamente un texto cualquiera en el campo String 1. Y pulso OK.

Message with several strings

Por último volvemos a pulsar en OK.

Action Print Message

Y regreso al diálogo de Condiciones y Acciones donde se observa la función Print y el código del mensaje que se imprimirá cada vez que se cumplan las condiciones.

Intervalos Horarios

Para terminar se pulsa sucesivamente en Next hasta terminar con Finish y así concluye la creación y configuración de intervalos temporales en el Strategy Builder.


Ejecución de la estrategia

Para comprobar el funcionamiento de la estrategia, la ejecutaremos desde el Strategy Analyzer.  Si funciona correctamente, en la ventana Output se escribirán todas las barras que estén dentro del intervalo HoraDesde – HoraHasta.

En la imagen siguiente se puede observar que el funcionamiento es correcto. Se ha empleado un chart de 5-min y un intervalo entre las 15:00 y las 15:15. Por ejemplo la barra #1000 se ha impreso en la ventana Output informando que se encontraba dentro del intervalo. En el chart se puede comprobar que efectivamente el Time de esa barra #1000 son las 15:00:00 que estaría dentro del intervalo. Y las tres barras siguientes, #1001, #1002 y #1003 que tienen los Times 15:05:00, 15:10:00 y 15:15:00 también se han encontrado.

Ejecución estrategia

Una vez verificado el correcto funcionamiento del chequeo temporal, podemos aumentar su funcionalidad según nuestras necesidades, como por ejemplo: enviando órdenes, cerrando posición abierta, comprobando lecturas de otros indicadores para confirmar la señal, etc.


Aviso de riesgo !

Este artículo tiene una finalidad didáctica y divulgativa acerca de sus contenidos. En ningún caso se pretende ofrecer al lector un vehículo de inversión o especulación mediante las pautas que aquí se explican, y se desaconseja encarecidamente usar los ejemplos propuestos en un entorno productivo con cuenta real. Observe la claúsula de riesgo a pie de página y el Aviso Legal.

9 respuestas a «Intervalo Horario en el Strategy Builder»

Hola Supperia,
Intervalos horarios en el Strategy Builder como podemos aumentar su funcionalidad , como por ejemplo: cerrando posición abierta, con hora exacta.
Saludos

Hola Rafael.
Si te refieres a usar un solo campo en vez de un intervalo, quédate en el ejemplo sólo con el parámetro HoraDesde. Y cuando el Time[0] de la barra corriente sea mayor o igual que HoraDesde, cierras la posición. Antes tendrás que comprobar que tienes posición abierta. Y el cierre lo tendrás que hacer enviando la orden correspondiente, según estés comprado o vendido.
Saludos.

Hola, gracias por compartir esta información tan valiosa. Tengo una duda. El tiempo que toma el script es del día en que se esta ejecutado o del momento actual? Quiero decir, si quieres ejecutar una estrategia de 18-20h en un día determinado y estas simulando en una hora distinta, toma la hora actual de tu maquina o la hora de los datos que se están simulando?

Espero haberme explicado bien. Gracias
Saludos

Hola Harry. Los tiempos se toman de las barras, da igual en qué hora estés ejecutando el backtest.
En los filtros de tiempo puedes poner cualquier condición: que sólo se procesen las barras en una franja horaria determinada p.ej. de 18:00 a 22:00, o sólo procesar las barras de los días miércoles y viernes y además en una franja horaria concreta, o sólo procesar un día concreto del año, etc. Saludos

Buenas tardesAmigo, gracias por estos aporte, tengo una duda y es como hago para poner la condicion que el bot no opere desde las 2pm hasta las 6pm por ejemplo… gracias
PD. Abre una cuenta de Telegram o incluso monta videos en Youtube para que sea mas ilustrativo y quien sabe si te conviertes en un youtuber,,,jejje.

Saludos

Hola Tito,
siguiendo con el ejemplo del artículo, habría que sustituir el Print por una instrucción return. Pero el return no se puede añadir desde el wizard así que hay que editar el código. Una vez que hayas construido la estrategia siguiendo los pasos del artículo, desbloquea el código, busca el bloque IF y sustituye lo que haya entre las llaves por un return. De este modo no se ejecutará ninguna lógica en ese intervalo de tiempo. Pero tampoco te cerrará la posición abierta si la hubiere, ni ninguna otra acción. ATENCIÓN: Las estrategias desbloqueadas no se pueden abrir de nuevo desde el StrategyBuilder. Saludos. PD: lo de youtube y RRSS por ahora no puede ser, me falta tiempo !

if ((Times[0][0].TimeOfDay > HoraDesde.TimeOfDay) && (Times[0][0].TimeOfDay <= HoraHasta.TimeOfDay))
{
// Entre las llaves del bloque IF, escribir un return:
return;
}

Hola como están, primero muchas gracias por sus aportes, y me gustaría que me colaboraran con esta pregunta:
ya construí una estrategia con el wizard para que me compre o venda cuando el powertrend cambie a bajista o alcista, le esta configurando esta parte del intervalo de tiempo, coloque las variables time de horadesde y horahasta, luego en las condiciones agrego que el time serie sea mayor igual de horadesde y menorigual de horahasta, pero cuando ejecuto la estrategia en el analizador no me muestra ninguna compra ni venta. Agredezco de antemano su colaboracion.

Hola Wilson,
con esa información, no se puede saber dónde falla tu código.
Empieza por simplificar al máximo el sistema. Por ejemplo, con una primera versión que sólo compre cuando cambia a alcista y que venda al cambiar a bajista.
Cuando te asegures de que funciona bien, creas otra versión y le añades los parámetros de fecha. Y así sucesivamente.
Esta manera de ir escalando el código te facilitará detectar dónde está el problema.
También y si tienes algo de soltura programando, puedes desbloquear el código y añadir sentencias Print. Te ayudarán a depurar el código y detectar errores.
Saludos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

  Acepto la política de privacidad