본문 바로가기
Quant

파이썬, 구글 코랩 / 야후 파이낸스로 주식 수익률 계산

by KTCF 2021. 7. 12.
파이썬, 구글 코랩 / 야후 파이낸스로 주식 수익률 계산

이전 포스팅을 통해 야후 파이낸스로 주식 데이터를 불러오는 방법을 알아봤다.
이번 포스팅에서는 불러온 주식 데이터를 활용하여 수익률을 계산하는 방법을 알아보려고 한다.

▼▼▼이전 포스팅을 아직 못 보셨다면...▼▼▼

파이썬, 구글 코랩 / 야후 파이낸스로 주가 데이터 추출

이번에는 야후 파이낸스로 주가 데이터를 추출하는 방법을 알아보고자 한다. 데이터 분석의 꽃은 주식 데이터 분석이고, 주식 데이터 분석은 주가를 불러오는 것에서 시작한다. !pip install yfiance

ktcf.tistory.com


※ 사전 준비
판다스(pandas), 넘파이(numpy) import 완료
야후 파이낸스(yfinance) install 및 import 후 애플의 주식 데이터를 데이터프레임 형태로 다운로드

df.head()

현재 위와 같은 애플의 주식 데이터를 갖고 있다.
여기서는 액면분할 등으로 인한 주가 변동을 감안하기 위해 수정 주가를 활용하여 수익률을 계산한다.

df = df.loc[:, ['Adj Close']]
df = df.loc[:, ['Adj Close']]

loc 데이터 프레임의 일부 데이터만 선택하는 메소드이다.
위의 메소드를 실행하면, 'Adj Close'라는 열의 전체 데이터를 선택한다는 의미이다.
데이터를 출력해보면 아래와 같은 결과를 볼 수 있다.

* loc[[선택하려는 행], [선택하려는 열]]
** :는 행 또는 열 전체 선택

수정주가 열만 남았다.

df.rename(columns={'Adj Close' : 'adj_close'}, inplace=True)
df.rename(columns={'Adj Close' : 'adj_close'}, inplace=True)


rename은 말 그대로 이름을 변경하는 메소드이다.
위의 메소드를 해석하면, "'Adj Close'라는 열을 'adj_close'로 변경하고, 바로 적용해줘"라는 뜻이다.
결과는 아래와 같다.

adj_close로 변경

  df['simple_rtn'] = df.adj_close.pct_change()  
df['simple_rtn'] = df.adj_close.pct_change()

'(당일 주가 - 전일 주가) / 전일 주가'의 방식을 사용하여 일별 수익률을 계산했다.
데이터프레임 중 pct_change() 메소드만 호출하면 쉽게 계산할 수 있다.

* 만약, n일 전 대비 수익률을 알고 싶다면 괄호 안에 'periods=n'만 넣어주면 된다.
→ 2일 전 대비 수익률: df['simple_rtn'] = df.adj_close.pct_change(periods=2)

전일 대비 수익률
2일 전 대비 수익률

  df['log_rtn'] = np.log(df.adj_close/df.adj_close.shift(1))  
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))

출처: www.delftstack.com
일별 수익률 결과값

로그 수익률을 사용하는 이유

로그 수익률을 사용하는 이유는 ①증감이 대칭되고, 이에 따라 ②수익률 간 합산이 가능하기 때문이다.
100원짜리 주식을 투자할 경우, 주가가 150원이 되었다가 다시 100원이 되었다고 가정하자. 이 경우, 주가 상승에 따른 단순 수익률은 50%*이고, 주가 하락에 따른 단순 수익률은 -33.3%**이다.
결과적으로, 주식 보유에 따른 손익의 변화는 없으나 주가 상승과 하락에 따른 단순 수익률에는 차이가 있다.

* 주가 상승에 따른 수익률 계산 : (150-100) / 100 = 50%
** 주가 하락에 따른 수익률 계산 : (100-150) / 150 = -33.3%

반면, 이를 로그 수익률로 계산할 경우, 주가 상승에 따른 수익률은 40.5%이고, 주가 하락에 따른 수익률도 -40.5%이다. 즉, 절대값은 같고 부호가 반대 방향이다. 따라서, 로그 수익률은 단순 합산을 통해 주식 보유에 따른 수익률을 계산할 수 있다.

절대값 동일

댓글