R : i primi 30 minuti (dall’installazione al primo Trading-System) (1 Viewer)

surcontre

Nuovo forumer
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)

___R01.JPG


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")

___R02.JPG


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") )

___R03.JPG


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)

___R04.JPG


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.
 

Cren

Forumer storico
Strepitoso.

Oltre a R-bloggers, sei a conoscenza di un forum vero & proprio (ovviamente va benissimo anche in Inglese) dove si può parlare del funzionamento di R con altri utenti?

Intendo un forum ben frequentato, non le solite mailing list popolate da fantasmi.
 
Ultima modifica:

surcontre

Nuovo forumer
Non scherziamo reef, wikipedia è una cosa seria! :- )
Esistono già parecchi pagine ben fatte riferite a R su wiki, alcune anche in italiano.

Strepitoso.
...
Intendo un forum ben frequentato, non le solite mailing list popolate da fantasmi.

No, anche se un forum 'generalista' credo sia troppo dispersivo, visto che R viene usato per le discipline più disparate.
Esiste R-SIG-Finance che non è un forum e neppure una mailing-list in senso classico, però se hai un problema sei quasi sicuro di ricevere la soluzione, spesso dall'autore del package.

Probabilmente la cosa migliore è individuare qualche blogger con interessi simili ai tuoi e entrare in relazione diretta nei commenti.
 

all in

Nuovo forumer
esposizione perfetta !

un paio di domande:
che tipo di files dati sono supportati ?
esistono le istruzioni o un tool per le SVM ?
 

Cren

Forumer storico
che tipo di files dati sono supportati ?
Se dai un'occhiata al mio piccolo tutorial per RExcel vedi anche quanto è facile interfacciarlo con Excel e importare/esportare matrici e vettori da una parte all'altra senza dover salvare in nessun formato.
esistono le istruzioni o un tool per le SVM ?
Certo: per esempio il package e1071 contiene un sacco di funzioni interessanti per quelle.
 

reef

...
Se dai un'occhiata al mio piccolo tutorial per RExcel vedi anche quanto è facile interfacciarlo con Excel e importare/esportare matrici e vettori da una parte all'altra senza dover salvare in nessun formato.

Certo: per esempio il package e1071 contiene un sacco di funzioni interessanti per quelle.

Ricordo che R funziona anche in ambiente Amibroker, tramite l'apposita DLL di interfacciamento.
Per ora ho solo effettuato i test minimi, ma le prospettive dovrebbero essere davvero interessanti.
 

surcontre

Nuovo forumer
esposizione perfetta !

un paio di domande:
che tipo di files dati sono supportati ?
esistono le istruzioni o un tool per le SVM ?

Il pacchetto-base legge dati dall’universo ascii (txt, csv etc.) ma con un concetto diverso dai software classici, ad esempio l’istruzione:

read.table()

legge indifferentemente da un file sul tuo pc, dalla tua clipboard, oppure da internet.
In pratica ciò permette di accedere allo sterminato universo di dati pubblici presenti sul web (es. files times&sales sul CME), permettendoti di manipolarli secondo i tuoi scopi (es. cambiare il formato delle date)

Alcuni packages contengono accessi diretti facilitati ad enormi database finanziari, come yahoo.finance, google finance, FRED, Oanda, Bloomberg, IB, con modalità non sempre possibili con i classici software di AT.

Esempio, supponiamo di voler ottenere da yahoo.finance 1 year Target Price, P/E Ratio, Book Value di 4 titoli petroliferi: XOM quotata al NYSE, ENI quotata in Italia, BP a Londra e Petrochina a Hong Kong. Dopo aver richiamato la libreria è sufficiente una sola istruzione:

Codice:
[COLOR=red]library(quantmod)[/COLOR]
[COLOR=red]getQuote("XOM;ENI.MI;BP.L;0857.HK",what=yahooQF(c("1 yr Target Price","P/E Ratio","Book Value")))[/COLOR]
[code]
 
[COLOR=blue]                Trade Time 1 yr Target Price P/E Ratio Book Value[/COLOR]
[COLOR=blue]XOM     2012-03-23 04:00:00             94.24     10.13     32.614[/COLOR]
[COLOR=blue]ENI.MI  2012-03-23 12:30:00             19.77     10.59     15.194[/COLOR]
[COLOR=blue]BP.L    2012-03-23 12:35:00              8.51    354.84      5.874[/COLOR]
[COLOR=blue]0857.HK 2012-03-23 03:59:00              9.97     90.49      0.828[/COLOR]
Per le SVM in R, aggiungo un link alle info di Cren: Data Mining Algorithms In R/Classification/SVM - Wikibooks, open books for an open world
 

Users who are viewing this thread

Alto