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
BarsSince(Condition)
BarsSince(Condition, Occurrence)Parámetros
| Nombre | Tipo | Por defecto | Descripción |
|---|---|---|---|
Condition | booleano | obligatorio | La expresión cuya evaluación verdadera más reciente se mide. |
Occurrence | entero | 0 | Qué 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)
// 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)
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 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)
// 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 conage >= 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.
Instrucciones relacionadas
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.