# scaricare i dati da Yahoo.finance (salvarli nel file "eni.csv") titolo<-read.csv("c:/dati/eni.csv",header=TRUE,dec=".",sep=",") durata<-nrow(titolo) ordine<-as.matrix(seq(durata,1,-1)) titolo<-cbind(ordine,titolo) titolo<-titolo[sort.list(titolo[,1]), ] close<-as.matrix(titolo[,6]) close.ts<-ts(close,start=c(2001,6,18),frequency=260,names="ENI") volumi<-(titolo[,7]) # finestra grafica: grafico lineare dei close (pannello superiore) # grafico a barre dei volumi (pannello inferiore) {par(mfrow=c(2,1)) plot(close.ts,type="l",ylab="P_t") barplot(volumi,ylab="volumi") par(mfrow=c(1,1))} # Calcolo dei rendimenti giornalieri (Assoluti, Relativi, Logaritmici) close.ra<-as.matrix(diff(close.ts)) close.Rt<-as.matrix((lag(close.ts)/close.ts)-1) close.rt<-as.matrix(diff(log(close.ts))) # sistemazione dell'output: tabella con 4 colonne (close, RA, Rt, rt) # N.B.: attenzione all'operazione di riallineamento effettuato nella tabella # che dipende dall'operazione di traslazione verso l'altro effettuata # dal comando lag(oggetto,k) tabella<-cbind(close.ts[(durata-9):durata], close.ra[(durata-10):(durata-1)],close.Rt[(durata-10):(durata-1)]*100, close.rt[(durata-10):(durata-1)]*100) tabella<-as.data.frame(tabella) names(tabella)<-c("close","RA","Rt","rt") # l'output (cioè la tabella) viene salvato in un file "csv" write.table(tabella,"c:/dati/tabella.csv",sep=",",append=F) print(tabella) # Calcolo rendimenti con frequenza inferiore al giorno lag.aggr<-5 # indica il lag per l'aggregazione (5 per i rendimenti settimanali) ind.aggr<-seq(1,nrow(close.ts),lag.aggr) # è il vettore per l'estrazione dei giorni su cui calcolare i rend. close.set<-as.matrix(close.ts[ind.aggr]) close.ra.s<-as.matrix(diff(close.set)) close.Rt.s<-as.matrix(close.ra.s/close.set[1:nrow(close.set)-1]) close.rt.s<-as.matrix(diff(log(close.set))) # finestra grafica: rendimenti giornalieri e rendimenti settimanali ts.plot(close.rt, ylab="r_t giornalieri") windows() ts.plot(close.rt.s, ylab="r_t settimanali") # Calcolo rendimenti con lag superiore a 1 lag.div<-3 # indica il lag per il calcolo della serie dei rendimenti (se lag=1 --> rend. a un giorno) close.Rt.3<-as.matrix((lag(close.ts,3)/close.ts)-1) close.rt.3<-as.matrix(diff(log(close.ts),lag=3)) # sistemazione dell'output: tabella con 6 colonne (close, RA, Rt, rt, Rt(3), rt(3)) # N.B.: attenzione all'operazione di riallineamento effettuato nella tabella # che dipende dall'operazione di traslazione verso l'altro effettuata # dal comando lag(oggetto,k) tabella<-cbind(close.ts[(durata-9):durata], close.ra[(durata-10):(durata-1)],close.Rt[(durata-10):(durata-1)]*100, close.rt[(durata-10):(durata-1)]*100, close.Rt.3[(durata-12):(durata-3)]*100, close.rt.3[(durata-12):(durata-3)]*100) tabella<-as.data.frame(tabella) names(tabella)<-c("close","RA","Rt","rt","Rt(3)","rt(3)") # Verifica aggregazione temporale # In questa parte del codice si utilizza il comando "for" # per eseguire i cicli (o loop). Si verifica così la corretta # applicazione delle formule di aggregazione temporale dei rendimenti # a partire dai dati che abbiamo raccolto nella tabella for (i in (4:10)) { print(i) print("somma rt") print(sum(tabella[(i-2):i,4])) print("rt aggregati") print(tabella[i,6]) print("somma Rt") print((prod(1+(tabella[(i-2):i,3]/100))-1)*100) print("Rt aggregati") print(tabella[i,5]) }