MPT ; mean-variance portfolio = mean / variance
MPT의 문제점
1. 모든 자산의 수익률분포는 정규분포라고 가정한다.
2. 특정자산에 비중이 집중된 포트폴리오가 만들어질 수있다.
3. 자산의 수익률, 변동성과 자산간 상관성이 변하지 않는다고 가정한다.
4. input value에 따라 자산비중weights이 민감하게 변한다.
not robust to market changes, highly sensitive and hence prove to be bad estimators of true market parameters.
Bayesian approach
-목적: stable/slowly changing suggested asset weightings when faced with changing input values.
-필수개념: CAPM, reverse optimisation, mixed estimation, the “universal hedge ratio”/global CAPM , mean-variance optimisation
-방법: Bayesian theory to combine historical market data (prior) with additional investor views (likelihood) to generate a posterior estimate of expected returns and covariance in sync with an investor’s intuitions.
1) prior distribution of market return (multivariate)
*자산 수익률이 아닌 균형 수익률을 사용한다.
2) likelihood : investor’s distribution of the returns
*특정 자산에 대한 (예상)절대수익률 또는 시장 수익률 대비 (예상)상대수익률을 P와 Q로 분해하여 담음.
- 𝑄 = a vector of means that contains specific values denoting the portfolio views
; shape = the number of views (K) x 1 - 𝑃 = a picking matrix. denoting which assets in our portfolio are involved in the views.
- Ω = a diagonal matrix quantifying the variance(errors) in the investor’s views.
3) posterior Market Distribution
Example
앞서 말했듯 "Robust"한 포트폴리오를 만드는게 목적이다. 기존 Mean-Variance portfolio는 역사적 수익률과 변동성에 취약하기 때문에 weights의 차이가 Black-litterman 모형보다 눈에 띄게 크거나 작다. 시장상황에 따라 크게 변동함을 유추할 수 있다.
View 1: ‘Emerging Markets’ will have an absolute excess return of 9.25%
View 2: US Large Cap Growth and US Small Cap Growth will outperform US Large Cap Value and US Small Cap Value by 0.5%
View 3: ‘Intl Developed ex-US Market’ will have an absolute excess return of 5.5%
!pip install mlfinlab
# !pip install portfoliolab==0.1.0 # 2021년 Feb부터 mlfinlab에서 따로 떼어냄
from mlfinlab.portfolio_optimization.bayesian import VanillaBlackLitterman
excess_asset_returns = asset_returns.subtract(treasury_rate, axis=0)
cov = excess_asset_returns.cov()
market_return = excess_asset_returns.mean().multiply(asset_weights['weight'].values).sum()
market_var = np.matmul(asset_weights.values.flatten().T,
np.matmul(cov.values, asset_weights.values.flatten()))
risk_aversion = market_return / market_var
tau = 0.025
views = [0.0925, 0.005, 0.055]
pick_list = [
{"Emerging Markets": 1.0},
{"US Large Cap Growth": 0.85,
"US Large Cap Value": -0.85,
"US Small Cap Growth": 0.15,
"US Small Cap Value": -0.15},
{"Intl Developed ex-US Market": 1.0}]
bl = VanillaBlackLitterman()
bl.allocate(covariance=cov,
market_capitalised_weights=asset_weights,
investor_views=views,
pick_list=pick_list,
asset_names=cov.columns,
tau=tau,
risk_aversion=risk_aversion)
weights_df = bl.weights.T * 100
weights_df.columns = ['BL_opt']
weights_df.style.format('{:,.2f}%')
* library : portfoliolab
CAPM ( Capital Asset Pricing 모델 ) market portfolio
expected return = risk free rate + beta * excess market return
- excess market return = market return - risk free rate
- beta = correlation between market and asset
typical quadratic utility for portfolio optimisation
- 𝜋 = the vector of implied excess equilibrium weights
Source
- Stuart. J , pythonforfinance
- hudson-and-thames-portfoliolab.readthedocs-hosted.com/en/latest/bayesian/black_litterman.html
'Trading > Portfolio opt' 카테고리의 다른 글
MAB를 활용한 최적화 (0) | 2021.02.01 |
---|---|
Generic algorithm for optimization(not yet) (0) | 2021.01.27 |
Multi-Threading for optimization(ver. Brute force) (0) | 2021.01.27 |
포트폴리오 잠재 리스크 (0) | 2021.01.26 |
포트폴리오 최적화;MPT (0) | 2021.01.26 |