Giter VIP home page Giter VIP logo

pykrx's Introduction

PyKrx

본 모듈은 다양한 웹 싸이트 (Naver / KRX)에서 주가 정보를 스크래핑(scraping) 합니다. API 사용에 대한 책임은 사용자 본인에게 있습니다. 도의적으로도 무분별한 API 호출은 자제해 주시기 부탁드립니다. 또한 결과물은 참고용으로만 사용해야하며, 투자에 대한 책임은 사용자에게 있습니다.

1 환경설정

1.1 Installation

pykrx는 pip을 사용해서 쉽게 설치할 수 있습니다.

pip install pykrx

1.2 Import

pykrx는 유가 증권시장의 주식 정보를 스크래핑 합니다. 모듈의 사용은 import부터 시작합니다.

from pykrx import stock

2. API 설명

2.1 Stock 모듈

2.1.1 MarketData API

코스피 종목의 주가 관련 정보를 얻는 API 입니다.

2.1.1.1 Ticker 조회

get_market_ticker_list() 메서드는 지정한 일자(YYMMDD)의 코스피 시장에 상장된 ticker를 리스트로 반환합니다.

tickers = stock.get_market_ticker_list("20190225")
print(tickers)
['095570', '068400', '006840', '027410', '282330', ...]

날짜를 지정하지 않으면 내부적으로 최근 영업일을 계산해서 ticker 반환합니다. 최근 영업일을 조회하는 시간이 추가로 소모됩니다.

tickers = stock.get_market_ticker_list()
print(tickers)
['095570', '006840', '027410', '282330', '138930', ...]

market 옵션을 추가하면 조회 시장을 지정할 수 있습니다. KOSPI, KOSDAQ, KONEX 시장을 지정할 수 있으며, ALL은 모든 시장에서 티커를 조회합니다. 입력하지 않을 경우 KOSPI 시장을 조회합니다.

tickers = stock.get_market_ticker_list("20190225", market="KOSDAQ")
print(tickers)
['095570', '006840', '027410', '282330', '138930', ...]

get_market_ticker_name() 함수로 티커를 입력하면 종목이름을 반환합니다.

for ticker in stock.get_market_ticker_list():
        종목 = stock.get_market_ticker_name(ticker)
        print(종목)
SK하이닉스
....

2.1.1.2 일자별 OHLCV 조회

get_market_ohlcv_by_date() 함수는 시작일/종료일/티커 세 개의 파라미터를 입력받아 OHLCV를 일자별로 정렬하여 DataFrame으로 반환합니다.

df = stock.get_market_ohlcv_by_date("20150720", "20150810", "005930")
print(df.head(3))

과거 일자의 OHLCV가 위쪽에 위치하는 것을 확인할 수 있습니다.

               시가     고가     저가     종가  거래량      거래대금    등락률
날짜
2015-07-20  1291000  1304000  1273000  1275000  128928  165366199000 -2.300781
2015-07-21  1275000  1277000  1247000  1263000  194055  244129106000 -0.939941
2015-07-22  1244000  1260000  1235000  1253000  268323  333813094000 -0.790039

get_market_ohlcv_by_date() 함수에 frequency 파라미터(d/m/y)를 추가할 수 있습니다. d는 일자, m은 월, y는 연도를 의미합니다. 다음은 20180810부터 20181212까지의 삼성전자 월별 OHLCV 데이터를 출력합니다.

df = stock.get_market_ohlcv_by_date("20180810", "20181212", "005930", "m")
print(df.head(3))
          시가   고가    저가   종가     거래량
2018-08  46150  48450  43500  48450  135518029
2018-09  48200  48300  44000  46450  197984482
2018-10  46450  46800  40400  42400  234645485

get_stock_ticker_list() 함수와 함께 사용하면 전종목의 OHLCV를 가져올 수 있습니다. 한 번에 너무 많은 정보를 요청하면 KRX 서버가 차단할 수 있으므로 time 모듈을 사용해서 1초 지연 후 요청하도록 코드를 작성했습니다.

import time
for ticker in stock.get_stock_ticker_list():
    df = stock.get_market_ohlcv_by_date("20181210", "20181212", ticker)
    print(df.head())
    time.sleep(1)

2.1.1.3 전체 종목 시세 조회

get_market_ohlcv_by_ticker() 함수는 입력된 일자의 전종목 시세를 DataFrame으로 반환합니다.

df = stock.stock.get_market_ohlcv_by_ticker("20210122")
print(df.head(3))
          시가    고가    저가    종가   거래량     거래대금     등락률
티커
095570    4190    4245    4160    4210   216835    910274405   0.839844
006840   25750   29550   25600   29100   727088  20462325950  12.570312
027410    5020    5250    4955    5220  1547629   7990770515   4.191406

두 번째 파라미터에 특정 시장을 지정해서 종목 시세를 조회할 수 있습니다. 코스피(KOSPI)/코스닥(KOSDAQ)/코넥스(KONEX) 시장을 지원합니다. 값을 입력하지 않는다면 전체 시장 정보를 조회합니다.

df = stock.get_market_ohlcv_by_ticker("20200831", "KOSPI")
df = stock.get_market_ohlcv_by_ticker("20200831", "KOSDAQ")
df = stock.get_market_ohlcv_by_ticker("20200831", "KONEX")

2.1.1.4 모든 종목의 가격 변동 조회

get_market_price_change_by_ticker() 함수는 입력된 기간 동안의 가격 가격 변동 정보를 반환합니다. 다음 코드는 20180301-20180320 동안의 가격 변동폭을 조회합니다. .

df = stock.get_market_price_change_by_ticker("20180301", "20180320")
print(df.head(2))
         종목명    시가   종가  변동폭  등락률    거래량       거래대금
000020  동화약품  11400  12300    900    7.89   4573591   54852078400
000030  우리은행  16600  15550  -1050   -6.33  21956076  345083853864

시작일의 시가 혹은 전일 종가를 가격 변동 데이터의 시가로 사용할 수 있는데, KRX 웹서버는 전일 종가를 시가로 반환합니다. 즉 20180301 전일 종가를 시가, 20180320을 종가로 사용합니다. 동화약품(000020)의 경우를 살펴보면 2018/03/02의 전일 영업일 2018/02/28의 종가를 시가로 사용한 것을 알 수 있습니다.

df = stock.get_market_ohlcv_by_date("20180227", "20180320", "000020")
print(df.head())
               시가     고가     저가     종가     거래량
날짜
2018-02-27  12200  12350  11800  12050  406559
2018-02-28  11950  12300  11400  11400  570361
2018-03-02  11450  11750  11400  11550  301574
2018-03-05  11650  11750  11100  11250  365544
2018-03-06  11450  11600  11300  11350  162679

입력된 기간에 상장 폐지 되는 종목이 포함될 수 있습니다. 예를 들어 썬코어(051170)은 해당 기간에 상장 폐지가 됐으므로 종가가 0, 등락폭이 -100%로 표시된 것을 확인할 수 있습니다.

print(df.loc["051170"])
종목명     썬코어
시가        1360
종가           0
변동폭     -1360
등락률      -100
거래량         0
거래대금       0

2.1.1.5 종목별 DIV/BPS/PER/EPS 조회

get_market_fundamental_by_ticker() 함수는 입력된 일자의 DIV/BPS/PER/EPS/PBR를 조회합니다. PBR은 PER x EPS / BPS로 계산된 값입니다.

df = stock.get_market_fundamental_by_ticker("20180305")
print(df.head(2))
             종목명   DIV    BPS        PER     EPS       PBR
000250   삼천당제약  0.14    5689  84.480003    422   6.266578
000440 중앙에너비스  2.76   37029  25.549999   1135   0.783150

2.1.1.6 일자별 DIV/BPS/PER/EPS 조회

get_market_fundamental_by_date() 함수는 특정 종목에 대해 입력된 기간의 DIV/BPS/PER/EPS/PBR를 조회합니다. PBR은 PER x EPS / BPS로 계산된 값입니다.

df = stock.get_market_fundamental_by_date("20180301", "20180320", '005930')
print(df.head(2))
           DIV      BPS        PER     EPS       PBR
20180302  1.24  1156530  14.570000  157967  1.990073
20180305  1.26  1156530  14.310000  157967  1.954560

get_market_fundamental_by_date() 함수에 frequency 파라미터(d/m/y)를 추가할 수 있습니다. d는 일자, m은 월, y는 연도를 의미합니다. 다음은 20180810부터 20181212까지의 삼성전자 월별 DIV/BPS/PER/EPS를 출력합니다. 이때 해당 월의 종가를 기준으로 값이 출력됩니다.

df = stock.get_market_fundamental_by_date("20180810", "20181212", "005930", "m")
print(df.head(2))
         DIV    BPS   PER   EPS
201808  1.87  28126  7.57  5997
201809  1.79  28126  7.91  5997

2.1.1.7 일자별 거래실적 추이 (거래대금)

지정된 기간 동안의 일자별로 정렬된 (순매수) 거래량을 얻어옵니다. 당일자 최종 매매내역은 오후 6시 이후에 제공됩니다. 다음은 삼성전자 (005930)의 2021-01-15부터 2021-01-22까지의 거래대금을 얻어옵니다.

df = stock.get_market_trading_value_by_date("20210115", "20210122", "005930")
print(df.head())
                기관합계     기타법인          개인    외국인합계  전체
날짜
2021-01-15 -440769209300  25442287800  661609085600 -246282164100     0
2021-01-18   42323535000  22682344800   14829121700  -79835001500     0
2021-01-19   95523053500  -3250422500 -173484213300   81211582300     0
2021-01-20 -364476214000  22980632900  430115581000  -88619999900     0
2021-01-21  -60637506300 -27880854000  250285510000 -161767149700     0

매수 혹은 매도 금액을 조회하고 싶다면 on 파라미터에 입력할 수 있습니다. 입력하지 않는다면 순매수 금액이 조회됩니다.

df = stock.get_market_trading_value_by_date("20210115", "20210122", "005930", on='매도')
print(df.head())
                 기관합계     기타법인           개인    외국인합계           전체
날짜
2021-01-15  1505250243300  19525756900   925426195700  525029741764  2975231937664
2021-01-18  1353223733500  22132983500  1883422627200  456996648400  3715775992600
2021-01-19  1205081446400  28155090000  1800734616800  407371601300  3441342754500
2021-01-20  1147190346800  10015618200   643413644500  405119540200  2205739149700
2021-01-21   878411497500  41184362100   851899126900  439714802000  2211209788500
2021-01-22  1218085354000  12679395000   813950599700  672919902820  2717635251520

세 번째 파라미터에 KOSPI, KOSDAQ, KONEX를 사용하면 각 시장의 거래대금을 조회합니다. ALL을 입력하면 세 개의 시장을 합친 통합 거래대금을 조회합니다.

df = stock.get_market_trading_value_by_date("20210115", "20210122", "KOSPI")
print(df.head())
                 기관합계     기타법인           개인    외국인합계  전체
날짜
2021-01-15 -1414745885546  54444293672  2113924037705 -753622445831     0
2021-01-18  -278880716957 -26004926379   514299140387 -209413497051     0
2021-01-19   593956459208  21472281148 -1025418915468  409990175112     0
2021-01-20 -1234485992694  34510184945  1436793223994 -236817416245     0
2021-01-21  -292666343147 -13168420832   -62476631241  368311395220     0
2021-01-22 -1364772011847  24513231108  1608263875827 -268005095088     0

시장의 거래대금을 조회할 때는 ETF, ETN ELW의 포함 여부를 지정할 수 있습니다. 만약 값을 지정하지 않는다면 해당 데이터를 제외한 값을을 반환합니다. 옵션은 KOSPI, KOSDAQ, KONEX 조회할 때만 유효합니다.

df = stock.get_market_trading_value_by_date("20210115", "20210122", "KOSPI", etf=True, etn=True, elw=True)
print(df.head())
                 기관합계     기타법인           개인    외국인합계  전체
날짜
2021-01-15 -1536570309441  63110174617  2251672617980 -778212483156     0
2021-01-18  -601428111357 -27000808439   494341183227  134087736569     0
2021-01-19   544654406338  21787409868  -968965427363  402523611157     0
2021-01-20 -1227642472619  32139813590  1444113501769 -248610842740     0
2021-01-21  -284899892322 -19072459127   -61503500921  365475852370     0
2021-01-22 -1436249980782  27300779998  1724185991547 -315236790763     0

detail 옵션을 추가하면 상세한 정보를 얻을 수 있습니다. 옵션은 KOSPI, KOSDAQ, KONEX 조회할 때만 유효합니다.

df = stock.get_market_trading_value_by_date("20210115", "20210122", "KOSPI", etf=True, etn=True, elw=True, detail=True)
print(df.head())
                 금융투자          보험          투신          사모          은행      기타금융        연기금     기타법인           개인        외국인  기타외국인  전체
날짜
2021-01-15  -991569370471 -101879326615  -73654664921  -47097103944  202104737955   -4226413080 -520248168365  63110174617  2251672617980 -780253717173  2041234017     0
2021-01-18  -234901037556  -72240710086  101791257920  -22451555756   29622542645    9331964150 -412580572674 -27000808439   494341183227  132145345642  1942390927     0
2021-01-19  1095649201830  -16407303019 -132856710155   12116061569    1776752770   -1933723125 -413689873532  21787409868  -968965427363  401864885550   658725607     0
2021-01-20  -642974676550  -63074125224  -93392192931   -2355882539  -17889264145   -1573759250 -406382571980  32139813590  1444113501769 -250687123305  2076280565     0
2021-01-21   354360314201 -107524405663  -12601355617   21898580074 -113225122905 -158268629075 -269539273337 -19072459127   -61503500921  363801344664  1674507706     0
2021-01-22  -560016181741 -100333954630 -225483850440 -115127797322  -52404985300    -362456555 -382520754794  27300779998  1724185991547 -320015572886  4778782123     0

2.1.1.8 일자별 거래실적 추이 (거래량)

일자별 시장의 거래량을 조회합니다. 당일자 최종 매매내역은 오후 6시 이후에 제공됩니다. 다음은 삼성전자 (005930)의 2021-01-15부터 2021-01-22까지의 거래량을 얻어옵니다.

df = stock.get_market_trading_volume_by_date("20210115", "20210122", "005930")
print(df.head())
            기관합계  기타법인     개인   외국인합계  전체
날짜
2021-01-15 -5006115     288832  7485785     -2768502     0
2021-01-18   505669     262604   151228      -919501     0
2021-01-19  1139258     -34023 -2044543       939308     0
2021-01-20 -4157919     262408  4917655     -1022144     0
2021-01-21  -712099    -321732  2890389     -1856558     0
2021-01-22 -6384793      56478  9884815     -3556500     0

매수 혹은 매도 거래량만을 조회하고 싶다면 on 파라미터에 입력할 수 있습니다. 입력하지 않는다면 순매수 수량이 조회됩니다.

df = stock.get_market_trading_volume_by_date("20210115", "20210122", "005930", on='매도')
print(df.head())
            기관합계  기타법인      개인  외국인합계      전체
날짜
2021-01-15  16944750    216653  10371182     5899224  33431809
2021-01-18  15709256    258096  21942253     5318346  43227951
2021-01-19  13912581    323382  20956376     4702705  39895044
2021-01-20  13121791    114341   7346474     4628521  25211127
2021-01-21  10093381    473635   9714878     5036117  25318011
2021-01-22  13833201    144197   9236255     7648008  30861661

세 번째 파라미터에 KOSPI, KOSDAQ, KONEX를 사용하면 각 시장의 거래량을 조회합니다. ALL을 입력하면 세 개의 시장을 합친 통합 거래량을 조회합니다.

df = stock.get_market_trading_volume_by_date("20210115", "20210122", "KOSPI")
print(df.head())
            기관합계   기타법인      개인  외국인합계   전체
날짜
2021-01-15 -20393142    8435634  29119751   -17162243     0
2021-01-18  -5700054   -1198498  15316328    -8417776     0
2021-01-19   7216278    -246496 -24395243    17425461     0
2021-01-20 -23038683    -793906  31606917    -7774328     0
2021-01-21 -18443990   -7082091   8365421    17160660     0
2021-01-22 -20475792    -775181  34931834   -13680861     0

시장의 거래량을 조회할 때는 ETF, ETN ELW의 포함 여부를 지정할 수 있습니다. 만약 값을 지정하지 않는다면 해당 데이터를 제외한 값을을 반환합니다. 옵션은 KOSPI, KOSDAQ, KONEX 조회할 때만 유효합니다.

df = stock.get_market_trading_volume_by_date("20210115", "20210122", "KOSPI", etf=True, etn=True, elw=True)
print(df.head())
            기관합계  기타법인      개인   외국인합계  전체
날짜
2021-01-15 -26571037   8455599  37942108    -19826670     0
2021-01-18 -65039501   -757841  39922005     25875337     0
2021-01-19 -41855511   4320588  31709703      5825220     0
2021-01-20 -23038880  -2562184  38031657    -12430593     0
2021-01-21 -38539026  -8798430  38195538      9141918     0
2021-01-22 -63205133    509838  75540851    -12845556     0

detail 옵션을 추가하면 상세한 정보를 얻을 수 있습니다. 옵션은 KOSPI, KOSDAQ, KONEX 조회할 때만 유효합니다.

df = stock.get_market_trading_volume_by_date("20210115", "20210122", "KOSPI", etf=True, etn=True, elw=True, detail=True)
print(df.head())
            금융투자     보험      투신     사모      은행   기타금융      연기금   기타법인      개인    외국인  기타외국인  전체
날짜
2021-01-15 -30909240 -1400206   2245052 -2307623  11071023     102571    -5372614    8455599  37942108 -19793169      -33501     0
2021-01-18 -70318619 -1883526   9224883    10962   3203493     394649    -5671343    -757841  39922005  25583326      292011     0
2021-01-19 -24047200  -161246 -11083467 -1024629    216630    -150452    -5605147    4320588  31709703   5392346      432874     0
2021-01-20 -10187734 -1024404  -3957101  -523064   -556527     163402    -6953452   -2562184  38031657 -12710114      279521     0
2021-01-21 -13155430 -3602153  -2107802  -742226  -3466644   -8481152    -6983619   -8798430  38195538   8855139      286779     0
2021-01-22 -48208418 -1650768  -3068328  -501431  -3056403     191684    -6911469     509838  75540851 -13149752      304196     0

2.1.1.9 투자자별 거래실적 추이 (거래대금)

지정된 기간 동안의 투자자별로 정렬된 (순매수) 거래대금을 얻어옵니다. 당일자 최종 매매내역은 오후 6시 이후에 제공됩니다. 다음은 삼성전자 (005930)의 2021-01-15부터 2021-01-22까지의 거래대금을 얻어옵니다.

df = stock.get_market_trading_value_by_investor("20210115", "20210122", "005930")
print(df.head())
                     매도            매수         순매수
투자자구분
금융투자    2580964135000   2309054317700  -271909817300
보험         153322228800     44505136200  -108817092600
투신         258073006600    150715203700  -107357802900
사모          65167773900     60862926800    -4304847100
은행           3369626100      4004806100      635180000

세 번째 파라미터에 KOSPI, KOSDAQ, KONEX를 지정하면 각 시장의 거래대금을 조회합니다. ALL을 입력하면 세 개의 시장을 합친 통합 거래대금을 조회합니다.

df = stock.get_market_trading_value_by_investor("20210115", "20210122", "KOSPI")
print(df.head())
                    매도             매수         순매수
투자자구분
금융투자   9827334289654    9294592831462  -532741458192
보험        912820396542     560818697065  -352001699477
투신       1790231574897    1421181450288  -369050124609
사모        830445404788     665802837480  -164642567308
은행         58624439870      37109603010   -21514836860

시장의 거래대금을 조회할 때는 ETF, ETN ELW의 포함 여부를 지정할 수 있습니다. 만약 값을 지정하지 않는다면 해당 데이터를 제외한 값을을 반환합니다. 옵션은 KOSPI, KOSDAQ, KONEX 조회할 때만 유효합니다.

df = stock.get_market_trading_value_by_investor("20210115", "20210122", "KOSPI", etf=True, etn=True, elw=True)
print(df.head())
                      매도             매수         순매수
투자자구분
금융투자    15985568261831   15006116511544  -979451750287
보험         1219035502445     757575677208  -461459825237
투신         2235561259511    1799363743367  -436197516144
사모          999084910863     846067212945  -153017697918
은행          886226324790     936210985810    49984661020

2.1.1.10 투자자별 거래실적 추이 (거래량)

지정된 기간 동안의 투자자별로 정렬된 (순매수) 거래량을 얻어옵니다. 당일자 최종 매매내역은 오후 6시 이후에 제공됩니다. 다음은 삼성전자 (005930)의 2021-01-15부터 2021-01-22까지의 거래량을 얻어옵니다.

df = stock.get_market_trading_volume_by_investor("20210115", "20210122", "005930")
print(df.head())
                매도       매수    순매수
투자자구분
금융투자    29455909   26450600  -3005309
보험         1757287     509535  -1247752
투신         2950680    1721970  -1228710
사모          745727     696135    -49592
은행           38675      46394      7719

세 번째 파라미터에 KOSPI, KOSDAQ, KONEX를 지정하면 각 시장의 거래량을 조회합니다. ALL을 입력하면 세 개의 시장을 합친 통합 거래량을 조회합니다.

df = stock.get_market_trading_volume_by_investor("20210115", "20210122", "KOSPI")
print(df.head())
                 매도        매수    순매수
투자자구분
금융투자    137969209   127697577 -10271632
보험         15737709     8577242  -7160467
투신         46872846    34307243 -12565603
사모         20780475    16342937  -4437538
은행          2236667      632814  -1603853

시장의 거래량을 조회할 때는 ETF, ETN ELW의 포함 여부를 지정할 수 있습니다. 만약 값을 지정하지 않는다면 해당 데이터를 제외한 값을을 반환합니다. 옵션은 KOSPI, KOSDAQ, KONEX 조회할 때만 유효합니다.

df = stock.get_market_trading_volume_by_investor("20210115", "20210122", "KOSPI", etf=True, etn=True, elw=True)
print(df.head())
                  매도         매수     순매수
투자자구분
금융투자    1857447354   1660620713 -196826641
보험          29594468     19872165   -9722303
투신          69348190     60601427   -8746763
사모          31673292     26585281   -5088011
은행          44279242     51690814    7411572

2.1.1.11 투자자별 순매수 상위종목

get_market_net_purchases_of_equities_by_ticker 함수는 순매수 금액 순서로 정렬된 종목 리스트를 반환합니다. 다음은 코스피 시장에서 2021-01-15 부터 2021-01-22 까지 개인의 순매수 금액이 높은 순서대로 종목을 정렬해서 반환합니다.

df = stock.get_market_net_purchases_of_equities_by_ticker("20210115", "20210122", "KOSPI", "개인")
print(df.head())
             종목명   매도거래량 매수거래량  순매수거래량   매도거래대금   매수거래대금 순매수거래대금
티커
005930     삼성전자     79567418  102852747      23285329  6918846810800  8972911580500  2054064769700
000270       기아차     44440252   49880626       5440374  3861283906400  4377698855000   516414948600
005935   삼성전자우     15849762   20011325       4161563  1207133611400  1528694164400   321560553000
051910       LG화학       709872     921975        212103   700823533000   908593419000   207769886000
096770 SK이노베이션      4848359    5515777        667418  1298854139000  1478890602000   180036463000

투자자 항목에는 다음 중 하나를 설정할 수 있습니다.

  • 금융투자 / 보험 / 투신 / 사모 / 은행 / 기타금융 / 연기금 / 기관합계 / 기타법인 / 개인 / 외국인 / 기타외국인 / 전체

2.1.1.12 종목별 시가 총액 조회

get_market_cap_by_ticker 함수는 특정 일자의 종목별 시가총액/거래량/거래대금/상장주식수/외국인보유주식수를 조회합니다. 시가총액과 거래대금의 단위는 원입니다. 외국인보유주식수는 D-2 (영업일 기준)일 까지 유효한 값이 출력되며, D-1일은 0으로 표기됩니다.

df = stock.get_market_cap_by_ticker("20200625")
print(df.head())
              시가총액     거래량      거래대금  상장주식수  외국인보유주식수
종목코드
091990  17366306280400   2104287  239476471400  151406332  29741147
028300   5228972500000    556246   56188336400   52289725   6574994
068760   4880465749600    662319   90479992800   35806792   2929762
196170   3960853850000   1534967  431736743900   13995950   1481879
096530   2911976220000   1759610  200374704500   26234020   3071909

2.1.1.13 일자별 시가 총액 조회

get_market_cap_by_date 함수는 특정 종목의 일자별 시가총액을 조회합니다. 거래량/거래대금/상장주식수가 함께 조회됩니다.

df = stock.get_market_cap_by_date("20190101", "20190131", "005930")
print(df.head())
             시가총액   거래량      거래대금  상장주식수
날짜
2015-07-20  187806655  128928  165366199000  147299337
2015-07-21  186039063  194055  244129106000  147299337
2015-07-22  184566069  268323  333813094000  147299337
2015-07-23  181767382  208965  259446564000  147299337
2015-07-24  181030885  196584  241383636000  147299337

get_market_cap_by_date() 함수에 frequency 파라미터(d/m/y)를 추가할 수 있습니다. d는 일자, m은 월, y는 연도를 의미합니다. 다음은 20200101부터 20200430까지의 월별 시가총액을 조회합니다. 시가총액과 상장주식수는 월별 마지막 거래일의 값을 사용하며, 거래량과 거래대금은 합산된 결과가 출력됩니다. 조회 기간이 길 수록 데이터를 획득하기 까지의 시간이 오래 걸립니다.

df = stock.get_market_cap_by_date("20200101", "20200430", "005930", "m")
print(df.head())
             시가총액     거래량         거래대금   상장주식수
날짜
2020-01-31  336695736  319891636  18809460519447  5969782550
2020-02-29  323562214  360007160  21055346438502  5969782550
2020-03-31  285057117  856741868  42269216023680  5969782550
2020-04-30  298489128  424101937  20785194256247  5969782550

2.1.1.14 티커별 외국인 보유량 및 외국인 한도소진률

get_exhaustion_rates_of_foreign_investment_by_ticker 함수는 상장주식수/외국인한도수량/외국인보유수량/외국인한도소진률 정보를 조회합니다. 외국인 보유수량 및 한도소진율은 장개시 시점 기준(금융감독원 외국인투자 관리시스템 제공 전일자 확정치)입니다.

df = stock.get_exhaustion_rates_of_foreign_investment_by_ticker('20200703')
print(df.head())
       상장주식수   보유수량     지분율   한도수량 한도소진율
티커
003490   94844634   12350096  13.023438   47412833  26.046875
003495    1110794      29061   2.619141     555286   5.230469
015760  641964077  127919592  19.937500  256785631  49.812500
017670   80745711   28962369  35.875000   39565398  73.187500
020560  223235294   13871465   6.210938  111595323  12.429688

두 번째 파라미터 market은 코스피(KOSPI)/코스닥(KOSDAQ)/코넥스(KONEX) 시장을 지정해서 조회할 수 있습니다.

df = stock.get_exhaustion_rates_of_foreign_investment_by_ticker('20200703', "KOSPI")
print(df.head())

세 번째 파라미터 balance_limitTrue로 지정하면 외국인 보유한도의 제한 종목만 검색할 수 있습니다. 지정하지 않으면 False 입니다.

df = stock.get_exhaustion_rates_of_foreign_investment_by_ticker('20200703', "KOSPI",
balance_limit=True)
print(df.head())

2.1.1.15 일자별 외국인 보유량 및 외국인 한도소진률

get_exhaustion_rates_of_foreign_investment_by_date 함수는 특정한 종목의 일자별로 정렬된 상장주식수/외국인한도수량/외국인보유수량/외국인한도소진률 정보를 조회합니다. 외국인 보유수량 및 한도소진율은 장개시 시점 기준(금융감독원 외국인투자 관리시스템 제공 전일자 확정치)입니다.

df = stock.get_exhaustion_rates_of_foreign_investment_by_date("20210108", "20210115", "005930")
print(df.head())

2.1.2 인덱스 조회 API

코스피 인덱스를 조회합니다.

2.1.2.1 인덱스 종류 조회

get_index_ticker_list() 함수는 코스피 인덱스를 리스트로 반환합니다.

tickers = stock.get_index_ticker_list()
print(tickers)
['1001', '1028', '1034', '1035', '1167', '1182', ...]

현재의 인덱스와 과거의 인덱스가 다를 수 있기 때문에 일자를 입력하면 입력한 일자에 존재하는 인덱스를 반환 합니다.

tickers = stock.get_index_ticker_list("19800104")

코스닥 인덱스를 조회할 때는 market 옵션을 추가합니다.

tickers = stock.get_index_ticker_list(market='KOSDAQ')

get_index_name 함수를 사용해서 티커의 이름을 얻을 수 있습니다.

for ticker in stock.get_index_ticker_list():
    print(ticker, stock.get_index_ticker_name(ticker))
1001 코스피
1028 코스피 200
1034 코스피 100
1035 코스피 50
1167 코스피 200 중소형주
1182 코스피 200 초대형제외 지수
1244 코스피200제외 코스피지수
1150 코스피 200 커뮤니케이션서비스
1151 코스피 200 건설
1152 코스피 200 중공업
1153 코스피 200 철강/소재
1154 코스피 200 에너지/화학
1155 코스피 200 정보기술
1156 코스피 200 금융
1157 코스피 200 생활소비재
1158 코스피 200 경기소비재
1159 코스피 200 산업재
1160 코스피 200 헬스케어
1005 음식료품
1006 섬유의복
1007 종이목재
1008 화학
1009 의약품
1010 비금속광물
1011 철강금속
1012 기계
1013 전기전자
1014 의료정밀
1015 운수장비
1016 유통업
1017 전기가스업
1018 건설업
1019 운수창고업
1020 통신업
1021 금융업
1022 은행
1024 증권
1025 보험
1026 서비스업
1027 제조업
1002 코스피 대형주
1003 코스피 중형주
1004 코스피 소형주
1224 코스피 200 비중상한 30%
1227 코스피 200 비중상한 25%
1232 코스피 200 비중상한 20%

2.1.2.3 인덱스 구성종목 조회

인덱스를 구성하고 있는 종목의 티커를 리스트로 반환합니다. 1005는 섬유의복 인덱스로, 이는 37개의 종목으로 구성돼 있음을 알 수 있습니다.

pdf = stock.get_index_portfolio_deposit_file("1005")
print(len(pdf), pdf)
37 ['011150', '097950', '023150', '005610', '002140', ...]

2.1.2.3 인덱스 OHLCV 조회

get_index_ohlcv_by_date() 함수는 입력된 기간 동안의 인덱스 OHLCV를 조회합니다. 다음은 20190101-20190228 동안의 "코스피 200" 인덱스의 OHLCV를 조회합니다.

df = stock.get_index_ohlcv_by_date("20190101", "20190228", "1028")
print(df.head(2))
                시가        고가        저가        종가     거래량
20190102  263.350006  263.769989  257.470001  258.230011  69950000
20190103  258.190002  258.700012  255.350006  255.770004  90521000

get_index_ohlcv_by_date() 함수에 frequency 파라미터(d/m/y)를 추가할 수 있습니다. d는 일자, m은 월, y는 연도를 의미합니다. 다음은 20190101부터 20190228까지의 "코스피 200"의 월별 OHLCV를 출력합니다.

df = stock.get_index_ohlcv_by_date("20190101", "20190228", "1028", "m")
print(df.head(2))
              시가        고가        저가        종가       거래량
201901  263.350006  288.869995  254.550003  285.890015  2157758000
201902  287.070007  290.320007  280.019989  283.799988  1498968000

2.1.2.4 인덱스 상장 정보 조회

get_index_listing_date() 함수는 인덱스의 상장일 및 기준비수 정보를 조회합니다.

df = stock.get_index_listing_date("KOSPI")
print(df.head())
                       기준시점    발표시점   기준지수  종목수
지수명
코스피               1980.01.04  1983.01.04      100.0       1
코스피 200           1990.01.03  1994.06.15      100.0      28
코스피 100           2000.01.04  2000.03.02     1000.0      34
코스피 50            2000.01.04  2000.03.02     1000.0      35
코스피 200 중소형주  2010.01.04  2015.07.13     1000.0     167

파라미터에는 KRX/KOSPI/KOSDAQ/테마를 입력할 수 있습니다.

2.1.2.5 인덱스 등락률 조회

get_index_price_change_by_ticker() 함수는 지수의 등락률/거래량/거래대금을 반환하며, KRX / KOSPI / KOSDAQ 세 개의 지수를 지원합니다. 코스피, 코스닥 지수의 통계(거래량, 거래대금 등)는 외국주 등까지 포함한 시장 전체 통계입니다.

df = stock.get_index_price_change_by_ticker("20200520", "20200527", "KOSDAQ")
print(df.head())
                       시가      종가   등락률      거래량        거래대금
코스닥지수            696.36    724.59   4.05  10488319776  62986196230829
코스닥 150           1065.42   1102.57   3.49    729479528  18619100922088
제조                 2266.76   2371.51   4.62   4855249693  27936884984652
음식료·담배          9253.67   9477.11   2.41    156868081   1171238893745
섬유·의류             141.03    147.24   4.40    107124162    449845448978

2.1.3 공매도 API

KRX는 (T+2)일 이후의 데이터를 제공합니다. 최근 영업일이 20190405라면 20190403일을 포함한 이전 데이터를 얻을 수 있습니다.

2.1.3.1 종목별 공매도 현황

get_shorting_status_by_date() 메서드는 시작일/종료일/티커 세 개의 파라미터를 입력받아 공매도 현황을 DataFrame으로 반환합니다.

df = stock.get_shorting_status_by_date("20181210", "20181212", "005930")
print(df)

당일 잔고와 (전일 잔고 + 당일 공매도 - 당일 상환) 수량은 정확하게 일치하지 않을 수 있습니다. 이는 투자자가 보유한 공매도잔고 비율이 상장주식수의 0.01% 미만인 경우 보고의 의무가 없기 때문에 집계되지 않을 수 있습니다.

          공매도     잔고   공매도금액      잔고금액
20190401  154884  3403293  6981626250  153318349650
20190402  186528  3435390  8529586850  157169092500
20190403  211750  3380137  9837895500  157514384200

2.1.3.2 종목별 공매도 거래 현황

get_shorting_volume_by_ticker() 함수는 입력받은 일자의 공매도 거래량 정보를 반환합니다.

df = stock.get_shorting_volume_by_ticker("20190401", "KOSPI")
print(df.head())
        공매도거래량  총거래량    비중   공매도거래대금
095570           46     46739   0.10          221785
068400          317    100323   0.32         3740150
006840          641     29857   2.15        34398200
027410        11302    161271   7.01        90395730
282330         8023     15957  50.28      1480534000

코스피/코스닥의 공매도 거래량을 조회할 수 있습니다. 사용하지 않을 경우 코스피가 선택됩니다.

df = stock.get_shorting_volume_by_ticker("20190401", "KOSDAQ")
print(df.head())

조회 속도는 조회 기간에 비례해서 증가합니다.

2.1.3.3 일자별 공매도 거래 현황

get_shorting_volume_by_date() 함수는 입력받은 종목에 대해 주어진 기간 동안의 공매도 거래 정보를 반환합니다.

df = df = stock.get_shorting_volume_by_date("20200101", "20200115", "005930")
print(df.head())
       공매도거래량  총거래량   비중 공매도거래대금
20200102   39485    12993228  0.30    2186007900
20200103  218704    15422255  1.42   12127503500
20200106  167348    10278951  1.63    9255135600
20200107  142717    10009778  1.43    7993441900
20200108  642430    23501171  2.73   36227648000

2.1.3.4 투자자별 공매도 거래 현황 (거래량)

get_shorting_investor_volume_by_date() 함수는 시작일/종료일 두 개의 파라미터를 입력받아 해당 기간동안 코스피 종목의 투자자별 공매도 거래량을 DataFrame으로 반환합니다.

df = stock.get_shorting_investor_volume_by_date("20190401", "20190405", "KOSPI")
print(df.head())    print(df)
             기관    개인    외국인  기타      합계
20190401  3402249  133996  5702788   200   9239233
20190402  2883434  139801  5580395     0   8603630
20190403  3589910  127075  6375248     0  10092233
20190404  3200221  119193  5604505  1405   8925324
20190405  3163018  134396  6882981  1754  10182149

market 옵션을 사용하면 코스닥의 공매도 거래량을 조회할 수 있습니다. 사용하지 않을 경우 코스피가 선택됩니다.

df = stock.get_shorting_investor_volume_by_date("20190401", "20190405", "KOSDAQ")
print(df.head())
             기관    개인    외국인  기타    합계
20190401   913528  398779  5283672    0  6595979
20190402   841544  267618  7295980  249  8405391
20190403   874047  208539  6526794    0  7609380
20190404  1136765  192503  6566776    0  7896044
20190405  1051807  232488  6618597    0  7902892

2.1.3.5 투자자별 공매도 거래 현황 (거래대금)

get_shorting_investor_price_by_date() 함수는 시작일/종료일 두 개의 파라미터를 입력받아 해당 기간동안 코스피 종목의 투자자별 공매도 거래대금을 DataFrame으로 반환합니다.

df = stock.get_shorting_investor_price_by_date("20190401", "20190405", "KOSPI")
print(df.head())
                  기관        개인         외국인      기타          합계
20190401  105536073368  2936388505  168285844893  30302100  276788608866
20190402   96384728941  2951117600  160734480125         0  260070326666
20190403  112539971387  2169492030  180355524574         0  295064987991
20190404   92635400253  2294543280  175873863029  10918080  270814724642
20190405   90581343837  1221266912  150558110496   2218810  242362940055

코스닥의 공매도 거래량 또한 조회할 수 있습니다.

df = stock.get_shorting_investor_volume_by_date("20190401", "20190405", "KOSDAQ")
print(df.head())
                 기관        개인        외국인     기타         합계
20190401  20345961749  2766677625  69741628204        0  92854267578
20190402  18131296688  1614215195  65974380594  7009350  85726901827
20190403  12288386154  2796139160  83568208742        0  98652734056
20190404  23535031919  2293798208  70410033688        0  96238863815
20190405  26473311289  2117625828  70100665837        0  98691602954

2.1.3.6 종목별 공매도 잔고 현황

get_shorting_balance_by_date() 메서드는 시작일/종료일 두 개의 파라미터를 입력받아 해당 기간동안 공매도 잔고 정보를 DataFrame으로 반환합니다.

df = stock.get_shorting_balance_by_date("20190401", "20190405", "005930")
print(df.head())
        공매도잔고  상장주식수     공매도금액         시가총액   비중
날짜
20190401  3403293  5969782550  153318349650  268938703877500  0.06
20190402  3435390  5969782550  157169092500  273117551662500  0.06
20190403  3380137  5969782550  157514384200  278191866830000  0.06

조회 속도는 조회 기간에 비례해서 증가합니다.

2.1.3.7 공매도 거래비중 상위 50 종목

get_shorting_trade_top50() 메서드는 조회일자를 입력받아 해당일 코스피 종목의 거래 비중 TOP 50을 DataFrame으로 반환합니다.

df = stock.get_shorting_volume_top50("20190401", "KOSPI")
print(df.head())
           순위  공매도거래대금      총거래대금    공매도비중  직전40일거래대금평균 공매도거래대금증가율 직전40일공매도평균비중  공매도비중증가율  주가수익률
DGB금융지주    1  5041915380  7429640690  67.862000    855497798         5.894         16.900000          4.015    2.081
BGF리테일     2  1594605500  3610016500  44.172001    866076025         1.841         19.277000          2.291    -3.432
쌍용차        3   301318290   787566640  38.258999     55733550         5.406          7.131000          5.366    -1.373
GS리테일      4  2121989300  5601127100  37.884998    895386019         2.370         16.672001          2.272    -1.277
한라홀딩스     5   104073700   335436950  31.025999     64204705         1.621          8.073000          3.843     1.597

코스닥의 공매도 거래량 또한 조회할 수 있습니다.

df = stock.get_shorting_volume_top50("20190401", "KOSDAQ")
print(df.head())
                  순위  공매도거래대금   총거래대금 공매도비중 직전40일거래대금평균  공매도거래대금증가율  직전40일공매도평균비중  공매도비중증가율  주가수익률
유니슨              1      161114740    644179185  25.011000       38085924        4.230         4.941     5.062  2.308
포스코케미칼        2      6556483500  27119922000  24.176001     4113259825       1.594        12.031     2.009 -0.332
와이지엔터테인먼트  3      3434609200  14793204050  23.216999      2342244426       1.466        11.391     2.038 -1.724
에이치엘비          4      4924909000  23529248200  20.931000     3037153098       1.622         7.379     2.836  0.125
셀트리온제약        5       837431500   4120898000  20.322001      728907003       1.149        10.656     1.907  0.903

2.1.3.8 종목별 공매도 잔고 TOP 50

get_shorting_balance_top50() 메서드는 조회 일자를 입력받아 해당 일의 공매도 잔고 TOp 50을 DataFrame으로 반환합니다.

df = stock.get_shorting_balance_top50("20190401", "KOSPI")
print(df.head())
            종목명 순위    잔고수량     주식수       잔고금액        시가총액     비중
009150       삼성전기  1  10375082   74693696  1115321315000   8029572320000  13.89
068270       셀트리온  2  12351103  125461438  2247900746000  22833981716000   9.84
042670  두산인프라코어  3  19227597  208161279   140553734070   1521658949490   9.24
008770       호텔신라  4   3276701   39248121   313580285700   3756045179700   8.35
204320           만도  5   2741999   46957120    80477670650   1378191472000   5.84

코스닥 또한 거래량을 조회할 수 있습니다.

df = stock.get_shorting_balance_top50("20190401", "KOSDAQ")
print(df.head())
           종목명 순위  잔고수량    주식수      잔고금액        시가총액   비중
티커
215600      신라젠  1  10682769  70363125  691175154300  4552494187500  15.18
028300  에이치엘비  2   3583715  39235182  287055571500  3142738078200   9.13
086520    에코프로  3   1537840  22090191   42675060000   613002800250   6.96
263750    펄어비스  4    868937  13015720  145286266400  2176228384000   6.68
200230  텔콘RF제약  5   5239941  82736256   39771152190   627968183040   6.33

2.2 E3 API

2.2.1 ETF

2.2.1.1 ETF 티커

get_etf_ticker_list() 함수는 입력된 날짜에 해당하는 ETF 티커를 리스트로 반환합니다. 날짜는 유효한 영업일이여야 올바른 값이 출력됩니다.

tickers = stock.get_etf_ticker_list("20200717")
print(tickers[:10])
['346000', '342140', '342500', '342600', '342610', .... ]

2.2.1.1 ETF OHLCV

get_etf_ohlcv_by_date() 함수는 ETF의 OHLCV를 일자별로 출력합니다. 다음은 "ARIRANG 200동일가중(295820)"의 OHLCV를 출력합니다.

df = stock.get_etf_ohlcv_by_date("20190401", "20190405", "295820")
print(df.head())
              NAV  시가  고가  저가   종가 거래량 거래대금 기초지수
20190401  9171.40  9080  9175  9080  9170   27        0  2029.91
20190402  9147.04  9150  9150  9095  9140  331  3000000  2024.53
20190403  9239.89  9115  9235  9110  9235  401  3000000  2045.12
20190404  9254.05  9250  9275  9220  9250  325  3000000  2048.28
20190405  9270.59  9235  9260  9225  9235   60        0  2051.92

get_etf_ohlcv_by_date() 함수에 frequency 파라미터(d/m/y)를 추가할 수 있습니다. d는 일자, m은 월, y는 연도를 의미합니다. 다음은 20190301부터 20190405까지의 "ARIRANG 200동일가중"의 월별 OHLCV를 출력합니다.

df = stock.get_etf_ohlcv_by_date("20190301", "20190405", "295820", 'm')
print(df.head())
        시가  고가  저가  종가   거래량
201903  9325  9400  8950  9055  125412
201904  9080  9275  9080  9235    1144

get_etf_ticker_list()로 얻어온 티커를 사용해서 반복적으로 OHLCV를 조회할 수 있습니다.

import time
tickers = stock.get_etf_ticker_list()
for ticker in tickers[:10]:
    df = stock.get_etf_ohlcv_by_date("20190301", "20190405", ticker)
    print(df.head(2))
    time.sleep(1)

2.2.1.2 PDF 정보

get_etf_portfolio_deposit_file() 함수는 ETF를 구성하는 종목/비중 정보를 얻어옵니다. 다음은 KODEX 200동일가중(252650)의 PDF를 조회합니다.

df = stock.get_etf_portfolio_deposit_file("252650", "20190329")
print(df.head())

평가 금액이 종목당 약 1200만정도로 비중이 조절된 것을 확인할 수 있습니다.

          계약수    금액    비중
동원시스템즈 337  11963500  0.59
호텔신라     121  11543400  0.57
신세계        34  11475000  0.57
엔씨소프트    23  11408000  0.56
LG생활건강     8  11336000  0.56

날짜를 입력하지 않으면 조회 시점을 기준으로 조회합니다.

df = stock.get_etf_portfolio_deposit_file("252650")
print(df.head())

2.2.1.3 괴리율 추이

get_etf_price_deviation() 함수는 ETF의 종가/순자산가치/괴리율 정보를 얻어옵니다. 다음은 ARIRANG 200동일가중(295820) 종목의 괴리율을 출력합니다.

df = stock.get_etf_price_deviation("20200101", "20200401", "295820")
print(df.head())
            종가          NAV   괴리율
날짜
2020-01-02  8285  8302.580078   -0.21
2020-01-03  8290  8297.889648   -0.10
2020-01-06  8150  8145.950195    0.05
2020-01-07  8220  8226.049805   -0.07
2020-01-08  7980  7998.839844   -0.24

2.2.1.4 추적오차율 추이

get_etf_tracking_error() 함수는 ETF의 순자산가치/기초지수/추적오차 정보를 얻어옵니다.

df = get_etf_tracking_error("20200101", "20200401", "295820")
print(df.head())
                    NAV         지수   추적오차
날짜
2020-01-02  8302.580078  1819.109985    0.32
2020-01-03  8297.889648  1818.130005    0.32
2020-01-06  8145.950195  1784.719971    0.32
2020-01-07  8226.049805  1802.339966    0.32
2020-01-08  7998.839844  1752.359985    0.32

2.2.2 ETN

2.2.2.1

2.2.3 ELW

2.2.3.1

2.3 채권 API

2.3.1 지표 수익률

2.3.2 장외 일자별 채권수익률

df = bond.get_treasury_yields_in_kerb_market("20190208")
                       수익률   등락폭
장외 일자별 채권수익률
국고채 1년              1.743   -0.008
국고채 3년              1.786   -0.015
국고채 5년              1.853   -0.023
국고채 10년             1.965   -0.030
국고채 20년             2.039   -0.022
국고채 30년             2.034   -0.021
국민주택 1종 5년        1.935   -0.023
회사채 AA-(무보증 3년)  2.234   -0.015
회사채 BBB-(무보증 3년) 8.318   -0.014
CD(91일)                1.860    0.000

pykrx's People

Contributors

mr-yoo avatar brayden-jo avatar loopinf avatar seoyeonhwng avatar sharebook-kr avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.