동인 2: 포트폴리오 가중치 선택
투자자는 포트폴리오 샤프 지수로 측정되는 위험 대비 수익을 최대화하도록 가중치를 최적화할 수 있습니다.
전체 포트폴리오를 두 자산에만 투자하는 특수한 경우, 결정해야 할 가중치는 하나뿐입니다. 두 번째 자산의 가중치는 첫 번째 자산의 가중치를 1에서 뺀 값과 같기 때문입니다.
이번에는 미국 주식과 미국 채권으로 구성된 포트폴리오를 예로 들어 보겠습니다. 무위험 수익률이 0이라고 가정하고, 가능한 많은 가중치를 전수 탐색해 포트폴리오 샤프 지수가 가장 높아지는 가중치를 선택하는 브루트포스 방식으로 진행하겠습니다.
이 연습은 강의의 일부입니다
R로 배우는 포트폴리오 분석 입문
연습 안내
seq()를 사용해 0에서 시작하여 1에서 끝나고, 0.01 간격으로 증가하는 벡터grid를 만드세요.grid와 동일한 길이의 빈 벡터vsharpe를 초기화하세요. 일반적으로 rep() 함수로 NA를 담은 벡터를 만든 뒤, 다음에 작성할 루프에서 이 NA들을 교체합니다.- for 루프에서
grid의 가능한 각 가중치에 대한 샤프 지수를 계산합니다. for 루프의 첫 번째 명령은grid의 i번째 요소를 선택해 객체weight에 저장하며, 이는 각 반복마다 바뀝니다. - 가중치가 변할 때 포트폴리오 수익률이 어떻게 달라지는지 확인해 봅니다.
preturns객체를 만드세요. 값은weight에returns_equities를 곱한 값과(1-weight)에returns_bonds를 곱한 값을 더한 것입니다. - 다음으로,
vsharpe의 NA를preturns의 연율화 샤프 지수(SharpeRatio.annualized())로 교체하세요. - 잠재적 가중치(
grid)를 x축에, 샤프 지수를 y축에 두고 그래프를 그리는plot함수를 완성하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# Create a grid
grid <- seq(from = ___, to = ___, by = ___)
# Initialize an empty vector for Sharpe ratios
vsharpe <- rep(NA, times = ___ )
# Create a for loop to calculate Sharpe ratios
for(i in 1:length(grid)) {
weight <- ___[i]
preturns <- ___ * ___ + (1 - ___) * ___
vsharpe[i] <- SharpeRatio.annualized(___)
}
# Plot weights and Sharpe ratio
plot(___, ___, xlab = "Weights", ylab= "Ann. Sharpe ratio")
abline(v = grid[vsharpe == max(vsharpe)], lty = 3)