indici.r<- function (ind,durata,data.iniz) { ################################################################## # Determinazione di un numero indice di borsa (Secondo Laspeyres) ################################################################## # Input: # # ind = un numero compreso fra 1 e la lunghezza del vettore "nomi" # indica il titolo che si vuole confrontare con il NI # durata = è la lunghezza della serie storica del NI (dipende dalla # lunghezza delle serie storica che lo costituiscono) # data.iniz= è un vettore contenente la data da cui partire per costruire # la serie storica. Es.: data.iniz=c(2002,6,18) # USO: indici.r(ind,durata,data.iniz) # # N.B.: l'esempio è fittizio. Nel calcolo dei numeri indici di borsa # si utilizzano le quantità intese come numero di titoli in cui # è suddiviso il capitale sociale. In questo esempio si assume che i volumi # scambiati rappresentino tali quantità. ############## # Si crea un vettore di stringhe. Ogni stringa corrisponde al # nome (senza estensione) del file in cui sono contenute le quotazioni # Es.: aem richiama il file aem.csv (scaricato da yahoo). # N.B.: si suppone che nella cartella “c:/dati” siano presenti # tutti i file con nome indicato nel vettore nomi e con estensione “.csv” nomi<-as.matrix(c("aem","aut","gen","bpi","eni","med")) # si creano tre vettori esterni al loop per lo storage dei risultati num<-matrix(0,durata,1) volumi<-matrix(0,durata,1) closes<-matrix(0,durata,1) # Il loop serve per generare il percorso per la lettura di ogni # file. Tale percorso viene poi inserito come input nel comando # read.csv for (i in 1:nrow(nomi)) {a<-paste("c:/dati/",nomi[i],".csv",sep="") titolo<-read.csv(a,header=T,dec=".",sep=",") # n.oss indica il numero di righe di cui è composto ogni singolo file n.oss<-nrow(titolo) # Si esegue l’ordinamento dei dati dalla data più remota alla più recente ordine<-as.matrix(seq(n.oss,1,-1)) close_vol<-titolo[,5:6] close_vol<-cbind(ordine,close_vol) close_vol<-close_vol[sort.list(close_vol[,1]),] close<-close_vol[,2] volume<-close_vol[,3] # tempo0 è il tempo base per il calcolo del numero indice tempo0<-(n.oss-durata+1) # titolo.nis contiene la serie dei numeri indici a base fissa titolo.nis<-close/close[tempo0] # titolo.cap è la capitalizzazione del titolo al tempo base titolo.cap<-close[tempo0]*volume[tempo0] titolo.num<-as.matrix(titolo.nis*titolo.cap) # Si esegue lo storage delle serie storiche che costituiscono i singoli elementi # del numeratore. Le matrici finali sono formate da un numero di colonne pari al # numero di titoli nel portafoglio +1 (una colonna di zeri). num<-as.matrix(cbind(num,titolo.num[tempo0:n.oss])) volumi<-as.matrix(cbind(volumi,volume[tempo0:n.oss])) closes<-as.matrix(cbind(closes,close[tempo0:n.oss])) } num<-num[,2:ncol(num)] volumi<-volumi[,2:ncol(volumi)] closes<-closes[,2:ncol(closes)] # Si esegue la somma per colonna per calcolare la serie storica dei numeratori # dell’indice num<-apply(num,1,sum) # Il denominatore si ottiene come sommadelle capitalizzazioni al tempo zero # (prodotto di due vettori) den<-t(as.matrix(closes[1,]))%*%(as.matrix(volumi[1,])) # Calcolo effettivo dell’indice indice<-ts(num/den,start=data.iniz,frequency=260) close.ts<-ts(closes,start=data.iniz,frequency=260) # Finestra grafica par(mfrow=c(2,1)) plot(indice,type="l") plot(close.ts[,ind],ylab=nomi[ind]) par(mfrow=c(1,1)) } # Esempio utilizzo indici.r(1,600,c(2005,1,1)) }