CalculateOnLastBars
DEFPARAM CalculateOnLastBars limits a ProBuilder indicator calculation to the most recent n bars, cutting computation time and memory use on large charts.
Syntaxis
DEFPARAM CalculateOnLastBars = nParameters
| Naam | Type | Standaard | Beschrijving |
|---|---|---|---|
n | geheel getal | alle geladen bars | Aantal bars, teruggeteld vanaf de meest recente, waarop de indicator wordt geëvalueerd. |
Hoe het werkt
Standaard wordt een indicator geëvalueerd op elke bar die in de grafiek is geladen. Bij instrumenten met honderdduizenden bars, of bij scripts met loops, arrays of tekenaanroepen, kan die volledige doorloop traag zijn. CalculateOnLastBars vertelt het platform om het script alleen op de laatste n bars uit te voeren en al het oudere over te slaan.
De instructie is een DEFPARAM en hoort dus bovenaan het script, vóór elk uitvoerbaar statement. Hij configureert hoe de indicator wordt ingepland in plaats van zelf iets te berekenen, en geldt voor het hele script, niet voor afzonderlijke regels.
De afweging is nauwkeurigheid aan de rand. Bars ouder dan het venster worden simpelweg niet geëvalueerd, dus de indicator plot daar niets, en berekeningen aan het begin van het venster kunnen de historie missen die ze verwachten. Een gemiddelde over 200 periodes dat op de eerste bar binnen een venster van 300 bars wordt berekend, kan de bars vóór het venster niet zien en zal afwijken van de waarde die een volledige berekening zou opleveren. Recursieve constructies, zoals exponentiële gemiddelden of handmatig meegedragen variabelen, worden het meest getroffen, omdat hun toestand normaal gesproken over de hele historie wordt opgebouwd.
Zinvolle waarden voor n bevatten daarom ruime marge boven de langste lookback in het script. Voor puur weergavegerichte tools, dashboards of scanachtige overlays die alleen om recente bars geven, zijn agressieve waarden prima en leveren ze grote snelheidswinst op. De instructie geldt voor indicatoren; geautomatiseerde strategieën regelen hun historische diepte in plaats daarvan met PRELOADBARS.
Voorbeelden
Voorbeeld 1, Een voortschrijdend gemiddelde beperken tot recente bars (Indicator)
// Evaluate this indicator on the last 100 bars only
DEFPARAM CalculateOnLastBars = 100
myMovingAverage = Average[100](close)
RETURN myMovingAverage AS "MA 100"Het gemiddelde wordt alleen op de laatste 100 bars berekend en geplot. Omdat de lookback gelijk is aan het venster, zijn de eerste geplotte waarden opgebouwd uit minder bars dan een volledige berekening zou gebruiken.
Voorbeeld 2, Een loop-intensief script versnellen (Indicator)
// 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)"De loop met 50 iteraties loopt over 500 bars in plaats van de hele grafiek, waardoor de indicator responsief blijft op instrumenten met een lange historie.
Voorbeeld 3, Dashboard getekend op de live bar (Indicator)
// 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)
RETURNCalculateOnLastBars combineren met DrawOnLastBarOnly houdt een tekstdashboard goedkoop: het script evalueert nooit meer dan een handvol recente bars en tekent één keer.
Veelvoorkomende fouten en valkuilen
- Randwaarden zijn vertekend. Berekeningen aan het begin van het venster missen oudere historie, dus gemiddelden, sommaties en recursieve waarden wijken daar af van een berekening over de hele grafiek. Stel n ruim boven de langste lookback in het script in.
- DEFPARAM placement. De regel moet bovenaan het script staan, vóór uitvoerbare code. Hem na berekeningen plaatsen veroorzaakt een compilatiefout.
- Oudere bars tonen niets. De indicator is leeg vóór het venster. Dit is verwacht gedrag, geen dataprobleem, maar het verrast gebruikers die vergelijken met dezelfde formule zonder de parameter.
- Indicatorbereik. CalculateOnLastBars is een indicatoroptimalisatie. Strategieën regelen hun historische diepte met
PRELOADBARS, en de verkeerde gebruiken voor de context heeft geen effect of compileert niet.
Gerelateerde instructies
DEFPARAM, declareert parameters op scriptniveau zoals deze.DrawOnLastBarOnly, beperkt tekenuitvoer tot de meest recente bar.IsLastBarUpdate, alleen waar tijdens de laatste barupdate, om zware code af te schermen.PRELOADBARS, bepaalt hoeveel historie een strategie laadt voordat hij start.BarIndex, nulgebaseerde positie van de huidige bar in de geladen data.ONCE, initialiseert een variabele eenmalig op de eerste geëvalueerde bar.