해리 마코위츠는 포트폴리오 선택 이론으로 분산투자의 지표를 만든 사람이며 1990년 이 논문으로 노벨경제학상을 받습니다.
월가는 오래전부터 “계란을 한 바구니에 담지 말라"는 격언으로 분산투자의 중요성을 알고 있었지만 이를 수학적으로 증명하지 못하였습니다.
해리 마코위츠의 포트폴리오 선택 이론이 위대한 것은 분산투자를 어떻게 하면 수익률 변동폭을 최소한으로 줄일 수 있는지 증명하였다는 것입니다.
그럼 PyPortfolioOpt 파이썬 라이브러리로 각 자산군의 효율적 투자선 값을 쉽게 구해보도록 하겠습니다. 자산군은 해리 브라운의 영구 포트폴리오를 예시로 진행하겠습니다.
만약 영구포트폴리오를 운영한다면 1년에 한번 효율적 투자선을 구하고 그 비율대로 리밸런싱하는 것도 방법인것 같습니다.
코드는 아래와 같으면 colab링트도 아래에 공유하였으며, 해리마코위츠의 60/40 포트폴리오 이전글도 참고 하시기 바랍니다.
2022.11.05 - [투자 전략 연구/퀀트 투자 전략] - 60/40 자산배분전략(feat. 해리마코위츠)
60/40 자산배분전략(feat. 해리마코위츠)
2000년 전부터 솔로몬 대왕은 7~8개에 분산투자 하라는 말을 하였고, 랍비는 200년 전 사업, 부동산, 현금에 투자하는 전략을 말하였습니다. 신기하게도 2000년 동안 자산 배분 전략에는 변화가 없었
sys-stock.tistory.com
효율적 투자선(Efficient Frontier)
# matplotlib 임포트
import matplotlib.pyplot as plt
%matplotlib inline
# FinanceDataReader 설치
!pip install finance-datareader
import FinanceDataReader as fdr
import pandas as pd
import numpy as np
from tqdm.notebook import tqdm
# PyPortfolioOpt 설치
!pip install PyPortfolioOpt
# pd.concat()로 합치기
stock_list = [
["SPY", "SPY"],
["TLT", "TLT"],
["GLD", "GLD"],
["SHY", "SHY"]
]
df_list = [fdr.DataReader(code, '2007-01-01 ')['Close'] for name, code in stock_list]
df = pd.concat(df_list, axis=1)
df.columns = [name for name, code in stock_list]
df.head(10)
from pypfopt.expected_returns import mean_historical_return
from pypfopt.risk_models import CovarianceShrinkage
#자산군의 평균 기대 수익률
mu = mean_historical_return(df)
#CovarianceShrinkage 분산 값구하기
S = CovarianceShrinkage(df).ledoit_wolf()
from pypfopt.efficient_frontier import EfficientFrontier
#평균기대 수익률, 분산 값을 넣어줘서 효율적인 프로티어를 구함(Efficient Frontier)
ef = EfficientFrontier(mu, S)
#최대 샤프 비율 구하기
weights = ef.max_sharpe()
print(weights)
cleaned_weights = ef.clean_weights()
print(cleaned_weights)
구글 colab 링크
https://colab.research.google.com/drive/1BvK1_y4WUw5r3Ddk8gr_WEtHngCmOvKv?usp=sharing
'파이썬 백테스트' 카테고리의 다른 글
Google Colab에서 QuantStats 라이브러리 사용하기 (0) | 2023.01.16 |
---|---|
FinanceDataReader 금융데이터 알아보기 (0) | 2022.12.28 |
백테스트 실습 환경 소개(Google Colab) (0) | 2022.12.21 |
왜? 백테스트를 해야 하는가? (0) | 2022.11.14 |
댓글