*해당 코드는 파이썬으로 배우는 포트폴리오 서적의 코드를 인용하여 작성한 코드입니다.
투자를 하면서 사람들이 크게 간과하는 점은 내가 가지고 있는 모든 종목의 합산인 포트폴리오의 움직임을 간과하는 것이다.
예를 들어, 내가 한 달 동안 50% 벌더라도 다음 달에 50% 수익률이 떨어진다면 우리의 계좌는 본전도 못 찾는 상황이 온다.
결국, 우리의 총수익이 얼마나 증가했는지가 투자의 최종 목표라고 볼 수 있다.
오늘은 대한민국 대표 주식인 삼성전자, 네이버, 카카오를 이용하여 포트폴리오를 구성한다면 어떤 수익과 흐름이 나오는지 알아보자.
[삼성전자, 네이버, 카카오 차트 현황]
[분석 조건]
* 기간 - 2015.01.01 ~ 2022.01.01
* 분석 가격 - 야후 파이낸스 수정주가 (Adj Close)
* 분석대상 - 1. 삼성전자
- 2. 카카오
- 3. 네이버
* 파이썬 사용 패키지 : numpy, pandas, matplotlib 등등
[작성 코드]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
import numpy as np
import pandas as pd
from pandas_datareader import data as web
import matplotlib.pyplot as plt
import matplotlib as mpl
tickers = ['005930.KS','035420.KS', '035720.KS']
pxclose = pd.DataFrame()
for t in tickers :
pxclose[t] = web.DataReader(t, 'yahoo', start='01-01-2015', end='01-01-2022')['Adj Close']
dailyReturn = pxclose.pct_change()
annualReturn = dailyReturn.mean()*250
cov_daily = dailyReturn.cov()
cov_annual = cov_daily * 250
p_returns =[]
p_vol = []
p_weights = []
n_assets = len(tickers)
n_ports = 30000
for s in range(n_ports) :
wgt = np.random.random(n_assets)
wgt /= np.sum(wgt)
annual = np.dot(wgt, annualReturn)
vol = np.sqrt(np.dot(wgt.T,np.dot(cov_annual,wgt)))
p_returns.append(annual)
p_vol.append(vol)
p_weights.append(wgt)
p_returns = np.array(p_returns)
p_vol = np.array(p_vol)
colors = p_returns / p_vol
plt.style.use('seaborn')
plt.scatter(p_vol, p_returns, c=colors, marker='o', cmap=mpl.cm.jet)
plt.xlabel('Vol(Std.Deviation)')
plt.ylabel('Expected Returns')
plt.title('Efficient Frontier')
plt.show()
|
cs |
[분석 결과]
상기 그림은 빨간색 점들을 기준으로 해당 그림이 나타내는 함의는 조회 기간 내에 22% 이상의 수익률로 표준편차 0.22 이상의 포트폴리오가 만들어진다는 수치를 보여준다. (정확한 의미는 아님)
이와 같은 그림은 다른 종목들을 결합한 포트폴리오와 비교하였을 때 좀 더 의미 있는 분석을 보여줄 수 있는데,
부동산, 금, 해외주식 등을 섞어 만들어본 아래의 포트폴리오와 비교해보자.
앞서 만들어본 포트폴리오 와는 다르게 빨간색 점들을 기준으로 수익률은 다소 떨어지긴 하였으나 (16%) 표준편차가 내려간 것을 확인해볼 수 있다. (표준편차 0.12 이상)
수익률을 기준으로 생각해본다면 당연히 앞에 나온 포트폴리오가 나아 보이지만, 기간을 변경하거나 지금과 같이 금리 하락 및 인플레이션 상승으로 인한 주가 하락 국면을 생각해본다면 뒤쪽에 제시한 포트폴리오가 훨씬 유리할 것으로 보인다.
이글의 맨 앞에서 말한 것처럼 결국 우리의 총자산이 상승하는 것이 최종적인 목표이기 때문에 자산배분을 이용한 투자의 장점을 고려해보는 것도 좋을 것 같다.
아래는 내가 코드를 작성하면서 인용한 도서의 링크이다.
삼성전자와 반도체 지수업종의 상관관계가 궁금하다면...
댓글