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
BarsSince(Condition)
BarsSince(Condition, Occurrence)Parametri
| Nome | Tipo | Predefinito | Descrizione |
|---|---|---|---|
Condition | booleano | obbligatorio | L'espressione la cui valutazione vera più recente viene misurata. |
Occurrence | intero | 0 | Quale 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)
// 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)
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 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)
// 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 conage >= 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.
Istruzioni correlate
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.