Calcolare la frontiera efficiente usando una griglia di rendimenti target
Come hai visto, un modo per calcolare la frontiera efficiente è definire prima una griglia di rendimenti target e poi, per ciascun target, trovare il portafoglio che ha un rendimento atteso pari al target con la varianza più bassa possibile.
Ma qual è una griglia ragionevole di rendimenti target? Imposterai il rendimento target massimo al rendimento medio massimo dei titoli. Idealmente, imposteresti il rendimento target minimo al rendimento del portafoglio a varianza minima. Poiché non conosci ancora il rendimento di quel portafoglio a varianza minima, crea una griglia usando il minimo dei rendimenti medi di tutti i titoli.
In questo esercizio, userai un ciclo for per calcolare la tua griglia di rendimenti medi potenziali del portafoglio, deviazioni e pesi.
Questo esercizio fa parte del corso
Introduzione all'analisi di portafoglio in R
Istruzioni dell'esercizio
- Calcola le medie delle colonne di
returns(usandocolMeans()), e chiamalestockmu. - Crea una sequenza (seq()) di lunghezza 50, che inizi da un tasso privo di rischio dell'1% e termini al valore massimo di
stockmu, chiamatagrid. - Inizializza due vettori vuoti con la stessa lunghezza di
gridusando rep(), dove memorizzerai le medie e le deviazioni standard del portafoglio. Chiamalivpmevpsd. - Inizializza una matrice vuota di 50 righe e 30 colonne. Chiamala
mweights. Puoi usare la funzionematrix()per farlo. - Crea un ciclo for che inizi dal primo valore di
gride termini all'ultimo. Il ciclo for dovrebbe creare un portafoglio chiamatooptusandoreturnse con un rendimento target pari agrid. - A ogni iterazione, il ciclo for dovrebbe riempire i vettori
vpm($pm),vpsd($ps) con i rispettivi valori estratti daopt. - Memorizza i pesi del portafoglio riga per riga in
mweights($pw).
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# Calculate each stocks mean returns
# Create a grid of target values
grid <- seq(from = ___, to = ___, length.out = ___)
# Create empty vectors to store means and deviations
vpm <- vpsd <-
# Create an empty matrix to store weights
mweights <- matrix(NA, 50, 30)
# Create your for loop
for(i in 1:length(grid)) {
opt <- portfolio.optim(x = ___, pm = ___[i])
vpm[i] <- ___$__
vpsd[i] <- ___$__
mweights[i, ] <- ___$__
}