pykrx 1.2.4
KRX data scraping
License: MIT
Requires Python: >=3.10
Keywords: KRX, stock, bond, financial, data, scraping

# PyKrx

한국 증권시장(KRX, Naver)에서 주식·채권 데이터를 스크래핑하는 Python 라이브러리입니다.

## ☕ 후원하기

프로젝트가 도움이 되셨다면 개발자를 응원해주세요!

[![Sponsor](https://img.shields.io/badge/Sponsor-GitHub-ea4aaa?logo=github)](https://github.com/sponsors/sharebook-kr)

## ⚠️ 면책 및 주의사항

* 본 라이브러리는 KRX(한국거래소) 및 Naver의 데이터를 스크래핑하며, **데이터의 저작권은 각 제공처**에 있습니다.
* 도의적으로 **무분별한 API 호출을 자제**해 주시기 바랍니다.
* 제공되는 데이터는 **공식 데이터와 차이가 있을 수 있으며**, 참고용으로만 사용해야 합니다.
* **투자 손실이나 법적 책임**은 사용자에게 있으며, 상업적 용도 사용 시 데이터 제공처의 약관을 준수해야 합니다.
* 후원은 데이터에 대한 대가가 아니며, **오픈소스 유지보수를 위한 개발자 응원** 목적으로만 사용됩니다.

## 1 환경설정

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

```
pip install pykrx
```

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

### 1.2 개발 환경 설정 (Development environment)

로컬 개발 및 테스트를 위한 권장 절차입니다. 프로젝트 루트에서 아래 명령을 실행하세요.

```bash
# 가상환경 생성 및 활성화
python3 -m venv .venv
source .venv/bin/activate  # macOS / Linux
.venv\Scripts\activate     # Windows (PowerShell)

# 개발 의존성 포함 설치
pip install -e .[dev]

# pre-commit 훅 설치
pre-commit install

# Ruff로 코드 자동수정(포맷/정리) - 선택사항
ruff check --fix .
ruff format .

# 전체 테스트 실행
pytest -v
```

**설명:**
- `pip install -e .[dev]` — 개발 모드 설치 + dev 의존성(pytest, ruff, pre-commit) 자동 설치
- 모든 설정은 `pyproject.toml`에서 관리됩니다
- VS Code 사용 시: `ruff` 익스텐션 설치하면 저장 시 자동 포맷 적용

### 지원 Python 버전

이 프로젝트는 다음 Python 버전을 지원합니다:

- 런타임 최소 요구: `>=3.10` (pyproject.toml 기준)
- 권장 개발/사용 버전: `3.11` (테스트 및 CI의 메인스트림)
- CI에서 정기적으로 테스트하는 버전: `3.10`, `3.11`, `3.12`, `3.13`, `3.14` (Ubuntu 및 멀티OS 일부)

참고:
- 본 프로젝트는 Python 3.8/3.9의 유지 관리를 중단했습니다. 과거 환경을 지원해야 한다면 별도 브랜치나 포크에서 관리하세요.
- 일부 서드파티 패키지(예: `tts 0.22.0`)는 오래된 `pandas` 버전을 요구할 수 있습니다. 이런 경우 별도의 가상환경을 만들어 충돌을 회피하세요.
- Python 3.14에 도입된 multiprocessing 관련 최적화(PEP 649/749)를 활용하려면 CI에서 3.14 테스트가 통과해야 하며, 런타임 분기 처리가 필요할 수 있습니다.



## 2. API 설명

### 2.1 Stock 모듈


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

#### 2.1.1.1 Ticker 조회
`get_market_ticker_list` 메서드는 지정한 일자(YYYYMMDD)의 `코스피` 시장에 상장된 ticker를 리스트로 반환합니다.
```python
tickers = stock.get_market_ticker_list("20190225")
print(tickers)
```
```text
['095570', '068400', '006840', '027410', '282330', ...]
```

날짜를 지정하지 않으면 내부적으로 최근 영업일을 계산해서 ticker 반환합니다. 최근 영업일을 조회하는 시간이 추가로 소모되지만 사용상의 차이점은 없습니다.

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

`market` 옵션을 추가하면 조회 시장을 지정할 수 있습니다. `KOSPI`, `KOSDAQ`, `KONEX` 시장을 지정할 수 있으며, `ALL`은 모든 시장에서 티커를 조회합니다. 입력하지 않을 경우 `KOSPI` 시장을 조회합니다.
```python
tickers = stock.get_market_ticker_list("20190225", market="KOSDAQ")
print(tickers)
```
```text
['095570', '006840', '027410', '282330', '138930', ...]
```

<br/>

`get_market_ticker_name` 함수에 티커를 입력하면 종목이름을 반환합니다.
```python
for ticker in stock.get_market_ticker_list():
        종목 = stock.get_market_ticker_name(ticker)
        print(종목)
```
```text
SK하이닉스
....
```

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

```python
df = stock.get_market_ohlcv("20220720", "20220810", "005930")
print(df.head(3))
```
과거 일자의 OHLCV가 위쪽에 위치하는 것을 확인할 수 있습니다.
```
               시가   고가    저가     종가     거래량         거래대금   등락률
날짜
2022-07-20  61800  62100  60500  60500  16782238  1025939109200 -0.66
2022-07-21  61100  61900  60700  61800  12291374   754854999650  2.15
2022-07-22  61800  62200  61200  61300  10261310   631872940300 -0.81
```

get_market_ohlcv() 함수에 frequency 파라미터(d/m/y)를 추가할 수 있습니다. d는 일자, m은 월, y는 연도를 의미합니다. 다음은 20200810부터 20201212까지의 삼성전자 월별 OHLCV 데이터를 출력합니다.
```python
df = stock.get_market_ohlcv("20200810", "20201212", "005930", "m")
print(df.head(3))
```
```text
              시가     고가   저가     종가      거래량
날짜
2020-08-31  57600  59900  54000  54000  303002023
2020-09-30  54100  61300  54100  58200  426302298
2020-10-31  57500  61500  56600  56600  327557687
```

get_market_ohlcv() 함수는 기본적으로 요청한 마지막 일을 기준으로 수정주가를 반영하여 정보를 가져옵니다. adjusted 파라미터를 사용해서 수정주가가 반영되지 않은 OHLCV 정보를 가져올 수도 있습니다.
```python
df = stock.get_market_ohlcv("20180427", "20180504", "005930", adjusted=False)
```
```text
                시가       고가      저가      종가     거래량         거래대금   등락률
날짜
2018-04-27  2669000  2682000  2622000  2650000    606216  1611240055340  1.65
2018-04-30        0        0        0  2650000         0              0  0.00
2018-05-02        0        0        0  2650000         0              0  0.00
2018-05-03        0        0        0  2650000         0              0  0.00
2018-05-04    53000    53900    51800    51900  39565391  2078017927600 -2.08
```

get_stock_ticker_list() 함수와 함께 사용하면 전종목의 OHLCV를 가져올 수 있습니다. 한 번에 너무 많은 정보를 요청하면 KRX 서버가 차단할 수 있으므로 time 모듈을 사용해서 1초 지연 후 요청하도록 코드를 작성했습니다.
```python
import time
for ticker in stock.get_stock_ticker_list():
    df = stock.get_market_ohlcv("20181210", "20181212", ticker)
    print(df.head())
    time.sleep(1)
```

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

```python
df = stock.get_market_ohlcv("20210122")
print(df.head(3))
```

```text
          시가    고가    저가    종가   거래량     거래대금     등락률
티커
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`을 입력하면 전체 시장을 조회합니다.
- 값을 입력하지 않는다면 코스피 시장을 조회합니다.

```python
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 동안의 가격 변동폭을 조회합니다.
.
```python
df = stock.get_market_price_change("20180301", "20180320")
print(df.head(2))
```
```text
         종목명    시가   종가  변동폭  등락률    거래량       거래대금
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의 종가를 시가로 사용한 것을 알 수 있습니다.
```python
df = stock.get_market_ohlcv("20180227", "20180320", "000020")
print(df.head())
```
```text
               시가     고가     저가     종가     거래량
날짜
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%로 표시된 것을 확인할 수 있습니다.
```python
print(df.loc["051170"])
```
```text
종목명     썬코어
시가        1360
종가           0
변동폭     -1360
등락률      -100
거래량         0
거래대금       0
```

`get_market_price_change` 함수는 기본적으로 `KOSPI` 시장을 조회합니다. `market` 파라미터에 `KOSDAQ` 또는 `ALL`을 입력할 수 있습니다. `ALL`은 모든 시장의 가격 변동폭을 조회합니다.
```python
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를 조회합니다.
```python
df = stock.get_market_fundamental("20210108")
print(df.head(2))
```
```text
          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 을 사용할 수 있습니다.

```python
df = stock.get_market_fundamental("20210104", market="KOSDAQ")
print(df.head(2))
```
```text
           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를 조회합니다.
```python
df = stock.get_market_fundamental("20210104", "20210108", "005930")
print(df.head(2))
```
```text
              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를 출력합니다. 이때 해당 월의 종가를 기준으로 값이 출력됩니다.
```python
df = stock.get_market_fundamental("20200101", "20200430", "005930", freq="m")
print(df.head(2))
```
```text
              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까지의 거래대금을 얻어옵니다.

```python
df = stock.get_market_trading_value_by_date("20210115", "20210122", "005930")
print(df.head())
```

```text
                기관합계     기타법인          개인    외국인합계  전체
날짜
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` 파라미터에 입력할 수 있습니다. 입력하지 않는다면 `순매수` 금액이 조회됩니다.

```python
df = stock.get_market_trading_value_by_date("20210115", "20210122", "005930", on='매도')
print(df.head())
```

```text
                 기관합계     기타법인           개인    외국인합계           전체
날짜
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`을 입력하면 세 개의 시장을 합친 통합 거래대금을 조회합니다.

```python
df = stock.get_market_trading_value_by_date("20210115", "20210122", "KOSPI")
print(df.head())
```

```text
                 기관합계     기타법인           개인    외국인합계  전체
날짜
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` 조회할 때만 유효합니다.

```python
df = stock.get_market_trading_value_by_date("20210115", "20210122", "KOSPI", etf=True, etn=True, elw=True)
print(df.head())
```

```text
                 기관합계     기타법인           개인    외국인합계  전체
날짜
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` 조회할 때만 유효합니다.
```python
df = stock.get_market_trading_value_by_date("20210115", "20210122", "KOSPI", etf=True, etn=True, elw=True, detail=True)
print(df.head())
```

```text
                 금융투자          보험          투신          사모          은행      기타금융        연기금     기타법인           개인        외국인  기타외국인  전체
날짜
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까지의 거래량을 얻어옵니다.

```python
df = stock.get_market_trading_volume_by_date("20210115", "20210122", "005930")
print(df.head())
```

```text
            기관합계  기타법인     개인   외국인합계  전체
날짜
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` 파라미터에 입력할 수 있습니다. 입력하지 않는다면 `순매수` 수량이 조회됩니다.

```python
df = stock.get_market_trading_volume_by_date("20210115", "20210122", "005930", on='매도')
print(df.head())
```

```text
            기관합계  기타법인      개인  외국인합계      전체
날짜
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`을 입력하면 세 개의 시장을 합친 통합 거래량을 조회합니다.

```python
df = stock.get_market_trading_volume_by_date("20210115", "20210122", "KOSPI")
print(df.head())
```

```text
            기관합계   기타법인      개인  외국인합계   전체
날짜
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` 조회할 때만 유효합니다.

```python
df = stock.get_market_trading_volume_by_date("20210115", "20210122", "KOSPI", etf=True, etn=True, elw=True)
print(df.head())
```

```text
            기관합계  기타법인      개인   외국인합계  전체
날짜
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` 조회할 때만 유효합니다.
```python
df = stock.get_market_trading_volume_by_date("20210115", "20210122", "KOSPI", etf=True, etn=True, elw=True, detail=True)
print(df.head())
```

```text
            금융투자     보험      투신     사모      은행   기타금융      연기금   기타법인      개인    외국인  기타외국인  전체
날짜
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까지의 거래대금을 얻어옵니다.

```python
df = stock.get_market_trading_value_by_investor("20210115", "20210122", "005930")
print(df.head())
```

```text
                     매도            매수         순매수
투자자구분
금융투자    2580964135000   2309054317700  -271909817300
보험         153322228800     44505136200  -108817092600
투신         258073006600    150715203700  -107357802900
사모          65167773900     60862926800    -4304847100
은행           3369626100      4004806100      635180000
```

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

```python
df = stock.get_market_trading_value_by_investor("20210115", "20210122", "KOSPI")
print(df.head())
```

```text
                    매도             매수         순매수
투자자구분
금융투자   9827334289654    9294592831462  -532741458192
보험        912820396542     560818697065  -352001699477
투신       1790231574897    1421181450288  -369050124609
사모        830445404788     665802837480  -164642567308
은행         58624439870      37109603010   -21514836860
```

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

```python
df = stock.get_market_trading_value_by_investor("20210115", "20210122", "KOSPI", etf=True, etn=True, elw=True)
print(df.head())
```

```text
                      매도             매수         순매수
투자자구분
금융투자    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까지의 거래량을 얻어옵니다.

```python
df = stock.get_market_trading_volume_by_investor("20210115", "20210122", "005930")
print(df.head())
```

```text
                매도       매수    순매수
투자자구분
금융투자    29455909   26450600  -3005309
보험         1757287     509535  -1247752
투신         2950680    1721970  -1228710
사모          745727     696135    -49592
은행           38675      46394      7719
```

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

```python
df = stock.get_market_trading_volume_by_investor("20210115", "20210122", "KOSPI")
print(df.head())
```

```text
                 매도        매수    순매수
투자자구분
금융투자    137969209   127697577 -10271632
보험         15737709     8577242  -7160467
투신         46872846    34307243 -12565603
사모         20780475    16342937  -4437538
은행          2236667      632814  -1603853
```

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

```python
df = stock.get_market_trading_volume_by_investor("20210115", "20210122", "KOSPI", etf=True, etn=True, elw=True)
print(df.head())
```

```text
                  매도         매수     순매수
투자자구분
금융투자    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 까지 개인의 순매수 금액이 높은 순서대로 종목을 정렬해서 반환합니다.
```python
df = stock.get_market_net_purchases_of_equities("20210115", "20210122", "KOSPI", "개인")
print(df.head())
```

```text
             종목명   매도거래량 매수거래량  순매수거래량   매도거래대금   매수거래대금 순매수거래대금
티커
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으로 표기됩니다.
```python
df = stock.get_market_cap("20200625")
print(df.head())
```
```text
              시가총액     거래량      거래대금  상장주식수  외국인보유주식수
종목코드
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` 함수는 특정 종목의 일자별 시가총액을 조회합니다. 거래량/거래대금/상장주식수가 함께 조회됩니다.
```python
df = stock.get_market_cap("20190101", "20190131", "005930")
print(df.head())
```
```text
             시가총액   거래량      거래대금  상장주식수
날짜
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까지의 월별 시가총액을 조회합니다.
시가총액과 상장주식수는 월별 마지막 거래일의 값을 사용하며, 거래량과 거래대금은 합산된 결과가
출력됩니다. 조회 기간이 길 수록 데이터를 획득하기 까지의 시간이 오래 걸립니다.
```python
df = stock.get_market_cap("20200101", "20200430", "005930", "m")
print(df.head())
```

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

```python
df = stock.get_exhaustion_rates_of_foreign_investment('20200703')
print(df.head())
```

```text
       상장주식수   보유수량     지분율   한도수량 한도소진율
티커
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) 시장을 지정해서 조회할 수 있습니다.
```python
df = stock.get_exhaustion_rates_of_foreign_investment('20200703', "KOSPI")
print(df.head())
```

세 번째 파라미터 `balance_limit`을 `True`로 지정하면 외국인 보유한도의 제한 종목만 검색할 수 있습니다. 지정하지 않으면 `False` 입니다.
 ```python
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` 함수는 특정한 종목의 일자별로 정렬된 상장주식수/외국인한도수량/외국인보유수량/외국인한도소진률 정보를 조회합니다. 외국인 보유수량 및 한도소진율은 장개시 시점 기준(금융감독원 외국인투자 관리시스템 제공 전일자 확정치)입니다.

```python
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() 함수는 코스피 인덱스를 리스트로 반환합니다.
```python
tickers = stock.get_index_ticker_list()
print(tickers)
```
```text
['1001', '1028', '1034', '1035', '1167', '1182', ...]
```

현재의 인덱스와 과거의 인덱스가 다를 수 있기 때문에 일자를 입력하면 입력한 일자에 존재하는 인덱스를 반환 합니다.
```python
tickers = stock.get_index_ticker_list("19800104")
```

코스닥 인덱스를 조회할 때는 `market` 옵션을 추가합니다.
```python
tickers = stock.get_index_ticker_list(market='KOSDAQ')
```

`get_index_name` 함수를 사용해서 티커의 이름을 얻을 수 있습니다.
```python
for ticker in stock.get_index_ticker_list():
    print(ticker, stock.get_index_ticker_name(ticker))
```
```text
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개의 종목으로 구성돼 있음을 알 수 있습니다.

```python
pdf = stock.get_index_portfolio_deposit_file("1005")
print(len(pdf), pdf)
```


```text
37 ['011150', '097950', '023150', '005610', '002140', ...]
```


#### 2.1.2.3 인덱스 OHLCV 조회
get_index_ohlcv() 함수는 입력된 기간 동안의 인덱스 OHLCV를 조회합니다. 다음은 20190101-20190228 동안의 "코스피 200" 인덱스의 OHLCV를 조회합니다.
```python
df = stock.get_index_ohlcv("20190101", "20190228", "1028")
print(df.head(2))
```
```text
                시가        고가        저가        종가     거래량
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를 출력합니다.
```python
df = stock.get_index_ohlcv("20190101", "20190228", "1028", "m")
print(df.head(2))
```
```text
              시가        고가        저가        종가       거래량
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() 함수는 인덱스의 상장일 및 기준비수 정보를 조회합니다.
```python
df = stock.get_index_listing_date("KOSPI")
print(df.head())
```
```text
                       기준시점    발표시점   기준지수  종목수
지수명
코스피               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 세 개의 지수를
지원합니다.
코스피, 코스닥 지수의 통계(거래량, 거래대금 등)는 외국주 등까지 포함한 시장 전체 통계입니다.
```python
df = stock.get_index_price_change("20200520", "20200527", "KOSDAQ")
print(df.head())
```
```text
                       시가      종가   등락률      거래량        거래대금
코스닥지수            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`까지의 코스피 지수의 정보를 조회합니다.

```python
df = stock.get_index_fundamental("20210101", "20210130", "1001")
print(df.head())
```
```text
               종가 등락률       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/배당수익률을 조회합니다.

```python
df = stock.get_index_fundamental("20210122")
print(df.head())
```

```text
                          종가   등락률         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으로 반환합니다.

 ```python
df = stock.get_shorting_status_by_date("20181210", "20181212", "005930")
print(df)
```
당일 잔고와 (전일 잔고 + 당일 공매도 - 당일 상환) 수량은 정확하게 일치하지 않을 수 있습니다.
이는 투자자가 보유한 공매도잔고 비율이 상장주식수의 0.01% 미만인 경우 보고의 의무가 없기 때문에 집계되지 않을 수 있습니다.
```text
          공매도     잔고   공매도금액      잔고금액
20190401  154