updated_at: 2025-07-27 22:40

pykrx를 활용한 자료 수집

pykrx는 한국 주식 데이터를 한국거래소(KRX) 공식 사이트에서 직접 가져오는 파이썬 라이브러리로, KRX 주식 데이터를 정교하게 분석하거나 자동화에 활용하려는 개인·기관에게 매우 유용한 도구입니다.
사용해 본 경험상 FinanceDataReader 에서 제공하는 get_market_ohlcv_by_date 는 수정주가가 반영되지 않으므로 FinanceDataReader 에서 제공하는 DataReader를 사용하는 것이 좋음

공식사이트

pykrx 공식 사이트

주요기능

기능 설명
📈 시세 데이터 일별/분봉 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')
평점을 남겨주세요
평점 : 2.5
총 투표수 : 1

질문 및 답글