-
[파이썬] 개별 주식 일별 수익률 계산 (Calculate daily individual stock returns)코딩/파이썬 2021. 10. 9. 14:47반응형
주식 투자 혹은 주식 시장을 연구할 때 가장 기초가 되는 데이터가 바로 주식 수익률입니다. 이번 포스트에서는 파이썬으로 개별 주식 수익률을 계산하는 법에 대하여 살펴보도록 하겠습니다.
파이썬으로 개별 주식 수익률 계산하기
1. 주식 가격 데이터 다운로드(Stock price data download)
먼저 주식 수익률을 계산하기 위해서는 주식 가격 데이터가 필요합니다. 여러 가지 방법을 통해서 데이터를 구할 수 있지만 여기에서는 yahoo finance api를 활용하여 주식 가격을 다운로드해보도록 하겠습니다.
먼저 다음 코드를 통하여 yahoo finance 패키지를 설치해 줍니다.
1!pip install yfinancecs 그리고 다음과 같이 사용할 패키지를 불러와 줍니다.
1234#Packages used (사용된 패키지)import yfinance as yfimport pandas as pdimport numpy as npcs yfinance가 yahoo finance에서 주식 관련 데이터를 받아 올 수 있는 api를 제공해 주는 패키지이고, pandas와 numpy 패키지는 데이터 처리에 사용되는 패키지입니다.
yf.download() 명령어를 이용하여 다음과 같이 Apple과 Google의 가격을 다운로드해 보겠습니다. 시작 날짜는 2019-01-01로 설정하였습니다.
123#Download price data from Yahoo finance (가격 데이터 다운로드)p_apple = yf.download('AAPL',start = '2019-01-01')p_google = yf.download('GOOGL',start = '2019-01-01')cs 다운 받은 Apple 과 Google 데이터를 확인해 보면 다음과 같은 표를 볼 수 있습니다.
시가(Open), 고가(High), 저가(Low), 종가(Close), 수정 종가(Adj Close), 거래량(Volume)을 데이터로 확인해 볼 수 있습니다. 여기에서 주식 수익률을 계산하기 위해서 필요한 데이터는 수정 종가(Adj Close) 입니다.
2. 데이터 병합(Merging tables)
1번에서 다운 받은 데이터에서 Adj Close 만 뽑아내 보겠습니다. rename() 명령어는 column의 이름을 바꾸는 명령어입니다.
12p_apple = p_apple[['Adj Close']].rename(columns = {'Adj Close':'Close_Apple'})p_google = p_google[['Adj Close']].rename(columns = {'Adj Close':'Close_Google'})cs 각각의 결과는 다음과 같은 표로 나타납니다.
다음으로 위의 두 개의 dataframe을 하나로 병합하여 보겠습니다. pd.concat() 명령어를 사용하여 index 기준으로 두 개의 표를 병합합니다.
3. 일별 수익률 계산(Calculate daily returns)
다음으로 Apple과 Google의 일별 수익률을 계산해 보겠습니다. 첫 번째는 (오늘 종가 - 어제 종가) / (어제 종가) - 1 로 계산하는 수익률이며 두 번째는 로그 수익률(log return) 입니다. dropna() 명령어는 missing value (NaN)를 제거해 주는 명령어입니다.
12345678#Calculate the daily return of individual stock (개별 주식 일별 수익률 계산)#1) daily returns = (today price - previous day price)/(previous day price) - 1ptc_ret = price.pct_change(1).dropna()ptc_ret = ptc_ret.rename(columns={'Close_Apple':'Ret_Apple','Close_Google':'Ret_Google'})#2) daily log returns = ln(today price) - ln(previuos day price)log_ret = np.log(price).diff(1).dropna()log_ret = log_ret.rename(columns={'Close_Apple':'LRet_Apple','Close_Google':'LRet_Google'})cs 1) 번에서는 pct_change() 명령어를 사용하여 수익률을 계산한 것이고 2) 번은 먼저 가격에 log를 취한 후(np.log() 명령어) diff() 명령어를 이용하여 수익률을 계산한 것입니다.
결과는 다음과 같습니다.
4. 누적 수익률 계산(Calculate cumulative returns)
마지막으로 누적 수익률을 계산해 보도록 하겠습니다. 3번에서 구한 일별 수익률을 이용하여 다음과 같이 각각 누적 수익률을 계산할 수 있습니다.
123456#1) daily returnsretPlus1 = ptc_ret + 1cum_ret = retPlus1.cumprod() - 1#2) daily log returnscum_log_ret = log_ret.cumsum()cs 1) 번은 원래 일별 수익률에 1을 더해 gross return으로 만든 후 cumprod() 명령어를 써서 누적으로 곱한(multiply) 후 다시 1을 빼서 계산한 것입니다.
2) 번의 log return은 cumsum() 명령어를 써서 누적으로 더해주면(add) 됩니다.
결과는 다음과 같습니다.
지금까지의 모든 파이썬 코드는 아래의 Google Colab 링크에서 연습해 보실 수 있습니다.
개별 주식이 아니라 여러 주식이 한 묶음으로 되어 있는 포트폴리오 수익률을 계산하는 법은 다음 링크에서 확인하실 수 있습니다.
2021.10.11 - [코딩/파이썬] - [파이썬] 주식 포트폴리오 수익률 계산하기 (Calculate portfolio returns)
주간/월별 수익률을 계산하는 법은 다음 링크에서 확인 할 수 있습니다.
반응형'코딩 > 파이썬' 카테고리의 다른 글
[파이썬] 개별 주식 주간/월별 주익률 계산하기 (How to Calculate Weekly and Monthly returns of individual stocks) (0) 2021.10.15 [파이썬] Mean-Variance Frontier 계산하기 (최적 포트폴리오 계산하기) (4) 2021.10.14 [파이썬] 주식 포트폴리오 수익률 계산하기 (Calculate portfolio returns) (10) 2021.10.11 [파이썬] 일본어 한자에 후리가나 달기/일본어 한자 히라가나 변환 (0) 2021.09.14 [파이썬] 자막에서 텍스트만 뽑아내기 (2) 2021.03.01