pykrx를 활용한 자료 수집
pykrx는 한국 주식 데이터를 한국거래소(KRX) 공식 사이트에서 직접 가져오는 파이썬 라이브러리로, KRX 주식 데이터를 정교하게 분석하거나 자동화에 활용하려는 개인·기관에게 매우 유용한 도구입니다.
사용해 본 경험상 FinanceDataReader 에서 제공하는 get_market_ohlcv_by_date 는 수정주가가 반영되지 않으므로 FinanceDataReader 에서 제공하는 DataReader를 사용하는 것이 좋음
공식사이트
주요기능
기능 | 설명 |
---|---|
📈 시세 데이터 | 일별/분봉 OHLCV, 시가총액, 거래량, 투자자별 매매동향 등 |
🧾 기업 정보 | 상장일, 종목명, 업종, 섹터, KOSPI/KOSDAQ 구분 |
📊 지수 정보 | 코스피200, 코스닥150, KRX100 등 구성종목 및 시세 |
🏦 투자자 데이터 | 기관/외국인/개인별 매매 정보 (일별 순매수 등) |
💰 배당/분할/증자 | 배당락일, 액면분할, 유상증자 정보 일부 제공 |
📋 재무 정보 | EPS, BPS, PER, PBR 등 (간단한 지표 수준만) |
⏱️ 실시간 데이터 | ❌ 미지원 (일자 기준 종가 기준) |
설치방법
pip install pykrx
주요 함수 예시
1. 일별 주가 조회
from pykrx import stock
df = stock.get_market_ohlcv_by_date("20240101", "20240715", "005930")
2. 투자자 매매 동향
df = stock.get_market_trading_value_by_date("20240601", "20240701", "005930", investor_type="개인")
3. 코스피200 구성 종목
df = stock.get_index_portfolio_deposit_file("1028") # 코스피200 코드
4. 시가총액, PER 등
df = stock.get_market_fundamental_by_date("20240601", "20240701", "005930")
실전예제
from datetime import date, datetime, timedelta
from pykrx import stock
class Krx():
def __init__(self):
super().__init__()
def get_market_price_by_date(self, code=None, from_dt=None, to_dt=None):
to_dt = datetime.today() # 오늘 날짜
N = 10 # 최근 N일 (예: 최근 10일)
from_dt = to_dt - timedelta(days=N * 2) # 휴일 포함 넉넉하게
# 날짜 문자열로 변환
start = from_dt.strftime("%Y%m%d")
end = to_dt.strftime("%Y%m%d")
df = stock.get_market_ohlcv_by_date(start, end, code)
df = df.tail(N)
for date, row in df.iterrows():
print(f"{date}: 시가={row['시가']:,}, 고가={row['고가']:,}, 저가={row['저가']:,}, 종가={row['종가']:,}, 거래량={row['거래량']:,}")
def get_market_trading_volume_by_date(self, from_dt=None, to_dt=None, code=None):
try:
df = stock.get_market_trading_volume_by_date(from_dt, to_dt, code)
for date, row in df.iterrows():
print(f"{date}: 기관합계={row['기관합계']:,}, 기타법인={row['기타법인']:,}, 개인={row['개인']:,}, 외국인합계={row['외국인합계']:,}, 전체={row['전체']:,}")
except ValueError as e:
print('I got a ValueError - reason "%s"' % str(e))
finally:
pass
if __name__ == "__main__":
krx = Krx()
krx.get_market_trading_volume_by_date('20240711', '20240712', '005930')
krx.get_market_price_by_date('005930')