Misurare le performance di una strategia – Parte 1

Una domanda molto importante da porsi nella creazione di un Trading System è quella della misura delle performance della strategia che si sta costruendo. Di solito questa misura viene valutata guardando l’Equity Line, e di solito è una valutazione che ha un certo margine di soggettività.

Nel Trading Algoritmico, avendo a che fare con algoritmi e calcoli, si cerca sempre di diminuire o al limite eliminare la componente soggettiva.

La valutazione delle performance viene dunque ottenuta dai vari reports forniti da tutte le piattaforme che effettuano backtesting, e si utilizzano opportuni indicatori in modo da avere un’indicazione rapida e il più possibile completa del raggiungimento delle prestazioni desiderate.

In più, se si sta creando un Trading System automatico, e si fanno un certo numero di backtest per trovare i migliori parametri della strategia, occorre avere un risultato quantitativo, cioè un numero, tale da poter poter prendere la migliore decisione, magari farla prendere direttamente al computer.

Nella mia ricerca ho trovato vari modi per raggiungere questo scopo. Ne elencherò alcuni, presentando pro e contro, dando, alla fine, il codice in R per calcolare quello che attualmente ritengo sia l’indicatore più affidabile.

Cominciamo!!!

L’indicatore più intuitivo, e anche ingenuo, è quello dato dal Net Profit, cioè il rendimento finale. In pratica, da una serie di test si sceglie quello che, riferito all’ultima data, abbia dato il valore della equity più alto degli altri.

Un altro indicatore, altrettanto ingenuo e anche più pericoloso, è quello del Max Profit, cioè il rendimento massimo ottenuto nel periodo. Questo indicatore si basa sul massimo della equity, ottenuto in qualsiasi data, quindi non necessariamente ngli ultimi tempi.

Che cosa rende questi due indicatori così poco raccomandabili?

La prima cosa di cui questi indicatori non tengono conto sono le perdite che si potrebbero avere. Potrebbero essere così elevate che il capitale potrebbe non bastare, oppure, cosa che capita molto più spesso di quanto non si sospetti, come ho detto in un mio precedente post, potrebbero essere così elevate da non essere sopportate psicologicamente, facendo saltare tutta la strategia o, nel migliore dei casi, facendo attraversare periodi di forte sofferenza.

Oltretutto, non ci danno nessuna informazione sulla regolarità della equity.

Inoltre, il secondo indicatore può essere fuorviante per un altro motivo: il fatto che si sia raggiunto un determinato rendimento non vuol dire che lo si raggiunga di nuovo in futuro. Quindi, il fatto che l’ultimo rendimento sia più basso di quello massimo raggiunto in precedenza, potrebbe voler significare anche che la strategia non sia più efficace già adesso.

Un indicatore appena migliore può essere quello del massimo Drowdown. Ad esempio, in una serie di backtest si seleziona il test che dia la più bassa perdita massima.

Sebbene questo indicatore sia più protettivo dei precedenti nei confronti del capitale, presenta l’inconveniente di non fornire nessuna informazione su quanto guadagni la strategia. In altre parole, potremmo certamente avere perdite contenute, ma anche guadagni altrettanto contenuti! Cioè ritrovarci alla fine una serie di piccole perdite e piccoli guadagni e quindi aver perso solo tempo nel tradare. Ricordiamo che lo scopo del trading non è solo non perdere, ma anche guadagnare ragionevomente bene.

Inoltre non abbiamo ancora indicazioni sulla regolarità della equity line.

I reports di “blotter” riportano un indicatore che mette insieme i punti di forza di questi due tipi di indicatori: il rapporto Net Profit / Max Drowdown. Questo indicatore ci dà una misura sia di quanto si guadagni alla fine, sia fino a quanto si sia ridotto il capitale nel periodo preso in considerazione. E’ un indicatore molto migliore dei precedenti, tuttavia ancora non tiene abbastanza conto della regolarità della equity.

Un altro indicatore utile lo si ottiene dai reports delle varie piattaforme di Trading Algoritmico (tipo Trader Station Metastock, NinjaTrader, ecc., e anche “blotter”): il Profit Factor, che è, per chi è nuovo dell’ambiente, il rapporto tra i profitti totali e le perdite totali. Questo è un indicatore molto utilizzato, infatti riesce a tener conto di tutte le perdite e di tutti i profitti, quindi, in qualche modo, riesce in una certa misura a tener conto dell’andamento dell’equity.

In tanti Trading System questo indicatore può essere più che sufficiente per misurare le performance di una strategia. Tuttavia ancora dà indicazioni non sempre sufficienti su quanto possa essere irregolare l’equity line. In certi casi (piuttosto rari in verità) potrebbe non essere possibile automatizzare completamente la scelta e occorre guardare manualmente l’equity.

Per quanto riguarda l’ultimo indicatore che voglio presentare, occorre fare una premessa. Per non allungare troppo la lettura, preferisco riportare il tutto nella prossima parte, dove fornirò anche il codice R per calcolarlo.

Alla prossima!!!

Conoscenze utili

Questo post è poco tecnico, tuttavia, dalla mia esperienza, credo che valga la pena tenerlo in considerazione, altrimenti si rischia di vanificare del lavoro ben fatto. Teniamo presente che, anche se facciamo gestire il trading a un computer, alla fine è sempre l’essere umano a trarne perdita o profitto, e dipende da come esso si comporta a raggiungere l’una o l’altra.
E’ noto che nel Trading Algoritmico occorre avere conoscenze di vario genere, e possiamo suddividere tali conoscenze in due grandi categorie:

  1. Competenze tecniche
  2. Competenze personali

La prima categoria comprende principalmente le seguenti discipline:

  • Analisi Tecnica
  • Programmazione
  • Statistica
  • Matematica

In una certa misura, anche l’Analisi Fondamentale e la Gestione del Portafoglio possono essere utili in varie circostanze.
E’ abbastanza immediato capire perchè le discipline messe nell’elenco sono importanti per costruire strategie: l’Analisi Tecnica ci porta la conoscenza del mercato, vari indicatori su come potrebbe reagire o meno, insomma è la base da cui si parte per costruire la strategia.
La Programmazione ci serve per implementare le nostre strategie nel computer, poterne testare l’efficacia e la robustezza, renderle anche automatiche.
Statistica e Matematica servono per misurare le prestazioni delle strategie e ci danno gli strumenti per capire se una strategia è quello che cerchiamo o no. Fortunatamente, per quanto riguarda queste ultime discipline, non serve una conoscenza eccessivamente approfondita, ma, com’è intuibile, più si conosce e meglio è.
Non ho messo Analisi Fondamentale e Gestione del Portafoglio tra le discipline importanti per il Trading Algoritmico perchè, parlando con traders che hanno successo, mi hanno detto che non le utilizzano. Certo anche qui vale il discorso di prima: più si conosce e più scelte si hanno nel creare strategie vincenti.
Passiamo ora alle competenze personali, possiamo riassumerle in una sola:

  • Consapevolezza di sè

Può sembrare qualcosa che non c’entri nulla con il discorso del Trading Algoritmico, ma ho visto traders anche famosi ammettere di non aver retto psicologicamente al drow down momentaneo del loro Trading System (peraltro ben al di sotto dei limiti di quello previsto dal Trading System stesso), di aver interrotto il programma ed essere usciti dalla posizione portandosi la perdita. Se avessero avuto fiducia nel loro stesso Trading System avrebbero non solo recuperato il drow down in breve tempo, ma avrebbero anche guadagnato. Questi fatti la dicono lunga sull’importanza di conoscere sè stessi, sapere i propri limiti e quanto si riesce psicologicamente a reggere alla perdita o al guadagno, senza cedere a paura o avidità, perchè entrambe sono cose che si pagano.
Devo dire, comunque, che ammiro l’onestà dei traders in questione per averlo ammesso.
A questo punto la domanda potrebbe essere: come raggiungere una sufficiente consapevolezza di se senza doverlo scoprire sul campo? Qui non c’è una risposta universale, perchè ogni persona è diversa dalle altre. Posso però consigliare di fare simulazioni di perdite di varia entità e confrontarsi con un mentore (che può essere un trader esperto, un coach, un insegnante) per cercare di provare emozioni legate alla perdita nel modo più realistico possibile, e trarne le considerazioni personali. Certo, finchè non si è in reale non sarà mai esattamente la stessa cosa, ma in questo modo si limiterà la perdita anche considerevolmente.
Perchè ho voluto porre l’accento su questi fatti? Perchè non accada che, dopo aver investito tempo e lavoro, si butti tutto via per un disagio psicologico.
Bisogna che sia chiaro che, se si crea un Trading System, lo si sia collaudato e se ne sia verificata la robustezza, bisogna AVERE FIDUCIA che funzioni, anche se ci si trovi in un periodo di forte perdita.
Per questo mese finiamo qui, ci vediamo alla prossima volta.

Test in R: “Faber Portfolio” – Parte 2

Continuiamo la discussione cominciata nella Prima parte.

La sezione seguente

# Adjust prices for splits/dividends (thanks pg)
#IEF = adjustOHLC(IEF)
#SPY = adjustOHLC(SPY)

anche se commentata, utilizza i dati modificati a causa di splits e dividendi. Questa function è da utilizzarsi se si selezionano titoli azionari. Per gli indici, quelli usati nell’esempio, non è necessaria, dato che non subiscono nessuna di queste due operazioni.

Vediamo adesso una function molto utile degli oggetti “xts”

# Convert data to monthly frequency (to.weekly() needs drop.time=FALSE)
IEF = to.monthly(IEF, indexAt=’endof’
SPY = to.monthly(SPY, indexAt=’endof’)

La function “to.monthly()” converte il time-frame dei dati. Nel caso qui presentato i prezzi vengono convertiti da giornalieri a mensili, presentando così, per ogni barra, l’apertura, il max, il min e la chiusura di ogni mese. Nel caso le esigenze lo richiedano, è possibile passare a time-frames diversi, tipo settimanali o annuali. Non è possibile, ovviamente, scendere da periodi più lunghi a quelli più brevi (ad esempio da mesi a giorni).

Nella sezione seguente vedremo l’uso di indicatori tecnici, contenuti nel package “TTR”

# Set up indicators with TTR
print(“Setting up indicators”)
IEF$SMA = SMA(Cl(IEF), 10)
SPY$SMA = SMA(Cl(SPY), 10)

In pratica, abbiamo calcolato le medie mobili a 10 periodi dei prezzi di chiusura dei due titoli.

Vediamo qui anche un’altra caratteristica delle strutture dati di R. Il comando:

SPY$SMA = SMA(Cl(SPY), 10)

aggiunge all’oggetto “SPY” un’ulteriore serie di dati, quella calcolata dalla media mobile. Essendo entrambi oggetti “xts”, la corrispondenza tra prezzi e valore della media viene gestita automaticamente tramite il valore delle date.

#Set up a portfolio object and an account object in blotter
initPortf(name=’default’, symbols=symbols, initDate=initDate)
initAcct(name=’default’, portfolios=’default’, initDate=initDate, initEq=initEq)
verbose = TRUE

Qui cominciamo a vedere l’uso di due oggetti di “blotter”. Il primo è
“portfolio”, un oggetto che tiene traccia dei titoli scelti. Portfolio può
tracciare l’andamento di ogni titolo contenuto periodo per periodo.

Il secondo è “account”, che può contenere uno o più oggetti portfolio, e che
tiene traccia di tutti i titoli e i portfolio nel complesso sempre periodo
per periodo.

A questo punto entriamo nel vivo della simulazione.

#Create trades
for( i in 10:NROW(SPY) ) {
  CurrentDate=time(SPY)[i]
equity = getEndEq(Account=’default’, CurrentDate)
for( symbol in symbols ) {
sym = get(symbol)
ClosePrice = as.numeric(Cl(sym[i,]))
Posn = getPosQty(Portfolio=’default’, Symbol=symbol,Date=CurrentDate)
UnitSize = as.numeric(trunc((equity/NROW(symbols))/ClosePrice))
# Position Entry (assume fill at close)
if( Posn == 0 ) {
# No position, so test to initiate Long position
if( Cl(sym[i,]) > sym[i,’SMA’] ) {
# Store trade with blotter
addTxn(‘default’, Symbol=symbol, TxnDate=CurrentDate, TxnPrice=ClosePrice, TxnQty=UnitSize, TxnFees=0, verbose=verbose)
}
} else {
# Have a position, so check exit
if( Cl(sym[i,]) < sym[i,’SMA’] ) {
# Store trade with blotter
addTxn(Portfolio=’default’, Symbol=symbol, TxnDate=CurrentDate, TxnPrice=ClosePrice, TxnQty=-Posn, TxnFees=0, verbose=verbose)
}
}
} # End symbols loop
# Calculate P&L and resulting equity with blotter
updatePortf(Portfolio=’default’, Dates=CurrentDate)
updateAcct(name=’default’, Dates=CurrentDate)
updateEndEq(Account=’default’, Dates=CurrentDate)
} # End dates loop

Qui ci sono due cicli for, il primo effettua il ciclo sul periodo, cioè mese
per mese, il secondo fa una verifica sulle condizioni simbolo per simbolo e,
in caso di verifica, effettua le transazioni. Queste vengono registrate con
la function “addTxn()” nel portfolio. Alla fine, per ogni periodo, vengono
chiamate tre function per aggiornare il portfolio, l’account e l’equity
finale, cioè “updatePortf()”, “updateAcct()” e “updateEndEq()”.

La parte finale:

# Buy and Hold cumulative equity
buyhold = exp(cumsum( ( 0.5*ROC(Cl(IEF)) + 0.5*ROC(Cl(SPY)) )[-1] ))
# Final values
cat(‘Tactical Asset Allocation Return: ‘,(getEndEq(Account=’default’,
Date=CurrentDate)-initEq)/initEq,’\n’)
cat(‘Buy and Hold Return: ‘,tail(buyhold,1)-1,’\n’)
# Plot Strategy Summary
png(filename=”20091118_blotter_strategy.png”, 720, 720)
#charts.PerformanceSummary(ROC(getAccount(‘default’)$TOTAL$End.Eq)[-1],main=”Tactical
Asset Allocation”)
charts.PerformanceSummary(ROC(getAccount(‘default’)$summary$End.Eq)[-1],main=”Tactical
Asset Allocation”)
dev.off()
# Plot Buy and Hold Summary
png(filename=”20091118_blotter_buyhold.png”, 720, 720)
charts.PerformanceSummary(ROC(buyhold)[-1],main=”Buy & Hold”)
dev.off()

calcola la performance della strategia “buy and hold” e disegna i grafici.
Il disegno dei grafici avviene su immagini png, salvate nella cartella di
lavoro di R.

Bene, siamo alla fine di questa spiegazione. Spero che sia stata utile per
mostrare le grandi potenzialità di R.

A presto.

L’ambiente di calcolo “R”

Rieccoci di nuovo.

In questo post presenterò brevemente il software principale che utilizzo nei test delle mie strategie di Trading Algoritmico: R.

Ho scelto questo software per un insieme di fattori, non ultimo il fatto che me lo ha consigliato un trader algoritmico con esperienza sul floor.

Ovviamente come ogni software ha i suoi pro e contro.

Contro:

  • E’ Open Source. Si, già posso sentire le critiche dei seguaci di questa filosofia. Tuttavia è innegabile che i software di questo tipo vengono forniti così come sono, senza alcuna garanzia di essere esenti da bug di calcolo. L’utilizzo è quindi a rischio dell’utente e i produttori non si assumono nessuna responsabilità su eventuali errori generati dal software. In più manca un’assistenza ufficiale.
  • Poco user friendly. R usa un’interfaccia utente a caratteri, in cui occorre scrivere il comando da eseguire. Per chi non ha mai utilizzato tali interfacce può essere molto frustrante all’inizio. Tuttavia si trovano su internet delle interfacce grafiche free che “ingentiliscono” l’uso di R. Quelle con cui mi sono trovato bene sono “RStudio” e “StatEt”.
  • Curva d’apprendimento. Occorre imparare a ragionare in maniera un pò particolare rispetto ad altri paradigmi di programmazione, e potrebbero volerci un paio di mesi apprenderlo.

Pro:

  • E’ Open Source. Tenendo conto di quanto detto nei “Contro”, sono innegabili anche i grandi vantaggi di questo tipo di software. Proprio perchè il programma viene utilizzato da tantissimi utenti, i bug hanno un’alta probabilità di essere rilevati, ed è facile comunicarli agli autori per le correzioni, che di solito avvengono in poco tempo.
  • E’ GRATIS! Un software di questa potenza gratis è qualcosa di strepitoso.
  • E’ stabile. Ormai gli utilizzatori sono non solo importanti università ed enti di ricerca, ma anche realtà indistriali. Tutto questo è un serio indizio sulla grande stabilità raggiunta dal software.
  • Ha un grande numero di package specializzati. Questi package, che possiamo immaginare come una specie di plug-in (non me ne vogliano gli esperti) sono molto specializzati e hanno un elevato numero di function adatte agli scopi. Per il mio Trading Algoritmico utilizzo alcuni di questi package scritti  per questo scopo.

Ci sarebbe tanto altro da dire su R, ma non possiamo certo dirle tutto in un articolo. Dalla prossima volta comincerò a scrivere esempi pratici utilizzabili nel software.

Alla prossima.

I ferri del mestiere

Come promesso, eccoci a parlare degli strumenti da utilizzare per fare Trading Algoritmico.

Posso immaginare già i pensieri di molti lettori: “chissà quali mirabolanti marchingegni occorre utilizzare per riuscire ad operare con successo”, oppure: “chissà che studi bisogna fare per capirci qualcosa”.

Tranquilli!!!

Nella realtà le risorse da utilizzare sono meno esotiche (ed esose) di quello che possa sembrare.

In questo post farò un elenco di questi strumenti e un breve commento su di essi. Ci sarà poi l’approfondimento nei post seguenti.

Ovviamente, questo elenco tratta degli strumenti che io preferisco usare. Ognuno è libero di scegliere quelli che preferisce.

Cominciamo quindi con l’elenco.

1. Carta e penna
Non ve l’aspettavate eh? Ebbene si, la cara vecchia carta insieme all’intramontabile penna sono ancora molto attuali. Servono a tanti scopi: dal prendere appunti allo scrivere con chiarezza l’idea della strategia. Qualcuno potrebbe obiettare che le stesse cose si possono fare anche con il computer o lo smartphone, ma volete mettere la praticità e la rapidità di scrivere un’intuizione su un taccuino, magari una sera che siamo al ristorante e stiamo discutendo con un amico? Oppure nella creazione di una mappa mentale bella grande,  in formato A3 ( o addirittura A2)? Senza contare che non rischiano di scaricarsi improvvisamente.

2. Computer
Beh, questo era ovvio, visto che parliamo di trading sviluppato con il computer. Non occorre un computer stratosferico, l’importante è che faccia girare in scioltezza i programmi da utilizzare.

3. Connessione a internet
Telefonare alla banca o al broker non è proprio automatizzabile: occorre connettersi informaticamente per mandare gli ordini in automatico. Una connessione a internet è dunque necessaria.

4. Software
Mentre le prime tre voci dell’elenco sono abbastanza condivisibili da tutti, sul software da utilizzare si entra nel campo dei gusti e delle esperienze personali. Tuttavia ritengo che le caratteristiche necessarie a un buon software siano la possibilità di programmare facilmente i test che si desiderano provare e lo stile di programmazione implementato.  Io personalmente utilizzo l’ambiente di calcolo “R” come piattaforma di test delle strategie e misura dei risultati. Nello stesso tempo sto approfondendo Ninjatrader da usare con il broker. Ovviamente qualunque software si intenda utilizzare, va imparato al meglio.

Per finire, credo sia importante sottolineare due elementi molto importanti, senza i quali tutto l’elenco fatto è inutile: la formazione e la mente.

Occorre studiare, discutere, imparare per poter poi creare con consapevolezza le proprie strategie.

Allo stesso tempo occorre un buon controllo mentale per reggere gli inevitabili periodi di perdita previsti dalla strategia stessa.

Per oggi abbiamo finito, ci diamo appuntamento alla prossima volta.

Presentiamo il Trading Algoritmico

Iniziamo!!!

Si fa un gran parlare in giro del Trading Algoritmico, ma alla fine che cos’è?

Tanto per cominciare, sfatiamo un pò di miti.

Il Trading Algoritmico non è un videogioco, nè una macchinetta sforna-soldi.

Molti credono che basti far girare un programmino collegato al broker, che invii segnali di comprare e vendere, e così si sfornano tanti soldini senza nessuno sforzo.

Magari!!!

No, disilludetevi dal riuscire a guadagnare in questo modo ingenuo.

Il Trading Algoritmico è un trading che opera seguendo delle regole codificate in un algoritmo. Si può fare a mano, ma nell’era informatica si può utilizzare il computer, con l’innegabile vantaggio di poterlo fare in maniera automatica e senza emotività.

Per un Trading Algoritmico fatto al computer c’è anche il rovescio della medaglia: il computer non si accorge che i mercati cambiano.

Questo vuol dire che anche se troviamo una strategia che funziona, non possiamo lanciarla e dimenticarcene, occorre verificare periodicamente, mediante opportune misure, che sia sempre valida. Arriverà il momento in cui essa farà perdere soldi perchè il mercato è cambiato (nella mia esperienza l’ho visto cambiare letteralmente da un minuto all’altro), e allora occorrerà sostituirla con un’altra, che occorrerà verificare periodicamente, e così via.

Eh, si. Operare con il trading non è un gioco, tanto più il Trading Algoritmico. E’ un lavoro che va fatto con perseveranza e passione, elementi senza i quali è meglio lasciar perdere, come del resto in ogni ambito della vita.

Un altro vantaggio nell’uso del computer nel trading è quello di riuscire a testare in maniera relativamente rapida la bontà o meno di una strategia. Infatti, utilizzando opportunamente i dati a disposizione, è possibile verificare il rendimento di una strategia, e scartare quelle che sicuramente non ci soddisfano, riducendo così il notevolmente il numero di strategie non produttive che si utilizzeranno in reale.

A rigore, anche questo passaggio potrebbe farsi a mano, ma la mole di calcoli che occorre fare è così elevata che ci vorrebbero mesi e mesi per fare quello che il computer riesce a fare in qualche minuto.

L’uso opportuno dei dati a disposizione sarà uno degli argomenti che esplorerò in questo blog.

Ci vediamo al prossimo post: “I ferri del mestiere”.