PRELOADBARS
PRELOADBARS es un parámetro DEFPARAM que define cuántos bars históricos cargan ProBacktest y ProOrder antes de que arranque una estrategia, para que los indicadores empiecen siendo precisos.
Sintaxis
DEFPARAM PRELOADBARS = number_of_barsParámetros
| Nombre | Tipo | Por defecto | Descripción |
|---|---|---|---|
number_of_bars | entero | valor por defecto de la plataforma | Número de bars históricos cargados antes del primer bar en el que se ejecuta la estrategia. Dimensiónalo según el periodo de referencia más largo que use cualquier indicador del código. |
Cómo funciona
PRELOADBARS es uno de los parámetros aceptados por la instrucción DEFPARAM, junto con ajustes como CUMULATEORDERS, FLATAFTER, FLATBEFORE, y NOCASHUPDATE. Como toda línea DEFPARAM, debe aparecer al principio del código, antes de cualquier otra instrucción, y se evalúa una sola vez al arrancar en lugar de en cada bar.
Su propósito es el calentamiento de los indicadores. Una media móvil de 100 bars necesita 100 cierres pasados antes de dar un valor estable. Sin suficiente histórico precargado, las lecturas del indicador en los primeros bars de un backtest o de una ejecución en vivo se calculan sobre una serie truncada, que puede diferir de los valores mostrados en el gráfico y generar señales espurias. Precargar n bars da a cada indicador hasta n bars de contexto antes de la primera decisión de trading, sin generar ninguna orden en esas bars históricas.
Dimensionar el valor es un compromiso. Debe superar con holgura el periodo de referencia más largo del código, incluidos los periodos de referencia anidados como una media de una media, pero las precargas excesivas aumentan el uso de memoria y el tiempo de arranque. Una regla habitual es el periodo más largo más un margen del 25 al 50 por ciento.
Ejemplos
Ejemplo 1, Calentar una media móvil de 100 bars (ProOrder)
// Preload 150 bars so the 100 bar average is valid from the first decision
DEFPARAM PRELOADBARS = 150
myMA = average[100](close)
IF NOT ShortOnMarket AND close[1] < myMA[1] THEN
SELLSHORT 1 SHARES AT MARKET
ENDIF
SET STOP %TRAILING 2La media de 100 bars requiere 100 cierres, por lo que precargar 150 bars garantiza valores correctos desde el primer bar ejecutado de la estrategia. Este es el ejemplo de referencia de la documentación original con los comentarios reescritos.
Ejemplo 2, Breakout en un canal de 200 bars (ProBacktest)
// Preload enough history for the 200 bar channel
DEFPARAM PRELOADBARS = 250
upperBand = highest[200](high[1])
IF NOT onmarket AND close > upperBand THEN
BUY 1 CONTRACTS AT MARKET
ENDIF
SET STOP %TRAILING 1.5Sin la precarga, el máximo de 200 bars se calcularía a partir de menos bars al inicio de la prueba, haciendo que las primeras señales de breakout se disparen sobre un canal artificialmente bajo.
Ejemplo 3, Combinar varios ajustes DEFPARAM (ProOrder)
// All DEFPARAM lines must precede any other instruction
DEFPARAM CUMULATEORDERS = FALSE
DEFPARAM PRELOADBARS = 500
slowMA = average[200](close)
fastMA = average[50](close)
IF NOT onmarket AND fastMA CROSSES OVER slowMA THEN
BUY 1 CONTRACTS AT MARKET
ENDIF
IF longonmarket AND fastMA CROSSES UNDER slowMA THEN
SELL AT MARKET
ENDIFPRELOADBARS se coloca junto a las demás declaraciones DEFPARAM en la parte superior del archivo. La precarga de 500 bars cubre la media de 200 bars con un amplio margen.
Errores y trampas habituales
- DEFPARAM placement. Todas las líneas DEFPARAM, incluida PRELOADBARS, deben ir antes de cualquier otra sentencia. Un DEFPARAM situado después de la primera instrucción normal no compila.
- Precarga menor que el periodo de referencia. Si el valor está por debajo del periodo de indicador más largo, las primeras señales se calculan con datos truncados y pueden no coincidir con los valores del gráfico. Las entradas del backtest cerca del inicio de la prueba son el síntoma habitual.
- Periodos de referencia anidados ocultos. Un
average[50]de unaverage[100]en la práctica necesita unas 150 bars. Dimensiona la precarga según la profundidad combinada, no solo según el periodo individual más largo. - Limitado por el historial disponible. La plataforma solo puede precargar bars que existan en la fuente de datos para el marco temporal elegido. Pedir más de los disponibles da como resultado menos bars precargados, por lo que los periodos de referencia muy largos en marcos temporales altos pueden arrancar aún parcialmente calentados.
Instrucciones relacionadas
DEFPARAM, la instrucción de la que PRELOADBARS es un parámetro.CumulateOrders, parámetro DEFPARAM que controla la acumulación de órdenes.FLATAFTER, parámetro DEFPARAM que fuerza estar fuera de mercado después de una hora.FLATBEFORE, parámetro DEFPARAM que bloquea las posiciones antes de una hora.NOCASHUPDATE, parámetro DEFPARAM que congela el capital entre operaciones.Average, media móvil cuyo periodo de referencia determina el tamaño de la precarga.BarIndex, cuenta los bars desde el inicio de los datos cargados.ONCE, inicializa una variable una sola vez al arrancar.