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

BarIndex

BarIndex returnerar den aktuella barens nollbaserade position i de inlästa diagramdata. Använd det i ProBuilder för att lokalisera barer i prishistoriken.

Syntax

probuilder
BarIndex

Så fungerar det

BarIndex är ett skrivskyddat värde som underhålls av plattformen. På den första baren i den inlästa historiken är det 0, på den andra baren 1, och så vidare. Varje utvärdering av skriptet ser indexet för den bar som just bearbetas, så under en fullständig omräkning löper BarIndex från 0 upp till indexet för den senaste baren.

Värdet säger ingenting om tid eller pris. Det bär ingen information om öppning, högsta, lägsta, stängning eller tidsstämpel, endast barens ordningsposition i datamängden. För klockbaserad logik är datum- och tidskonstanterna de rätta verktygen; BarIndex är för räkning och positionering.

Två användningsmönster dominerar. Det första är uppvärmningsskydd: indikatorer och strategier med lång tillbakablick ger opålitliga värden till det finns tillräckligt många barer, och ett villkor som IF BarIndex > 200 THEN undertrycker signaler till historiken är tillräckligt djup. Det andra är koordinatankring: ritinstruktionerna tar en barposition som sin x-koordinat, och uttryck som barindex - 10 adressera en punkt tio barer bakåt från aktuell bar.

Eftersom räkningen börjar på den första inlästa baren kan samma bar ha ett annat BarIndex när mängden inläst historik ändras. Logik bör därför använda BarIndex för relativa mätningar, inte som en stabil identifierare för en specifik kalenderbar.

Exempel

Exempel 1, Visa den aktuella barpositionen (Indikator)

probuilder
// Read the position of the bar being processed
currentBarIndex = BarIndex
RETURN currentBarIndex AS "Current bar index"

Indikatorn ritar ut en rak ramp som ökar med 1 per bar, vilket gör den nollbaserade räkningen direkt synlig i diagrammet.

Exempel 2, Uppvärmningsskydd för en lång lookback (ProOrder)

probuilder
DEFPARAM CumulateOrders = false

slowMA = Average[200](close)
fastMA = Average[20](close)

// Block entries until 200 bars exist, so the slow average is fully formed
IF BarIndex > 200 THEN
  IF fastMA CROSSES OVER slowMA THEN
    BUY 1 CONTRACT AT MARKET
  ENDIF
ENDIF

SET STOP %LOSS 2

Utan BarIndex-skyddet skulle 200-periodsmedelvärdet beräknas från färre barer än avsett i början av historiken, vilket ger förvrängda tidiga signaler.

Exempel 3, Kräva tillräcklig historik (ProScreener)

probuilder
// Ignore instruments with fewer than 100 loaded bars
enoughData = BarIndex >= 100
momentum = ROC[90](close)

SCREENER[enoughData AND momentum > 10] (momentum AS "ROC 90")

Screenern använder BarIndex för att filtrera bort instrument vars inlästa historik är för kort för att förändringstakten över 90 barer ska vara meningsfull.

Vanliga fel och fallgropar

  • Nollbaserad räkning. Den första baren har index 0, så ett diagram med n barer slutar på index n minus 1. Fel på ett steg är vanliga när man omvandlar mellan barantal och index.
  • Inte stabilt mellan datainläsningar. BarIndex räknar från den första inlästa baren. Att läsa in fler eller färre barer, eller att låta gamla barer falla bort, förskjuter indexet för varje bar. Undvik att spara ett BarIndex-värde som en permanent referens till ett kalenderdatum.
  • Inget barinnehåll. BarIndex bär bara position. För att läsa pris eller tid krävs de vanliga konstanterna som close eller nyckelorden för datum och tid.
  • Förvirring kring sessionsräkning. BarIndex nollställs aldrig under dagen. För en räknare som startar om vid varje sessionsöppning, använd IntradayBarIndex istället.
  • IntradayBarIndex, barräknare som nollställs vid början av varje handelsdag.
  • BarsSince, antal barer sedan ett villkor senast var sant.
  • HighestBars, offset i barer för det högsta värdet under en period.
  • LowestBars, offset i barer för det lägsta värdet under en period.
  • ONCE, initierar en variabel endast på den första baren.
  • TRADEINDEX, barindex där en position öppnades i en strategi.
  • DRAWTEXT, ritinstruktion som tar en barposition som x-koordinat.
  • Highest, det högsta värdet i en serie över ett fast antal barer.