Closed thk9178 closed 3 years ago
책에서는 누적 수익률을 일간변동률의 누적합(cumsum)으로 구했으나 누적 수익률은 일간변동률의 누적곱(cumprod)으로 구하는 것이 맞습니다. https://www.oreilly.com/library/view/learning-pandas-/9781787123137/3105cd10-4928-4219-8444-25a502b46c60.xhtml
다음 인쇄(5쇄)에서 아래 내용으로 정정할 예정입니다.
>>> sec['Close']
Date
2018-05-04 51900.0
2018-05-08 52600.0
2018-05-09 50900.0
2018-05-10 51600.0
2018-05-11 51300.0
...
2019-09-02 43800.0
2019-09-03 43250.0
2019-09-04 44100.0
2019-09-05 45700.0
2019-09-06 46300.0
Name: Close, Length: 329, dtype: float64
2018년 5월 4일에 삼성전자의 종가가 51,900원이었고 2019년 9월 6일에 삼성전자의 종가가 46,300원이었으므로 해당 기간 동안의 수익률은 (46300 - 51900) / 51900 * 100 = -10.7899%가 됩니다.
아래는 152 페이지의 코드를 cumprod() 함수를 이용하여 수정한 코드입니다.
from pandas_datareader import data as pdr
import yfinance as yf
yf.pdr_override()
sec = pdr.get_data_yahoo('005930.KS', start='2018-05-04', end='2019-09-07')
sec_dpc = (sec['Close'] / sec['Close'].shift(1) -1) * 100
sec_dpc.iloc[0] = 0 # 일간 변동률의 첫 번째 값인 NaN을 0으로 변경한다.
sec_dpc_cp = ((100+sec_dpc)/100).cumprod()*100-100 # 일간 변동률의 누적곱을 구한다.
msft = pdr.get_data_yahoo('MSFT', start='2018-05-04', end='2019-09-07')
msft_dpc = (msft['Close'] / msft['Close'].shift(1) -1) * 100
msft_dpc.iloc[0] = 0
msft_dpc_cp = ((100+msft_dpc)/100).cumprod()*100-100
import matplotlib.pyplot as plt
plt.plot(sec.index, sec_dpc_cp, 'b', label='Samsung Electronics')
plt.plot(msft.index, msft_dpc_cp, 'r--', label='Microsoft')
plt.ylabel('Change %')
plt.grid(True)
plt.legend(loc='best')
plt.show()
위와 같이 고칠 경우, 2019년 9월 6일 삼성전자의 누적 수익률이 -10.7899%로 표시됩니다.
>>> sec_dpc_cp
Date
2018-05-04 0.000000
2018-05-08 1.348748
2018-05-09 -1.926782
2018-05-10 -0.578035
2018-05-11 -1.156069
...
2019-09-02 -15.606936
2019-09-03 -16.666667
2019-09-04 -15.028902
2019-09-05 -11.946050
2019-09-06 -10.789981
Name: Close, Length: 329, dtype: float64
예 감사합니다 ^^
안녕하세요 '파이썬 증권 데이터 분석' 으로 공부하고 있습니다.
3.4.4. 일간 변동률 누적합 구하기 부분에서
일간 변동률을 누적해서 더하기를 하고 주식 수익률을 비교하는 차트가 있는데요.
수익률을 비교하기 위해서는 복리로 계산하기 위해 일간 변동률을 곱해가면서 수익률을 구해야 맞지 않나요?
책의 예시대로 삼성전자의 2018-05-04 의 종가는 51900 이고, 2019-09-06에는 46300 입니다.
((46300-51900)/51900)*100 = -10.79 (%) 으로 실제로는 -10.79% 손실인데, 누적합을 구함으로써 -7.5% 손실이라는 잘못된 결과가 나온 것으로 보입니다.
의견을 부탁드리겠습니다.
감사합니다.