Skip to content
/ pykrx Public
forked from sharebook-kr/pykrx

KRX 주식 정보 스크래핑

Notifications You must be signed in to change notification settings

cheon2j/pykrx

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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() 메서드는 전 종목의 ticker를 리스트로 반환합니다.

tickers = stock.get_market_ticker_list()
print(tickers)
실행결과
['060310', '095570', '068400', '006840', '054620', ...]

날짜(YYMMDD)를 추가로 입력하면 해당 일자의 ticker를 얻을 수 있습니다.

tickers = stock.get_market_ticker_list("29100404")
print(tickers)
실행결과
2394

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

종목 = stock.get_market_ticker_name("000660")
print(종목)
실행결과
SK하이닉스

2.1.1.2 일자별 OHLCV 조회

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

df = stock.get_market_ohlcv_by_date("20180810", "20181212", "005930")
print(df.head(3))

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

             시가   고가   저가   종가     거래량                         
2018-08-10  46150  46400  44850  45400  16670643
2018-08-13  44950  45100  44650  45050   9803831
2018-08-14  44850  45400  44850  45150   6409259

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_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.4 종목별 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.5 일자별 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.6 일자별 거래실적 추이 (거래량)

일자별 시장의 거래량을 반환하며, KOSPI / KOSDAQ / KONEX 세 개의 시장을 지원합니다. 거래량/거래대금 합계 항목은 주식(외국주,DR포함), 증권투자회사, REITs, 선박투자회사, 사회간접자본투융자회사가 포함되어 있습니다. 다음은 20200519부터 20200526까지의 코스피 시장의 거래량을 조회합니다.

df = stock.get_market_trading_volume_by_date("20200519", "20200526", "KOSPI")
print(df.head())
                  전체        주권   투자회사 부동산투자회사
2020-05-26  1017804023  1008972681   6436255       1438271
2020-05-25   641458990   612379841  27522107       1021316
2020-05-22   847467288   830997456  13472156       2173679
2020-05-21   601199346   596327758   2325716       1780149
2020-05-20   699446970   694915934   2694839        750944
2020-05-19   773414630   768223852   2757578       1388145

get_market_trading_volume_by_date() 함수에 frequency 파라미터(d/m/y)를 추가할 수 있습니다. d는 일자, m은 월, y는 연도를 의미합니다. 다음은 20190101부터 20200430까지의 코스피 시장의 월별 거래량을 조회합니다. 조회 기간이 길 수록 데이터를 획득하기 까지의 시간이 오래 걸립니다.

df = stock.get_market_trading_volume_by_date("20190101", "20200430", 'KOSPI', 'm')
print(df.head())
                   전체         주권    투자회사  부동산투자회사                  
2019-01-31   9455197243   9396785789    7324224  27940494
2019-02-28   6882554315   6765527306   76382819  18746555
2019-03-31   6458055507   6396184712   31053864  10150022
2019-04-30   9689748201   9633731691   24109062  13114697
2019-05-31  11242891618  11035793990  174971346   8322116

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

일자별 시장의 거래 대금을 원 단위로 반환하며 KOSPI / KOSDAQ / KONEX 세 개의 시장을 지원한다. 거래량/거래대금 합계 항목은 주식(외국주,DR포함), 증권투자회사, REITs, 선박투자회사, 사회간접자본투융자회사가 포함되어 있습니다. 다음은 20200519 20200526까지의 코스피 시장의 거래대금을 조회합니다.

df = stock.get_market_trading_value_by_date("20200519", "20200526", "KOSPI")
print(df.head())
                      전체            주권      투자회사  부동산투자회사
2020-05-26  12545313579000  12524370281000   3260524000     7982490000
2020-05-25   7960324756000   7936195529000  14000492000     5674769000
2020-05-22   9509771760000   9484894049000   6685432000    12007486000
2020-05-21   8636997699000   8619674049000   1535003000     9285644000
2020-05-20   8248632036000   8233849994000   1333854000     3746196000

on 옵션을 사용하면 종류/세션/매수/매도 항목별 거래 실적을 집계할 수 있습니다.

  • 종류: 코스피 시장에서만 사용 가능하며 주권/투자회사/부동산투자회사로 분류
  • 세션: 정규매매/시간외매매/단일가매매로 분류
  • 매수: 주문 매체별 매수 항목을 영업단말/유선단말/무선단말/HTS/기타로 구분
  • 매도: 주문 매체별 매도 항목을 영업단말/유선단말/무선단말/HTS/기타로 구분

on 항목을 입력하지 않으면 세션 항목을 조회합니다.

df = stock.get_market_trading_value_by_date("20200519", "20200526", "KOSPI", "매수")
print(df.head())
                      전체       영업단말      유선단말       무선단말             HTS           기타
날짜                                                                                                 
2020-05-26  12545313579000  2544121542000  13320833000  4845642015000  3648271178000  1493958011000
2020-05-25   7960324756000  1652937403000  10708352000  3164366206000  2084118470000  1048194325000
2020-05-22   9509771760000  1587066103000  15175041000  4075163788000  2594949237000  1237417592000
2020-05-21   8636997699000  1758605890000  11824691000  3369326003000  2032898435000  1464342680000
2020-05-20   8248632036000  1664100141000   9733899000  2948842885000  2151991521000  1473963591000

get_market_trading_value_by_date() 함수에 frequency 파라미터(d/m/y)를 추가할 수 있습니다. d는 일자, m은 월, y는 연도를 의미합니다. 다음은 20190101부터 20200430까지의 코스피 시장의 월별 거래량을 조회합니다. 조회 기간이 길 수록 데이터를 획득하기 까지의 시간이 오래 걸립니다.

df = stock.get_market_trading_value_by_date("20190101", "20200430", "KOSPI", freq="m")
print(df.head())
                       전체             주권       투자회사  부동산투자회사
2019-01-31  123269550914000  123049300164000    9690417000   47380235000
2019-02-28   95521375665000   95279515644000   57578557000   27728378000
2019-03-31   98439945172000   98204744252000   35131873000   28568929000
2019-04-30  118322428665000  118069714956000   39043819000   39676308000
2019-05-31  113039830438000  112541206401000  210877140000   28758383000

2.1.1.8 종목별 시가 총액 조회

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.9 일자별 시가 총액 조회

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.10 외국인 보유량 및 외국인 한도소진률

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

df = stock.get_exhaustion_rates_of_foreign_investment_by_ticker('20200703')
print(df.head())
        상장주식수   한도수량  보유수량      소진률                               
000020   27931470   27931470   1400966   5.019531
000040   91661018   91661018  43190959  47.125000
000050   27415270   27415270    773627   2.820312
000060  113680000  113680000  12968255  11.406250
000070    8564271    8564271    661240   7.718750

두 번째 파라미터 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.2 인덱스 조회 API

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

2.1.2.1 인덱스 종류 조회

get_index_ticker_list() 함수는 지정한 날짜의 인덱스를 리스트로 반환합니다.

tickers = stock.get_index_ticker_list()
print(tickers)
['코스피', '코스피 200', '코스피 100', '코스피 50', ... ]

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

tickers = stock.get_index_ticker_list("20200717")
print(tickers)

2.1.2.2 인덱스 종류 조회

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

df = get_index_ohlcv_by_date("20190101", "20190228", "코스피 200")
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 = get_index_ohlcv_by_date("20190101", "20190228", "코스피 200", "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.3 인덱스 종류 조회

get_index_kospi_by_group() 함수는 코스피 인덱스별로 기준지수와 현재지수를 출력합니다.

df = stock.get_index_kospi_by_group("20190228")
print(df.head())
                        기준시점    발표시점  기준지수  현재지수    시가총액                                                          
코스피                1983.01.04  1980.01.04   100.0   2195.44  1448767024
코스피 200            1994.06.15  1990.01.03   100.0    283.80  1254863174
코스피 100            2000.03.02  2000.01.04  1000.0   2152.14  1135924335
코스피 50             2000.03.02  2000.01.04  1000.0   1884.17   960728527
코스피 200 중소형주    2015.07.13  2010.01.04  1000.0   1011.56   118938839

2.1.2.4 인덱스 등락률 조회

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

df = stock.get_index_price_change_by_name("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())
             기관    개인    외국인  기타      합계
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")
           종목명 순위  잔고수량    주식수      잔고금액        시가총액   비중
티커                                                                       
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 = 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

About

KRX 주식 정보 스크래핑

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%