TRADEINDEX
TRADEINDEX(N) restituisce l'indice della barra in cui è stata eseguita un'operazione passata in ProBacktest e ProOrder, permettendo alle strategie di contare le barre dall'N-esimo ingresso più recente.
Sintassi
TRADEINDEX(N)Parametri
| Nome | Tipo | Predefinito | Descrizione |
|---|---|---|---|
N | intero | 1 | Numero dell'operazione contato all'indietro nel tempo. 1 è l'operazione più recente, 2 quella precedente, e così via. |
Come funziona
Ogni ordine eseguito viene registrato insieme all'indice del bar su cui è stato eseguito. TRADEINDEX(N) cerca quell'indice per l'N-esima operazione più recente. Il valore è un indice di bar assoluto, la stessa numerazione che BARINDEX usa per la bar corrente, non un conteggio delle bar trascorse.
La domanda sul tempo trascorso si risolve quindi con una sottrazione: BARINDEX - TRADEINDEX(1) è il numero di bar trascorsi dall'ultima esecuzione. Questo guida la gestione delle operazioni basata sul tempo, per esempio uscire da una posizione stagnante dopo un numero fisso di bar, imporre un tempo di attesa tra gli ingressi, o consentire il piramidaggio solo quando l'esecuzione precedente è invecchiata.
Con DEFPARAM CumulateOrders = true, ogni ingresso parziale conta come operazione a sé, quindi TRADEINDEX(1) si riferisce all'ultima aggiunta, non all'ingresso originale della posizione accumulata. TRADEPRICE(N) segue la stessa numerazione e restituisce il prezzo di esecuzione invece dell'indice del bar, le due istruzioni sono spesso usate insieme.
Esempi
Esempio 1, Stop temporale dopo cinque barre nell'operazione (ProOrder)
// Close everything once 5 bars have passed since the last execution
IF onmarket AND BARINDEX - TRADEINDEX(1) >= 5 THEN
SELL AT MARKET
EXITSHORT AT MARKET
ENDIFQualunque sia la direzione della posizione, viene chiusa quando sono trascorse cinque barre dall'ultima esecuzione. Questo è l'esempio di riferimento per l'istruzione.
Esempio 2, Piramidazione vincolata al numero di barre e al progresso del prezzo (ProBacktest)
DEFPARAM CumulateOrders = true
myMACD = MACD[12,26,9](close)
long = myMACD crosses over 0
exit = myMACD crosses under 0
// Initial entry
IF NOT LongOnMarket AND long THEN
BUY 1 CONTRACTS AT MARKET
ENDIF
IF LongOnMarket AND exit THEN
SELL AT MARKET
ENDIF
// Add only if 5 bars have passed and price is 10 points beyond the last fill
IF BARINDEX - TRADEINDEX(1) > 5 AND Close - TRADEPRICE(1) > 10 AND LongOnMarket THEN
BUY 1 CONTRACTS AT MARKET
ENDIF
// One trailing stop protects the whole accumulated position
SET STOP %TRAILING 1.5Contratti aggiuntivi vengono acquistati solo quando l'ultima esecuzione ha almeno cinque barre e il prezzo è avanzato di dieci punti oltre di essa, un filtro di pyramiding standard che combina TRADEINDEX con TRADEPRICE.
Esempio 3, Pausa tra ingressi consecutivi (ProOrder)
// No new trade within 20 bars of the previous execution
signal = close crosses over average[20](close)
coolingDown = BARINDEX - TRADEINDEX(1) < 20
IF NOT onmarket AND signal AND NOT coolingDown THEN
BUY 1 CONTRACT AT MARKET
SET STOP LOSS 25
ENDIFDopo ogni esecuzione, la strategia rifiuta nuovi ingressi per 20 barre, il che evita un rapido susseguirsi di rientri in condizioni erratiche.
Errori e insidie comuni
- Indice, non età.
TRADEINDEX(1)restituisce un indice di bar, non il numero di bar dall'operazione. Confrontarlo direttamente con una piccola costante non ha senso, sottrailo sempre daBARINDEX. - Numerazione inversa. N conta all'indietro, 1 è l'operazione più recente. Supporre che 1 indichi la prima operazione della sessione inverte la logica senza segnalarlo.
- Nessuna operazione ancora. Sui primi bar di un backtest, prima di qualsiasi esecuzione, il valore non è significativo. Proteggi le condizioni basate sul tempo con
onmarketo un flag che cambia dopo il primo ingresso. - CumulateOrders cambia il significato. Con posizioni accumulate ogni riempimento parziale è un'operazione, quindi
TRADEINDEX(1)segue l'ultima aggiunta anziché l'ingresso originale della posizione. Usa una variabile salvata al primo ingresso se la barra originale è importante.
Istruzioni correlate
BarIndex, indice della barra corrente, il riferimento per il calcolo delle barre trascorse.TRADEPRICE, prezzo di esecuzione dell'N-esima operazione più recente.POSITIONPRICE, prezzo medio della posizione aperta.ONMARKET, vero mentre una qualsiasi posizione è aperta.CumulateOrders, DEFPARAM che fa contare ogni ingresso parziale come un'operazione.BarsSince, conta le barre da quando una condizione è stata vera.COUNTOFPOSITION, dimensione della posizione attualmente aperta.LONGONMARKET, vero mentre una posizione long è aperta.