Sunday, May 31, 2015

Timeframe daily su 10 anni

Funzionalità ProRealtime
by Marcello Belguardi

In ProRealtime è possibile visualizzare i grafici a 5/10 anni con timeframe daily (per poter per esempio backtestare i trading systems su periodi estesi) ma la funzionalità non è immediata. Appena infatti si seleziona il periodo ad esempio appunto 10 anni come in figura...




... gli unici timeframe più brevi disponibili sono quella mensile e settimanale. Se si seleziona quella daily si perde la visualizzazione sul periodo.



L'unico modo è selezionare il periodo in punti, per esempio 10000 punti come in figura, e poi lasciare daily come timeframe. Allora funziona.


 Se si vuole si può zoomare un'area e lavorare su quella. Esempio:



Si clicca sul grafico e si seleziona l'area.



Per tornare alla visualizzazione precedente la zoommata basta selezionare l'icona di reset visualizzazione in basso a sinistra.



IMA (Ideal Moving Average)

Programmazione ProRealtime
by Marcello Belguardi

La IMA (Ideal Moving Average) è una media con lag (ritardo) nullo e smoothing (lisciatura) perfetto. Sovrapposta al grafico e calcolata la rispettiva slope (pendenza) si riescono ad identificare con prontezza i turning point (i punti di svolta), i momenti cioè in cui i downtrend lasciano la via agli uptrend e viceversa.

Ideal Moving Average - Piattaforma Prorealtime


Si possono utilizzare i cross tra due IMA o tra una IMA ed il prezzo per individuare i punti di ingresso ed uscita da un trade. Con loopback (quante barre includere nell'indicatore) più ampi può funzionare come supporto o resistenza osservandone la posizione relativa ai prezzi. (la classica prezzo > media a 200 periodi per accertare un trend al rialzo primario).

Esiste un compromesso tra la smoothness di una media mobile ed il suo lag e numerosi sforzi sono stati fatti per avere il meglio delle due caratteristiche nello stesso indicatore.
Noi vorremmo utilizzare la media come filtro dei movimenti impulsivi dei prezzi per estrarne il trend di fondo eliminando cioè le alte frequenze, per così dire, il rumore. E vorremmo che oltre a questo andamento armonico la media non avesse ritardi. Cerchiamo un indicatore che dia il numero minimo di falsi segnali rimanendo liberi di selezionarne il periodo, il loopback.

Per questo motivo la IMA è una illusione, una provocazione, non esiste, proprio per via di questo tradeoff tra lag e smoothing; potremmo però tentare di tracciarla, a mano, su un grafico.
Se agganciassimo un ipotetico trading system ai relativi segnali probabilmente avremmo performance fenomenali.

Come ho fatto allora a raffigurarla con ProRealtime nella figura precedente se la IMA non esiste? Facile: con una media mobile triangolare con lookback 8 e poi centrata, cioè fatta scorrere indietro di 3 barre. Per cui l'indicatore non è tracciato sulle ultime 3 barre. Inoltre ho basato la media non sul close ma sul total price (O+H+L+C)/4.




ProRealtime, così come le altre piattaforme, chiede di accontentarci e offre diversi tipi di moving average: Simple, Exponential, Weighted, Wilder's, Triangular, End Point, Time Series, Zero Lag Exponential, Hull.

Inoltre abbiamo nativamente tra gli indicatori la DEMA (Double Smoothing) e la TEMA (Triple Smoothing).



John Ehlers, noto autore ed analista americano, ha studiato per decenni il problema ed ha elaborato  il Supersmoother concludendo che questa è la media definitiva, la migliore.

Vorrei in un prossimo post verificare quale di queste medie si avvicina, senza compromessi, alla IMA. Se ha ragione John Ehlers perchè utilizzare, d'ora in poi, le altre medie?


Saturday, May 30, 2015

Equity Indicator

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. 

Nota: Questo è il TS completo di riferimento, incrocio di medie mobili. S & L da ottimizzare da 3 a 31

// 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



Friday, May 29, 2015

Non solo ingressi market

Programmazione ProRealtime
by Marcello Belguardi

Ci sono due principali classi alle quali sembrano appartenere i trading systems:



  • Trend following, che comprende anche la sottoclasse dei breakout.
  • Reversal o controtrend, mean reverting, contrarian: tutti termini per indicare lo stesso concetto.

Analizzandole, le due tipologie di setup sono piuttosto differenti perchè:


  • il segnale di un sistema trend following indica una alta probabilità che la corrente direzione del trend persista. Il segnale arriva infatti dopo un turning point.
  • il segnale di un sistema reversal indica una alta probabilità che la corrente direzione del trend non persista e si esaurisca in fretta. Il segnale arriva infatti prima di un turning point.

Resta inteso ovviamente che quando si è in posizione il trade avrà successo se e solo se dal punto di ingresso al punto di uscita dalla posizione esisterà un trend composto da un numero sufficiente di barre che assecondi la direzione del trade long o short, sia che si sia entrati poco dopo l’inizio del trend (trend following) o prima dell’inizio del trend (reversal).

Senza addentrarci qui di quali specifiche soluzioni logiche si avvalgano le due differenti categorie di sistemi si può dire che oltre agli specifici setup esistono precise tipologie di ingressi o entry che possono confermare o non confermare i setup.


Oltre agli ingressi di tipo market, esistono infatti gli ingressi di tipo stop e limit. Vediamoli:


L’ordine di ingresso di tipo stop viene eseguito solo se almeno un prezzo sulla barra che segue l’ordine supererà un determinato ammontare in $ o euro (per posizioni long) o ne sia inferiore (per posizioni short).


L’ordine di ingresso di tipo limit viene eseguito solo se un prezzo sulla barra che segue l’ordine rimarrà inferiore ad un determinato ammontare (per posizioni long) o superiore ad esso (per posizione short).


Per esempio un sistema breakout che preveda un superamento di un certo prezzo affinchè si entri in posizione può trarre beneficio da un ordine di tipo stop.


Se si decide per esempio in un contesto daily che si entrerà in posizione long solo se l’apertura di domani è maggiore della chiusura di oggi (o del massimo di oggi), sarà sufficiente impostare un ordine stop con il valore della chiusura (o del massimo) di oggi.


Fortunatamente in ProRealtime questo meccanismo è implementabile perchè esiste un apposito comando. 


Analogamente, in un sistema reversal, per coadiuvare l’idea di anticipare il trend che verrà, si può pensare di entrare in posizione solo se il prezzo di domani sarà inferiore al prezzo di oggi, per esempio inferiore alla chiusura o al minimo di oggi. Questo è implementabile con Prorealtime perchè esiste l’apposito comando.


Iniziamo a vedere come funziona il normale ordine market. In questo caso non ci sono particolari condizioni sulla entry. Il nostro setup è un segnale scattato l’11 di marzo in chiusura di barra che dice di entrare il 12 di marzo in apertura a mercato.

Piattaforma ProRealtime

Il codice per la simulazione equivalente è il seguente:

data = Date

goLong = (data = 20150311)


IF  goLong THEN

BUY 1 CONTRACTS AT MARKET
ENDIF

graph goLong as "Long"



Questa volta invece, come anticipato, si vuole seguire una strategia trend following o breakout. Dato il segnale in chiusura di barra l’11 Marzo vorrei entrare sulla barra successiva solo se il prezzo supererà il massimo di oggi. Utilizzo un ordine stop con il seguente effetto:


Piattaforma ProRealtime

Notare nella figura il triangolino con il livello di ingresso. La simulazione ha il seguente codice:

data = Date

goLong = (data = 20150311)


if  goLong then

Buy 1 contracts at high stop
endif

graph goLong as "Long"



Terzo caso: la strategia è reversal e si vuole insistere nell’andare controtrend, per cui dato il segnale il 5 Marzo chiederò al sistema di entrare il 6 Marzo solo se il prezzo scenderà sotto il minimo del 5 marzo, con un ordine di tipo limit. Questo l’effetto:


Piattaforma ProRealtime


E questo il codice equivalente:

data = Date

goLong = (data = 20150305)


if  goLong then

Buy 1 contracts at low limit
endif

graph goLong as "Long"


Gli ordini di tipo stop e limit possono essere anche interpretati come filtri, perchè se il movimento sottostante non è confermato anche dalla entry non si entrerà, evitando così dannosi falsi segnali.

Per ora è tutto. Buon trading!