CalculateOnLastBars
DEFPARAM CalculateOnLastBars limits a ProBuilder indicator calculation to the most recent n bars, cutting computation time and memory use on large charts.
Syntax
DEFPARAM CalculateOnLastBars = nParameter
| Name | Typ | Standard | Beschreibung |
|---|---|---|---|
n | Ganzzahl | alle geladenen Bars | Anzahl der Bars, vom aktuellsten zurückgezählt, auf denen der Indikator ausgewertet wird. |
So funktioniert es
Standardmäßig wird ein Indikator auf jedem in den Chart geladenen Bar ausgewertet. Bei Instrumenten mit hunderttausenden Bars oder bei Skripten mit Schleifen, Arrays oder Zeichenaufrufen kann dieser vollständige Durchlauf langsam sein. CalculateOnLastBars sagt der Plattform, das Skript nur auf den letzten n Bars auszuführen und alles Ältere zu überspringen.
Der Befehl ist ein DEFPARAM, gehört also an den Anfang des Skripts, vor jede ausführbare Anweisung. Er konfiguriert, wie der Indikator eingeplant wird, statt selbst etwas zu berechnen, und er gilt für das gesamte Skript, nicht für einzelne Zeilen.
Der Kompromiss ist die Genauigkeit am Rand. Bars, die älter als das Fenster sind, werden einfach nicht ausgewertet, daher plottet der Indikator dort nichts, und Berechnungen nahe dem Anfang des Fensters fehlt möglicherweise die Historie, die sie erwarten. Ein 200-Perioden-Durchschnitt, der auf dem ersten Bar innerhalb eines 300-Bar-Fensters berechnet wird, kann die Bars vor dem Fenster nicht sehen und wird von dem Wert abweichen, den eine vollständige Berechnung erzeugen würde. Rekursive Konstrukte wie exponentielle Durchschnitte oder manuell mitgeführte Variablen sind am stärksten betroffen, da ihr Zustand sich normalerweise über die gesamte Historie aufbaut.
Sinnvolle Werte für n enthalten daher einen großzügigen Puffer über dem längsten Lookback im Skript. Für rein darstellungsorientierte Werkzeuge, Dashboards oder Scan-artige Overlays, die nur aktuelle Bars interessieren, sind aggressive Werte in Ordnung und bringen große Geschwindigkeitsgewinne. Der Befehl gilt für Indikatoren; automatisierte Strategien steuern ihre historische Tiefe stattdessen mit PRELOADBARS.
Beispiele
Beispiel 1, Einen gleitenden Durchschnitt auf aktuelle Bars beschränken (Indikator)
// Evaluate this indicator on the last 100 bars only
DEFPARAM CalculateOnLastBars = 100
myMovingAverage = Average[100](close)
RETURN myMovingAverage AS "MA 100"Der Durchschnitt wird nur auf den letzten 100 Bars berechnet und geplottet. Da der Lookback dem Fenster entspricht, werden die frühesten geplotteten Werte aus weniger Bars gebildet, als eine vollständige Berechnung verwenden würde.
Beispiel 2, Ein schleifenintensives Skript beschleunigen (Indikator)
// 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)"Die Schleife mit 50 Iterationen läuft auf 500 Bars statt auf dem gesamten Chart, was den Indikator bei Instrumenten mit langen Historien reaktionsschnell hält.
Beispiel 3, Dashboard auf dem Live-Bar gezeichnet (Indikator)
// 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)
RETURNDie Kombination von CalculateOnLastBars mit DrawOnLastBarOnly hält ein Text-Dashboard günstig: Das Skript wertet immer nur eine Handvoll aktueller Bars aus und zeichnet einmal.
Häufige Fehler und Stolperfallen
- Randwerte sind verzerrt. Berechnungen nahe dem Anfang des Fensters fehlt ältere Historie, daher weichen Durchschnitte, Summationen und rekursive Werte dort von einer Berechnung über den gesamten Chart ab. Setzen Sie n deutlich über den längsten Lookback im Skript.
- DEFPARAM placement. Die Zeile muss am Anfang des Skripts vor ausführbarem Code stehen. Sie nach Berechnungen zu platzieren verursacht einen Kompilierungsfehler.
- Ältere Bars zeigen nichts. Der Indikator ist vor dem Fenster leer. Das ist erwartetes Verhalten und kein Datenproblem, überrascht aber Nutzer, die mit derselben Formel ohne den Parameter vergleichen.
- Indikator-Geltungsbereich. CalculateOnLastBars ist eine Optimierung für Indikatoren. Strategien steuern ihre historische Tiefe mit
PRELOADBARS, und die für den Kontext falsche Variante bleibt wirkungslos oder lässt sich nicht kompilieren.
Verwandte Befehle
DEFPARAM, deklariert Parameter auf Skriptebene wie diesen.DrawOnLastBarOnly, beschränkt die Zeichenausgabe auf den aktuellsten Bar.IsLastBarUpdate, nur während der letzten Bar-Aktualisierung wahr, zum Absichern von rechenintensivem Code.PRELOADBARS, steuert, wie viel Historie eine Strategie vor dem Start lädt.BarIndex, nullbasierte Position des aktuellen Bars in den geladenen Daten.ONCE, initialisiert eine Variable einmalig auf dem ersten ausgewerteten Bar.