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

Ryan Sheftel: "R on the Trading Desk"

by Joseph Rickert

The opening keynote presentation: R on the trading Desk (PDF) by Ryan Sheftel, Managing Director of Fixed Income Division at Credit Suisse, underscored this last point. Ryan, an engaging and experienced speaker, provided some extraordinary insight into the stance quants and traders take toward technology: By way of background, Ryan noted that fixed income markets which provide immediate liquidity between buyers and sellers are decentralized. Traders are constantly taking on risk which they try to mitigate by predicting what their clients are going to do. Ryan noted that machine learning ideas, very often implemented in R, have been a “great boon” to the industry. Before the financial crisis, the quants were focused on building complex models to price options, now they are focused on prediction using time series models. These days, the technology on a fixed income desk at Credit Suisse includes...

...continua qui:


La presentazione in .pdf si può vedere qui:

 
by Joseph Rickert

The opening keynote presentation: R on the trading Desk (PDF) by Ryan Sheftel, Managing Director of Fixed Income Division at Credit Suisse, underscored this last point. Ryan, an engaging and experienced speaker, provided some extraordinary insight into the stance quants and traders take toward technology: By way of background, Ryan noted that fixed income markets which provide immediate liquidity between buyers and sellers are decentralized. Traders are constantly taking on risk which they try to mitigate by predicting what their clients are going to do. Ryan noted that machine learning ideas, very often implemented in R, have been a “great boon” to the industry. Before the financial crisis, the quants were focused on building complex models to price options, now they are focused on prediction using time series models. These days, the technology on a fixed income desk at Credit Suisse includes...

...continua qui:


La presentazione in .pdf si può vedere qui:


OK, ottima dritta.

Di fatto, si riesce ad installare "tutto" su un server Linux e ad operare da un qualsiasi client web remoto tramite RStudio server.
La comodità di avere su server R, librerie e fornitura dati RT sembra molto interessante.

Per chi vuole provare, attenzione alle versioni sia di Linux sia dei pacchetti da installare.
Ad esempio su Ubuntu 12.04 LTS, apt-get rbase installa la 2.13 e non la 3.01
Bisogna attenersi alle info sul sito Cran per ottenere l'ultima versione, in pratica si deve indirizzare correttamente il repository Cran per la propria versione di Linux.

Fatto questo, RStudio non ha problemi di installazione come da istruzioni sul sito.

Anche le librerie R vanno su tranquillamente da install.packages.
Solo quantlib potrebbe richiedere qualche "smanettamento". Consiglio di partire da apt-get install libquantlib0-dev, come suggerito dal programmatore ufficiale Dirk Eddelbuettel quantlib-users - How to configure boost and quantlib under Ubuntu 10.10

:)
 
Analyze the function timeSeries (date, charvec), where charvec is your provider of dates., if you have an array of dates to associate degree with those costs : if you need to produce a time series or the most comfortable thing. Anyway it seems odd because when you attempt to do any vector in a time series with no dates, R just makes a time series identified by a progressive index starting with 1 's settle 'this matter.
 
Analyze the function timeSeries (date, charvec), where charvec is your provider of dates., if you have an array of dates to associate degree with those costs : if you need to produce a time series or the most comfortable thing. Anyway it seems odd because when you attempt to do any vector in a time series with no dates, R just makes a time series identified by a progressive index starting with 1 's settle 'this matter.
Suggerisco di usare sempre xts e/o zoo (sono perfettamente compatibili) quando si lavora con le serie storiche.

Per creare una sequenza temporale di sana pianta senza leggerla da nessuna fonte un esempio è (basta farlo andare, scarica, installa e carica tutto da solo):

install.packages(xts)
require(xts)
timeBasedSeq(’1999/2008’)
timeBasedSeq(’199901/2008’)
timeBasedSeq(’199901/2008/d’)
timeBasedSeq(’20080101 0830’, length = 100) # 100 minutes
timeBasedSeq(’20080101 083000’, length = 100) # 100 seconds


Qualora si preferisca comunque lavorare con oggetti di classe timeSeries e/o ts si può anche costruire un oggetto di classe xts e poi convertirlo con as.timeSeries().
 
Ultima modifica:
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.

Magari fosse così facile!
Già "quantmode" e "performanceanalytics" dice che non sono disponibili.:(
 
Allora, vediamo, Linux lo usano reef e ... ? :D

Cren con "C:\Documents and settings\" mi sa di no, anzi, mi sa che non usa neppure una versione a 64 bit se ha Windows XP, pure in Italiano con c:\Programmi :eek::lol:

Va là che Linux lo usi anche tu e non lo vuoi dire... :)

(il "Documents and Settings" mi sa che era di Cren...)
 

Users who are viewing this thread

Back
Alto