- 금융 데이터는 어디서 가져오는가
- 주가 일간 변동률
- 누적 수익률
- 전체 코드 정리
1. 금융데이터는 어디서 가져오는가
이번 글에선 Pandas 를 이용한 금융데이터 분석을 알아보겠습니다.
일단 종가, 시가, 고가, 저가와 거래량과 같은 금융 데이터를 가져와야합니다.
어디서 데이터를 어디 가져와야할까요?
특정 기업에서 제공하는 데이터를 사용하기 위해선 해당 기업의
API (어플리케이션 프로그램이 인터페이스)를 받아와야합니다.
전에는 Google 과 Yahoo에서 모두 Pandas 기반 API를 제공했습니다.
하지만 현재는 Yahoo 에서만 API 를 제공합니다.
우선 pandas, yfinance, pandas-datareader 을 설치해야합니다.
각자 사용하는 에디터에서 터미널(powershell 말고 cmd를 사용한걸 추천드립니다)에
아래 코드들을 입력합니다.
pip install pandas
pip install yfinance
pip install pandas-datareader
이미 설치가 되어 있다면 already installed 가 여럿 뜰 것이고,
처음 설치된다면 진행상황이 보여집니다.
코드 작성에는 두가지 방법이 있습니다.
1. 에디터에 코드를 작성하여 print 문을 이용해 각 코드의 결과를 확인한다.
2. cmd에서 작성한 후 python을 실행하여 코드의 결과를 확인한다.
저는 두 방법을 섞어쓰시는걸 추천드립니다.
에디터에서 코드를 작성 한 후 복사하여 cmd에서 실행하는거죠.
cmd에서 작성 후 실행을 모두 병행하면 실행결과가 길어져
전에 작성한 코드를 찾기 어려워지기 때문이죠
이제 코드를 작성해보겠습니다.
자세하게 모두 설명하지는 않습니다.
from pandas_datareader import data as pdr
#pandas_datareader 라이브러리에서 data 모듈을 가져와 설치하고, 설치된 모듈을 pdr 이라고 부르기로 약속
import yfinance as yf
#yfinance 모듈을 설치하며, 이 모듈을 yf로 부르기로 약속
yf.pdr_override()
#데이터를 빠르게 다운로드 할 수 있게해주는 함수
위의 코드에서 pdr 로 설정, yf로 설정하는 것은 필수는 아니지만
후에 코딩할 때 간편하도록 하기위해 설정합니다.
이제 삼성전자의 데이터를 가져옵니다.
samsung = pdr.get_data_yahoo('005930.KS', start='2018-05-04')
#가져오고 싶은 기업의 티커와 사용할 데이터의 시작 일자를 내장함수에 전해줍니다.
#삼성전자가 아닌 조회해보고 싶은 다른 기업의 티커를 입력해도 무방합니다.
원래는 삼성을 줄여서 썼겠지만 오히려 헷갈리는것 같아 samsung 그대로 사용했습니다.
2. 주가 일간 변동률
samsung_dpc = (samsung['Close']-samsung['Close'].shift(1)) / samsung['Close'].shift(1) * 100
전날과 그 다음날의 주가의 차이를 %로 표시해줍니다.
3. 누적 수익률
samsung_dpc.iloc[0] = 0
#시작일의 주가가 NaN으로 표시되어 전체 계산에 오류를 발생시킬 수 있으므로 0으로 바꿔주는 코드입니다.
samsung_dpc_cp = ((100+samsung_dpc)/100).cumprod()*100 - 100
#일간 주가 변동을 누적시켜 기준일으로부터의 지금까지 누적 수익률을 계산하는 코드입니다.
#변동률이 0인 기간도 있을 수 있습니다. 그런 기간의 계산결과로 인해 전체 결과가 0이 될 수 있으므로
#일단 일간 변동률의 모든 계산결과에 100을 더해 계산 한 후 마지막에 100을 빼줍니다
지금까지의 과정을 마이크로소프트(또는 각자가 원하는 기업)에도 적용시켜줍니다
microsoft = pdr.get_data_yahoo('MSFT', start='2018-05-04')
microsoft_dpc = (microsoft['Close']-microsoft['Close'].shift(1)) / microsoft['Close'].shift(1) * 100
microsoft_dpc.iloc[0] = 0
microsoft_dpc_cp = ((100+microsoft_dpc)/100).cumprod()*100 - 100
이제 가져온 데이터를 그래프로 만들어야겠죠?
import matplotlib.pyplot as plt
plt.plot(samsung.index, samsung_dpc_cp, 'b', label='Samsung Electronics')
plt.plot(microsoft.index, microsoft_dpc_cp, 'r--', label='Microsoft')
plt.ylabel('Change %')
plt.grid(True)
plt.legend(loc = 'best')
plt.show()
제가 까먹었는데 matplotlib도 설치해야하네요. 죄송합니다.
터미널에 pip install matplotlib을 설치해줍니다.
4. 전체 코드 정리
from pandas_datareader import data as pdr
import yfinance as yf
yf.pdr_override()
samsung = pdr.get_data_yahoo('005930.KS', start='2018-05-04')
samsung_dpc = (samsung['Close']-samsung['Close'].shift(1)) / samsung['Close'].shift(1) * 100
samsung_dpc.iloc[0] = 0
samsung_dpc_cp = ((100+samsung_dpc)/100).cumprod()*100 - 100
microsoft = pdr.get_data_yahoo('MSFT', start='2018-05-04')
microsoft_dpc = (microsoft['Close']-microsoft['Close'].shift(1)) / microsoft['Close'].shift(1) * 100
microsoft_dpc.iloc[0] = 0
microsoft_dpc_cp = ((100+microsoft_dpc)/100).cumprod()*100 - 100
import matplotlib.pyplot as plt
plt.plot(samsung.index, samsung_dpc_cp, 'b', label='Samsung Electronics')
plt.plot(microsoft.index, microsoft_dpc_cp, 'r--', label='Microsoft')
plt.ylabel('Change %')
plt.grid(True)
plt.legend(loc = 'best')
plt.show()
자 이제 실행해봅시다.
자동매매를 위해선 거래 수 만큼 수수료와 슬리피지가 소요되기 때문에
이 계산 결과는 한번도 팔거나 사지 않았을 때 누적 수익률을 보여줍니다.
파이썬 가상환경 구성에 대한 설명은 다른 블로거들이 너무 잘 해놓으셔서 생략했습니다.
저는 전에 사용하던 가상환경과 이번 코드를 실행하려했던 가상환경이 꼬여 오류가 발생했습니다.
하지만 실행에는 문제가 없으므로 혹시 저와같은 오류가 발생하셨다면
무시하고 넘어가셔도 좋습니다.
어떤글이 가독성이 좋을지 모르겠어서 중앙에 한번 배치해봤습니다.
질문사항이나 오류지적은 항상 환영입니다.
블로그 방문해주셔서 감사합니다~.
'코딩 공부 > python' 카테고리의 다른 글
일별 시세 전체 페이지 가져오기, 파이썬 증권분석 코드 오류 업데이트 (0) | 2022.02.14 |
---|---|
Python으로 웹 데이터 스크래핑하기 (0) | 2022.02.11 |
Pandas 공부 중 새로운 오류 경험 (0) | 2022.02.10 |
리퀘스트로 인터넷에서 이미지 파일 가져오기 (0) | 2022.02.09 |
파이썬을 이용한 주식 자동거래 (0) | 2022.02.09 |
댓글