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

Finiamo prima il portafoglio a minima varianza, cosi lo completo!!!! attendo tue notizie allora... grazieeeeeeeeeeeee
Esistono molti modi per ottenere il portafoglio a minima varianza globale con R.

Teoricamente basta un comando, ma questo a fini didattici sarebbe perfettamente inutile perchè non avresti la minima idea di quello che c'è dietro.

Nella formulazione teorica di Merton i pesi del portafoglio GMV si possono ricavare in forma chiusa, ma non includendo l'assenza di leva e di vendita allo scoperto (= peso di ogni titolo compreso tra 0 e 1).

Per cercare di rendere la cosa il più didattica ed estesa possibile, e al tempo stesso includere quei vincoli, qui useremo quadprog.

quadprog è una libreria che implementa il metodo di Goldfarb e Idnani (1982, 1983) per risolvere problemi di programmazione quadratica della forma
gif.latex
col vincolo
gif.latex
.

Quindi nel tuo caso avremo:

- d = 0 (non ci serve);
- w i pesi incogniti da trovare;
- V la matrice delle covarianze;
- A la matrice dei vincoli;
- b il vettore che assegna il valore ai vincoli (somma unitaria dei pesi e ciascun peso tra 0 e 1).​

Proviamo in R col solito codice:

# +---------------------------------
# | Sommario
# |
# | 1. Parametri globali
# | 2. Installazione delle librerie
# | 3. Caricamento delle librerie
# | 4. Scaricamento dei dati
# | 5. Preparazione dei dati
# | 6. Rendimenti aritmetici
# | 7. Portafoglio a minima varianza
# +---------------------------------

# +---------------------------------
# | 1. Parametri globali
# +---------------------------------

op <- par(no.readonly = TRUE)
Sys.setenv(TZ = 'UTC')

# +---------------------------------
# | 2. Installazione delle librerie
# +---------------------------------

install.packages('lattice')
install.packages('quadprog')
install.packages('quantmod')

# +---------------------------------
# | 3. Caricamento delle librerie
# +---------------------------------

require(lattice)
require(quadprog)
require(quantmod)

# +---------------------------------
# | 4. Scaricamento dei dati
# +---------------------------------

env <- new.env()

# In questo esempio usiamo solo un indice e cinque titoli per comodità:
# - FTSE MIB
# - FIAT
# - ENI
# - ENEL
# - Telecom Italia
# - UniCredit

Symbols <- c('FTSEMIB.MI', 'F.MI', 'ENI.MI', 'ENEL.MI', 'TIT.MI', 'UCG.MI')
getSymbols(Symbols = Symbols, env = env, src = 'yahoo', from = '1950-01-01')

# +---------------------------------
# | 5. Preparazione dei dati
# +---------------------------------

args <- eapply(env = env, FUN = function(x){Cl(x)})[Symbols]
X <- na.omit(do.call(what = merge, args = args))
xyplot(X)

# +---------------------------------
# | 6. Rendimenti aritmetici
# +---------------------------------

Data <- apply(X = X, MARGIN = 2, FUN = function(x){Delt(x)})
Data[1,] <- 0
Data <- xts(Data, index(X))

# +---------------------------------
# | 7. Portafoglio a minima varianza
# +---------------------------------

N <- ncol(Data[,-1]) # Numero di titoli, indice escluso
V <- cov(Data[,-1]) # Matrice delle covarianze, indice escluso
d <- rep(0, N) # Vettore "d"
A <- cbind(rep(1, N), diag(N)) # Matrice dei vincoli
b <- c(1, rep(0, N)) # Valore dei vincoli
meq <- c(1, rep(0, N))

opt <- solve.QP(Dmat = V, dvec = d, Amat = A, bvec = b, meq = meq) # Risolve il problema di programmazione quadratica
w <- opt$solution # Estrae i pesi ottimali
names(w) <- colnames(Data[,-1])
round(w, 4) * 100 # Mostra i risultati in forma percentuale
pie(w)
 

Allegati

  • Rplot.png
    Rplot.png
    5,3 KB · Visite: 449
Lei ha dato questa tesina da fare, ma non è obbligatoria quindi non dovrebbe andare nello specifico all'orale;
per quanto riguarda le opzioni di risposta, siamo andati in laboratorio 3 volte solamente, di durata 50 min.
Ci ha spiegato quello che ti ho scritto nei vari post, ne di più ne di meno; ha detto le cose senza approfondire niente, il tutto in poco tempo. Ti lascio immaginare....
 
Grazie Cren, gentilissimo. Ma scusami, il grafico sopra, che mi spiega? noi il portafoglio a minimo rischio lo abbiamo visto sul piano media- varianza;
 
Grazie Cren, gentilissimo. Ma scusami, il grafico sopra, che mi spiega? noi il portafoglio a minimo rischio lo abbiamo visto sul piano media- varianza;
Quello è un semplice grafico a torta che mostra i pesi dei singoli titoli fatto 100 il totale.

Il portafoglio a minima varianza sul piano media-varianza te l'avevo già mostrato in questa immagine:

261525d1386153467-r-i-primi-30-minuti-dall-installazione-al-primo-trading-system-rplot.png

E' il puntino rosso.
 
CREN par(mai = c(.5, .75, .5, .75))
come faccio a modificare i margini, mi da sempre errore, io ho provato a modificare questo sopra, è giusto?
 
Cren ho letto, , ma non sono arrivato ad una conclusione; Quale mi consigli di inserire?
Proverei con valori che cambiano da 0.5 a 1 finché non trovi la combinazione più leggibile... ma se hai 20 titoli uscirà comunque un casino, ti conviene fare un plot per volta e salvarteli come immagine.

Quindi usa pure

par(mfrow = c(1,1))

per avere un solo quadrante.

Questo errore qui che hai riportato
Errore in plot.new() : figure margins too large
questo è l'errore che mi esce.......
è tipico di troppa roba nello stesso plot.
 
Ultima modifica:
CREN cosi me li fa vedere tutti di seguito, non ce la faccio a salvarli tutti i grafici, come posso richiamarli. E poi mi esce solo il grafico sul piano media varianza, non esce il grafico che mi hai spiegato tu dei residui (quello con le barre nere e blu)
 

Users who are viewing this thread

Back
Alto