Únete hoy
Instrucciones/probuilder · probacktest · proorder · proscreener

BarsSince

BarsSince cuenta el número de bars transcurridos desde la última vez que una condición fue verdadera en ProBuilder. Sigue cuánto hace que se produjo un cruce o una señal en el gráfico.

Sintaxis

probuilder
BarsSince(Condition)
BarsSince(Condition, Occurrence)

Parámetros

NombreTipoPor defectoDescripción
ConditionbooleanoobligatorioLa expresión cuya evaluación verdadera más reciente se mide.
Occurrenceentero0Qué ocurrencia se mide. 0 apunta a la más reciente, 1 a la anterior, y así sucesivamente.

Cómo funciona

BarsSince recorre hacia atrás desde el bar actual y cuenta cuántos bars lo separan del bar en el que la condición se evaluó como verdadera por última vez. Un resultado de 0 significa que la condición es verdadera en el bar actual, 1 significa que fue verdadera en el bar anterior, y los valores mayores indican eventos más antiguos.

El segundo argumento opcional selecciona apariciones anteriores. BarsSince(cond) y BarsSince(cond, 0) son equivalentes y apuntan a la aparición más reciente; BarsSince(cond, 1) mide la distancia hasta la ocurrencia anterior a esa. Comparar ambas revela el espaciado entre eventos consecutivos, por ejemplo el número de bars entre los dos últimos cruces del oscilador.

Cuando la condición nunca ha sido cierta en ningún punto del historial evaluado, la función devuelve -1. Este valor centinela debe gestionarse de forma explícita, porque -1 pasa comparaciones numéricas como < 10 y puede satisfacer de forma silenciosa filtros de frescura que pretendían exigir un evento real.

Las aplicaciones típicas incluyen filtros de frescura (actuar solo cuando una señal se ha disparado en los últimos n bars), temporizadores de espera (bloquear la reentrada hasta que hayan pasado suficientes bars) y mediciones de duración entre eventos del gráfico.

Ejemplos

Ejemplo 1, Distancia a los dos últimos cruces del RSI (Indicador)

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"

El indicador traza la antigüedad en bars del último cruce del RSI por encima de 50 y del anterior. La separación entre las dos líneas es el espacio entre cruces consecutivos.

Ejemplo 2, Tiempo de espera entre entradas (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 cumple dos funciones aquí: la ocurrencia 1 impone un tiempo de espera entre entradas y la ocurrencia 0 gobierna una salida por tiempo.

Ejemplo 3, Escaneo de breakout reciente (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")

El screener devuelve instrumentos con un breakout reciente de 50 bars. El age >= 0 excluye el centinela -1 para los instrumentos que nunca se activaron.

Errores y trampas habituales

  • -1 significa nunca. Una condición que nunca ha sido verdadera devuelve -1, que se cuela por filtros como BarsSince(cond) < 5. Excluye siempre el valor centinela de forma explícita, por ejemplo con age >= 0.
  • La numeración de ocurrencias empieza en 0. La ocurrencia más reciente es 0, no 1. Pasar 1 mide el segundo evento más reciente, una fuente frecuente de errores de uno en uno.
  • La condición debe ser booleana. Pasar una expresión numérica no es válido. Las comparaciones y las expresiones de cruce sirven; los precios en bruto no.
  • El historial limita la respuesta. Solo se examinan los bars cargados. Un evento más antiguo que el historial cargado se informa como si nunca hubiera ocurrido, por lo que los resultados pueden cambiar cuando se cargan más datos.
  • BarIndex, posición de base cero del bar actual en los datos cargados.
  • IntradayBarIndex, contador de bars que se reinicia cada día de negociación.
  • HighestBars, desplazamiento en bars del valor más alto en un periodo.
  • LowestBars, desplazamiento en bars del valor más bajo en un periodo.
  • CROSSES OVER, verdadero en el bar en el que una serie pasa por encima de otra.
  • CROSSES UNDER, verdadero en el bar en el que una serie pasa por debajo de otra.
  • RSI, oscilador de momentum que suele combinarse con condiciones de BarsSince.
  • Average, media móvil utilizada en condiciones de cruce.