Únete hoy
ProBacktest/probacktest · proorder

NextBarOpen

NextBarOpen es un modificador obsoleto de ProBacktest y ProOrder que retrasaba las órdenes a la apertura del siguiente bar, que ahora es el comportamiento por defecto de toda orden a mercado.

Sintaxis

probuilder
AT MARKET NextBarOpen

Cómo funciona

En las primeras versiones de la plataforma, NextBarOpen se añadía a una orden a mercado para indicar explícitamente que la orden debía ejecutarse al precio de apertura del bar siguiente y no al precio actual. La intención era modelar una ejecución realista: una señal calculada sobre un bar cerrado solo puede operarse una vez que empieza el bar siguiente.

Ese modelo de ejecución se convirtió después en el único. El código de la estrategia se evalúa una vez por bar, al cierre, y cualquier orden a mercado generada durante esa evaluación se transmite inmediatamente después, ejecutándose en la apertura del bar siguiente. El comportamiento NextBarOpen solía solicitar es ahora el valor por defecto incondicional, lo que hace redundante el modificador.

La posición oficial es que la instrucción ya no es válida y no sirve para nada. El código existente que lleva el modificador documenta una intención que el motor ya garantiza, y el código nuevo nunca debería incluirlo. Cuando la palabra clave aparece en estrategias antiguas encontradas en archivos o foros, se puede eliminar sin cambiar el comportamiento de la estrategia bajo el modelo de ejecución actual.

NextBarOpen no debe confundirse con TomorrowOpen, que es una instrucción distinta relacionada con la temporización de órdenes en bars diarios y sigue siendo una palabra clave separada.

Ejemplos

Ejemplo 1, Entrada heredada con el modificador (ProBacktest)

probuilder
// legacy code: NextBarOpen is redundant under the current engine
IF NOT ONMARKET THEN
  BUY 2 CONTRACTS AT MARKET NextBarOpen
ENDIF

La orden se ejecuta en la apertura del siguiente bar con o sin el modificador. Esta es la forma que se encuentra en estrategias publicadas antiguas.

Ejemplo 2, Entrada short heredada (ProOrder)

probuilder
short = close < Average[100](close)

// older strategies attached NextBarOpen to short entries as well
IF NOT ShortOnMarket AND short THEN
  SELLSHORT 1 CONTRACT AT MARKET NextBarOpen
ENDIF

El mismo patrón en el lado short. Eliminar la palabra clave final deja la ejecución idéntica, el short se abre al precio de apertura del siguiente bar en cualquier caso.

Ejemplo 3, Migrar código antiguo (ProBacktest)

probuilder
// before: BUY 2 CONTRACTS AT MARKET NextBarOpen
// after, same behavior:
IF NOT ONMARKET THEN
  BUY 2 CONTRACTS AT MARKET
ENDIF

La forma modernizada. Eliminar NextBarOpen de una estrategia antigua es pura limpieza, no hace falta compensarlo en otra parte del código.

Errores y trampas habituales

  • Esperar una diferencia de temporización. Añadir o quitar NextBarOpen no cambia nada. Todas las órdenes a mercado generadas al cierre de un bar se ejecutan en la apertura del bar siguiente. Las comparaciones de código que atribuyen resultados distintos al modificador están mirando la variable equivocada.
  • Posible rechazo por los compiladores actuales. La instrucción está documentada como ya no válida. Según la versión de la plataforma, el código que la contiene puede no compilar, así que la migración segura es eliminar la palabra clave en lugar de conservarla por nostalgia.
  • Confusión con TomorrowOpen. Los nombres parecen relacionados, pero las instrucciones no son intercambiables. TomorrowOpen afecta a la colocación de órdenes en bars diarias y sigue siendo una palabra clave activa, NextBarOpen es un modificador inerte.
  • Suponer que existe la ejecución en el mismo bar. Eliminar el modificador no habilita ejecuciones en el mismo bar. No existe ningún tipo de orden que se ejecute al cierre del bar de la señal, el modelo de apertura del siguiente bar es inherente al motor.
  • TomorrowOpen, instrucción de temporización de órdenes para bars diarios.
  • MARKET, ejecución inmediata al precio de mercado actual.
  • BUY, abre o amplía una posición long.
  • SELL, cierra parte o toda una posición long.
  • SELLSHORT, abre o amplía una posición short.
  • EXITSHORT, cierra parte o toda una posición short.
  • LIMIT, orden pendiente que se ejecuta a un precio fijado o mejor.
  • STOP, orden pendiente que se activa cuando el precio alcanza un nivel.