Rejoignez-nous
Instructions/probuilder

CalculateOnLastBars

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

Syntaxe

probuilder
DEFPARAM CalculateOnLastBars = n

Paramètres

NomTypePar défautDescription
nentiertous les bars chargésNombre de bars, comptés en arrière depuis le plus récent, sur lesquels l'indicateur est évalué.

Comment ça marche

Par défaut, un indicateur est évalué sur chaque bar chargé dans le graphique. Sur les instruments comptant des centaines de milliers de bars, ou avec des scripts contenant des boucles, des tableaux ou des appels de dessin, ce balayage complet peut être lent. CalculateOnLastBars indique à la plateforme de n'exécuter le script que sur les n derniers bars et d'ignorer tout ce qui est plus ancien.

L'instruction est un DEFPARAM, elle doit donc figurer en haut du script, avant toute instruction exécutable. Elle configure la façon dont l'indicateur est planifié plutôt que de calculer quoi que ce soit elle-même, et elle s'applique à l'ensemble du script, pas à des lignes individuelles.

Le compromis porte sur la précision à la limite. Les bars plus anciens que la fenêtre ne sont tout simplement pas évalués, l'indicateur n'y trace donc rien, et les calculs près du début de la fenêtre peuvent manquer de l'historique qu'ils attendent. Une moyenne à 200 périodes calculée sur le premier bar à l'intérieur d'une fenêtre de 300 bars ne peut pas voir les bars antérieurs à la fenêtre et différera de la valeur qu'un calcul complet produirait. Les constructions récursives, telles que les moyennes exponentielles ou les variables reportées manuellement, sont les plus affectées, car leur état s'accumule normalement sur tout l'historique.

Les valeurs raisonnables de n prévoient donc une marge généreuse au-dessus du plus long lookback du script. Pour les outils purement d'affichage, les tableaux de bord ou les superpositions de type scan qui ne s'intéressent qu'aux bars récents, des valeurs agressives conviennent et produisent de forts gains de vitesse. L'instruction s'applique aux indicateurs ; les stratégies automatisées contrôlent plutôt leur profondeur d'historique avec PRELOADBARS.

Exemples

Exemple 1, Restreindre une moyenne mobile aux bars récents (Indicateur)

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

La moyenne est calculée et tracée uniquement sur les 100 derniers bars. Comme le lookback est égal à la fenêtre, les premières valeurs tracées sont construites à partir de moins de bars qu'un calcul complet n'en utiliserait.

Exemple 2, Accélérer un script riche en boucles (Indicateur)

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)"

La boucle de 50 itérations s'exécute sur 500 bars au lieu de tout le graphique, ce qui garde l'indicateur réactif sur les instruments à long historique.

Exemple 3, Tableau de bord dessiné sur le bar en cours (Indicateur)

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

Combiner CalculateOnLastBars avec DrawOnLastBarOnly maintient un tableau de bord textuel peu coûteux : le script n'évalue jamais qu'une poignée de bars récents et ne dessine qu'une fois.

Erreurs et pièges courants

  • Les valeurs en bordure sont faussées. Les calculs près du début de la fenêtre manquent d'historique plus ancien, de sorte que les moyennes, les sommes et les valeurs récursives y diffèrent d'un calcul sur tout le graphique. Fixez n bien au-dessus du plus long lookback du script.
  • DEFPARAM placement. La ligne doit apparaître en haut du script, avant le code exécutable. La placer après des calculs provoque une erreur de compilation.
  • Les bars plus anciens n'affichent rien. L'indicateur est vide avant la fenêtre. C'est un comportement attendu, pas un problème de données, mais cela surprend les utilisateurs qui comparent avec la même formule sans le paramètre.
  • Portée indicateur. CalculateOnLastBars est une optimisation d'indicateur. Les stratégies gèrent leur profondeur d'historique avec PRELOADBARS, et utiliser la mauvaise selon le contexte n'a aucun effet ou empêche la compilation.
  • DEFPARAM, déclare les paramètres au niveau du script, comme celui-ci.
  • DrawOnLastBarOnly, limite le dessin au bar le plus récent.
  • IsLastBarUpdate, vrai uniquement pendant la mise à jour du dernier bar, pour protéger le code lourd.
  • PRELOADBARS, contrôle la quantité d'historique qu'une stratégie charge avant de démarrer.
  • BarIndex, position du bar courant dans les données chargées, à partir de zéro.
  • ONCE, initialise une variable une seule fois sur le premier bar évalué.