이전 포스팅을 통해 야후 파이낸스로 주식 데이터를 불러오는 방법을 알아봤다.
이번 포스팅에서는 불러온 주식 데이터를 활용하여 수익률을 계산하는 방법을 알아보려고 한다.
▼▼▼이전 포스팅을 아직 못 보셨다면...▼▼▼
※ 사전 준비
판다스(pandas), 넘파이(numpy) import 완료
야후 파이낸스(yfinance) install 및 import 후 애플의 주식 데이터를 데이터프레임 형태로 다운로드
현재 위와 같은 애플의 주식 데이터를 갖고 있다.
여기서는 액면분할 등으로 인한 주가 변동을 감안하기 위해 수정 주가를 활용하여 수익률을 계산한다.
df = df.loc[:, ['Adj Close']]
loc 데이터 프레임의 일부 데이터만 선택하는 메소드이다.
위의 메소드를 실행하면, 'Adj Close'라는 열의 전체 데이터를 선택한다는 의미이다.
데이터를 출력해보면 아래와 같은 결과를 볼 수 있다.
* loc[[선택하려는 행], [선택하려는 열]]
** :는 행 또는 열 전체 선택
df.rename(columns={'Adj Close' : 'adj_close'}, inplace=True)
rename은 말 그대로 이름을 변경하는 메소드이다.
위의 메소드를 해석하면, "'Adj Close'라는 열을 'adj_close'로 변경하고, 바로 적용해줘"라는 뜻이다.
결과는 아래와 같다.
df['simple_rtn'] = df.adj_close.pct_change()
'(당일 주가 - 전일 주가) / 전일 주가'의 방식을 사용하여 일별 수익률을 계산했다.
데이터프레임 중 pct_change() 메소드만 호출하면 쉽게 계산할 수 있다.
* 만약, n일 전 대비 수익률을 알고 싶다면 괄호 안에 'periods=n'만 넣어주면 된다.
→ 2일 전 대비 수익률: df['simple_rtn'] = df.adj_close.pct_change(periods=2)
df['log_rtn'] = np.log(df.adj_close/df.adj_close.shift(1))
넘파이(numpy)의 log 메소드를 활용하여 로그 수익률을 계산했다.
이 메소드는 괄호 안을 진수로 하는 자연로그를 만드는 메소드이다.
shift는 해당 행 또는 열의 데이터를 이동하는 메소드이고, shift(1)은 각 데이터를 한 칸 밑으로 이동한다는 뜻이다.(아래 그림 참조)
* 만약, n일 전 대비 수익률을 계산하고 싶으면 'shift(n)'으로 바꿔주면 된다.
→ 2일 전 대비 수익률: df['log_rtn'] = np.log(df.adj_close/df.adj_close.shift(2))
로그 수익률을 사용하는 이유
로그 수익률을 사용하는 이유는 ①증감이 대칭되고, 이에 따라 ②수익률 간 합산이 가능하기 때문이다.
100원짜리 주식을 투자할 경우, 주가가 150원이 되었다가 다시 100원이 되었다고 가정하자. 이 경우, 주가 상승에 따른 단순 수익률은 50%*이고, 주가 하락에 따른 단순 수익률은 -33.3%**이다.
결과적으로, 주식 보유에 따른 손익의 변화는 없으나 주가 상승과 하락에 따른 단순 수익률에는 차이가 있다.
* 주가 상승에 따른 수익률 계산 : (150-100) / 100 = 50%
** 주가 하락에 따른 수익률 계산 : (100-150) / 150 = -33.3%
반면, 이를 로그 수익률로 계산할 경우, 주가 상승에 따른 수익률은 40.5%이고, 주가 하락에 따른 수익률도 -40.5%이다. 즉, 절대값은 같고 부호가 반대 방향이다. 따라서, 로그 수익률은 단순 합산을 통해 주식 보유에 따른 수익률을 계산할 수 있다.
'투자 > 퀀트' 카테고리의 다른 글
퀀트, 파이썬 / 기초코드 저장소(1) / Numpy -financial, numpy (npv, irr, 기하평균, 산술평균, 기댓값, 가중평균) (0) | 2022.06.16 |
---|---|
파이썬, 구글 코랩 / 퀀들(Quandl)로 금 가격 데이터 추출 (0) | 2021.08.02 |
파이썬, 구글 코랩 / 야후 파이낸스로 주가 데이터 추출 (0) | 2021.07.10 |
Time Series 2: 시계열 모형 소개 (1) | 2020.05.11 |
Time Series 1: Stationary(정상성) vs. Non-Stationary(비정상성) (0) | 2020.04.26 |
댓글