Tính đường biên hiệu quả bằng một lưới các mức lợi suất mục tiêu
Như bạn đã thấy, một cách tiếp cận để tính đường biên hiệu quả là trước hết xác định một lưới các mức lợi suất mục tiêu, rồi với mỗi mức đó, tìm danh mục có lợi suất kỳ vọng bằng lợi suất mục tiêu với phương sai thấp nhất có thể.
Vậy lưới các mức lợi suất mục tiêu hợp lý là gì? Bạn sẽ đặt lợi suất mục tiêu tối đa bằng lợi suất trung bình tối đa của các cổ phiếu. Lý tưởng nhất, bạn sẽ đặt lợi suất mục tiêu tối thiểu bằng lợi suất của danh mục phương sai tối thiểu. Vì hiện bạn chưa biết lợi suất của danh mục phương sai tối thiểu, hãy tạo lưới bằng cách lấy mức tối thiểu của lợi suất trung bình từ tất cả các cổ phiếu.
Trong bài tập này, bạn sẽ dùng một vòng lặp for để tính lưới các giá trị trung bình danh mục tiềm năng, độ lệch chuẩn, và trọng số.
Bài tập này là một phần của khóa học
Giới thiệu Phân tích Danh mục đầu tư bằng R
Hướng dẫn bài tập
- Tính trung bình theo cột của
returns(dùngcolMeans()) và gọi làstockmu. - Tạo một dãy (seq()) gồm 50 phần tử, bắt đầu từ lãi suất phi rủi ro 1% và kết thúc ở giá trị lớn nhất của
stockmu, gọi làgrid. - Khởi tạo hai vector rỗng có cùng độ dài với
gridbằng rep(), nơi bạn sẽ lưu trung bình và độ lệch chuẩn của danh mục. Gọi chúng làvpmvàvpsd. - Khởi tạo một ma trận trống có 50 hàng và 30 cột. Gọi là
mweights. Bạn có thể dùng hàmmatrix()để tạo. - Tạo một vòng lặp for bắt đầu từ giá trị đầu tiên của
gridvà kết thúc ở giá trị cuối cùng. Vòng lặp for này sẽ tạo một danh mục tênoptdùngreturnsvà đặt lợi suất mục tiêu bằnggrid. - Mỗi lần lặp, vòng for sẽ điền vào các vector
vpm($pm),vpsd($ps) với các giá trị tương ứng lấy từopt. - Lưu các trọng số danh mục theo từng dòng vào
mweights($pw).
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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, ] <- ___$__
}