Bli medlem i dag
Instruksjoner/probuilder

CalculateOnLastBars

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

Syntaks

probuilder
DEFPARAM CalculateOnLastBars = n

Parametere

NavnTypeStandardBeskrivelse
nheltallalle innlastede barsAntall bars, regnet bakover fra den siste, som indikatoren evalueres på.

Slik fungerer det

Som standard evalueres en indikator på hver bar som er lastet inn i diagrammet. På instrumenter med hundretusenvis av bars, eller med skript som inneholder løkker, tabeller eller tegnekall, kan dette fulle gjennomløpet være langsomt. CalculateOnLastBars forteller plattformen at skriptet bare skal kjøres på de siste n bars og hoppe over alt eldre.

Instruksjonen er en DEFPARAM, så den hører øverst i skriptet, før enhver kjørbar setning. Den konfigurerer hvordan indikatoren planlegges i stedet for å beregne noe selv, og den gjelder hele skriptet, ikke enkelte linjer.

Avveiningen er nøyaktighet ved grensen. Bars som er eldre enn vinduet blir rett og slett ikke evaluert, så indikatoren plotter ingenting der, og beregninger nær starten av vinduet kan mangle den historikken de forventer. Et 200-periodisk gjennomsnitt beregnet på den første baren inne i et vindu på 300 bars kan ikke se barene før vinduet og vil avvike fra verdien en full beregning ville gi. Rekursive konstruksjoner, som eksponentielle gjennomsnitt eller manuelt videreførte variabler, påvirkes mest, fordi tilstanden deres normalt akkumuleres over hele historikken.

Fornuftige verdier for n inkluderer derfor romslig margin over den lengste tilbakeblikksperioden i skriptet. For rent visningsorienterte verktøy, dashbord eller skanneliknende overlegg som bare bryr seg om nylige bars, er aggressive verdier helt greit og gir store hastighetsforbedringer. Instruksjonen gjelder indikatorer; automatiserte strategier styrer sin historiske dybde med PRELOADBARS i stedet.

Eksempler

Eksempel 1, Begrense et glidende gjennomsnitt til nylige bars (Indikator)

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

Gjennomsnittet beregnes og plottes bare på de siste 100 bars. Fordi tilbakeblikksperioden er lik vinduet, bygges de tidligste plottede verdiene på færre bars enn en full beregning ville brukt.

Eksempel 2, Gjøre et løkketungt skript raskere (Indikator)

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

Løkken med 50 iterasjoner kjører på 500 bars i stedet for hele diagrammet, noe som holder indikatoren responsiv på instrumenter med lang historikk.

Eksempel 3, Dashbord tegnet på den aktive baren (Indikator)

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

Å kombinere CalculateOnLastBars med DrawOnLastBarOnly holder et tekstdashbord billig: skriptet evaluerer aldri mer enn en håndfull nylige bars og tegner én gang.

Vanlige feil og fallgruver

  • Verdiene ved grensen blir forvrengt. Beregninger nær starten av vinduet mangler eldre historikk, så gjennomsnitt, summeringer og rekursive verdier avviker der fra en beregning over hele diagrammet. Sett n godt over den lengste tilbakeblikksperioden i skriptet.
  • DEFPARAM placement. Linjen må stå øverst i skriptet før kjørbar kode. Å plassere den etter beregninger gir en kompileringsfeil.
  • Eldre bars viser ingenting. Indikatoren er tom før vinduet. Dette er forventet oppførsel, ikke et dataproblem, men det overrasker brukere som sammenligner med samme formel uten parameteren.
  • Indikatorvirkeområde. CalculateOnLastBars er en indikatoroptimalisering. Strategier styrer sin historiske dybde med PRELOADBARS, og å bruke feil variant i sammenhengen har ingen effekt eller lar seg ikke kompilere.
  • DEFPARAM, deklarerer parametere på skriptnivå som denne.
  • DrawOnLastBarOnly, begrenser tegneutdata til den siste baren.
  • IsLastBarUpdate, sann bare under den siste baroppdateringen, for å skjerme tung kode.
  • PRELOADBARS, styrer hvor mye historikk en strategi laster inn før den starter.
  • BarIndex, nullbasert posisjon for gjeldende bar i de innlastede dataene.
  • ONCE, initialiserer en variabel én gang på den første evaluerte baren.