Skip to content

Commit

Permalink
일자별 거래실적 추이API 추가
Browse files Browse the repository at this point in the history
get_market_trading_volume_by_date
일자별 시장의 거래량을 조회한다.

get_market_trading_value_by_date
일자별 시장의 거래대금을 조회한다.
  • Loading branch information
mr-yoo committed May 27, 2020
1 parent 0b4accd commit 79ee7ec
Show file tree
Hide file tree
Showing 5 changed files with 175 additions and 27 deletions.
21 changes: 20 additions & 1 deletion pykrx/stock/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,22 @@ def get_market_fundamental_by_ticker(date, market="ALL"):
return df


def get_market_trading_volume_by_date(fromdate, todate, market="KOSPI"):
if isinstance(fromdate, datetime.datetime):
fromdate = _datetime2string(fromdate)
if isinstance(todate, datetime.datetime):
todate = _datetime2string(todate)
return krx.get_market_trading_volume_by_date(fromdate, todate, market)


def get_market_trading_value_by_date(fromdate, todate, market="KOSPI"):
if isinstance(fromdate, datetime.datetime):
fromdate = _datetime2string(fromdate)
if isinstance(todate, datetime.datetime):
todate = _datetime2string(todate)
return krx.get_market_trading_value_by_date(fromdate, todate, market)


# -----------------------------------------------------------------------------
# 지수(INDEX) API
# -----------------------------------------------------------------------------
Expand Down Expand Up @@ -193,6 +209,7 @@ def get_index_price_change_by_name(fromdate, todate, market="KOSPI"):
todate = _datetime2string(todate)
return krx.get_index_price_change_by_name(fromdate, todate, market)


# -----------------------------------------------------------------------------
# 공매도(SHORTING) API
# -----------------------------------------------------------------------------
Expand Down Expand Up @@ -273,14 +290,16 @@ def get_etf_tracking_error(fromdate, todate, ticker):
# df = get_market_ticker_name("000660")
# df = get_market_fundamental_by_date("20180301", "20180320", '005930')
# df = get_market_fundamental_by_date("20180301", "20180320", '005930')
# df = get_market_trading_volume_by_date("20200519", "20200526", 'KOSPI')
# df = get_market_trading_value_by_date("20200519", "20200526", 'KOSPI')
# tickers = get_index_ticker_list("20190225", "KOSDAQ")
# print(tickers)
# df = get_shorting_status_by_date("20181210", "20181212", "005930")
# df = get_index_ohlcv_by_date("20190101", "20190228", "코스닥 150")
# df = get_index_ohlcv_by_date("20190101", "20190228", "코스피")
# df = get_index_ohlcv_by_date("20190101", "20190228", "코스닥")
# df = get_index_ohlcv_by_date("20000101", "20180630", "코스피 200", "m")
df = get_index_price_change_by_name("20200520", "20200527", "KOSDAQ")
# df = get_index_price_change_by_name("20200520", "20200527", "KOSDAQ")
# df = get_index_portfolio_deposit_file("20190412", "코스피 소형주")
# df = krx.IndexTicker().get_id("코스피 200", "20000201")
# df = get_index_portfolio_deposit_file("20000201", "코스피 소형주")
Expand Down
2 changes: 1 addition & 1 deletion pykrx/version.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@

__version__ = '0.1.19'
__version__ = '0.1.20'
58 changes: 50 additions & 8 deletions pykrx/website/krx/market/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -213,8 +213,8 @@ def read(self, fromdate, todate, market):
"""전체지수 등락률
:param fromdate : 조회 시작 일자 (YYMMDD)
:param todate : 조회 마지막 일자 (YYMMDD)
:param market: KRX (2) / KOSPI (3) / KOSDAQ (4)
:return : PDF DataFrame
:param market: 2(KRX) / 3(KOSPI) / 4 (KOSDAQ)
:return : 지수 등락률 DataFrame
group_code group_name kor_indx_ind_nm indx prv_dd_indx prv_dd_cmpr fluc_tp prv_dd_cmpr_chart updn_rate updn_flag tr_vl tr_amt
0 3 KRX KRX 300 1,207.80 1,236.27 28.47 1 28.47 2.36 3 1,439,933,029 55,545,303,395,341
1 3 KRX KRX 100 4,234.80 4,335.24 100.44 1 100.44 2.37 3 500,776,865 32,360,209,330,383
Expand All @@ -227,6 +227,51 @@ def read(self, fromdate, todate, market):
return DataFrame(result['block1'])


class MDK80033_0(KrxWebIo):
@property
def bld(self):
return "MKD/13/1302/13020301/mkd13020301_01"

def read(self, fromdate, todate, market):
"""거래실적 추이 (거래량)
:param fromdate : 조회 시작 일자 (YYMMDD)
:param todate : 조회 마지막 일자 (YYMMDD)
:param market : kospi / kosdaq / konex
:return : 거래실적 추이 DataFrame
dt tot stk sect reit fm rpt_mass mktd_mass mktd_bsk mktd_dkpl tme_end_pr tme_mass tme_bsk tme_unit tme_dkpl bz_termnl_ask cable_termnl_ask wrls_termnl_ask hts_ask etc_ask bz_termnl_bid cable_termnl_bid wrls_termnl_bid hts_bid etc_bid
0 2020/05/27 1,178,847,686 1,156,800,749 19,567,184 1,181,347 1,159,323,745 0 421,116 0 0 3,271,098 855,312 0 14,976,415 0 71,353,441 2,112,812 567,158,607 453,973,325 84,249,501 72,550,845 1,870,205 563,795,722 451,021,048 89,609,866
1 2020/05/26 1,017,804,023 1,008,972,681 6,436,255 1,438,271 999,126,798 0 15,406 249,637 0 2,885,337 1,164,620 0 14,362,225 0 64,446,407 1,521,342 481,103,100 408,886,368 61,846,806 64,630,912 1,302,029 472,185,427 406,662,217 73,023,438
2 2020/05/25 641,458,990 612,379,841 27,522,107 1,021,316 629,592,119 0 9,539 0 0 2,069,182 393,961 0 9,394,189 0 46,899,361 1,141,784 306,793,497 235,845,426 50,778,922 44,817,143 1,167,310 306,395,061 234,893,243 54,186,233
3 2020/05/22 847,467,288 830,997,456 13,472,156 2,173,679 832,046,355 0 245,749 0 0 3,101,995 3,094,402 382,092 8,596,695 0 63,527,104 1,580,861 382,694,417 312,464,634 87,200,272 54,102,924 1,552,136 413,978,629 315,154,794 62,678,805
4 2020/05/21 601,199,346 596,327,758 2,325,716 1,780,149 588,696,773 0 426,864 0 0 2,359,680 368,345 0 9,347,684 0 60,969,199 1,050,550 283,828,511 192,808,025 62,543,061 52,553,279 1,177,388 293,822,455 194,186,529 59,459,695
"""
result = self.post(ind_tp=market, fr_work_dt=fromdate, to_work_dt=todate)
return DataFrame(result['block1'])

class MDK80033_1(KrxWebIo):
@property
def bld(self):
return "MKD/13/1302/13020301/mkd13020301_02"

def read(self, fromdate, todate, market):
"""거래실적 추이 (거래대금)
:param fromdate : 조회 시작 일자 (YYMMDD)
:param todate : 조회 마지막 일자 (YYMMDD)
:param market : kospi / kosdaq / konex
:return : 거래실적 추이 DataFrame
dt tot stk sect reit fm rpt_mass mktd_mass mktd_bsk mktd_dkpl tme_end_pr tme_mass tme_bsk tme_unit tme_dkpl bz_termnl_ask cable_termnl_ask wrls_termnl_ask hts_ask etc_ask bz_termnl_bid cable_termnl_bid wrls_termnl_bid hts_bid etc_bid
0 2020/05/27 1,178,847,686 1,156,800,749 19,567,184 1,181,347 1,159,323,745 0 421,116 0 0 3,271,098 855,312 0 14,976,415 0 71,353,441 2,112,812 567,158,607 453,973,325 84,249,501 72,550,845 1,870,205 563,795,722 451,021,048 89,609,866
1 2020/05/26 1,017,804,023 1,008,972,681 6,436,255 1,438,271 999,126,798 0 15,406 249,637 0 2,885,337 1,164,620 0 14,362,225 0 64,446,407 1,521,342 481,103,100 408,886,368 61,846,806 64,630,912 1,302,029 472,185,427 406,662,217 73,023,438
2 2020/05/25 641,458,990 612,379,841 27,522,107 1,021,316 629,592,119 0 9,539 0 0 2,069,182 393,961 0 9,394,189 0 46,899,361 1,141,784 306,793,497 235,845,426 50,778,922 44,817,143 1,167,310 306,395,061 234,893,243 54,186,233
3 2020/05/22 847,467,288 830,997,456 13,472,156 2,173,679 832,046,355 0 245,749 0 0 3,101,995 3,094,402 382,092 8,596,695 0 63,527,104 1,580,861 382,694,417 312,464,634 87,200,272 54,102,924 1,552,136 413,978,629 315,154,794 62,678,805
4 2020/05/21 601,199,346 596,327,758 2,325,716 1,780,149 588,696,773 0 426,864 0 0 2,359,680 368,345 0 9,347,684 0 60,969,199 1,050,550 283,828,511 192,808,025 62,543,061 52,553,279 1,177,388 293,822,455 194,186,529 59,459,695
"""
result = self.post(ind_tp=market, fr_work_dt=fromdate, to_work_dt=todate)
return DataFrame(result['block1'])


################################################################################
# Sorting
class ShortHttp(KrxWebIo):
Expand Down Expand Up @@ -402,30 +447,27 @@ def read(date, market=1):

if __name__ == "__main__":
import pandas as pd

pd.set_option('display.width', None)

# stock
# df = MKD80037().read("ALL", "20180501", "20180801")
# df = MKD80037().read("ALL", "20180501", "20180515")

# index
# df = MKD20011_PDF().read("20190412", "001", 2)
# df = MKD20011().read("20190413", "03")
# df = MKD20011_SUB().read("20190408", "20190412", "001", 1)
# df = MKD20011_SUB().read("20190408", "20190412", "001", 2)
# print(MKD30009_1().read('20190322', '20190329', 'ALL', 'KR7005930003'))
df = MKD80002().read("20200520", "20200527", 2)
# df = MKD80002().read("20200520", "20200527", 2)
# df = MDK80033_0().read("20200519", "20200526", 'kospi')
# df = MDK80033_1().read("20200519", "20200526", 'kospi')
# shorting
# print(SRT02010100.read("KR7005930003", "20181205", "20181207"))
# print(SRT02020100.read("20190402", "20190402", market=1))
# print(SRT02020100.read("20181207", "20181212", "코스피", "KR7005930003"))
# print(SRT02020300.read("20181207", "20181212", "코스피", "거래대금"))
# print(SRT02020400.read("20181212", "코스피"))

# print(SRT02030100.read("20181212", "20181212", 1, "KR7210980009"))
# print(SRT02030100.read("20181207", "20181212", "코스피", "KR7210980009"))

# print(SRT02030400.read("20181214", 1))

print(df.head())
86 changes: 70 additions & 16 deletions pykrx/website/krx/market/wrap.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from pykrx.website.krx.market.core import (MKD30040, MKD80037, MKD30009_0,
MKD30009_1, MKD20011, MKD20011_SUB,
MKD20011_PDF, SRT02010100, MKD80002,
SRT02020100, SRT02020300,
SRT02020100, SRT02020300, MDK80033_0, MDK80033_1,
SRT02020400, SRT02030100, SRT02030400
)
import numpy as np
Expand Down Expand Up @@ -134,6 +134,47 @@ def get_market_fundamental_by_date(fromdate, todate, isin, market="ALL"):
return df.sort_index()


@dataframe_empty_handler
def get_market_trading_volume_by_date(fromdate, todate, market):
"""거래실적 추이(거래량)
:param fromdate: 조회 시작 일자 (YYYYMMDD)
:param todate : 조회 종료 일자 (YYYYMMDD)
:param market : KRX / KOSPI / KOSDQA
:return : 거래실적 추이 DataFrame
전체 주권 투자회사 부동산투자회사
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
"""
market = {"KOSPI": 'kospi', "KOSDAQ": 'kosdaq', 'KONEX': 'konex'}.get(market, 'kospi')
df = MDK80033_0().read(fromdate, todate, market)
return _get_index_volume_by_date(df)


@dataframe_empty_handler
def get_market_trading_value_by_date(fromdate, todate, market):
"""거래실적 추이 (거래대금)
:param fromdate: 조회 시작 일자 (YYYYMMDD)
:param todate : 조회 종료 일자 (YYYYMMDD)
:param market : KRX / KOSPI / KOSDQA
:return : 거래실적 추이 DataFrame (단위:원)
전체 주권 투자회사 부동산투자회사
2020-05-26 12545313579 12524370281 3260524 7982490
2020-05-25 7960324756 7936195529 14000492 5674769
2020-05-22 9509771760 9484894049 6685432 12007486
2020-05-21 8636997699 8619674049 1535003 9285644
2020-05-20 8248632036 8233849994 1333854 3746196
2020-05-19 11918300290 11900636354 1651565 6939447
"""
market = {"KOSPI": 'kospi', "KOSDAQ": 'kosdaq', 'KONEX': 'konex'}.get(market, 'kospi')
df = MDK80033_1().read(fromdate, todate, market)
df = _get_index_volume_by_date(df)
return df * 1000


################################################################################
# index
@dataframe_empty_handler
Expand Down Expand Up @@ -206,18 +247,17 @@ def get_index_status_by_group(date, market):
@dataframe_empty_handler
def get_index_price_change_by_name(fromdate, todate, market):
"""전체지수 등락률
:param fromdate: 조회 시작 일자 (YYYYMMDD)
:param todate : 조회 종료 일자 (YYYYMMDD)
:param market : KRX / KOSPI / KOSDQA
:return : 전체지수 등락률 DataFrame
기준시점 발표시점 기준지수 현재지수 시가총액
코스피 1983.01.04 1980.01.04 100.0 2486.35 1617634318
코스피 벤치마크 2015.09.14 2010.01.04 1696.0 2506.92 1554948117
코스피 비중제한 8% 지수 2017.12.18 2015.01.02 1000.0 1272.93 1559869409
코스피 200 1994.06.15 1990.01.03 100.0 327.13 1407647304
코스피 100 2000.03.02 2000.01.04 1000.0 2489.34 1277592989
코스피 50 2000.03.02 2000.01.04 1000.0 2205.53 1102490712
"""
:param fromdate: 조회 시작 일자 (YYYYMMDD)
:param todate : 조회 종료 일자 (YYYYMMDD)
:param market : KRX / KOSPI / KOSDQA
:return : 전체지수 등락률 DataFrame
시가 종가 등락률 거래량 거래대금
코스닥지수 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
"""
market = {"KRX": 2, "KOSPI": 3, "KOSDAQ": 4}.get(market, 3)
df = MKD80002().read(fromdate, todate, market)
df = df[['kor_indx_ind_nm', 'indx', 'prv_dd_indx', 'updn_rate', 'tr_vl', 'tr_amt']]
Expand All @@ -229,6 +269,19 @@ def get_index_price_change_by_name(fromdate, todate, market):
return df


def _get_index_volume_by_date(df):
df = df[['dt', 'tot', 'stk', 'sect', 'reit']]
df.columns = ['날짜', '전체', '주권', '투자회사', '부동산투자회사']
df = df.set_index('날짜')
# df.columns = pd.MultiIndex.from_arrays([['전체', '종류별', '종류별', '종류별'], ['', '주권', '투자회사',
# '부동산투자회사']])
df = df.replace(',', '', regex=True)
df = df.replace('', 0)
df = df.astype({"전체": np.int64, "주권": np.int64, "투자회사": np.int64, "부동산투자회사": np.int64})
df.index = pd.to_datetime(df.index, format='%Y/%m/%d')
return df


@dataframe_empty_handler
def get_index_portfolio_deposit_file(date, id, market):
market = {"KOSPI": 1, "KOSDAQ": 2}.get(market, 1)
Expand Down Expand Up @@ -439,8 +492,9 @@ def get_shorting_balance_top50(date, market="KOSPI"):
# df = get_index_portfolio_deposit_file("20190410", "001", "KOSDAQ")
# df = get_index_portfolio_deposit_file("20190410", "028", "KOSPI")
# df = get_index_status_by_group("20190410", "KOSPI")
df = get_index_price_change_by_name("20200520", "20200527", "KOSDAQ")
print(df)
# df = get_index_price_change_by_name("20200520", "20200527", "KOSDAQ")
# df = get_market_trading_volume_by_date("20200519", "20200526", 'kospi')
df = get_market_trading_value_by_date("20200519", "20200526", 'kospi')

# shoring
# df = get_shorting_status_by_date("20190401", "20190405", "KR7005930003")
Expand All @@ -450,4 +504,4 @@ def get_shorting_balance_top50(date, market="KOSPI"):
# df = get_shorting_volume_top50("20190211")
# df = get_shorting_balance_by_ticker("20190211", "20190215", "KR7005930003")
# df = get_shorting_balance_top50("20190401")
# print(df)
print(df)
35 changes: 34 additions & 1 deletion readme.MD
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,36 @@ print(df.head(2))
201809 1.79 28126 7.91 5997
```



#### 2.1.1.6 일자별 거래실적 추이 (거래량)
일자별 시장의 거래량을 반환하며, KOSPI / KOSDAQ / KONEX 세 개의 시장을 지원합니다.
거래량/거래대금 합계 항목은 주식(외국주,DR포함), 증권투자회사, REITs, 선박투자회사, 사회간접자본투융자회사가 포함되어 있습니다.
```python
df = stock.get_market_trading_volume_by_date(("20200519", "20200526", "KOSPI")
print(df.head())
```


#### 2.1.1.7 일자별 거래실적 추이 (거래대금)
일자별 시장의 거래 대금을 원 단위로 반환하며 KOSPI / KOSDAQ / KONEX 세 개의 시장을 지원한다.
거래량/거래대금 합계 항목은 주식(외국주,DR포함), 증권투자회사, REITs, 선박투자회사, 사회간접자본투융자회사가 포함되어 있습니다.
```python
df = stock.get_market_trading_value_by_date(("20200519", "20200526", "KOSPI")
print(df.head())
```

```text
전체 주권 투자회사 부동산투자회사
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
2020-05-19 11918300290000 11900636354000 1651565000 6939447000
```


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

Expand Down Expand Up @@ -226,8 +256,11 @@ print(df.head())
코스피 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() 함수는 지수의 등락률/거래량/거래대금을 반환합니다.
get_index_price_change_by_name() 함수는 지수의 등락률/거래량/거래대금을 반환하며, KRX / KOSPI / KOSDAQ 세 개의 지수를
지원합니다.
코스피, 코스닥 지수의 통계(거래량, 거래대금 등)는 외국주 등까지 포함한 시장 전체 통계입니다.
```python
df = stock.get_index_price_change_by_name("20200520", "20200527", "KOSDAQ")
print(df.head())
Expand Down

0 comments on commit 79ee7ec

Please sign in to comment.