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
TIMEFRAME(TF, mode)TIMEFRAME(default)Parámetros
| Nombre | Tipo | Por defecto | Descripción |
|---|---|---|---|
TF | palabra clave timeframe | ninguno | Marco 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. |
mode | updateonclose o default | default | updateonclose 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)
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 breakevenEl 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)
// 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
ENDIFLa 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)
// 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
ENDIFComo 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,defaultes un modo de actualización.TIMEFRAME(4 hours, default)yTIMEFRAME(default)hacen cosas distintas. - Los valores intrabar cambian bajo
defaultmodo. Una condición que es cierta a mitad de bar puede ser falsa una vez que cierra la bar del marco temporal superior. Usaupdateonclosecuando 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).
Instrucciones relacionadas
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.