Beräkna den effektiva fronten med ett rutnät av målavkastningar
Som du har sett är ett sätt att beräkna den effektiva fronten att först definiera ett rutnät av målavkastningar och sedan, för varje målavkastning, hitta den portfölj som har en förväntad avkastning lika med målvärdet vid lägsta möjliga varians.
Men vad är ett rimligt rutnät av målavkastningar? Du sätter den maximala målavkastningen till den högsta genomsnittliga avkastningen bland aktierna. Helst skulle du sätta den minsta målavkastningen till avkastningen för portföljen med lägsta varians. Eftersom du ännu inte känner till den portföljens avkastning skapar du ett rutnät med hjälp av det lägsta genomsnittsvärdet bland alla aktier.
I den här övningen använder du en for-slinga för att beräkna ditt rutnät av potentiella portföljmedelvärden, standardavvikelser och vikter.
Den här övningen är en del av kursen
Introduktion till portföljanalys i R
Övningsinstruktioner
- Beräkna kolumnmedelvärden för
returnsmedcolMeans()och spara resultatet istockmu. - Skapa en sekvens (seq()) med längden 50, som börjar vid en riskfri ränta på 1 % och slutar vid det högsta värdet i
stockmu. Kalla dennagrid. - Initiera två tomma vektorer med samma längd som
gridmed hjälp av rep(), där du lagrar portföljens medelvärden och standardavvikelser. Kalla dessavpmochvpsd. - Initiera en tom matris med 50 rader och 30 kolumner. Kalla denna
mweights. Du kan använda funktionenmatrix()för detta. - Skapa en for-slinga som börjar på det första värdet i
gridoch slutar på det sista. For-slingan ska skapa en portfölj kalladoptmed hjälp avreturnsoch med en målavkastning frångrid. - För varje iteration ska for-slingan fylla vektorerna
vpm($pm) ochvpsd($ps) med respektive värden frånopt. - Lagra portföljvikterna rad för rad i
mweights($pw).
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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, ] <- ___$__
}