indici.r<- function (tipo,ind,durata,data.iniz) { ################################################################## # Determinazione di un numero indice di borsa # E' stato modificato e reso più intuitivo rispetto # a "calcolo numeri indici di borsa.r" ################################################################## # Input: # tipo = 1 --> NI secondo Laspeyres # != 1 --> NI secondo Paasche # ind = un numero compreso fra 1 e la lunghezza del vettore "nomi" # indica il titolo che si vule 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(tipo,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à. ############## # nell'oggetto nomi (vettore stringa) inseriamo i nomi dei file che contengono i dati di partenza # (senza l'estensione che deve essere .csv) ############## nomi<-as.matrix(c("bulgari","eni","fastweb","lottomatica","mediaset", "mps","pirelli","snam","terna","unipol")) # nomi<-as.matrix(c("BPI","bulgari")) ############### # vettori per lo storage dell'output ############### num<-matrix(0,durata,1) den<-matrix(0,durata,1) closes<-matrix(0,durata,1) volumi<-matrix(0,durata,1) for(i in (1:nrow(nomi))) { a<-(paste("c:/msmf/",nomi[i],".csv",sep="")) titolo<-read.csv(a,header=TRUE,dec=".",sep=",") ############### # NI semplici a base fissa calcolati su ogni titolo ############### n.oss<-nrow(titolo) ordine<-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<-(n.oss-durata+1) titolo.nis<-close/close[tempo0] ############### # Capitalizzazione (fissa per i NI di Laspeyres, variabile per i NI di Paasche) # nel caso dei NI di Paasche si fa lo storage delle capitalizzazioni variabili che # costituiscono una serie storica (il denominatore del NI sintetico) da immagazzinare # al pari del numeratore ############### if(tipo==1) # capitalizzazione fissa (Laspeyres) titolo.cap<-close[tempo0]*volume[tempo0] else # capitalizzazione variabile (Paasche) {titolo.cap<-as.matrix(close[tempo0]*volume) den<-cbind(den,titolo.cap[(tempo0):n.oss]) } ############### # calcolo del numeratore del NI sintetico ############### titolo.num<-as.matrix(titolo.nis*titolo.cap) num<-cbind(num,titolo.num[(tempo0):n.oss]) closes<-cbind(closes,close[(tempo0):n.oss]) volumi<-cbind(volumi,volume[(tempo0):n.oss]) } num<-num[,2:ncol(num)] num<-(apply(num,1,sum)) closes<-closes[,2:ncol(closes)] volumi<-volumi[,2:ncol(volumi)] ############### # Nel caso del NI di Laspeyres il denominatore si ottiene come somma # delle capitalizzazioni al tempo zero (prodotto di due vettori) # Nel caso dei NI di Paasche si ottiene come somma delle capitalizzazioni # ad ogni istante temporale (somma per riga della matrice delle capitalizzazioni) ############### if(tipo==1) # Laspeyres den<-t(as.matrix(closes[1,]))%*%(as.matrix(volumi[1,])) else # Paasche den<-(apply(den,1,sum)) ############### # Calcolo effettivo dell'indice sintetico ############### indice<-ts(num/den,start=data.iniz,frequency=260) close.ts<-ts(closes,start=data.iniz,frequency=260,names=nomi) ############### # Output grafico ############### par(mfrow=c(2,1)) plot(close.ts[,ind],type="l",ylab=nomi[ind]) plot(indice) ans=list(num=num,den=den) } a<-indici.r(1,10,600,c(2005,8,13)) windows() b<-indici1.r(2,2,600)