AI 탐구노트

PyKrx 패키지 제공 함수 테스트 본문

DIY 테스트

PyKrx 패키지 제공 함수 테스트

42morrow 2024. 9. 21. 08:45

 

 

PyKrx 패키지를 사용하면서 어떤 값을 어떻게 받아오는지 하나씩 테스트를 진행해 봤습니다. 

생각보다 이것저것 해 볼만한 것들이 많이 있는 것 같으니 당장은 사용하지 않더라도 대충은 파악해 두려고 합니다. 

 

참고로 아래 출력물에서 인덱스로 나오는 값 (예: '티커', '날짜' 등)은 reset_index()를 추가로 해 주어야 컬럼으로 전환됩니다. 

 

종목코드 목록 조회 

get_market_ticker_list(date, market='KOSPI')  

 : [tickers] 형태 (list 타입), market 값은 KOSPI/KOSDAQ/KONEX/ALL 중 선택, 미설정 시 KOSPI

['095570', '006840', '027410', '282330', '138930',   ...]

 

 

KRX300 종목 티커

get_index_portfolio_deposit_file('5300')  

 : [tickers] 형태, KRX300 인덱스(5300)에 속한 종목코드 목록 조회. 흠... 300인데 301개가 나오는 이유는? -_-;

['005930', '000660', '373220', '207940', '005380', '068270', '000270', '105560',...]

 

 

지정일 코스피 전종목 시세 

get_market_ohlcv(date, market='KOSPI')

 : [(티커)/시가/고가/저가/종가/거래량/거래대금/등락률],  market값은 KOSPI, KOSDAQ, KONEX 등 선택 가능. 기본은 전체 시장

        티커      시가      고가      저가      종가       거래량         거래대금   등락률
0    095570    4865    4865    4725    4760    201897    970335535 -1.45
1    006840   13120   13170   13120   13140      3648     47880990  0.15
2    027410    3480    3530    3480    3515     59315    207657225  0.14
3    282330  120500  120500  118200  119000     56544   6731887100  0.08
4    138930    9950   10030    9590    9590   3239792  31421649990 -3.33
..      ...     ...     ...     ...     ...       ...          ...   ...
953  079980    3005    3020    2980    3015     38767    116477825  0.84
954  005010    4070    4130    4060    4085    216127    884470000  0.62
955  000540    3690    3750    3680    3705     14081     52210040  0.95
956  000545    5450    5460    5450    5460      1043      5684430  1.49
957  003280    2045    2200    2040    2180  12017395  26305660170  7.65

[958 rows x 8 columns]

 

 

지정일 특정 종목의 ohlcv 조회

get_market_ohlcv(date, date, ticker_nm)

 :  [날짜/시가/고가/저가/종가/거래량/등락률] 

 

참고) OHLCV (open, high, low, close, volume)로 당일 시가, 고가, 저가, 종가, 거래량 데이터를 말합니다. 

          날짜     시가     고가     저가     종가       거래량       등락률
0 2024-09-20  63800  64700  63000  63000  30044428 -0.158479

 

종목코드의 종목명 조회 

get_market_ticker_name(ticker_nm)

 : '종목명'만 반환

삼성전자

 

종목 별 시가총액 조회

get_market_cap(date)

 : [(티커)/종가/시가총액/거래량/거래대금/상장주식수]

 

          티커       종가             시가총액       거래량           거래대금       상장주식수
0     005930    63000  376096300650000  32746056  2086233666488  5969782550
1     000660   157100  114369171541500   7155655  1131269181064   728002365
2     373220   393500   92079000000000    468352   186868274000   234000000
3     207940  1060000   75444440000000    152366   160279583750    71174000
4     005380   250500   52458755845500    809348   202041672500   209416191
...      ...      ...              ...       ...            ...         ...
2827  413300     1899       2479172985       206         327776     1305515
2828  245450     1487       2349400520        22          29987     1579960
2829  288490       77       1345311429    132537        9554725    17471577
2830  236030      625       1270832500      4521        2707041     2033332
2831  308700      199        796000000         0              0     4000000

[2832 rows x 6 columns]

 

 

특정 종목의 지정일 시가총액 조회

get_market_cap(date, date, ticker_nm)

 : [(날짜)/시가총액/거래량/거래대금/상장주식수]

          날짜             시가총액       거래량           거래대금       상장주식수
0 2024-09-20  376096300650000  32746056  2086233666488  5969782550

 

 

종목 별 펀더멘탈 조회

get_market_fundamental(date)

 : [(티커)/BPS/PER/PBR/EPS/DIV/DPS]

         티커    BPS    PER   PBR    EPS   DIV   DPS
0    095570   9326  12.97  0.51    367  5.67   270
1    006840  44339   4.99  0.30   2635  1.52   200
2    027410  17286   4.32  0.20    813  3.41   120
3    282330  62197  10.50  1.91  11337  3.45  4100
4    138930  31746   5.03  0.30   1905  5.32   510
..      ...    ...    ...   ...    ...   ...   ...
923  079980   8246   0.00  0.37      0  0.00     0
924  005010  17923   3.18  0.23   1285  6.12   250
925  000540  20881   0.79  0.18   4664  0.00     0
926  000545      0   0.00  0.00      0  0.00     0
927  003280    690  15.35  3.16    142  0.00     0

[928 rows x 7 columns]

 

 

지정일 투자자 별 매매동향 조회

get_market_trading_volume_by_date(date, date, ticker_nm)

 : [(날짜)/기관합계/기타법인/개인/외국인합계/전체]

          날짜     기관합계  기타법인       개인    외국인합계  전체
0 2024-09-20  1239652  -577  5046717 -6285792   0

 

 

투자자 별 거래량 조회

stock.get_market_trading_value_by_investor(date, date, ticker_nm)

 : 참고) ticker_nm 대신 KOSPI, KOSDAQ, KONEX 등 설정 가능

                  매도             매수           순매수
투자자구분                                            
금융투자     36490789300   119597504200   83106714900
보험        1811342700     2467818100     656475400
투신        9327343400     9892880900     565537500
사모        6363239700     4812992700   -1550247000
은행          45770600      783667400     737896800
기타금융        26295200     1932390700    1906095500
연기금 등   389289248100   383392916600   -5896331500
기관합계    443354029000   522880170600   79526141600
기타법인     14286365600    14207181100     -79184500
개인      379404997200   699859643800  320454646600
외국인    1245718580088   841427246288 -404291333800
기타외국인     3469694600     7859424700    4389730100
전체     2086233666488  2086233666488             0

 

 

테스트 코드

 

위의 내용을 하나씩 테스트 해 볼 수 있는 코드를 준비해 봤습니다. 

귀차니즘으로 한줄로 표시해서 조건을 바꿔가며 하나씩 보려구요... ^^;

from pykrx import stock
from datetime import datetime, timedelta

date = datetime.today().strftime('%Y%m%d')

def get_previous_trading_day():  # 오늘 기준 이전 영업일 반환 함수
    date = datetime.today()
    while True:
        date -= timedelta(days=1)
        if date.weekday() < 5:  # 월~금
            return date.strftime('%Y%m%d')

date = get_previous_trading_day()
ticker_nm = '005930'

if 0: df = stock.get_market_ticker_list(date, market='KOSPI') # 종목코드 목록 조회 [tickers], market: KOSPI/KOSDAQ/KONEX/ALL 중 선택, 미설정 시 KOSPI
if 0: df = stock.get_index_portfolio_deposit_file('5300')  # KRX300 종목 티커, 인덱스에 속한 종목코드 목록 조회 [tickers]

if 0: df = stock.get_market_ohlcv(date, market='KOSPI').reset_index()   # 지정일 코스피 전종목 시세 가져오기, [티커/시가/고가/저가/종가/거래량/거래대금/등락률],  KOSPI, KOSDAQ, KONEX, 미지정 시 전체 시장 조회
if 0: df = stock.get_market_ohlcv(date, date, ticker_nm).reset_index() # 지정일 ohlcv 조회 [날짜/시가/고가/저가/종가/거래량/등락률]

if 0: df = stock.get_market_ticker_name(ticker_nm) # ticker(종목코드)에 따른 종목명 조회 [종목명]

if 0: df = stock.get_market_cap(date).reset_index() # 종목 별 시가총액 조회 [티커/종가/시가총액/거래량/거래대금/상장주식수]
if 0: df = stock.get_market_cap(date, date, ticker_nm).reset_index() # 특정 종목의 지정일 시가총액 조회 [날짜/시가총액/거래량/거래대금/상장주식수]

if 0: df = stock.get_market_fundamental(date).reset_index() # 종목 별 펀더멘탈 조회 [티커/BPS/PER/PBR/EPS/DIV/DPS]
if 0: df = stock.get_market_trading_volume_by_date(date, date, ticker_nm).reset_index() # 지정일 투자자 별 거래실적 조회 [날짜/기관합계/기타법인/개인/외국인합계/전체]
if 1: df = stock.get_market_trading_value_by_investor(date, date, ticker_nm) # 투자자 별 거래량, ticker_nm 대신 KOSPI, KOSDAQ, KONEX 설정 가능

# 결과값 출력
print(df)