더북(TheBook)

이번에는 3장의 분산형 차트에서 최소분산포트폴리오를 ★로 표시해보자.

# 3장에서 구한 일간수익률 평균과 최적화로 얻은 투자 비중을 곱해 최소분산포트폴리오의 기대수익률을 구한다
rets = np.sum( ret_daily.mean( ) * res[ 'x' ] ) * 250

# 최소분산포트폴리오의 위험을 구한다
vol = np.sqrt( res[ 'x' ].T @ covmat @ res[ 'x' ] )

# 차트에 표시하기 위해 np.array로 변환한다. p_volatility와 p_returns는 3장에서 n_ports만큼의 포트폴리오를 만들면서 저장한 수익률과 변동성이다
p_volatility = np.array( p_volatility )
p_returns = np.array( p_returns )

# 변수 n_ports만큼 색상을 무작위로 얻어 ◌로 표시되는 포트폴리오 색상을 지정한다
colors = np.random.randint( 0, n_ports, n_ports )

# 분산형 차트를 그린다. 아래 코드 대부분은 3장에서 이미 사용한 것이며, plt.scatter( vol, rets, marker="*", s=500, alpha=1.0 )만 추가했다. 실행 결과 최소분산포트폴리오의 수익률과 위험이 분산 차트로 표시된다

plt.style.use( 'seaborn' )
plt.scatter( p_volatility, p_returns, c=colors, marker='o', cmap=mpl.cm.jet )
plt.scatter( vol, rets, marker="*", s=500, alpha=1.0 )
plt.xlabel( 'Volatility(Std. Deviation)' )
plt.ylabel( 'Expected Returns' )
plt.title( 'Efficient Frontier' )
plt.show( )

 

결과

▲ 그림 4-20 최소분산포트폴리오(★)

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.