Bli medlem i dag
Instruksjoner/probuilder · probacktest · proorder · proscreener

IsLastBarUpdate

IsLastBarUpdate i ProBuilder returnerer 1 så lenge gjeldende bar er den nyeste oppdateringen, slik at skript kan hoppe over tung kode på historiske barer av ytelseshensyn.

Syntaks

probuilder
if IsLastBarUpdate then
  // code executed only on the last updated bar
endif

Slik fungerer det

Et ProBuilder-skript kjører én gang per bar gjennom hele den innlastede historikken, og deretter på nytt på hver tick i den levende baren. IsLastBarUpdate skiller disse fasene. Den returnerer 1 når baren som behandles er den siste oppdateringen, i sanntid eller den siste baren på et stengt instrument, og 0 mens skriptet fortsatt arbeider seg gjennom eldre barer.

I en backtest er atferden litt annerledes: flagget returnerer 1 fra backtestens startdato og framover, og 0 bare for den forhåndslastede historikken før den datoen. Dette gjør det mulig for strategier å holde forberedelseskoden billig over oppvarmingsdataene mens de kjører full logikk gjennom den testede perioden.

Hovedbruksområdet er ytelse. Løkker som skanner hundrevis av barer, eller tegnekode som maler om store områder, gir identiske resultater enten de kjører på hver historiske bar eller én gang til slutt. Å legge dem bak IsLastBarUpdate fjerner de overflødige gjennomløpene, noe som korter ned oppdateringstiden for indikatorer og reduserer belastningen fra strategier som kjører live. Den kombineres naturlig med defparam drawonlastbaronly = true, som bruker samme idé på tegneutdata.

Eksempler

Eksempel 1, Tegne gap-rektangler én gang (Indikator)

probuilder
defparam drawonlastbaronly=true
X = 1000
if IsLastBarUpdate then
  // Scan the last 1000 bars for down gaps, only on the final update
  for i = 1 to X do
    if open[i] < low[i+1] then
      drawrectangle(barindex[i+1], close[i+1], barindex, open[i]) coloured(255,0,0,50) bordercolor(255,0,0)
    endif
  next
endif
return

Skanningen over 1000 barer og tegningen av rektangelet kjører én enkelt gang, på den siste oppdateringen, i stedet for én gang per historisk bar. Uten vakten ville det samme arbeidet gjentas tusenvis av ganger for et identisk resultat.

Eksempel 2, Nivålinje tegnet bare på slutten (Indikator)

probuilder
myLevel = Highest[100](high)
// Draw the resistance line once instead of on every bar
IF IsLastBarUpdate THEN
  DRAWHLINE(myLevel) COLOURED(0, 0, 255)
ENDIF
RETURN

Toppen over 100 barer beregnes på hver bar som vanlig, men den horisontale linjen tegnes bare under den siste oppdateringen, noe som holder diagrammet responsivt.

Eksempel 3, Equity-kurve fra backtest-starten (ProBacktest)

probuilder
// The flag is 1 from the backtest start date onward
IF IsLastBarUpdate THEN
  GRAPH STRATEGYPROFIT AS "equity"
ENDIF

IF close CROSSES OVER Average[20](close) AND NOT ONMARKET THEN
  BUY 1 CONTRACT AT MARKET
ELSIF close CROSSES UNDER Average[20](close) AND LONGONMARKET THEN
  SELL AT MARKET
ENDIF

Under en backtest er IsLastBarUpdate sann for den testede perioden og falsk for de forhåndslastede oppvarmingsbarene, så equity-kurven tegnes bare der handler faktisk kan forekomme.

Vanlige feil og fallgruver

  • Tilstand akkumuleres aldri. Variabler som bare tilordnes inne i en IsLastBarUpdate-blokk, har ikke blitt oppdatert på historiske barer. Beregninger som avhenger av akkumulering bar for bar, må holdes utenfor vakten.
  • Backtest-semantikken er forskjellig. I en backtest er flagget 1 for hver bar fra startdatoen, ikke bare for den siste baren. Kode som antar at det utløses én gang, vil kjøre over hele det testede området.
  • Signaler kan ikke styres av den. Å pakke inngangs- eller utgangsbetingelser inn i IsLastBarUpdate endrer strategiens atferd mellom backtest og live kjøring. Forbehold den for tegning, logging og diagnostikk.
  • Gjentatt utløsing på levende ticks. På et levende diagram kjører blokken ved hver tick i baren som dannes, ikke én gang. Tegnekode bør tåle å bli kjørt på nytt, eller kombineres med drawonlastbaronly.
  • DEFPARAM, setter skriptparametere som drawonlastbaronly.
  • DrawOnLastBarOnly, begrenser tegneutdata til den siste baren.
  • CalculateOnLastBars, begrenser hvor mange barer skriptet i det hele tatt beregner.
  • BarIndex, barteller som brukes til å forankre tegninger i den siste gjennomkjøringen.
  • DRAWRECTANGLE, tegneprimitiv som ofte pakkes inn i vakten.
  • FOR, løkkekonstruksjon hvis historiske gjenkjøringer vakten eliminerer.
  • ONCE, engangsinitialisering, et komplementært optimaliseringsverktøy.
  • RETURN, avslutter indikatoren og gir ut verdiene.