BarIndex
BarIndex returnerer den nullbaserte posisjonen til gjeldende bar i de innlastede diagramdataene. Referer til den i ProBuilder for å finne barer i prishistorikken.
Syntaks
BarIndexSlik fungerer det
BarIndex er en skrivebeskyttet verdi som vedlikeholdes av plattformen. På den første baren i den innlastede historikken er den 0, på den andre baren 1, og så videre. Hver evaluering av skriptet ser indeksen til baren som behandles, så under en full omberegning sveiper BarIndex fra 0 opp til indeksen for den nyeste baren.
Verdien sier ingenting om tid eller pris. Den bærer ingen informasjon om åpning, høy, lav, slutt eller tidsstempel, bare barens ordensposisjon i datasettet. For klokkebasert logikk er dato- og tidskonstantene de riktige verktøyene; BarIndex er til telling og posisjonering.
To bruksmønstre dominerer. Det første er oppvarmingsbeskyttelse: indikatorer og strategier med lange tilbakeblikk gir upålitelige verdier til det finnes nok barer, og en betingelse som IF BarIndex > 200 THEN undertrykker signaler til historikken er dyp nok. Det andre er koordinatfesting: tegneinstruksjonene tar en barposisjon som x-koordinat, og uttrykk som barindex - 10 adressere et punkt ti barer tilbake fra gjeldende bar.
Fordi tellingen starter på den første innlastede baren, kan samme bar ha en annen BarIndex når mengden innlastet historikk endres. Logikk bør derfor bruke BarIndex til relative målinger, ikke som en stabil identifikator for en bestemt kalenderbar.
Eksempler
Eksempel 1, Vise gjeldende bar-posisjon (Indikator)
// Read the position of the bar being processed
currentBarIndex = BarIndex
RETURN currentBarIndex AS "Current bar index"Indikatoren tegner en rett rampe som øker med 1 per bar, slik at den nullbaserte tellingen blir direkte synlig i diagrammet.
Eksempel 2, Oppvarmingsvern for et langt tilbakeblikk (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 2Uten BarIndex-vernet ville gjennomsnittet på 200 perioder blitt beregnet fra færre barer enn tiltenkt i starten av historikken, og produsert forvrengte tidlige signaler.
Eksempel 3, Krav om tilstrekkelig historikk (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")Screeneren bruker BarIndex for å filtrere ut instrumenter der den innlastede historikken er for kort for at endringsraten over 90 barer skal være meningsfull.
Vanlige feil og fallgruver
- Nullbasert telling. Den første baren har indeks 0, så et diagram med n barer slutter på indeks n minus 1. Feil på én er vanlig når man konverterer mellom bar-antall og indekser.
- Ikke stabil på tvers av datainnlastinger. BarIndex teller fra den første innlastede baren. Å laste inn flere eller færre barer, eller å la gamle barer falle bort, forskyver indeksen til hver bar. Unngå å lagre en BarIndex-verdi som en permanent referanse til en kalenderdato.
- Ingen bar-innhold. BarIndex bærer bare posisjon. Å lese pris eller tid krever de vanlige konstantene som
closeeller nøkkelordene for dato og tid. - Forvirring rundt sesjonstelling. BarIndex nullstilles aldri i løpet av dagen. For en teller som starter på nytt ved hver sesjonsåpning, bruk
IntradayBarIndexi stedet.
Relaterte instruksjoner
IntradayBarIndex, bar-teller som nullstilles ved starten av hver handelsdag.BarsSince, antall barer siden en betingelse sist var sann.HighestBars, forskyvning i barer for den høyeste verdien over en periode.LowestBars, forskyvning i barer for den laveste verdien over en periode.ONCE, initialiserer en variabel bare på den første baren.TRADEINDEX, bar-indeksen der en posisjon ble åpnet i en strategi.DRAWTEXT, tegneinstruksjon som tar en bar-posisjon som x-koordinat.Highest, høyeste verdi i en serie over et fast antall barer.