Calcularea frontierei eficiente folosind o grilă de randamente țintă
Așa cum ai văzut, o abordare pentru calcularea frontierei eficiente constă în a defini mai întâi grila de randamente țintă și apoi, pentru fiecare randament țintă, să identifici portofoliul cu un randament așteptat egal cu cel țintă, la cea mai mică varianță posibilă.
Dar care este o grilă rezonabilă de randamente țintă? Vei seta randamentul țintă maxim la valoarea maximă a randamentului mediu al acțiunilor. Ideal ar fi să setezi randamentul țintă minim la randamentul portofoliului cu varianță minimă. Deoarece nu cunoști încă acest randament, vei construi grila folosind minimul randamentelor medii ale tuturor acțiunilor.
În acest exercițiu, vei folosi o buclă for pentru a calcula grila de medii, abateri și ponderi potențiale ale portofoliului.
Acest exercițiu face parte din cursul
Introducere în analiza portofoliului în R
Instrucțiuni pentru exercițiu
- Calculează mediile pe coloane ale lui
returns(folosindcolMeans()) și numește rezultatulstockmu. - Creează o secvență (seq()) de lungime 50, care începe de la o rată fără risc de 1% și se termină la valoarea maximă a lui
stockmu. Numește această secvențăgrid. - Inițializează doi vectori goali cu aceeași lungime ca
gridfolosind rep(), în care vei stoca mediile și abaterile standard ale portofoliului. Numește-ivpmșivpsd. - Inițializează o matrice goală cu 50 de rânduri și 30 de coloane. Numește-o
mweights. Poți folosi funcțiamatrix()pentru aceasta. - Creează o buclă
forcare pornește de la prima valoare a luigridși se termină la ultima. Bucla ar trebui să creeze un portofoliu numitoptfolosindreturnsși cu un randament țintă egal cu valoarea curentă dingrid. - La fiecare iterație, bucla
forar trebui să completeze vectoriivpm($pm) șivpsd($ps) cu valorile corespunzătoare dinopt. - Stochează ponderile portofoliului rând cu rând în
mweights($pw).
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# 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, ] <- ___$__
}