Únete hoy
ProBacktest/probacktest · proorder

TIMEFRAME (PB/PO)

TIMEFRAME en ProBacktest y ProOrder ejecuta el código de la estrategia en otro marco temporal. Sintaxis, modos updateonclose frente a por defecto y ejemplos de órdenes en varios marcos temporales.

Sintaxis

probuilder
TIMEFRAME(TF, mode)
probuilder
TIMEFRAME(default)

Parámetros

NombreTipoPor defectoDescripción
TFpalabra clave timeframeningunoMarco temporal de destino para las líneas siguientes, por ejemplo 1 minute, 15 minutes, 1 hour, 4 hours, daily, weekly. Debe ser mayor o igual que el marco temporal en el que se ejecuta la estrategia.
modeupdateonclose o defaultdefaultupdateonclose actualiza los valores de la sección solo cuando un TF el bar cierra. default los recalcula en cada bar del marco temporal más pequeño, usando la bar en desarrollo TF barra.

Cómo funciona

Una estrategia se vincula a un marco temporal base al lanzarla, y esa base debe ser el marco temporal más pequeño que use el código. Cada línea después de un TIMEFRAME(TF, mode) la llamada se evalúa contra bars de TF hasta la siguiente llamada a TIMEFRAME. TIMEFRAME(default) vuelve al marco temporal base, que es donde suele residir el código de gestión de órdenes.

El mode argumento controla cuándo se actualiza la sección del marco temporal superior. Con updateonclose, las variables de esa sección solo cambian cuando se completa el bar del marco temporal superior, por lo que un RSI de 1 hora mantiene su valor durante toda la hora. Con default, la sección se recalcula en cada bar del marco temporal base usando el bar actual del marco temporal superior, todavía en formación, por lo que los valores se mueven intrabar y pueden diferir de la lectura final del bar cerrado.

Las variables conservan sus valores entre secciones TIMEFRAME. Un booleano calculado en una 1 hour el bloque se puede leer en el default bloque en la misma ejecución, que es el patrón estándar: deriva la señal en el marco temporal superior y actúa sobre ella en el más fino.

Ejemplos

Ejemplo 1, Señal horaria con gestión de órdenes de 1 minuto (ProOrder)

probuilder
defparam cumulateorders = false

// Compute the entry signal on the 1-hour timeframe
TIMEFRAME(1 hour, updateonclose)
myrsi = rsi[14]
buycondition = myrsi crosses over 50

// Manage orders on the 1-minute base timeframe
TIMEFRAME(1 minute, default)
if buycondition then
  buy 10 contract at market
endif

if not onmarket then
  breakeven = 0
endif

if longonmarket and close - tradeprice >= 15 * pointsize then
  breakeven = 1
endif

if breakeven = 1 then
  sell at tradeprice + 5 * pointsize stop
endif

graph breakeven

El cruce del RSI se detecta una vez por cada bar horaria cerrada, mientras que el stop de salida se evalúa minuto a minuto. Este es el ejemplo canónico de la referencia oficial.

Ejemplo 2, Filtro de tendencia diario para entradas intraday (ProBacktest)

probuilder
// Trend filter computed on closed daily bars
TIMEFRAME(daily, updateonclose)
dailyMA = Average[200](close)
uptrend = close > dailyMA

// Entries and exits on the base timeframe
TIMEFRAME(default)
IF NOT onmarket AND uptrend AND close CROSSES OVER Average[20](close) THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

IF longonmarket AND close CROSSES UNDER Average[20](close) THEN
  SELL AT MARKET
ENDIF

La media diaria de 200 periodos actúa como filtro de régimen. Las entradas solo se activan en el marco temporal base mientras el cierre diario se sitúa por encima de ella.

Ejemplo 3, Lectura intrabar de un indicador de 4 horas (ProOrder)

probuilder
// The 4-hour RSI updates on every base-timeframe bar (default mode)
TIMEFRAME(4 hours, default)
h4rsi = RSI[14](close)

// Act on the base timeframe
TIMEFRAME(default)
IF NOT onmarket AND h4rsi < 30 THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

IF longonmarket AND h4rsi > 70 THEN
  SELL AT MARKET
ENDIF

Como la sección de 4 horas usa default modo, el RSI refleja la bar de 4 horas en formación, por lo que la estrategia puede reaccionar antes de que la bar cierre.

Errores y trampas habituales

  • El marco temporal base no es el más pequeño. Cada TIMEFRAME(TF) la llamada debe referirse a un marco temporal mayor o igual que aquel en el que se lanza la estrategia. Solicitar un marco temporal menor que el base se rechaza.
  • Los dos significados de default. Como único argumento, TIMEFRAME(default) vuelve al marco temporal base. Como segundo argumento, default es un modo de actualización. TIMEFRAME(4 hours, default) y TIMEFRAME(default) hacen cosas distintas.
  • Los valores intrabar cambian bajo default modo. Una condición que es cierta a mitad de bar puede ser falsa una vez que cierra la bar del marco temporal superior. Usa updateonclose cuando la lógica solo deba ver bars confirmadas, y cuenta con que los resultados del backtest difieran entre los dos modos.
  • Variante de TIMEFRAME incorrecta. ProScreener acepta una forma distinta de esta instrucción. La sintaxis de screener pegada en código de ProBacktest o ProOrder, o al contrario, no compila. Consulta TIMEFRAME (PS).
  • TIMEFRAME (PS), la variante de ProScreener de esta instrucción.
  • DEFPARAM, parámetros a nivel de estrategia como CumulateOrders.
  • CumulateOrders, controla si las entradas repetidas se acumulan en una sola posición.
  • ONMARKET, verdadero mientras hay alguna posición abierta.
  • LONGONMARKET, verdadero mientras hay una posición long abierta.
  • TRADEPRICE, el precio de ejecución de una operación pasada.
  • BUY, abre una posición long.
  • SELL, cierra una posición long.