Bli medlem idag
Instruktioner/probuilder · probacktest · proorder · proscreener

IsLastBarUpdate

IsLastBarUpdate i ProBuilder returnerar 1 så länge den aktuella baren är den senaste uppdateringen, vilket låter skript hoppa över tung kod på historiska barer för prestanda.

Syntax

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

Så fungerar det

Ett ProBuilder-skript körs en gång per bar genom hela den inlästa historiken, och därefter igen på varje tick i den aktiva baren. IsLastBarUpdate skiljer dessa faser åt. Den returnerar 1 när baren som behandlas är den senaste uppdateringen, i realtid eller den sista baren för ett stängt instrument, och 0 medan skriptet fortfarande arbetar sig genom äldre barer.

I en backtest skiljer beteendet sig något: flaggan returnerar 1 från backtestens startdatum och framåt och 0 endast för den förinlästa historiken före det datumet. Det gör att strategier kan hålla förberedande kod billig över uppvärmningsdatan samtidigt som full logik körs över den testade perioden.

Huvudanvändningen är prestanda. Loopar som går igenom hundratals barer, eller ritkod som målar om stora områden, ger identiska resultat oavsett om de körs på varje historisk bar eller en gång i slutet. Att lägga dem bakom IsLastBarUpdate tar bort de överflödiga genomgångarna, vilket kortar indikatorns uppdateringstider och minskar belastningen från live-strategier. Den kombineras naturligt med defparam drawonlastbaronly = true, som tillämpar samma idé på ritutdata.

Exempel

Exempel 1, Rita gap-rektanglar en gång (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

Genomsökningen av 1000 barer och ritandet av rektangeln körs en enda gång, vid den senaste uppdateringen, i stället för en gång per historisk bar. Utan vaktvillkoret skulle samma arbete upprepas tusentals gånger för ett identiskt resultat.

Exempel 2, Nivålinje som ritas bara i slutet (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

100-barshögsta beräknas på varje bar som vanligt, men den horisontella linjen ritas bara under den sista uppdateringen, vilket håller diagrammet responsivt.

Exempel 3, Equity-kurva från backtestens start (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 är IsLastBarUpdate sant för den testade perioden och falskt för de förinlästa uppvärmningsbarerna, så equity-kurvan ritas bara där affärer faktiskt kan ske.

Vanliga fel och fallgropar

  • Tillstånd ackumuleras aldrig. Variabler som bara tilldelas inuti ett IsLastBarUpdate-block har inte uppdaterats på historiska barer. Beräkningar som beror på ackumulering bar för bar måste ligga utanför vaktvillkoret.
  • Backtest-semantiken skiljer sig. I en backtest är flaggan 1 för varje bar från startdatumet, inte bara för den sista baren. Kod som antar att den utlöses en gång kommer att köras över hela det testade intervallet.
  • Signaler kan inte villkoras av den. Att kapsla in entry- eller exitvillkor i IsLastBarUpdate ändrar strategins beteende mellan backtest och live-körning. Reservera den för ritande, loggning och diagnostik.
  • Upprepad utlösning på live-tickar. På ett levande diagram körs blocket på varje tick i den pågående baren, inte en gång. Ritkod bör tåla att köras om, eller kombineras med drawonlastbaronly.
  • DEFPARAM, sätter skriptparametrar såsom drawonlastbaronly.
  • DrawOnLastBarOnly, begränsar ritutdata till den sista baren.
  • CalculateOnLastBars, begränsar hur många barer skriptet alls beräknar.
  • BarIndex, barräknare som används för att ankra ritobjekt under den sista genomgången.
  • DRAWRECTANGLE, ritprimitiv som ofta kapslas in i vaktvillkoret.
  • FOR, loopkonstruktion vars historiska omkörningar vaktvillkoret eliminerar.
  • ONCE, engångsinitiering, ett kompletterande optimeringsverktyg.
  • RETURN, avslutar indikatorn och returnerar dess värden.