[금융 파이썬 #2] 파이썬으로 단순 수익률, 로그 수익률 계산하고 인플레이션 반영하기

일반적으로 우리가 증권사 HTS나 MTS에서 보는 금융상품 그래프와 수익률은 모두 ‘일반 차트’와 ‘단순 수익률’이다.그런데 이 주식 일반 차트와 단순 수익률에는 큰 함정이 있다. 실제 가치나 수익이 왜곡돼 보인다는 것이다.예를 들어 아래 그림을 보자.코스피 일반 차트 및 로그 차트 (출처 : 중앙일보)왼쪽 코스피 일반 차트를 보면 차트 가장 왼쪽 1986년 1월~1988년 12월까지의 수익보다 차트 가장 오른쪽 2020년 2월~2021년 6월까지의 수익이 더 커 보인다.하지만 아니다. 1986년 1월에 1200만원을 투자했다면 1988년 12월에는 약 100만원이 됐을 것이다.2020년 2월에 100만원을 투자했다면 2021년 6월에는 약 200만원이 됐을 것이다.즉 단순 수익률을 나타내는 일반 차트는 실제 수익을 왜곡시키는 효과를 가져오는 것이다.그래서 쓰는 게 ‘로그 수익률’과 ‘로그 차트’다.단순수익률Rt는로그수익률 rt는로 표시된다. 이렇게 로그 수익률 산식을 적용해 앞서 코스피 일반 차트를 ‘로그 차트’로 바꾼 것이 위의 ‘코스피 로그 차트’가 된다.로그 차트에서 보면 옛 수익률과 수익에 비해 최근 등락은 귀여워 보인다.(옛날 주식 트레이더들은 모두 야수의 심장을 가지고 있는가…) 이렇게 로그 수익률은 시간이 지남에 따라 왜곡될 수 있는 수익 혹은 손해를 즉시 표현할 수 있게 해준다.그런 로그 수익률을 파이썬으로 계산해 보자.주식 단순 수익률과 로그 수익률을 파이썬으로 표현하다상기 로그 수익률 식이 간단하도록 많은 코딩이 필요 없다.1. 시간과 조정 종가만을 남길 때 시간에 “tz_localize(None)” 처리를 해야 한다. → tz_localize(None)는 날짜 데이터에서 날짜만 남기고 시간을 끄는 메서드 → 나중에 시간이 없고 날짜만 가진 데이터와 형식을 맞추기 때문에 2. 단순 수익률은 dataframe의 pct_change()를 사용하여 간단히 계산할 수 있다. → pct_change( )는 현재와 이전 원소 간의 백분율 변화를 계산한다.3. 로그 수익률은 shift(1)를 적용한 데이터를 적용하지 않은 데이터로 나눈 채 로그에 넣어버리는 것으로 계산할 수 있다. → shift(1)를 쓰면 각 요소의 지연값이 읽힌다.아까 tz_localize()를 적용하지 않은 데이터로 이후 인플레이션 데이터를 맞춰 가공하려고 하면 “Cannot jointz-naive with tz-aware Datime Index”라는 오류 메시지가 뜬다.시간이 있는 날짜 데이터와 시간이 없는 날짜 데이터를 맞추려고 하면 발생하는 오류인 것이다.이러한 문제를 방지하기 위해 시간이 있는 날짜 데이터에 tz_localize()를 적용하여 가공하여야 한다.인플레이션 지수를 고려한 수익률 계산트레이딩 수익률이 50%라도 인플레이션 지수가 60%라면 아무 소용이 없다.정말 진부한 수익률을 얻으려면 인플레이션 지수도 수익률로 고려해야 할 필요가 있다.인플레이션 고려 수익률은 다음 수식으로 구할 수 있다. πt는 인플레이션 지수이다.그리고 이 인플레이션율 혹은 인플레이션 지수는 퀀들 quandl로 받을 수 있다.인플레이션 지수를 고려한 수익률은 아래 코딩으로 구할 수 있다.1. data frame join을 할 때 how = left 로 왼쪽 join을 하면 행별로 날짜 데이터가 일치할 경우 join이 되고 그렇지 않을 경우 비워둔다고 한다.2. 월별 주가로 가공해 인플레이션 지수와 맞추기 위해 asfreq(‘M’)로 월 종가 데이터를 남긴다.3. 인플레이션 데이터에서 cpi를 취득하여 quandl.get(data set=’RATEINF/CPI_USA’, start_date=’시작일’, close_date=’종료일’)로 받을 수 있다.더 이상 로그 수익률 등 주가 데이터를 가공하기 위해 구글 스프레드시트나 엑셀을 사용할 필요가 없다.파이썬으로 가능하다는 것을 알았다.