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 = nParametrar
| Namn | Typ | Standard | Beskrivning |
|---|---|---|---|
n | heltal | alla inlästa barer | Antal barer, räknat bakåt från den senaste, som indikatorn utvärderas på. |
Så fungerar det
Som standard utvärderas en indikator på varje bar som laddas in i diagrammet. På instrument med hundratusentals barer, eller med skript som innehåller loopar, arrayer eller ritanrop, kan den fullständiga genomgången bli långsam. CalculateOnLastBars talar om för plattformen att köra skriptet bara på de senaste n barerna och hoppa över allt äldre.
Instruktionen är en DEFPARAM, så den hör högst upp i skriptet, före alla exekverbara satser. Den konfigurerar hur indikatorn schemaläggs snarare än att beräkna något själv, och den gäller för hela skriptet, inte för enskilda rader.
Avvägningen är noggrannheten vid gränsen. Barer som är äldre än fönstret utvärderas helt enkelt inte, så indikatorn plottar ingenting där, och beräkningar nära fönstrets början kan sakna den historik de förväntar sig. Ett 200-periods medelvärde som beräknas på den första baren inne i ett 300-barers fönster kan inte se barerna före fönstret och kommer att skilja sig från det värde en fullständig beräkning skulle ge. Rekursiva konstruktioner, som exponentiella medelvärden eller manuellt vidareförda variabler, påverkas mest, eftersom deras tillstånd normalt ackumuleras över hela historiken.
Rimliga värden på n har därför generös marginal över den längsta lookback-perioden i skriptet. För rent visningsinriktade verktyg, instrumentpaneler eller scan-liknande överlägg som bara bryr sig om färska barer fungerar aggressiva värden bra och ger stora hastighetsvinster. Instruktionen gäller indikatorer; automatiserade strategier styr sitt historiska djup med PRELOADBARS i stället.
Exempel
Exempel 1, Begränsa ett glidande medelvärde till färska barer (Indikator)
// Evaluate this indicator on the last 100 bars only
DEFPARAM CalculateOnLastBars = 100
myMovingAverage = Average[100](close)
RETURN myMovingAverage AS "MA 100"Medelvärdet beräknas och plottas bara på de senaste 100 barerna. Eftersom lookback-perioden är lika med fönstret bygger de tidigaste plottade värdena på färre barer än en fullständig beräkning skulle använda.
Exempel 2, Snabba upp ett loop-tungt skript (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)"Loopen med 50 iterationer körs på 500 barer i stället för hela diagrammet, vilket håller indikatorn responsiv på instrument med lång historik.
Exempel 3, Instrumentpanel ritad på den aktuella baren (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)
RETURNAtt kombinera CalculateOnLastBars med DrawOnLastBarOnly håller en textbaserad instrumentpanel billig: skriptet utvärderar bara en handfull färska barer och ritar en gång.
Vanliga fel och fallgropar
- Värden vid gränsen blir förvrängda. Beräkningar nära fönstrets början saknar äldre historik, så medelvärden, summeringar och rekursiva värden skiljer sig där från en beräkning över hela diagrammet. Sätt n väl över den längsta lookback-perioden i skriptet.
- DEFPARAM placement. Raden måste stå högst upp i skriptet före exekverbar kod. Att placera den efter beräkningar orsakar ett kompileringsfel.
- Äldre barer visar ingenting. Indikatorn är tom före fönstret. Detta är förväntat beteende, inte ett dataproblem, men det överraskar användare som jämför med samma formel utan parametern.
- Gäller indikatorer. CalculateOnLastBars är en indikatoroptimering. Strategier hanterar sitt historiska djup med
PRELOADBARS, och att använda fel variant för sammanhanget får ingen effekt eller gör att koden inte kompilerar.
Relaterade instruktioner
DEFPARAM, deklarerar parametrar på skriptnivå som denna.DrawOnLastBarOnly, begränsar ritutdata till den senaste baren.IsLastBarUpdate, sant bara under den sista baruppdateringen, för att skydda tung kod.PRELOADBARS, styr hur mycket historik en strategi laddar innan start.BarIndex, den aktuella barens nollbaserade position i inläst data.ONCE, initierar en variabel en enda gång på den första utvärderade baren.