Únete hoy
ProBacktest/probacktest · proorder

FLATBEFORE

FLATBEFORE es un parámetro de DEFPARAM que bloquea la operativa y mantiene una estrategia de ProBacktest o ProOrder sin posición antes de una hora determinada del día. Sintaxis y ejemplos.

Sintaxis

probuilder
DEFPARAM FLATBEFORE = HHMMSS

Parámetros

NombreTipoPor defectoDescripción
FLATBEFOREliteral de hora (HHMMSS)ningunoHora del día antes de la cual se cierran las posiciones, se cancelan las órdenes pendientes y se bloquean las nuevas órdenes. Reloj de 24 horas, p. ej. 073000 para las 7:30 AM.

Cómo funciona

FLATBEFORE se declara una vez con DEFPARAM al principio de la estrategia, antes de toda la lógica de trading, y se lee cuando la estrategia arranca. Antes de la hora indicada cada día, la plataforma impone un estado plano: cierra cualquier posición que de otro modo estaría abierta, cancela las órdenes pendientes y rechaza las nuevas. El código de la estrategia sigue ejecutándose durante ese periodo, sus cálculos se realizan y sus variables se actualizan, solo se suprime el envío de órdenes. A partir de la hora indicada, la operativa continúa con normalidad.

El valor usa el formato HHMMSS en reloj de 24 horas, por lo que 073000 es 07:30:00. El parámetro no pausa ni retrasa la estrategia, actúa únicamente como un filtro de operativa.

La razón habitual para filtrar la apertura de una sesión es evitar el movimiento errático del precio y los libros poco profundos en torno a la apertura del mercado o a las horas nocturnas. Combinado con FLATAFTER, que obliga a estar fuera de mercado a partir de una hora, los dos parámetros definen una ventana de negociación diaria sin ninguna condición horaria escrita a mano.

Ejemplos

Ejemplo 1, Sin operar antes de las 7:30 AM (ProOrder)

probuilder
// Stay flat until 07:30, then trade normally
DEFPARAM FLATBEFORE = 073000

La declaración conservada de la referencia oficial. Hasta las 7:30 AM de cada día la estrategia no mantiene nada ni coloca nada.

Ejemplo 2, Omitir la volátil apertura del contado (ProBacktest)

probuilder
// Ignore the first 30 minutes after the 09:00 open
DEFPARAM FLATBEFORE = 093000
DEFPARAM FLATAFTER = 172500

// Mean-reversion entry on Bollinger band touch
lowerBand = BollingerDown[20](close)

IF close crosses under lowerBand THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

SET TARGET %PROFIT 1
SET STOP %LOSS 0.5

El backtesting con la ventana aplicada muestra cómo se comporta el sistema cuando se excluye la primera media hora, donde los toques de banda son más frecuentes y menos fiables.

Ejemplo 3, Restringir un sistema de forex a la sesión de Londres (ProOrder)

probuilder
// Trade only after the London open, flat again in the evening
DEFPARAM FLATBEFORE = 090000
DEFPARAM FLATAFTER = 200000
DEFPARAM CumulateOrders = false

fastMA = ExponentialAverage[9](close)
slowMA = ExponentialAverage[21](close)

IF fastMA crosses over slowMA THEN
  BUY 1 LOT AT MARKET
ENDIF

IF LongOnMarket AND fastMA crosses under slowMA THEN
  SELL AT MARKET
ENDIF

Los dos parámetros flat restringen toda la actividad, tanto entradas como salidas y órdenes pendientes, a las horas de sesión elegidas.

Errores y trampas habituales

  • Declarado después de la lógica de trading. DEFPARAM las declaraciones deben ser las primeras instrucciones del programa. Una FLATBEFORE línea colocada después de cualquier orden o condición no compila.
  • HHMM en lugar de HHMMSS. DEFPARAM FLATBEFORE = 0930 significa 00:09:30, no 09:30:00. Los dígitos de los segundos son obligatorios, por lo que un filtro de las 9:30 AM se escribe 093000.
  • Esperar que la estrategia se detenga. El parámetro no detiene la ejecución del código. Los indicadores, los contadores y las variables de estado siguen actualizándose antes del corte, solo se bloquea la colocación de órdenes. La lógica que da por supuesto que nada se ejecutó antes de que se abra la barrera puede ser errónea.
  • Marcos temporales amplios. La barrera se resuelve con la granularidad del bar, por lo que en gráficos de una hora o más la hora efectiva de liberación puede diferir del valor literal, y en marcos temporales diarios o superiores el parámetro no sirve para nada.
  • FLATAFTER, parámetro de DEFPARAM que fuerza a la estrategia a estar plana después de una hora determinada.
  • DEFPARAM, declara los parámetros de la estrategia al principio del código.
  • CumulateOrders, parámetro de DEFPARAM que controla la acumulación de órdenes en la misma dirección.
  • QUIT, detiene la estrategia por completo tras cerrar las posiciones.
  • TIME, hora del bar actual para condiciones de tiempo escritas a mano.
  • CurrentTime, valor de hora real utilizable en condiciones.
  • ONMARKET, verdadero mientras hay alguna posición abierta.
  • BUY, abre o amplía una posición long.