Únete hoy
Instrucciones/probuilder

CalculateOnLastBars

DEFPARAM CalculateOnLastBars limits a ProBuilder indicator calculation to the most recent n bars, cutting computation time and memory use on large charts.

Sintaxis

probuilder
DEFPARAM CalculateOnLastBars = n

Parámetros

NombreTipoPor defectoDescripción
nenterotodas las bars cargadasNúmero de bars, contadas hacia atrás desde la más reciente, en las que se evalúa el indicador.

Cómo funciona

Por defecto, un indicador se evalúa en cada bar cargada en el gráfico. En instrumentos con cientos de miles de bars, o con scripts que contienen bucles, arrays o llamadas de dibujo, ese barrido completo puede ser lento. CalculateOnLastBars indica a la plataforma que ejecute el script solo en las últimas n bars y que omita todo lo anterior.

La instrucción es un DEFPARAM, por lo que debe ir al principio del script, antes de cualquier sentencia ejecutable. Configura cómo se planifica el indicador en lugar de calcular nada por sí misma, y se aplica a todo el script, no a líneas concretas.

El compromiso es la precisión en el límite. Las bars más antiguas que la ventana simplemente no se evalúan, por lo que el indicador no traza nada ahí, y los cálculos cerca del inicio de la ventana pueden carecer del histórico que esperan. Una media de 200 periodos calculada en la primera bar dentro de una ventana de 300 bars no puede ver las bars anteriores a la ventana y diferirá del valor que produciría un cálculo completo. Las construcciones recursivas, como las medias exponenciales o las variables arrastradas manualmente, son las más afectadas, porque su estado normalmente se acumula a lo largo de todo el histórico.

Por tanto, los valores sensatos de n incluyen un margen generoso por encima del lookback más largo del script. Para herramientas puramente de visualización, paneles o superposiciones de tipo escaneo que solo se fijan en las bars recientes, los valores agresivos son adecuados y producen grandes mejoras de velocidad. La instrucción se aplica a los indicadores; las estrategias automatizadas controlan su profundidad histórica con PRELOADBARS en su lugar.

Ejemplos

Ejemplo 1, Restringir una media móvil a las bars recientes (Indicador)

probuilder
// Evaluate this indicator on the last 100 bars only
DEFPARAM CalculateOnLastBars = 100
myMovingAverage = Average[100](close)
RETURN myMovingAverage AS "MA 100"

La media se calcula y se traza solo en las últimas 100 bars. Como el lookback es igual a la ventana, los primeros valores trazados se construyen con menos bars de las que usaría un cálculo completo.

Ejemplo 2, Acelerar un script con muchos bucles (Indicador)

probuilder
// Heavy per-bar loop, so limit evaluation to the last 500 bars
DEFPARAM CalculateOnLastBars = 500

// Count how many of the previous 50 closes are below the current close
strength = 0
FOR i = 1 TO 50 DO
  IF close > close[i] THEN
    strength = strength + 1
  ENDIF
NEXT
RETURN strength AS "Closes beaten (of 50)"

El bucle de 50 iteraciones se ejecuta sobre 500 bars en lugar de sobre todo el gráfico, lo que mantiene el indicador ágil en instrumentos con histórico largo.

Ejemplo 3, Panel dibujado en la bar en vivo (Indicador)

probuilder
// Only the newest bars matter for a text dashboard
DEFPARAM CalculateOnLastBars = 10
DEFPARAM DrawOnLastBarOnly = true

r = RSI[14](close)
a = AverageTrueRange[14](close)

// Print current readings next to the last bar
DRAWTEXT("RSI: #r#", barindex + 5, close, sansserif, standard, 14)
DRAWTEXT("ATR: #a#", barindex + 5, close - a, sansserif, standard, 14)
RETURN

Combinar CalculateOnLastBars con DrawOnLastBarOnly mantiene barato un panel de texto: el script solo evalúa un puñado de bars recientes y dibuja una vez.

Errores y trampas habituales

  • Los valores en el límite quedan distorsionados. Los cálculos cerca del inicio de la ventana carecen de histórico más antiguo, por lo que ahí las medias, las sumas y los valores recursivos difieren de un cálculo sobre el gráfico completo. Ajusta n bastante por encima del lookback más largo del script.
  • DEFPARAM placement. La línea debe aparecer al principio del script, antes del código ejecutable. Colocarla después de los cálculos provoca un error de compilación.
  • Las bars más antiguas no muestran nada. El indicador aparece vacío antes de la ventana. Este es el comportamiento esperado, no un problema de datos, pero sorprende a los usuarios que lo comparan con la misma fórmula sin el parámetro.
  • Ámbito de indicador. CalculateOnLastBars es una optimización de indicadores. Las estrategias gestionan su profundidad histórica con PRELOADBARS, y usar la incorrecta según el contexto no tiene efecto o no compila.
  • DEFPARAM, declara parámetros a nivel de script como este.
  • DrawOnLastBarOnly, limita la salida de dibujo a la bar más reciente.
  • IsLastBarUpdate, verdadero solo durante la actualización de la última bar, para proteger código pesado.
  • PRELOADBARS, controla cuánto histórico carga una estrategia antes de empezar.
  • BarIndex, posición de base cero del bar actual en los datos cargados.
  • ONCE, inicializa una variable una única vez en la primera bar evaluada.