Skip to content

castor12m/pykrx

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PyKrx

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

1 환경설정

1.1 Installation

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

pip install pykrx

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

from pykrx import stock
from pykrx import bond

2. API 설명

2.1 Stock 모듈

2.1.1 MarketData API

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

2.1.1.1 Ticker 조회

get_market_ticker_list 메서드는 지정한 일자(YYYYMMDD)의 코스피 시장에 상장된 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 함수는 시작일/종료일/티커 세 개의 파라미터를 입력받아 OHLCV를 일자별로 정렬하여 DataFrame으로 반환합니다.

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

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

               시가     고가     저가     종가     거래량
날짜
2015-07-20  25820  26080  25460  25500  128928
2015-07-21  25500  25540  24940  25260  194055
2015-07-22  24880  25200  24700  25060  268323

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

df = stock.get_market_ohlcv("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("20181210", "20181212", ticker)
    print(df.head())
    time.sleep(1)

get_market_ohlcv 함수는 기본적으로 네이버에서 수정 주가를 스크래핑합니다. 네이버는 현재 상장 폐지된 종목의 과거 데이터를 제공하지 않기 때문에 과거 데이터의 일부는 얻어올 수 없습니다. 데이터가 존재하지 않는다면 비어있는 데이터프레임을 반환하니 다음과 같이 데이터의 존재 유무를 확인하고 사용하세요.

df = stock.get_market_ohlcv("20150720", "20150810", "005930")
if df.empty :
    print("error")
else:
    print(df)

KRX는 상장 폐지된 종목의 과거 데이터도 제공합니다. 다만 수정 종가가 아니라는 사실에 주의하세요. adjusted 옵션을 사용해서 KRX가 제공하는 OHLCV 정보를 가져올 수 있습니다.

df = stock.get_market_ohlcv("20150720", "20150810", "005930", adjusted=False)
print(df.head(3))
               시가     고가     저가     종가  거래량      거래대금    등락률
날짜
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

2.1.1.3 전체 종목 시세 조회

get_market_ohlcv 함수는 입력된 일자의 코스피 전종목 시세를 DataFrame으로 반환합니다.

df = stock.get_market_ohlcv("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) 시장을 지원합니다.
  • ALL을 입력하면 전체 시장을 조회합니다.
  • 값을 입력하지 않는다면 코스피 시장을 조회합니다.
df = stock.get_market_ohlcv("20200831", market="KOSPI")
df = stock.get_market_ohlcv("20200831", market="KOSDAQ")
df = stock.get_market_ohlcv("20200831", market="KONEX")

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

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

df = stock.get_market_price_change("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("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

get_market_price_change 함수는 기본적으로 KOSPI 시장을 조회합니다. market 파라미터에 KOSDAQ 또는 ALL을 입력할 수 있습니다. ALL은 모든 시장의 가격 변동폭을 조회합니다.

df = stock.get_market_price_change("20180301", "20180320", market="KOSDAQ")
print(df.head(2))

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

get_market_fundamental 함수는 코스피 시장의 DIV/BPS/PER/EPS/PBR를 조회합니다.

df = stock.get_market_fundamental("20210108")
print(df.head(2))
          BPS        PER       PBR   EPS       DIV   DPS
티커
095570   6802   4.621094  0.669922   982  6.609375   300
006840  62448  11.687500  0.409912  2168  2.960938   750

두 번재 market 파라미터를 사용하면 특정 시장을 조회할 수 있습니다.

  • KOSPI / KOSDAQ / KONEX / ALL 을 사용할 수 있습니다.
df = get_market_fundamental("20210104", market="KOSDAQ")
print(df.head(2))
           BPS         PER       PBR   EPS       DIV   DPS
티커
060310     745    0.000000  3.029297     0  0.000000     0
054620   10530    0.000000  0.759766     0  0.000000     0

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

get_market_fundamental 함수는 특정 종목에 대해 입력된 기간의 DIV/BPS/PER/EPS/PBR를 조회합니다.

df = stock.get_market_fundamental("20210104", "20210108", "005930")
print(df.head(2))
              BPS        PER       PBR   EPS       DIV   DPS
날짜
2021-01-04  37528  26.218750  2.210938  3166  1.709961  1416
2021-01-05  37528  26.500000  2.240234  3166  1.690430  1416

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

df = stock.get_market_fundamental("20200101", "20200430", "005930", freq="m")
print(df.head(2))
              BPS       PER       PBR   EPS       DIV   DPS
날짜
2020-01-31  35342  8.539062  1.559570  6461  2.570312  1416
2020-02-29  35342  8.851562  1.620117  6461  2.480469  1416

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

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

df = stock.get_market_cap("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 함수는 특정 종목의 일자별 시가총액을 조회합니다. 거래량/거래대금/상장주식수가 함께 조회됩니다.

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

df = stock.get_market_cap("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 함수는 상장주식수/외국인한도수량/외국인보유수량/외국인한도소진률 정보를 조회합니다. 외국인 보유수량 및 한도소진율은 장개시 시점 기준(금융감독원 외국인투자 관리시스템 제공 전일자 확정치)입니다.

df = stock.get_exhaustion_rates_of_foreign_investment('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('20200703', "KOSPI")
print(df.head())

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

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

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

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

df = stock.get_exhaustion_rates_of_foreign_investment("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() 함수는 입력된 기간 동안의 인덱스 OHLCV를 조회합니다. 다음은 20190101-20190228 동안의 "코스피 200" 인덱스의 OHLCV를 조회합니다.

df = stock.get_index_ohlcv("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() 함수에 frequency 파라미터(d/m/y)를 추가할 수 있습니다. d는 일자, m은 월, y는 연도를 의미합니다. 다음은 20190101부터 20190228까지의 "코스피 200"의 월별 OHLCV를 출력합니다.

df = stock.get_index_ohlcv("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     796
코스피 200           1990.01.03  1994.06.15      100.0     201
코스피 100           2000.01.04  2000.03.02     1000.0     100
코스피 50            2000.01.04  2000.03.02     1000.0      50
코스피 200 중소형주  2010.01.04  2015.07.13     1000.0     101

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

2.1.2.5 인덱스 등락률 조회

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

df = stock.get_index_price_change("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.2.6 인덱스 fundamental 조회

get_index_fundamental 함수는 특정 종목의 지정된 기간 동안 PER/PBR/배당수익률을 조회합니다. 다음 코드는 20210101에서 20210130까지의 코스피 지수의 정보를 조회합니다.

df = stock.get_index_fundamental("20210101", "20210130", "1001")
print(df.head())
               종가 등락률       PER 선행PER   PBR  배당수익률
2021-01-04  2944.45  2.47  30.200001    0.0  1.19      1.44
2021-01-05  2990.57  1.57  30.680000    0.0  1.20      1.42
2021-01-06  2968.21 -0.75  30.450001    0.0  1.20      1.43
2021-01-07  3031.68  2.14  31.110001    0.0  1.22      1.40
2021-01-08  3152.18  3.97  32.349998    0.0  1.27      1.35

하나의 날짜를 입력하면 특정일의 모든 지수의 PER/PBR/배당수익률을 조회합니다.

df = stock.get_index_fundamental("20210122")
print(df.head())
                          종가   등락률         PER  선행PER   PBR  배당수익률
지수명
코스피                 3140.63   -0.64    32.259998    0.0   1.27       1.35
코스피 200              427.13   -0.73    29.760000    0.0   1.36       1.39
코스피 100             3266.10   -0.78    28.910000    0.0   1.36       1.41
코스피 50              3008.02   -0.79    28.530001    0.0   1.40       1.38
코스피 200 중소형주      1264.5    0.40    62.820000    0.0   1.19       0.98

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("20210125")
print(df.head(3))
       공매도     매수      비중
티커
095570     32   180458  0.020004
006840     79   386257  0.020004
027410  18502  8453962  0.219971

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

df = stock.get_shorting_volume_by_ticker("20210125", "KOSDAQ")
print(df.head())
     공매도     매수      비중
티커
060310    0   328833  0.000000
054620    0   106187  0.000000
265520    0   285869  0.000000

조회하려는 증권의 세부 종류를 리스트로 지정할 수 있습니다. 리스트에 사용될 수 있는 상세 구분항목은 다음과 같습니다.

  • 주식, ETF, ETN, ELW, 신주인수권증서및증권, 수익증권
df = stock.get_shorting_volume_by_ticker("20210125", include=["주식", "ELW])
print(df.head())

get_shorting_value_by_ticker 함수는 입력받은 일자의 공매도 거래대금 정보를 반환합니다. 사용 방법은 get_shorting_volume_by_ticker 함수와 동일합니다.

2.1.3.3 일자별 공매도 거래 현황

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

df = df = stock.get_shorting_volume_by_date("20210104", "20210108", "005930")
print(df.head(3))
          공매도      매수      비중
날짜
2021-01-04  9279  38655276  0.020004
2021-01-05   169  35335669  0.000000
2021-01-06   967  42089013  0.000000

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

df = stock.get_shorting_investor_value_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_value_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("20210129")
print(df.head())
       순위   공매도거래대금   총거래대금  공매도비중  직전40일거래대금평균  공매도거래대금증가율  직전40일공매도평균비중  공매도비중증가율  주가수익률
티커
003545   1         38510030    915824030        4.21               5814411                  6.62                    0.51              8.33       -1.25
267290   2         13265200    329805000        4.02               2755259                  4.82                    0.66              6.14       -2.46
015890   3         15865860    428852660        3.70               8316412                  1.91                    1.30              2.85       -4.46
005945   4         25401240    908915950        2.79               4610634                  5.51                    0.44              6.40       -0.35
227840   5         13784400    546597900        2.52               3084294                  4.47                    0.51              4.91       -2.37

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

df = stock.get_shorting_volume_top50("20210129", "KOSDAQ")
print(df.head())
      순위    공매도거래대금   총거래대금  공매도비중  직전40일거래대금평균  공매도거래대금증가율  직전40일공매도평균비중  공매도비중증가율  주가수익률
티커
003800   1           2460150    140242350        1.75               1881099                  1.31                    2.33              0.75        1.17
018120   2           3141500    230696500        1.36               2671128                  1.18                    1.99              0.68        0.00
092130   3           2217850    190657900        1.16               3134340                  0.71                    0.76              1.52       -1.10
260930   4           1197350    126576300        0.95                641443                  1.87                    0.27              3.56        0.97

2.1.3.8 종목별 공매도 잔고 TOP 50

get_shorting_balance_top50 메서드는 조회 일자를 입력받아 공매도 비중이 높은 상위 50개 종목 정보를 반환합니다. 공매비중은 공매도 잔고/상장주식수로 계산합니다.

df = stock.get_shorting_balance_top50("20210127")
print(df.head())
        순위  공매도잔고  상장주식수     공매도금액      시가총액      비중
티커
032350   1     4693027    69275662    74853780650  1.104947e+12  6.769531
042670   2    10846251   215931625    92843908560  1.848375e+12  5.019531
068270   3     6523965   134997805  2146384485000  4.441428e+13  4.828125
008770   4     1269261    39248121   106237145700  3.285068e+12  3.230469
011690   5     1604890    58494201     1957965800  7.136293e+10  2.740234

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

df = stock.get_shorting_balance_top50("20210129", market="KOSDAQ")
print(df.head())
       순위  공매도잔고  상장주식수    공매도금액      시가총액      비중
티커
215600   1     6497785    71617125   78623198500  8.665672e+11  9.070312
032500   2     2846196    39820883  217733994000  3.046298e+12  7.148438
028300   3     3483185    53013031  313834968500  4.776474e+12  6.570312
263750   4      443142    13189850  139944243600  4.165355e+12  3.359375
078130   5     4034831   126348384   18297958585  5.729899e+11  3.189453

2.2 ETX 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', .... ]

20021014에는 KODEX 200(069500)KOSEF 200(069660) 두 개의 종목이 상장돼 있었습니다.

get_etf_ticker_list("20021014")
print(tickers)
 ['069500', '069660']

2.2.1.1 ETF 이름

get_etf_ticker_name 함수는 입력된 티커의 종목 이름을 출력합니다.

tickers = stock.get_etf_ticker_list("20021014")
    for ticker in tickers:
        print(stock.get_etf_ticker_name(ticker))
KODEX 200
KOSEF 200

2.2.1.1 ETF OHLCV

get_etf_ohlcv_by_date 함수는 ETF의 OHLCV를 일자별로 출력합니다. 다음은 "마이티 200커버드콜ATM레버리지(292340)"의 OHLCV를 출력합니다.

df = stock.get_etf_ohlcv_by_date("20210104", "20210108", "292340")
print(df.head())
                NAV  시가  고가  저가  종가 거래량  거래대금  기초지수
날짜
2021-01-04  9737.23  9730  9730  9730  9730     81    788130   1303.29
2021-01-05  9756.27  9705  9990  9700  9770      6     58845   1306.59
2021-01-06  9796.98     0     0     0  9770      0         0   1306.76
2021-01-07  9723.65  9845  9855  9845  9855      2     19700   1301.65
2021-01-08  9771.73  9895  9900  9855  9885      6     59320   1306.73

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

df = stock.get_etf_ohlcv_by_date("20200101", "20200531", "292340", 'm')
print(df.head())
                NAV  시가  고가  저가  종가 거래량   거래대금 기초지수
날짜
2020-01-31  8910.61  8900  9270   0  8795   36559   330991070  1231.00
2020-02-29  8633.13     0  9395   0  7555      72      658080  1213.88
2020-03-31  7720.09  7520  9965   0  6030  206070  1373727350  1149.86
2020-04-30  5590.35  6055  6975   0  6975    8743    57352845   997.80
2020-05-31  6845.59  6835  7450   0  7415    1788    13057270  1107.92

2.2.1.2 전종목의 OHLCV 조회

get_etf_ohlcv_by_ticker 함수는 입력된 일자의 전종목의 OHLCV를 출력합니다.

df = stock.get_etf_ohlcv_by_ticker("20210325")
print(df.head())
              NAV   시가   고가   저가    종가 거래량    거래대금  기초지수
티커
152100   41887.33  41705  42145  41585   41835  59317  2479398465    408.53
295820   10969.41  10780  10945  10780   10915     69      750210   2364.03
253150   46182.13  45640  46700  45540   46145   1561    71730335   2043.75
253160    4344.07   4400   4400   4295    4340  58943   256679440   2043.75
278420    9145.45   9055   9150   9055    9105   1164    10598375   1234.03

휴일을 조회하면 비어있는 DataFrame이 반환됩니다.

> get_etf_ohlcv_by_ticker("20210321")
Empty DataFrame
Columns: []
Index: []

2.2.1.3 전종목의 등락률 조회

get_etf_price_change_by_ticker 함수는 특정 기간 동안의 전종목 등락률을 반환합니다.

df = get_etf_price_change_by_ticker("20210325", "20210402")
print(df.head())
          시가    종가  변동폭  등락률   거래량     거래대금
    티커
152100   41715   43405    1690    4.05  1002296  42802174550
295820   10855   11185     330    3.04     1244     13820930
253150   45770   49735    3965    8.66    13603    650641700
253160    4380    4015    -365   -8.33   488304   2040509925
278420    9095    9385     290    3.19     9114     84463155

2.2.1.4 PDF 정보

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

df = stock.get_etf_portfolio_deposit_file("152100")
print(df.head())
         계약수       금액   비중
티커
005930   8140.0  667480000  31.77
000660    968.0  118580000   5.69
035420    218.0   74774000   3.57
051910     79.0   72443000   3.53
068270    184.0   59616000   3.21

날짜를 입력해서 특정일의 상태를 확인할 수 있습니다.

df = stock.get_etf_portfolio_deposit_file("152100", "20161206")
print(df.head())

2.2.1.5 괴리율 추이

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.6 추적오차율 추이

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

df = stock.get_etf_tracking_error("20210104", "20210108", "295820")
print(df.head())
                 NAV     지수   추적오차율
날짜
2021-01-04  10267.39  2218.76   0.82
2021-01-05  10459.99  2261.10   0.81
2021-01-06  10431.90  2254.82   0.81
2021-01-07  10648.76  2302.73   0.82
2021-01-08  10797.72  2335.10   0.82

2.2.1.7 ETF 거래 실적 조회

get_etf_trading_volumne_and_value 함수는 거래량과 거래대금 정보를 조회합니다. 시작일자와 종료일자를 입력하면 투자자별 거래 실적이 조회됩니다.

df = stock.get_etf_trading_volumne_and_value("20220415", "20220422")
print(df.head())
              거래량                              거래대금
                매도        매수    순매수            매도            매수         순매수
금융투자    375220036   328066683 -47153353   3559580094684   3040951626908 -518628467776
보험         15784738    15490448   -294290    309980189819    293227931019  -16752258800
투신         14415013    15265023    850010    287167721259    253185404050  -33982317209
사모          6795002     7546735    751733     58320840040    120956023820   62635183780

티커를 추가하면 개별종목의 데이터를 조회할 수 있습니다. 다음 코드는 KB FnGuide 언택트 ETN(580011) 종목의 거래 실적을 조회합니다.

df = get_etf_trading_volume_and_value("20220908", "20220916", "580011")
print(df.head())
          거래량               거래대금
            매도  매수 순매수      매도    매수 순매수
INVST_NM
금융투자      27    25     -2    266785  243320 -23465
보험           0     0      0         0       0      0
투신           0     0      0         0       0      0
사모           0     0      0         0       0      0
은행           0     0      0         0       0      0
기타금융       0     0      0         0       0      0
연기금 등      0     0      0         0       0      0
기관합계      27    25     -2    266785  243320 -23465
기타법인       0     0      0         0       0      0
개인          25    27      2    243320  266785  23465
외국인         0     0      0         0       0      0
기타외국인     0     0      0         0       0      0
전체          52    52      0    510105  510105      0

추가 정보를 입력하면 일자별로 세부 내역을 조회합니다.

  • query_type1거래대금거래량 중 하나를 입력합니다.
  • query_type2순매수, 매수, 매도 중 하나를 입력합니다.
df = get_etf_trading_volumne_and_value("20220415", "20220422", query_type1="거래대금", query_type2="순매수")
print(df.head())
                    기관    기타법인         개인        외국인 전체
날짜
2022-04-15   25346770535  -138921500  17104310255  -42312159290    0
2022-04-18 -168362290065  -871791310  88115812520   81118268855    0
2022-04-19  -36298873785  7555666910  -1968998025   30712204900    0
2022-04-20 -235935697655  8965445880  19247888605  207722363170    0
2022-04-21  -33385835805  2835764290  35920390975   -5370319460    0

티커를 추가하면 개별종목의 일자별 데이터를 조회할 수 있습니다.

df = get_etf_trading_volume_and_value("20220908", "20220916", "580011", "거래대금", "순매수")
print(df.head())
             기관  기타법인     개인  외국인  전체
날짜
2022-09-08  -3570         0     3570       0     0
2022-09-13 -10205         0    10205       0     0
2022-09-14    -65         0       65       0     0
2022-09-15    -65         0       65       0     0
2022-09-16  -9560         0     9560       0     0

2.2.2 ETN

2.2.2.1 ETN 티커

get_etn_ticker_list 함수는 입력된 날짜에 존재하는 ETN 티커를 리스트로 반환합니다.

tickers = stock.get_etn_ticker_list("20141215")
print(tickers)
['550001', '550002', '500001', '500002']

2.2.2.1 ETF 이름

get_etn_ticker_name 함수는 입력된 티커의 종목 이름을 출력합니다.

tickers = stock.get_etn_ticker_list("20141215")
    for ticker in tickers:
        print(stock.get_etn_ticker_name(ticker))
QV Big Vol ETN
QV WISE 배당 ETN
신한 K200 USD 선물 바이셀 ETN
신한 USD K200 선물 바이셀 ETN

2.2.3 ELW

2.2.3.1 ELW 티커

get_elw_ticker_list 함수는 입력된 날짜에 존재하는 ELW 티커를 리스트로 반환합니다.

tickers = stock.get_elw_ticker_list("20200306")
print(tickers)
['58F194', '58F195']

2.2.3.1 ELW 이름

get_etn_ticker_name 함수는 입력된 티커의 종목 이름을 출력합니다.

tickers = stock.get_elw_ticker_list("20200306")
    for ticker in tickers:
        print(stock.get_elw_ticker_name(ticker))
KBF194SK하이닉콜
KBF195삼성전자콜

2.3 채권 API

2.3.1 채권 수익률

2.3.1.1 장외 채권수익률 - 전종목

KRX가 제공하는 11 종류의 장외 채권수익률을 출력합니다.

df = bond.get_otc_treasury_yields("20190208")
print(df)
                       수익률   등락폭
장외 일자별 채권수익률
국고채 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

2.3.1.1 장외 채권수익률 - 개별종목

특정 채권의 일자별 장외 채권수익률을 출력합니다.

df = bond.get_otc_treasury_yields("20220104", "20220204", "국고채2년")
print(df.head())
수익률    대비
일자
2022-01-04  1.717  0.007
2022-01-05  1.791  0.074
2022-01-06  1.878  0.087
2022-01-07  1.895  0.017
2022-01-10  1.902  0.007

세 번째 파라미터에는 다음의 값이 사용될 수 있습니다.

  • 국고채1년, 국고채3년, 국고채5년, 국고채10년, 국고채20년, 국고채30년, 국민주택1종5년, 회사채AA-, 회사채BBB-

2.3.1.2 지표 수익률

2.4 깊이 있는 통계 API

2.4.1 참고정보 API

2.4.1.1 기업정보 API

get_stock_major_changes 함수는 기업의 주요 변동사항을 조회합니다.

df = stock.get_stock_major_changes("005930")
df.head()
              상호변경전    상호변경후    업종변경전   업종변경후  액면변경전 액면변경후                             대표이사변경전                                            대표이사변경후
날짜
1975-06-11        -         삼성전자공업주      -            -           0          0                                     -                                                          -
1979-03-13        -             -               -           -        1000        500                                     -                                                          -
1984-03-23  삼성전자공업주    삼성전자주         -           -           0          0                                     -                                                          -
1987-01-05        -             -               -           -         500       5000                                     -                                                          -
2000-01-20        -             -               -           -           0          0                    이건희윤종용이윤우이학수진대제문병대                        이건희윤종용이윤우이학수진대제최도석이상현임형규
2001-03-21        -             -               -           -           0          0    이건희윤종용이윤우이학수진대제최도석이상현임형규이기태이상완황창규한용외           이건희윤종용이학수이윤우진

About

KRX 주식 정보 스크래핑

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%