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

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

probuilder
BarsSince(Condition)
BarsSince(Condition, Occurrence)

Parametrar

NamnTypStandardBeskrivning
ConditionbooleskobligatoriskUttrycket vars senaste sanna utvärdering mäts.
Occurrenceheltal0Vilken 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)

probuilder
// 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)

probuilder
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
ENDIF

BarsSince 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)

probuilder
// 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 med age >= 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.
  • 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.