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
BarIndexSå 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)
// 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)
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 2Utan 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)
// 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
closeeller 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
IntradayBarIndexistället.
Relaterade instruktioner
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.