BarsSince
BarsSince räknar antalet barer som förflutit sedan ett villkor senast var sant i ProBuilder. Följ hur länge sedan en korsning eller signal inträffade i diagrammet.
Syntax
BarsSince(Condition)
BarsSince(Condition, Occurrence)Parametrar
| Namn | Typ | Standard | Beskrivning |
|---|---|---|---|
Condition | boolesk | obligatorisk | Uttrycket vars senaste sanna utvärdering mäts. |
Occurrence | heltal | 0 | Vilken förekomst som ska mätas. 0 avser den senaste, 1 den närmast föregående, och så vidare. |
Så fungerar det
BarsSince går bakåt från den aktuella baren och räknar hur många barer som skiljer den från den bar där villkoret senast utvärderades till sant. Resultatet 0 betyder att villkoret är sant på den aktuella baren, 1 betyder att det var sant på föregående bar, och större värden indikerar äldre händelser.
Det valfria andra argumentet väljer tidigare förekomster. BarsSince(cond) och BarsSince(cond, 0) är likvärdiga och riktar sig mot den senaste förekomsten; BarsSince(cond, 1) mäter avståndet till förekomsten före den. Att jämföra de två visar avståndet mellan på varandra följande händelser, till exempel antalet barer mellan de två senaste oscillatorkorsningarna.
När villkoret aldrig har varit sant någonstans i den utvärderade historiken returnerar funktionen -1. Detta vaktvärde måste hanteras uttryckligen, eftersom -1 passerar numeriska jämförelser som < 10 och kan i tysthet uppfylla färskhetsfilter som var tänkta att kräva en verklig händelse.
Typiska användningar är färskhetsfilter (agera bara när en signal utlöstes inom de senaste n barerna), avkylningstimrar (blockera ny entry till tillräckligt många barer har gått) och varaktighetsmätningar mellan händelser i diagrammet.
Exempel
Exempel 1, Avstånd till de två senaste RSI-korsningarna (Indikator)
// Condition: 14-period RSI crosses above 50
a = RSI[14] CROSSES OVER 50
// Bars since the previous occurrence and the most recent one
testA = BarsSince(a, 1)
testB = BarsSince(a)
RETURN testA AS "previous occurrence", testB AS "last occurrence"Indikatorn ritar ut åldern i barer för den senaste RSI-korsningen över 50 och för den närmast föregående. Avståndet mellan de två linjerna är mellanrummet mellan på varandra följande korsningar.
Exempel 2, Avkylningsperiod för entry (ProOrder)
DEFPARAM CumulateOrders = false
signal = Average[10](close) CROSSES OVER Average[40](close)
sinceSignal = BarsSince(signal)
// Trade the crossover, but not if another one fired within the last 10 bars
IF signal AND (BarsSince(signal, 1) > 10 OR BarsSince(signal, 1) = -1) THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Time-based exit once the signal is 20 bars old
IF LONGONMARKET AND sinceSignal >= 20 THEN
SELL AT MARKET
ENDIFBarsSince har två roller här: förekomst 1 upprätthåller en avkylningsperiod mellan entries, och förekomst 0 driver en tidsbaserad exit.
Exempel 3, Skanning efter färska breakouts (ProScreener)
// Condition: close breaks above the highest close of the prior 50 bars
breakout = close CROSSES OVER Highest[50](close[1])
age = BarsSince(breakout)
// Keep instruments where the breakout happened within the last 3 bars
SCREENER[age >= 0 AND age <= 3] (age AS "Bars since breakout")Screenern returnerar instrument med en nyligen inträffad 50-bars breakout. Den age >= 0 klausulen utesluter sentinelvärdet -1 för instrument som aldrig utlöstes.
Vanliga fel och fallgropar
- -1 betyder aldrig. Ett villkor som aldrig varit sant returnerar -1, vilket slinker igenom filter som
BarsSince(cond) < 5. Uteslut alltid sentinelvärdet explicit, till exempel medage >= 0. - Numreringen av förekomster börjar på 0. Den senaste förekomsten är 0, inte 1. Att skicka in 1 mäter den näst senaste händelsen, en vanlig källa till fel på ett steg.
- Villkoret måste vara booleskt. Att skicka in ett numeriskt uttryck är ogiltigt. Jämförelser och korsningsuttryck kvalificerar sig; råa priser gör det inte.
- Historiken begränsar svaret. Endast inlästa barer undersöks. En händelse som är äldre än den inlästa historiken rapporteras som att den aldrig har inträffat, så resultaten kan ändras när mer data läses in.
Relaterade instruktioner
BarIndex, den aktuella barens nollbaserade position i inläst data.IntradayBarIndex, barräknare som nollställs varje handelsdag.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.CROSSES OVER, sant på den bar där en serie rör sig över en annan.CROSSES UNDER, sant på den bar där en serie rör sig under en annan.RSI, momentumoscillator som ofta kombineras med BarsSince-villkor.Average, glidande medelvärde som används i korsningsvillkor.