Menghitung efficient frontier menggunakan grid target return
Seperti yang telah Anda lihat, salah satu pendekatan untuk menghitung efficient frontier adalah terlebih dahulu mendefinisikan grid target return dan kemudian, untuk setiap target return, mencari portofolio yang memiliki ekspektasi return sama dengan target return pada varians serendah mungkin.
Namun, seperti apa grid target return yang masuk akal? Anda akan menetapkan target return maksimum sama dengan rata-rata return maksimum dari saham-saham. Idealnya, Anda akan menetapkan target return minimum sama dengan return dari portofolio varians minimum. Karena Anda belum mengetahui return portofolio varians minimum ini, Anda membuat grid menggunakan nilai minimum dari rata-rata return seluruh saham.
Dalam latihan ini, Anda akan menggunakan for loop untuk menghitung grid kandidat mean portofolio, deviasi, dan bobotnya.
Latihan ini adalah bagian dari kursus
Pengantar Analisis Portofolio di R
Petunjuk latihan
- Hitung mean kolom dari
returns(menggunakancolMeans()), dan beri namastockmu. - Buat sebuah deret (seq()) sepanjang 50, dimulai dari tingkat bebas risiko 1% dan berakhir pada nilai maksimum
stockmu, beri namagrid. - Inisialisasi dua vektor kosong dengan panjang yang sama dengan
gridmenggunakan rep(), tempat Anda akan menyimpan mean dan simpangan baku portofolio. Beri namavpmdanvpsd. - Inisialisasi sebuah matriks kosong dengan 50 baris dan 30 kolom. Beri nama
mweights. Anda dapat menggunakan fungsimatrix()untuk melakukannya. - Buat for loop yang dimulai dari nilai pertama
gridhingga nilai terakhir. For loop harus membuat portofolio bernamaoptmenggunakanreturnsdan dengan target return sebesargrid. - Pada setiap iterasi, for loop harus mengisi vektor
vpm($pm),vpsd($ps) dengan nilai masing-masing dariopt. - Simpan bobot portofolio baris demi baris ke dalam
mweights($pw).
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
# 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, ] <- ___$__
}