본문 바로가기
Quant

퀀트, 파이썬 / 삼성전자, 네이버, 카카오로 효율적 투자선 구하기 (Efficient Frontier) / numpy, pandas, seaborn, yahoo-finance 사용 - 파이썬 자산배분, 효율적 투자선, 금융공학

by KTC_CHANCE 2022. 6. 22.

*해당 코드는 파이썬으로 배우는 포트폴리오 서적의 코드를 인용하여 작성한 코드입니다.

 

투자를 하면서 사람들이 크게 간과하는 점은 내가 가지고 있는 모든 종목의 합산인 포트폴리오의 움직임을 간과하는 것이다.

예를 들어, 내가 한 달 동안 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 이상)

 

수익률을 기준으로 생각해본다면 당연히 앞에 나온 포트폴리오가 나아 보이지만, 기간을 변경하거나 지금과 같이 금리 하락 및 인플레이션 상승으로 인한 주가 하락 국면을 생각해본다면 뒤쪽에 제시한 포트폴리오가 훨씬 유리할 것으로 보인다.

 

이글의 맨 앞에서 말한 것처럼 결국 우리의 총자산이 상승하는 것이 최종적인 목표이기 때문에 자산배분을 이용한 투자의 장점을 고려해보는 것도 좋을 것 같다.

 

아래는 내가 코드를 작성하면서 인용한 도서의 링크이다.

 

파이썬으로 배우는 포트폴리오 - YES24

포트폴리오, 재무 기초, 파이썬 프로그래밍 기술까지실제 재무 데이터로 구현하는 이론과 실전의 최적 조합!『파이썬으로 배우는 포트폴리오』 주식 투자에서 위험을 줄이고 투자 수익을 극대

www.yes24.com

 

삼성전자와 반도체 지수업종의 상관관계가 궁금하다면...

 

퀀트, 파이썬 / 삼성전자와 필라델피아 반도체지수의 상관관계 구하기 / numpy, pandas 사용

필라델피아 반도체 지수는 글로벌 반도체 기업들의 주가 벤치마크로써 많이 인용된다. 과연 삼성전자는 이 지수에 얼마나 상관관계를 가지고 있는지 알아보자. [삼성전자와 반도체지수 차트현

ktcf.tistory.com

 

댓글