목표 수익률 그리드를 사용해 효율적 프런티어 계산하기
앞에서 보셨듯이, 효율적 프런티어를 계산하는 한 가지 방법은 먼저 목표 수익률의 그리드를 정의한 다음, 각 목표 수익률에 대해 기대수익률이 그 목표와 같으면서 분산이 최소가 되도록 하는 포트폴리오를 찾는 것입니다.
그렇다면 합리적인 목표 수익률 그리드는 무엇일까요? 최대 목표 수익률은 개별 주식의 평균 수익률 중 최댓값으로 설정하겠습니다. 이상적으로는 최소 목표 수익률을 최소분산 포트폴리오의 수익률로 잡아야 합니다. 하지만 아직 최소분산 포트폴리오의 수익률을 모르므로, 우선 모든 주식의 평균 수익률 중 최소값을 사용해 그리드를 만들겠습니다.
이 연습 문제에서는 for 반복문을 사용해 가능한 포트폴리오의 평균, 표준편차, 그리고 가중치 그리드를 계산해 보겠습니다.
이 연습은 강의의 일부입니다
R로 배우는 포트폴리오 분석 입문
연습 안내
returns의 열 평균(colMeans())을 계산해stockmu라고 하세요.- 길이가 50이고 시작은 무위험이자율 1%, 끝은
stockmu의 최댓값인 수열(seq())을 만들어grid라고 하세요. - rep()를 사용해
grid와 같은 길이의 빈 벡터 두 개를 초기화하고, 포트폴리오의 평균과 표준편차를 저장하세요. 각각vpm과vpsd라고 하세요. - 50행 30열의 빈 행렬을 초기화하고
mweights라고 하세요.matrix()함수를 사용할 수 있어요. - for 반복문을 생성해
grid의 첫 번째 값부터 마지막 값까지 순회하세요. 각 반복에서returns와 목표 수익률grid를 사용해opt라는 포트폴리오를 만드세요. - 각 반복에서
opt의 값을 사용해 벡터vpm($pm),vpsd($ps)를 각각 채우세요. - 포트폴리오 가중치(
$pw)는mweights에 행 단위로 저장하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# 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, ] <- ___$__
}