Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/sharebook-kr/pykrx

KRX 주식 정보 스크래핑
https://github.com/sharebook-kr/pykrx

Last synced: about 2 months ago
JSON representation

KRX 주식 정보 스크래핑

Awesome Lists containing this project

README

        

# PyKrx

본 모듈은 다양한 웹 싸이트 ([Naver](http://www.naver.com) / [KRX](http://marketdata.krx.co.kr))에서 주가 정보를 스크래핑(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를 리스트로 반환합니다.
```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', ...]
```


`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 154884 3403293 6981626250 153318349650
20190402 186528 3435390 8529586850 157169092500
20190403 211750 3380137 9837895500 157514384200
```

#### 2.1.3.2 종목별 공매도 거래 정보
`get_shorting_volume_by_ticker` 함수는 입력받은 일자의 공매도 거래량 정보를 반환합니다.
```python
df = stock.get_shorting_volume_by_ticker("20210125")
print(df.head(3))
```
```text
공매도 매수 비중
티커
095570 32 180458 0.020004
006840 79 386257 0.020004
027410 18502 8453962 0.219971
```
코스피(`KOSPI`)/코스닥(`KOSDAQ`)/코넥스(`KONEX`)의 공매도 거래량을 조회할 수 있습니다. 사용하지 않을 경우 코스피가 선택됩니다.
```python
df = stock.get_shorting_volume_by_ticker("20210125", "KOSDAQ")
print(df.head())
```
```text
공매도 매수 비중
티커
060310 0 328833 0.000000
054620 0 106187 0.000000
265520 0 285869 0.000000
```

조회하려는 증권의 세부 종류를 리스트로 지정할 수 있습니다. 리스트에 사용될 수 있는 상세 구분항목은 다음과 같습니다.
- `주식`, `ETF`, `ETN`, `ELW`, `신주인수권증서및증권`, `수익증권`

```python
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() 함수는 입력받은 종목에 대해 주어진 기간 동안의 공매도 거래 정보를 반환합니다.
```python
df = df = stock.get_shorting_volume_by_date("20210104", "20210108", "005930")
print(df.head(3))
```

```text
공매도 매수 비중
날짜
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으로 반환합니다.

```python
df = stock.get_shorting_investor_volume_by_date("20190401", "20190405", "KOSPI")
print(df.head()) print(df)
```

```text
기관 개인 외국인 기타 합계
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 옵션을 사용하면 코스닥의 공매도 거래량을 조회할 수 있습니다. 사용하지 않을 경우 코스피가 선택됩니다.
```python
df = stock.get_shorting_investor_volume_by_date("20190401", "20190405", "KOSDAQ")
print(df.head())
```
```text
기관 개인 외국인 기타 합계
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으로 반환합니다.

```python
df = stock.get_shorting_investor_value_by_date("20190401", "20190405", "KOSPI")
print(df.head())
```
```text
기관 개인 외국인 기타 합계
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
```

코스닥의 공매도 거래량 또한 조회할 수 있습니다.
```python
df = stock.get_shorting_investor_value_by_date("20190401", "20190405", "KOSDAQ")
print(df.head())
```
```text
기관 개인 외국인 기타 합계
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으로 반환합니다.

```python
df = stock.get_shorting_balance_by_date("20190401", "20190405", "005930")
print(df.head())
```

```text
공매도잔고 상장주식수 공매도금액 시가총액 비중
날짜
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으로 반환합니다. 거래 비중은 `거래대금/거래대금`로 계산합니다.

```python
df = stock.get_shorting_volume_top50("20210129")
print(df.head())
```

```text
순위 공매도거래대금 총거래대금 공매도비중 직전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
```

코스닥의 공매도 거래량 또한 조회할 수 있습니다.
```python
df = stock.get_shorting_volume_top50("20210129", "KOSDAQ")
print(df.head())
```

```text
순위 공매도거래대금 총거래대금 공매도비중 직전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개 종목 정보를 반환합니다. 공매비중은 `공매도 잔고/상장주식수`로 계산합니다.

```python
df = stock.get_shorting_balance_top50("20210127")
print(df.head())
```

```text
순위 공매도잔고 상장주식수 공매도금액 시가총액 비중
티커
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
```

코스닥 또한 거래량을 조회할 수 있습니다.
```python
df = stock.get_shorting_balance_top50("20210129", market="KOSDAQ")
print(df.head())
```
```text
순위 공매도잔고 상장주식수 공매도금액 시가총액 비중
티커
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 티커를 리스트로 반환합니다.
```python
tickers = stock.get_etf_ticker_list("20200717")
print(tickers[:10])
```
```text
['346000', '342140', '342500', '342600', '342610', .... ]
```

20021014에는 `KODEX 200(069500)`과 `KOSEF 200(069660)` 두 개의 종목이 상장돼 있었습니다.
```python
get_etf_ticker_list("20021014")
print(tickers)
```
```text
['069500', '069660']
```

#### 2.2.1.1 ETF 이름
`get_etf_ticker_name` 함수는 입력된 티커의 종목 이름을 출력합니다.
```python
tickers = stock.get_etf_ticker_list("20021014")
for ticker in tickers:
print(stock.get_etf_ticker_name(ticker))
```

```text
KODEX 200
KOSEF 200
```

#### 2.2.1.1 ETF OHLCV
`get_etf_ohlcv_by_date` 함수는 ETF의 OHLCV를 일자별로 출력합니다. 다음은 "마이티 200커버드콜ATM레버리지(292340)"의 OHLCV를 출력합니다.
```python
df = stock.get_etf_ohlcv_by_date("20210104", "20210108", "292340")
print(df.head())
```

```text
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를 출력합니다.
```python
df = stock.get_etf_ohlcv_by_date("20200101", "20200531", "292340", 'm')
print(df.head())
```
```text
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를 출력합니다.
```python
df = stock.get_etf_ohlcv_by_ticker("20210325")
print(df.head())
```

```text
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`이 반환됩니다.

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

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

```python
df = get_etf_price_change_by_ticker("20210325", "20210402")
print(df.head())
```

```text
시가 종가 변동폭 등락률 거래량 거래대금
티커
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를 조회합니다.
```python
df = stock.get_etf_portfolio_deposit_file("152100")
print(df.head())
```
```text
계약수 금액 비중
티커
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
```

날짜를 입력해서 특정일의 상태를 확인할 수 있습니다.
```python
df = stock.get_etf_portfolio_deposit_file("152100", "20161206")
print(df.head())
```

#### 2.2.1.5 괴리율 추이
`get_etf_price_deviation` 함수는 ETF의 종가/순자산가치/괴리율 정보를 얻어옵니다.
다음은 ARIRANG 200동일가중(295820) 종목의 괴리율을 출력합니다.
```python
df = stock.get_etf_price_deviation("20200101", "20200401", "295820")
print(df.head())
```
```text
종가 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의 순자산가치/기초지수/추적오차 정보를 얻어옵니다.
```python
df = stock.get_etf_tracking_error("20210104", "20210108", "295820")
print(df.head())
```

```text
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` 함수는 거래량과 거래대금 정보를 조회합니다. 시작일자와 종료일자를 입력하면 투자자별 거래 실적이 조회됩니다.
```python
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) 종목의 거래 실적을 조회합니다.

```python
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`는 `순매수`, `매수`, `매도` 중 하나를 입력합니다.

```python
df = get_etf_trading_volume_and_value("20220415", "20220422", "거래대금", "순매수")
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
```

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

```python
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 티커를 리스트로 반환합니다.
```python
tickers = stock.get_etn_ticker_list("20141215")
print(tickers)
```
```text
['550001', '550002', '500001', '500002']
```

#### 2.2.2.1 ETF 이름
`get_etn_ticker_name` 함수는 입력된 티커의 종목 이름을 출력합니다.
```python
tickers = stock.get_etn_ticker_list("20141215")
for ticker in tickers:
print(stock.get_etn_ticker_name(ticker))
```

```text
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 티커를 리스트로 반환합니다.
```python
tickers = stock.get_elw_ticker_list("20200306")
print(tickers)
```
```text
['58F194', '58F195']
```

#### 2.2.3.1 ELW 이름
`get_etn_ticker_name` 함수는 입력된 티커의 종목 이름을 출력합니다.
```python
tickers = stock.get_elw_ticker_list("20200306")
for ticker in tickers:
print(stock.get_elw_ticker_name(ticker))
```

```text
KBF194SK하이닉콜
KBF195삼성전자콜
```

## 2.3 채권 API

### 2.3.1 채권 수익률
#### 2.3.1.1 장외 채권수익률 - 전종목
KRX가 제공하는 11 종류의 장외 채권수익률을 출력합니다.
```python
df = bond.get_otc_treasury_yields("20190208")
print(df)
```
```text
수익률 등락폭
장외 일자별 채권수익률
국고채 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 장외 채권수익률 - 개별종목
특정 채권의 일자별 장외 채권수익률을 출력합니다.
```python
df = bond.get_otc_treasury_yields("20220104", "20220204", "국고채2년")
print(df.head())
```
```text
수익률 대비
일자
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 지표 수익률
```python

```

## 2.4 깊이 있는 통계 API
### 2.4.1 참고정보 API

#### 2.4.1.1 기업정보 API
`get_stock_major_changes` 함수는 기업의 주요 변동사항을 조회합니다.
```python
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 이건희윤종용이윤우이학수진대제최도석이상현임형규이기태이상완황창규한용외 이건희윤종용이학수이윤우진

```