시작하기무료로 시작하기

동인 2: 포트폴리오 가중치 선택

투자자는 포트폴리오 샤프 지수로 측정되는 위험 대비 수익을 최대화하도록 가중치를 최적화할 수 있습니다.

전체 포트폴리오를 두 자산에만 투자하는 특수한 경우, 결정해야 할 가중치는 하나뿐입니다. 두 번째 자산의 가중치는 첫 번째 자산의 가중치를 1에서 뺀 값과 같기 때문입니다.

이번에는 미국 주식과 미국 채권으로 구성된 포트폴리오를 예로 들어 보겠습니다. 무위험 수익률이 0이라고 가정하고, 가능한 많은 가중치를 전수 탐색해 포트폴리오 샤프 지수가 가장 높아지는 가중치를 선택하는 브루트포스 방식으로 진행하겠습니다.

이 연습은 강의의 일부입니다

R로 배우는 포트폴리오 분석 입문

강의 보기

연습 안내

  • seq()를 사용해 0에서 시작하여 1에서 끝나고, 0.01 간격으로 증가하는 벡터 grid를 만드세요.
  • grid와 동일한 길이의 빈 벡터 vsharpe를 초기화하세요. 일반적으로 rep() 함수로 NA를 담은 벡터를 만든 뒤, 다음에 작성할 루프에서 이 NA들을 교체합니다.
  • for 루프에서 grid의 가능한 각 가중치에 대한 샤프 지수를 계산합니다. for 루프의 첫 번째 명령은 grid의 i번째 요소를 선택해 객체 weight에 저장하며, 이는 각 반복마다 바뀝니다.
  • 가중치가 변할 때 포트폴리오 수익률이 어떻게 달라지는지 확인해 봅니다. preturns 객체를 만드세요. 값은 weightreturns_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)
코드 편집 및 실행