Programmazione ProRealtime
by Marcello Belguardi
Qualche tempo fa ho codificato un indicatore che, date le regole di un generico trading system, produce in output la rispettiva equity. Lo riporto qui perchè credo sia un utile esercizio di programmazione e perchè dalla curva di equity si possono estrarre preziose informazioni. (Con la nuova versione di ProRealtime e l'introduzione delle "backtest variables" è molto più facile ed immediato produrre questo output come vedremo successivamente).
Per calcolare la curva dell’equity correttamente, dobbiamo prima osservare come in un trading system le condizioni di acquisto o vendita, cioè i decisori c1 e c2, funzionano in ProRealtime.
Ecco la sezione di codice del noto TS con incrocio di SMA (Simple Moving Average).
c1 = shortMA >= longMA
c2 = shortMA < longMA
In backtesting lo script viene ri-eseguito per ogni barra in chiusura.
Ad ogni barra quindi si assegnano c1 e c2 che comandano la posizione che verrà presa all’indomani.
La posizione corrente, non quella di domani, è indicata da c1[1] e c2[1], cioè quella determinata alla barra precedente. Questa ci è utile per calcolare l’equity, non c1 e c2 che indicano la posizione futura.
Se alla barra corrente c’è stato un ordine di acquisto o vendita, il gap dato dalla differenza dalla chiusura di ieri all’apertura di oggi ha il segno deciso due barre fa, che corrisponde cioè a c1[2] e c2[2].
Quindi l’equity in chiusura della barra corrente si calcola così: l’equity della barra corrente più la differenza tra la chiusura di ieri e l’apertura di oggi. I segni degli addendi dipendono dalle posizioni long o short determinate nelle barre precedenti.
…per cui questo è lo script dell'indicatore per calcolare l’equity.
// SMA Cross (Eq)
// S,L: 3 to 31
shortMA = Average[S](close)
longMA = Average[L](close)
c1 = shortMA >= longMA
c2 = shortMA < longMA
if barindex > 0 then
if c1[1] then
thisBarGain = close - open
endif
if c2[1] then
thisBarGain = -(close - open)
endif
if c1[2] then
gapGain = open - close[1]
endif
if c2[2] then
gapGain = - (open - close[1])
endif
EQ = EQ[1] + thisBarGain + gapGain
endif
return EQ AS "SMA Cross (Eq)"
Abbiamo realizzato un indicatore che mima esattamente la curva dell’equity calcolata in backtesting da ProRealtime. (Naturalmente dobbiamo sostituire le variabili S ed L calcolate dall’ottimizzatore per avere la stessa curva). Esempio:
Facciamo un altro esperimento: utilizziamo ora la pendenza della regressione lineare applicata alla curva dell’equity come rivelatore dei periodi nei quali il trading system guadagna o perde.
Se costruiamo un indicatore binario che indichi quando l’equity sale (1) e quando invece scende (0) vediamo l’effetto graficamente:
Ecco il risultato aggiunto sul grafico dell’esempio precedente:
Ho aggiunto l’oscillatore e per chiarezza anche la regressione linerare sulla curva dell’equity (può essere aggiunta graficamente mediante la finestra a tendina e aggiungendo l’indicatore Linear Regression di ProRealtime).
Cosa notiamo: l’indicatore “Equity Slope Oscillator” è 0 quando l’equity scende ed 1 quando l’equity sale; ci dà un informazione importante su come si sta comportando il trading system.
by Marcello Belguardi
Qualche tempo fa ho codificato un indicatore che, date le regole di un generico trading system, produce in output la rispettiva equity. Lo riporto qui perchè credo sia un utile esercizio di programmazione e perchè dalla curva di equity si possono estrarre preziose informazioni. (Con la nuova versione di ProRealtime e l'introduzione delle "backtest variables" è molto più facile ed immediato produrre questo output come vedremo successivamente).
Per calcolare la curva dell’equity correttamente, dobbiamo prima osservare come in un trading system le condizioni di acquisto o vendita, cioè i decisori c1 e c2, funzionano in ProRealtime.
Ecco la sezione di codice del noto TS con incrocio di SMA (Simple Moving Average).
c1 = shortMA >= longMA
c2 = shortMA < longMA
In backtesting lo script viene ri-eseguito per ogni barra in chiusura.
Ad ogni barra quindi si assegnano c1 e c2 che comandano la posizione che verrà presa all’indomani.
La posizione corrente, non quella di domani, è indicata da c1[1] e c2[1], cioè quella determinata alla barra precedente. Questa ci è utile per calcolare l’equity, non c1 e c2 che indicano la posizione futura.
Se alla barra corrente c’è stato un ordine di acquisto o vendita, il gap dato dalla differenza dalla chiusura di ieri all’apertura di oggi ha il segno deciso due barre fa, che corrisponde cioè a c1[2] e c2[2].
Quindi l’equity in chiusura della barra corrente si calcola così: l’equity della barra corrente più la differenza tra la chiusura di ieri e l’apertura di oggi. I segni degli addendi dipendono dalle posizioni long o short determinate nelle barre precedenti.
…per cui questo è lo script dell'indicatore per calcolare l’equity.
// SMA Cross (Eq)
// S,L: 3 to 31
shortMA = Average[S](close)
longMA = Average[L](close)
c1 = shortMA >= longMA
c2 = shortMA < longMA
if barindex > 0 then
if c1[1] then
thisBarGain = close - open
endif
if c2[1] then
thisBarGain = -(close - open)
endif
if c1[2] then
gapGain = open - close[1]
endif
if c2[2] then
gapGain = - (open - close[1])
endif
EQ = EQ[1] + thisBarGain + gapGain
endif
return EQ AS "SMA Cross (Eq)"
Abbiamo realizzato un indicatore che mima esattamente la curva dell’equity calcolata in backtesting da ProRealtime. (Naturalmente dobbiamo sostituire le variabili S ed L calcolate dall’ottimizzatore per avere la stessa curva). Esempio:
Facciamo un altro esperimento: utilizziamo ora la pendenza della regressione lineare applicata alla curva dell’equity come rivelatore dei periodi nei quali il trading system guadagna o perde.
Se costruiamo un indicatore binario che indichi quando l’equity sale (1) e quando invece scende (0) vediamo l’effetto graficamente:
Ecco il risultato aggiunto sul grafico dell’esempio precedente:
Ho aggiunto l’oscillatore e per chiarezza anche la regressione linerare sulla curva dell’equity (può essere aggiunta graficamente mediante la finestra a tendina e aggiungendo l’indicatore Linear Regression di ProRealtime).
Cosa notiamo: l’indicatore “Equity Slope Oscillator” è 0 quando l’equity scende ed 1 quando l’equity sale; ci dà un informazione importante su come si sta comportando il trading system.
Nota: Questo è il TS completo di riferimento, incrocio di medie mobili. S & L da ottimizzare da 3 a 31
shortMA = Average[S](close)
c1 = shortMA >= longMA
// SMA Cross Trading System
// S,L: 3 to 31
shortMA = Average[S](close)
longMA = Average[L](close)
c1 = shortMA >= longMA
c2 = shortMA < longMA
if c1 and not longonmarket then
buy 10000 cash at market
endif
if c2 and not shortonmarket then
sellshort 10000 cash at market
endif