Iscriviti ora
Istruzioni/probuilder · probacktest · proorder · proscreener

BarsSince

BarsSince conta il numero di bar trascorse da quando una condizione è stata vera l'ultima volta in ProBuilder. Monitora quanto tempo fa si è verificato un incrocio o un segnale sul grafico.

Sintassi

probuilder
BarsSince(Condition)
BarsSince(Condition, Occurrence)

Parametri

NomeTipoPredefinitoDescrizione
ConditionbooleanoobbligatorioL'espressione la cui valutazione vera più recente viene misurata.
Occurrenceintero0Quale occorrenza misurare. 0 indica la più recente, 1 quella precedente, e così via.

Come funziona

BarsSince procede all'indietro dalla bar corrente e conta quante bar la separano dalla bar in cui la condizione è stata valutata vera l'ultima volta. Un risultato di 0 significa che la condizione è vera sulla bar corrente, 1 significa che era vera sulla bar precedente, e valori maggiori indicano eventi più vecchi.

Il secondo argomento opzionale seleziona le occorrenze precedenti. BarsSince(cond) e BarsSince(cond, 0) sono equivalenti e puntano all'occorrenza più recente; BarsSince(cond, 1) misura la distanza dall'occorrenza precedente a quella. Confrontando le due si ricava la distanza tra eventi consecutivi, per esempio il numero di bars tra gli ultimi due incroci dell'oscillatore.

Quando la condizione non è mai stata vera in nessun punto dello storico valutato, la funzione restituisce -1. Questo valore sentinella deve essere gestito esplicitamente, perché -1 supera confronti numerici come < 10 e può soddisfare silenziosamente filtri di freschezza che dovevano richiedere un evento reale.

Le applicazioni tipiche includono filtri di freschezza (agire solo quando un segnale è scattato nelle ultime n bar), timer di attesa (bloccare il rientro finché non sono passate abbastanza bar) e misurazioni di durata tra eventi del grafico.

Esempi

Esempio 1, Distanza dagli ultimi due incroci dell'RSI (Indicatore)

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"

L'indicatore traccia l'età in bar dell'ultimo incrocio dell'RSI sopra 50 e di quello precedente. Lo scarto tra le due linee è la distanza tra incroci consecutivi.

Esempio 2, Periodo di attesa tra gli ingressi (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 svolge qui due ruoli: l'occorrenza 1 impone un periodo di attesa tra gli ingressi, e l'occorrenza 0 guida un'uscita basata sul tempo.

Esempio 3, Scansione di breakout recenti (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")

Lo screener restituisce gli strumenti con un breakout recente a 50 bars. Il age >= 0 la clausola esclude il valore sentinella -1 per gli strumenti che non si sono mai attivati.

Errori e insidie comuni

  • -1 significa mai. Una condizione che non è mai stata vera restituisce -1, che sfugge a filtri come BarsSince(cond) < 5. Escludi sempre il valore sentinella in modo esplicito, per esempio con age >= 0.
  • La numerazione delle occorrenze parte da 0. L'occorrenza più recente è 0, non 1. Passare 1 misura il penultimo evento, una frequente fonte di errori di uno.
  • La condizione deve essere booleana. Passare un'espressione numerica non è valido. Le comparazioni e le espressioni di incrocio sono ammesse; i prezzi grezzi no.
  • La storia limita la risposta. Vengono esaminate solo le bar caricate. Un evento più vecchio della storia caricata viene riportato come mai avvenuto, quindi i risultati possono cambiare quando vengono caricati più dati.
  • BarIndex, posizione a base zero della bar corrente nei dati caricati.
  • IntradayBarIndex, contatore di bar che si azzera ogni giornata di trading.
  • HighestBars, offset in bar del valore più alto su un periodo.
  • LowestBars, offset in bar del valore più basso su un periodo.
  • CROSSES OVER, vero sulla bar in cui una serie passa sopra un'altra.
  • CROSSES UNDER, vero sulla bar in cui una serie passa sotto un'altra.
  • RSI, oscillatore di momentum comunemente abbinato alle condizioni BarsSince.
  • Average, media mobile usata nelle condizioni di incrocio.