한개의 주가데이터 요청하기
1. 노트북 생성
바탕화면에 "주가수집" 폴더를 생성했습니다. Notebook 버튼을 클릭하여 새 노트북을 생성한 후, 상단의 Untitled를 클릭하여 노트북 이름을 변경하겠습니다.
2. 라이브러리 설치
주가를 간단하게 가져올 수 있는 라이브러리가 있습니다. finance-datareader 라이브러리를 사용할 예정이며, 설치 방법과 기본적인 사용법은 finance-datareader 페이지를 참고하시기 바랍니다.
pip install finance-datareader
Python
복사
3. 삼성전자 주가 데이터 요청
종목코드만 입력하면 삼성전자의 주가를 반환합니다. 이때 데이터는 pandas DataFrame 형태로 주게 됩니다. FinanceDataReader 라이브러리가 pandas DataFrame으로 반환하는 방식을 선택한겁니다.
개별 종목의 경우 필요할 때마다 호출해서 사용하면 되지만 전체 종목을 비교하기엔 어려움이 있습니다. FinanceDataReader에는 여러 종목을 한꺼번에 호출할 수 있는 기능이 있지만, 속도가 느리고 전체 종목 대상으로 하면 시간이 많이 소요됩니다.
따라서 데이터를 저장하고 저장된 데이터를 빠르게 활용하는 방식을 사용할 것입니다. 이때 중요한 것은 데이터 기간입니다. 날짜를 지정하지 않으면 모든 정보를 가져오게 되어 많은 저장공간이 필요합니다. 그래서 2년 치 데이터를 저장하고 매일 업데이트하는 것을 권장합니다. 물론 기간은 사용자가 필요에 따라 조정할 수 있습니다.
4. 오늘로부터 2년의 기간 계산
datetime은 날짜를 계산할 수 있는 파이썬 내장함수입니다. 클라우드 환경에서는 한국에서 접속하더라도 한국시간을 주지 않는 경향이 있어 UTC 세계표준시를 이용해서 한국날짜를 계산하고 오늘로부터 2년 전의 날짜를 계산하는 함수를 만들었습니다.
from datetime import datetime, timedelta
def getStartAndEndDates(years=2): # 함수페이지 참고
currentUtcTime = datetime.utcnow() # 현재 UTC 시간을 반환하는 자체함수
currentKstTime = currentUtcTime + timedelta(hours=9) # UTC 기준으로 한국 시간 변환
pastKstTime = currentKstTime - timedelta(days=365*years) # 지정된 연도만큼 이전 날짜 계산
# 결과 반환
return {
"endDate": currentKstTime.strftime('%Y-%m-%d'), # 현재 날짜
"startDate": pastKstTime.strftime('%Y-%m-%d') # 과거 날짜
}
getStartAndEndDates()
Python
복사
이 코드는 현재 날짜와 지정된 연도만큼 이전의 날짜를 계산하여 반환하는 함수입니다.
1.
먼저 datetime과 timedelta라는 파이썬의 시간 관련 라이브러리를 불러옵니다.
2.
datetime은 날짜와 시간을 다루는 클래스로, 특정 시점의 날짜와 시간을 표현하고 조작할 수 있게 해주며, timedelta는 두 날짜 사이의 기간을 표현하거나 날짜에 특정 기간을 더하고 뺄 때 사용하는 클래스입니다.
3.
getStartAndEndDates라는 함수를 만들고, 기본값으로 2년을 설정합니다. 즉, 따로 연도를 지정하지 않으면 2년 전 날짜를 계산합니다.
4.
currentUtcTime으로 현재 세계 표준시(UTC)를 가져옵니다.
5.
한국은 UTC보다 9시간 빠르므로, currentKstTime에서 9시간을 더해 한국 시간으로 변환합니다.
6.
pastKstTime에서는 현재 한국 시간에서 지정된 연도만큼 이전 날짜를 계산합니다. 이때 365일 × 연도 수로 계산합니다.
7.
마지막으로 계산된 날짜들을 'YYYY-MM-DD' 형식의 문자열로 변환하여 딕셔너리 형태로 반환합니다. endDate에는 현재 날짜가, startDate에는 과거 날짜가 저장됩니다.
이 함수를 실행하면 현재 날짜와 2년 전 날짜가 포함된 딕셔너리가 반환됩니다. 이러한 날짜 계산은 주가 데이터와 같은 시계열 데이터를 분석할 때 유용하게 사용됩니다.
5. 실행결과
6. 지정기간 주가데이터 요청하기
날짜 함수를 이용하면 startDate, 즉 2년 전의 날짜를 알 수 있습니다. 매일매일 날짜가 달라지는데, 딕셔너리에 담긴 데이터는 딕셔너리의 키로 호출할 수 있습니다. startDate를 이용해 FinanceDataReader에 삼성전자의 2년치 주가데이터를 요청하겠습니다.
from datetime import datetime, timedelta
import FinanceDataReader as fdr
def getStartAndEndDates(years=2):
currentUtcTime = datetime.utcnow() # 현재 UTC 시간
currentKstTime = currentUtcTime + timedelta(hours=9) # UTC 기준으로 한국 시간 변환
pastKstTime = currentKstTime - timedelta(days=365*years) # 지정된 연도만큼 이전 날짜 계산
# 결과 반환
return {
"endDate": currentKstTime.strftime('%Y-%m-%d'), # 현재 날짜
"startDate": pastKstTime.strftime('%Y-%m-%d') # 과거 날짜
}
date = getStartAndEndDates() # 변수페이지 참고
fdr.DataReader('005930',date['startDate']) # date['startDate']를 값으로 가저옴
# FinanceDataReader는 종목코드, start, end를 매개변수로 넣어줄 수 있습니다.
# end를 생략하면 오늘날짜가 자동으로 세팅됩니다.
Python
복사
참고 : 수정주가
financeDataReader라이브러리는 수정주가를 사용합니다.
수정주가는 기업의 주식분할, 증자, 배당 등의 주가에 영향을 미치는 이벤트를 반영하여 조정된 주가를 의미합니다. 예를 들어, 주식이 1:2로 분할되면 주가는 절반으로 떨어지지만, 투자자의 실제 자산가치는 변하지 않습니다.
이러한 주가 변동 요인들을 보정하여 시계열 분석이 가능하도록 만든 것이 수정주가입니다. 과거 데이터 분석이나 투자 성과 비교를 할 때는 반드시 수정주가를 사용해야 정확한 분석이 가능합니다.
특히 기술적 분석이나 백테스팅을 수행할 때 수정주가를 사용하지 않으면 잘못된 결과가 도출될 수 있으므로, 항상 수정주가 데이터를 사용하는 것이 바람직합니다.