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

Di nulla.
Diamo per scontato che hai letto dall'inizio questo 3D ;)

Ho cominciato a leggerlo ieri. Dovevo farlo prima.
Ringrazio te e Cren.

Una domanda: avevo già installato R e RExcel ed aprendo il programma
ho avuto la sgradevole sorpresa di trovarmi le cartelle in Excel con
tutti i miei fogli mancanti. Avevo subito disinstallato R ed il resto.
Sicuramente avrò combinato io qualcosa di sbagliato.
Mi potete ragguagliare?

Buona giornata.:)
 
Salve a tutti.
Innanzitutto un ringraziamento per il thread, in particolare a SURCONTRE e a CREN.
Mi sto avvicinando a R e sto utilizzando questo trhread a scopi didattici.
Ho creato un piccolo listato (cannibalizzando un listato di ender85) per vedere, con esempi concreti, di impratichirmi su R.



require(quantmod)
require(PerformanceAnalytics)


#scarico i dati da oanda

getSymbols("EUR/USD",src="oanda",from="2013-01-01")
forex13 <- EURUSD
getSymbols("EUR/USD",src="oanda",from="2012-01-01",to="2012-12-31")
forex12 <- EURUSD
getSymbols("EUR/USD",src="oanda",from="2011-01-01",to="2011-12-31")
forex11 <- EURUSD
getSymbols("EUR/USD",src="oanda",from="2010-01-01",to="2010-12-31")
forex10 <- EURUSD
getSymbols("EUR/USD",src="oanda",from="2009-01-01",to="2009-12-31")
forex09 <- EURUSD
getSymbols("EUR/USD",src="oanda",from="2008-01-01",to="2008-12-31")
forex08 <- EURUSD
getSymbols("EUR/USD",src="oanda",from="2007-01-01",to="2007-12-31")
forex07 <- EURUSD
getSymbols("EUR/USD",src="oanda",from="2006-01-01",to="2006-12-31")
forex06 <- EURUSD
getSymbols("EUR/USD",src="oanda",from="2005-01-01",to="2005-12-31")
forex05 <- EURUSD
getSymbols("EUR/USD",src="oanda",from="2004-01-01",to="2004-12-31")
forex04 <- EURUSD


#li unisco


forex<-rbind(forex04,forex05,forex06,forex07,forex08,
forex09,forex10,forex11,forex12,forex13)

#estrapolo chiusure

chiusura<- forex$EUR.USD
sd20<- runSD( chiusura,20 ) #calcolo SD a 20 periodi
media20<- runMean( chiusura, 20 ) #calcolo SD a 20 periodi
segnale<- ifelse(((chiusura-media20)/sd20) > 1 ,1,0) #valuto se prezzo > 1 dev st. se si entro long, se no flat
ritorni<- ROC(chiusura)*Lag(segnale,1) #calcolo rendimento barra successiva al segnale (lag 1 )
equity <- cumsum(na.omit(ritorni)) #calcolo equity e tabelle dd
plot(equity)
table.Drawdowns(ritorni, top=10)
charts.PerformanceSummary(ritorni)



Vorrei sapere:

è corretta la logica ? (il mio timore sono le corrispondenze prezzo/Mean/SD ..) e il lag nel calcolo del rendimento....

Se volessi andare anche short dovrei nidificare l'IF ?? O avete qualche suggerimento più "elegante" ?

Grazie.

m67
 
Ultima modifica:
è corretta la logica ? (il mio timore sono le corrispondenze prezzo/Mean/SD ..) e il lag nel calcolo del rendimento....
E' corretto.
Se volessi andare anche short dovrei nidificare l'IF ?? O avete qualche suggerimento più "elegante" ?
Ho alcuni suggerimenti:

1. considera l'uso dei vari "wrapper" per calcolare i rendimenti, ovvero ClCl(x) e OpCl(x) dove x è un oggetto OHLC se devi avere rispettivamente i rendimenti tra apertura e chiusura o tra chiusure successive;
2. da cosa deriva la scelta di farsi passare da OANDA i vari "tronconi" di serie storica anziché un'unica serie? Limiti del fornitore?
3. Potresti evitare di nidificare ifelse() creando semplicemente due ifelse() separati e poi sommandoli;
4. plot(equity) è inutile, tanto lo fa già charts.PerformanceSummary().​

Suggerimento avanzato

Fintanto che le condizioni di ingresso e uscita sono così semplici, l'uso dei vettori ifelse() è comodo. Se e quando aggiungerai condizioni più sofisticate, penso che troverai conveniente la creazione di apposite funzioni da usare in rollapplyr() anziché usare la roba vettorizzata.

Una funzione di quel tipo va costruita facendole eseguire all'interno tutti i calcoli necessari per il singolo giorno: controllo sugli orari (se previsto), i giorni della settimana (se previsto), i predittori (se ne hai), le soglie (se ne hai) etc. etc. ...e alla fine ti ritorna una indicazione per la giornata: BUY, SELL, SHORT, COVER.

Questa funzione è poi applicata alla tua serie storica usando la funzione rollapplyr(), che non fa altro che prendere periodo per periodo della tua serie storica iterativamente, applicare la funzione e via via assemblare una serie storica nuova della quale ogni osservazione corrisponde alla valutazione della tua personale funzione per quel periodo.

E' chiaro che per il tuo caso è ridondante, ma già ti basterebbe inserire un altro paio di condizioni per oltrepassare il break even di complessità oltre il quale conviene farsi metodi... pardon, funzioni... ad hoc.

Facoltativo

Non è ancora la versione definitiva, ma esistono le librerie quantstrat, scaricabili gratuitamente qui, che mirano a offrire un vero & proprio blotter dei trade eseguiti con l'utente che mette solo le regole generali e le librerie che fanno tutto il resto: ingressi, uscite, posizioni etc. etc.

Non le ho ancora provate ma sembra che la comunità di R stia portando l'ambiente di sviluppo a colmare anche il divario con i programmi commerciali per i test (dubito arriveremo mai alla complessità delle opzioni di AmiBroker, comunque, ma già dare calci nel sedere a Visual Trader con un paio di righe di codice senza doversi programmare tutto in casa non sarebbe male :D).
 
Ultima modifica:
Salve a tutti.
Innanzitutto un ringraziamento per il thread, in particolare a SURCONTRE e a CREN.
Mi sto avvicinando a R e sto utilizzando questo trhread a scopi didattici.
Ho creato un piccolo listato (cannibalizzando un listato di ender85) per vedere, con esempi concreti, di impratichirmi su R.



require(quantmod)
require(PerformanceAnalytics)


#scarico i dati da oanda

getSymbols("EUR/USD",src="oanda",from="2013-01-01")
forex13 <- EURUSD
getSymbols("EUR/USD",src="oanda",from="2012-01-01",to="2012-12-31")
forex12 <- EURUSD
getSymbols("EUR/USD",src="oanda",from="2011-01-01",to="2011-12-31")
forex11 <- EURUSD
getSymbols("EUR/USD",src="oanda",from="2010-01-01",to="2010-12-31")
forex10 <- EURUSD
getSymbols("EUR/USD",src="oanda",from="2009-01-01",to="2009-12-31")
forex09 <- EURUSD
getSymbols("EUR/USD",src="oanda",from="2008-01-01",to="2008-12-31")
forex08 <- EURUSD
getSymbols("EUR/USD",src="oanda",from="2007-01-01",to="2007-12-31")
forex07 <- EURUSD
getSymbols("EUR/USD",src="oanda",from="2006-01-01",to="2006-12-31")
forex06 <- EURUSD
getSymbols("EUR/USD",src="oanda",from="2005-01-01",to="2005-12-31")
forex05 <- EURUSD
getSymbols("EUR/USD",src="oanda",from="2004-01-01",to="2004-12-31")
forex04 <- EURUSD


#li unisco


forex<-rbind(forex04,forex05,forex06,forex07,forex08,
forex09,forex10,forex11,forex12,forex13)

#estrapolo chiusure

chiusura<- forex$EUR.USD
sd20<- runSD( chiusura,20 ) #calcolo SD a 20 periodi
media20<- runMean( chiusura, 20 ) #calcolo SD a 20 periodi
segnale<- ifelse(((chiusura-media20)/sd20) > 1 ,1,0) #valuto se prezzo > 1 dev st. se si entro long, se no flat
ritorni<- ROC(chiusura)*Lag(segnale,1) #calcolo rendimento barra successiva al segnale (lag 1 )
equity <- cumsum(na.omit(ritorni)) #calcolo equity e tabelle dd
plot(equity)
table.Drawdowns(ritorni, top=10)
charts.PerformanceSummary(ritorni)



Vorrei sapere:

è corretta la logica ? (il mio timore sono le corrispondenze prezzo/Mean/SD ..) e il lag nel calcolo del rendimento....

Se volessi andare anche short dovrei nidificare l'IF ?? O avete qualche suggerimento più "elegante" ?

Grazie.

m67


A mio avviso il listato non è corretto.

Ciao
 
Ho cominciato a leggerlo ieri. Dovevo farlo prima.
Ringrazio te e Cren.

Una domanda: avevo già installato R e RExcel ed aprendo il programma
ho avuto la sgradevole sorpresa di trovarmi le cartelle in Excel con
tutti i miei fogli mancant
i. Avevo subito disinstallato R ed il resto.
Sicuramente avrò combinato io qualcosa di sbagliato.
Mi potete ragguagliare?

Buona giornata.:)

Probabilmente RExcel ha prodotto la riduzione ad icona della finestra
della mia cartella con la conseguenza di nascondermi tutti i fogli.
 

Users who are viewing this thread

Back
Alto