Dovendo installare R su un vecchio pc (win XP, un dual core duo) ho deciso di
scrivere queste brevi note, ad uso e consumo di trader e analisti tecnici, sperando di esorcizzare la paura che incutono i programmi open-source dove la
filosofia del
tutto gratis spesso conduce a
learning-curve lentissime.
# 0
Partiamo da qui:
The Comprehensive R Archive Network
# 1
Scelta piattaforma (windows, linux, mac)
# 1.1
Supponiamo windows e XP come nel mio caso: scegliere
base – install R for the first time
# 1.2
Scegliete il primo link:
Download R 2.xx.xx for Windows e dite
esegui. Sono 45
mega, si scarica in meno di 2 minuti e in fase di installazione accettate tutto ciò che vi
viene proposto nel setup. In meno di 5 minuti avrete l’icona di R sul desktop.
# 2
Cliccatela (l’icona di R sul desktop), vi apparirà una
consolle testuale spartana dove
le vostre istruzioni saranno in rosso, mentre i messaggi di R in blu.
Il programma è leggero, veloce e occupa poco spazio, vi sono parecchie GUI (sempre free) in
circolazione per renderlo user-friendly (R-excel, R-Studio etc.) che però all'inizio tendono
ad aggiungere complicazione a complicazione, appesantendo il tutto. Voi fate come credete
# 3
Scrivete la prima istruzione, con la quale installeremo una libreria complessa di AT, e fatela
seguire da <enter>
install.packages("quantmod")
scegliete il mirror che volete (magari Italy-Milano) e lasciate scaricare
poi scrivete la seconda istruzione, con la quale scaricheremo una libreria atta a misurare nei
modi più disparati le performance delle vostre future strategie di trading, in forma grafica e
tabellare:
install.packages("PerformanceAnalytics")
Ottimo. Abbiamo installato R e i packages essenziali per risolvere il 90% delle problematiche
relative a strategie di trading direzionale. Ci sono voluti sicuramente meno di 10 minuti
# Inizio test del programma
Da ora copiate esattamente le righe rosse sulla consolle (R è
case-sensitive).
Richiamiamo le due librerie che abbiamo appena scaricato:
require(quantmod)
require(PerformanceAnalytics)
e finalmente scriviamo la prima vera istruzione, con la quale scaricheremo dal sito della
Federal Reserve di St. Louis la serie storica EOD del Dow Jones dalla fine del 1896 a oggi :
getSymbols("DJIA", src="FRED")
Nel sito FRED sono disponibili circa 10000 serie storiche economiche e/o finanziarie , di cui
oltre 200 relative all’Italia (CPI, tassi BOT etc.).
Se volete vedere altri database a cui può accedere l’istruzione, provate l’help veloce
digitando:
?getSymbols
Ora vediamo il grafico del Dow (e riconsideriamo i paragoni fatti 2 anni fa tra la crisi dei
subprime e quella del ’29):
chartSeries(DJIA, log.scale=TRUE)
Proviamo a fare uno zoom della crisi del ’29, in scala lineare, aggiungendo la SMA a 200gg:
chartSeries(DJIA["1925/1940"], TA="addSMA(200)", theme="white")
La classica SMA avrebbe permesso di limitare le perdite.
Se digitate:
head(DJIA,3)
avrete in forma tabellare i primi 3 prezzi, per gli ultimi 3 basta digitare:
tail(DJIA,3)
Adesso passiamo a qualcosa di più tecnico:
ret <- ROC(DJIA)
ret[1] <- 0
abbiamo calcolato i log-rendimenti giornalieri del Dow (ponendo a zero il primo dato): potevamo
farlo in altro modo, qui abbiamo usato un indicatore di AT. Vi sarete già accorti che la
‘freccia a sinistra’
<- in R sostituisce il classico ‘=’.
Vediamo la distribuzione di probabilità dei nostri rendimenti EOD e quanto differisce dalla
solita gaussiana
chart.Histogram(ret,breaks=100, methods=c("add.density", "add.normal") )
La coda sinistra è più lunga di quella destra perché più volte, dal 1896 a oggi, il Dow ha
accusato perdite giornaliere peggiori di -20%, i famosi black swan di Taleb.
Ora proviamo a vedere quanto ci avrebbe reso investire un dollaro sul Dow alla fine del 1896:
charts.PerformanceSummary(ret, ylog=TRUE)
Non molto. Visto il maxdd del 90% nella crisi del ’29?
Ora la performance. Scrivendo:
table.AnnualizedReturns(ret)
Codice:
[COLOR=blue] DJIA[/COLOR]
[COLOR=blue]Annualized Return 0.0334[/COLOR]
[COLOR=blue]Annualized Std Dev 0.1841[/COLOR]
[COLOR=blue]Annualized Sharpe (Rf=0%) 0.181[/COLOR]
avrete i dati essenziali del vostro investimento di 1$, ovviamente nel formato che gli
econometristi adorano (ovvero NON in forma percentuale: con un sacco di zeri). In questo caso
il risk-free è posto a zero: si può inserire nell’istruzione precedente, ma considerandolo su
base giornaliera. Ad esempio 1 basis point (0.0001) potrebbe essere un numero non troppo
fantasioso. Basterà sostituire la precedente istruzione con:
table.AnnualizedReturns(ret,
Rf=0.0001)
In ogni caso, ciò che esce dalla tabella è abbastanza deludente, il 3.3% annuo, anche se non
sono considerati i dividendi, credo sia stato tutto ‘mangiato’ dall’inflazione
Ora passiamo a considerare il rischio con modalità più complesse della semplice SD annua:
table.DownsideRisk(ret)
Codice:
[COLOR=blue] DJIA[/COLOR]
[COLOR=blue]Semi Deviation 0.0122[/COLOR]
[COLOR=blue]Gain Deviation 0.0081[/COLOR]
[COLOR=blue]Loss Deviation 0.0094[/COLOR]
[COLOR=blue]Downside Deviation (MAR=210%) 0.0145[/COLOR]
[COLOR=blue]Downside Deviation (Rf=0%) 0.0123[/COLOR]
[COLOR=blue]Downside Deviation (0%) 0.0123[/COLOR]
[COLOR=blue]Maximum Drawdown 0.9179[/COLOR]
[COLOR=blue]Historical VaR (95%) -0.0167[/COLOR]
[COLOR=blue]Historical ES (95%) -0.0280[/COLOR]
[COLOR=blue]Modified VaR (95%) -0.0157[/COLOR]
[COLOR=blue]Modified ES (95%) -0.0157[/COLOR]
qui avete a disposizione tutta una serie di misure (sempre in forma non percentuale) classiche
di rischio: VaR, ES etc.
Se siete degli amanti delle analisi sul drawdown, allora provate:
table.Drawdowns(ret)
Codice:
[COLOR=blue] From Trough To Depth Length To Trough Recovery[/COLOR]
[COLOR=blue]1 1929-09-04 1932-07-08 1964-03-02 -0.9179 8634 713 7921[/COLOR]
[COLOR=blue]2 2007-10-10 2009-03-09 <NA> -0.5760 1114 355 NA[/COLOR]
[COLOR=blue]3 1906-01-22 1914-12-24 1925-08-14 -0.5482 4812 2155 2657[/COLOR]
[COLOR=blue]4 1899-04-26 1903-11-09 1905-11-27 -0.5054 1651 1136 515[/COLOR]
[COLOR=blue]5 1973-01-12 1974-12-06 1983-04-22 -0.4723 2597 481 2116[/COLOR]
scoprirete che il maxdd del Dow è stato del 91%, che ha impiegato circa 700 giorni per
prodursi, mentre ce ne sono voluti quasi 8000 (20 anni) per essere recuperato.
Sono passati 20 minuti, i prossimi 10 minuti li dedicheremo al primo Trading-System.