Kom igångKom igång gratis

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

Visa kurs

Övningsinstruktioner

  • Beräkna kolumnmedelvärden för returns med colMeans() och spara resultatet i stockmu.
  • 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 denna grid.
  • Initiera två tomma vektorer med samma längd som grid med hjälp av rep(), där du lagrar portföljens medelvärden och standardavvikelser. Kalla dessa vpm och vpsd.
  • Initiera en tom matris med 50 rader och 30 kolumner. Kalla denna mweights. Du kan använda funktionen matrix() för detta.
  • Skapa en for-slinga som börjar på det första värdet i grid och slutar på det sista. For-slingan ska skapa en portfölj kallad opt med hjälp av returns och med en målavkastning från grid.
  • För varje iteration ska for-slingan fylla vektorerna vpm ($pm) och vpsd ($ps) med respektive värden från opt.
  • 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, ] <- ___$__
}
Redigera och kör kod