def get_shorting_status_by_date(fromdate, todate, ticker): """일자별 공매도 종합 현황 :param fromdate: 조회 시작 일자 (YYYYMMDD) :param todate : 조회 종료 일자 (YYYYMMDD) :param ticker : 종목 번호 :return : 종합 현황 DataFrame 공매도 잔고 공매도금액 잔고금액 날짜 20180105 41726 177954 3303209900 14111752200 20180108 32411 167754 2528196100 13118362800 20180109 50486 175261 3885385100 13477570900 """ isin = get_stock_ticker_isin(ticker) df = 개별종목_공매도_종합정보().fetch(fromdate, todate, isin) df.columns = ['날짜', '거래량', '잔고수량', '거래대금', '잔고금액'] df = df.set_index('날짜') df.index = pd.to_datetime(df.index, format='%Y/%m/%d') # '-'는 데이터가 집계되지 않은 것을 의미한다. # 최근 2일 간의 데이터 ([:2])에서 '-'가 하나는 행의 갯수를 계산함 idx = (df.iloc[:2] == '-').any(axis=1).sum() df = df.iloc[idx:] df = df.replace('\D', '', regex=True) df = df.replace('', 0) df = df.astype({ "거래량": np.int32, "잔고수량": np.int32, "거래대금": np.int64, "잔고금액": np.int64 }) return df.sort_index()
def get_market_cap_by_date(fromdate, todate, ticker): """일자별 OHLCV :param fromdate: 조회 시작 일자 (YYYYMMDD) :param todate : 조회 마지막 일자 (YYYYMMDD) :param isin : 조회 종목의 ticker :return : 시가총액 DataFrame 시가총액 상장주식수 날짜 2015-07-20 187806655 147299337 2015-07-21 186039063 147299337 2015-07-22 184566069 147299337 2015-07-23 181767382 147299337 2015-07-24 181030885 147299337 """ isin = get_stock_ticker_isin(ticker) df = MKD30040().fetch(fromdate, todate, isin) df = df[['trd_dd', 'mktcap', 'acc_trdvol', 'acc_trdval', 'list_shrs']] df.columns = ['날짜', '시가총액', '거래량', '거래대금', '상장주식수'] df = df.replace('/', '', regex=True) df = df.replace(',', '', regex=True) df = df.set_index('날짜') df = df.astype(np.int64) df.index = pd.to_datetime(df.index, format='%Y%m%d') return df.sort_index()
def get_market_cap_by_date(fromdate: str, todate: str, ticker: str) -> DataFrame: """일자별로 정렬된 시가총액 Args: fromdate (str): 조회 시작 일자 (YYYYMMDD) todate (str): 조회 종료 일자 (YYYYMMDD) ticker (str): 티커 Returns: DataFrame: 시가총액 거래량 거래대금 상장주식수 날짜 2015-07-20 187806654675000 128928 165366199000 147299337 2015-07-21 186039062631000 194055 244129106000 147299337 2015-07-22 184566069261000 268323 333813094000 147299337 2015-07-23 181767381858000 208965 259446564000 147299337 2015-07-24 181030885173000 196584 241383636000 147299337 """ isin = get_stock_ticker_isin(ticker) df = 개별종목시세().fetch(fromdate, todate, isin) df = df[['TRD_DD', 'MKTCAP', 'ACC_TRDVOL', 'ACC_TRDVAL', 'LIST_SHRS']] df.columns = ['날짜', '시가총액', '거래량', '거래대금', '상장주식수'] df = df.replace('/', '', regex=True) df = df.replace(',', '', regex=True) df = df.set_index('날짜') df = df.astype(np.int64) df.index = pd.to_datetime(df.index, format='%Y%m%d') return df.sort_index()
def get_exhaustion_rates_of_foreign_investment_by_date(fromdate: str, todate: str, ticker: str) -> DataFrame: """[12023] 외국인보유량(개별종목) - 개별추이 Args: fromdate (str): 조회 시작 일자 (YYYYMMDD) todate (str): 조회 종료 일자 (YYYYMMDD) ticker (str): 종목의 티커 Returns: DataFrame: 상장주식수 보유수량 지분율 한도수량 한도소진율 날짜 2021-01-08 5969782550 3314966371 55.53125 5969782550 55.53125 2021-01-11 5969782550 3324115988 55.68750 5969782550 55.68750 2021-01-12 5969782550 3318676206 55.59375 5969782550 55.59375 2021-01-13 5969782550 3316551070 55.56250 5969782550 55.56250 2021-01-14 5969782550 3314652740 55.53125 5969782550 55.53125 """ isin = get_stock_ticker_isin(ticker) df = 외국인보유량_개별추이().fetch(fromdate, todate, isin) df = df[['TRD_DD', 'LIST_SHRS', 'FORN_HD_QTY', 'FORN_SHR_RT', 'FORN_ORD_LMT_QTY', 'FORN_LMT_EXHST_RT']] df.columns = ['날짜', '상장주식수', '보유수량', '지분율', '한도수량', '한도소진율'] df = df.replace('/', '', regex=True) df = df.replace('', '0', regex=True) df = df.replace(',', '', regex=True) df = df.astype({"상장주식수": np.int64, "보유수량": np.int64, "지분율": np.float16, "한도수량": np.int64, "한도소진율": np.float16}) df = df.set_index('날짜') df.index = pd.to_datetime(df.index, format='%Y%m%d') return df.sort_index()
def get_market_ohlcv_by_date(fromdate, todate, ticker): """일자별 OHLCV :param fromdate: 조회 시작 일자 (YYYYMMDD) :param todate : 조회 마지막 일자 (YYYYMMDD) :param isin : 조회 종목의 ticker :return : OHLCV DataFrame 시가 고가 저가 종가 거래량 20180208 97200 99700 97100 99300 813467 20180207 98000 100500 96000 96500 1082264 20180206 94900 96700 93400 96100 1094871 20180205 99400 99600 97200 97700 745562 """ isin = get_stock_ticker_isin(ticker) df = MKD30040().fetch(fromdate, todate, isin) df = df[[ 'trd_dd', 'tdd_opnprc', 'tdd_hgprc', 'tdd_lwprc', 'tdd_clsprc', 'acc_trdvol' ]] df.columns = ['날짜', '시가', '고가', '저가', '종가', '거래량'] df = df.replace('/', '', regex=True) df = df.replace(',', '', regex=True) df = df.set_index('날짜') df = df.astype(np.int32) df.index = pd.to_datetime(df.index, format='%Y%m%d') return df.sort_index()
def get_shorting_balance_by_date(fromdate: str, todate: str, ticker: str) -> DataFrame: """일자별로 정렬된 투자자별 공매도 잔고 현황 Args: fromdate (str): 조회 시작 일자 (YYYYMMDD) todate (str): 조회 종료 일자 (YYYYMMDD) ticker (str): 조회 종목 티커 Returns: DataFrame: >> get_shorting_balance_by_date("20200106", "20200110", "005930") 공매도잔고 상장주식수 공매도금액 시가총액 비중 날짜 2020-01-06 5630893 5969782550 312514561500 3.313229e+14 0.090027 2020-01-07 5169745 5969782550 288471771000 3.331139e+14 0.090027 2020-01-08 5224233 5969782550 296736434400 3.390836e+14 0.090027 2020-01-09 5387073 5969782550 315682477800 3.498293e+14 0.090027 2020-01-10 5489240 5969782550 326609780000 3.552021e+14 0.090027 """ isin = get_stock_ticker_isin(ticker) df = 개별종목_공매도_잔고().fetch(fromdate, todate, isin) df = df[["RPT_DUTY_OCCR_DD", "BAL_QTY", "LIST_SHRS", "BAL_AMT", "MKTCAP", "BAL_RTO"]] df.columns = ['날짜', '공매도잔고', '상장주식수', '공매도금액', '시가총액', '비중'] df = df.set_index('날짜') df = df.replace('[^-\w\.]', '', regex=True) df = df.replace('', 0) df.index = pd.to_datetime(df.index, format='%Y/%m/%d') df = df.astype({"공매도잔고": np.int64, "상장주식수": np.int64, "공매도금액": np.int64, "시가총액": np.float64, "비중": np.float32}) return df.sort_index()
def get_market_ohlcv_by_date(fromdate: str, todate: str, ticker: str) -> DataFrame: """일자별로 정렬된 특정 종목의 OHLCV Args: fromdate (str): 조회 시작 일자 (YYYYMMDD) todate (str): 조회 종료 일자 (YYYYMMDD) ticker (str): 조회 종목의 ticker Returns: DataFrame: >> get_market_ohlcv_by_date("20150720", "20150810", "005930") 시가 고가 저가 종가 거래량 거래대금 등락률 날짜 2015-07-20 1291000 1304000 1273000 1275000 128928 165366199000 -2.300781 2015-07-21 1275000 1277000 1247000 1263000 194055 244129106000 -0.939941 2015-07-22 1244000 1260000 1235000 1253000 268323 333813094000 -0.790039 2015-07-23 1244000 1253000 1234000 1234000 208965 259446564000 -1.519531 """ isin = get_stock_ticker_isin(ticker) df = 개별종목시세().fetch(fromdate, todate, isin) df = df[['TRD_DD', 'TDD_OPNPRC', 'TDD_HGPRC', 'TDD_LWPRC', 'TDD_CLSPRC', 'ACC_TRDVOL', 'ACC_TRDVAL', 'FLUC_RT']] df.columns = ['날짜', '시가', '고가', '저가', '종가', '거래량', '거래대금', '등락률'] df = df.set_index('날짜') df.index = pd.to_datetime(df.index, format='%Y/%m/%d') df = df.replace('[^-\w\.]', '', regex=True) df = df.replace('\-$', '0', regex=True) df = df.replace('', '0') df = df.astype({ "시가":np.int32, "고가":np.int32, "저가":np.int32, "종가":np.int32, "거래량":np.int32, "거래대금":np.int64, "등락률":np.float16} ) return df.sort_index()
def get_stock_major_changes(ticker: str) -> DataFrame: """기업 주요 변동사항 Args: ticker (str): 조회 종목 티커 Returns: DataFrame: >> get_stock_major_changes("005930") """ isin = get_stock_ticker_isin(ticker) df = 기업주요변동사항().fetch(isin) df.columns = [ '날짜', '상호변경전', '상호변경후', '업종변경전', '업종변경후', '액면변경전', '액면변경후', '대표이사변경전', '대표이사변경후' ] df = df.set_index('날짜') df = df.replace(r'[^-\w\.]', '', regex=True) df[['액면변경전', '액면변경후']] = df[['액면변경전', '액면변경후']] \ .replace('', 0) df = df.replace('', '-') df.index = pd.to_datetime(df.index, format='%Y/%m/%d') df = df.astype({"액면변경전": np.int16}) return df.sort_index()
def get_market_fundamental_by_date(fromdate: str, todate: str, ticker: str, market: str = "KOSPI") -> DataFrame: """날짜로 정렬된 종목별 BPS/PER/PBR/배당수익률 Args: fromdate (str ): 조회 시작 일자 (YYYYMMDD) todate (str ): 조회 종료 일자 (YYYYMMDD) ticker (str ): 종목의 티커 market (str, optional): 조회 시장 (KOSPI/KOSDAQ/ALL) Returns: DataFrame: BPS PER PBR EPS DIV DPS 날짜 2015-07-20 953266 8.328125 1.339844 153105 1.570312 20000 2015-07-21 953266 8.250000 1.320312 153105 1.580078 20000 2015-07-22 953266 8.179688 1.309570 153105 1.599609 20000 2015-07-23 953266 8.062500 1.290039 153105 1.620117 20000 2015-07-24 953266 8.031250 1.290039 153105 1.629883 20000 """ market = {"ALL": "ALL", "KOSPI": "STK", "KOSDAQ": "KSQ", "KONEX": "KNX"}.\ get(market, "ALL") isin = get_stock_ticker_isin(ticker) df = PER_PBR_배당수익률_개별().fetch(fromdate, todate, market, isin) df = df[['TRD_DD', 'BPS', 'PER', 'PBR', 'EPS', 'DVD_YLD', 'DPS']] df.columns = ['날짜', 'BPS', 'PER', 'PBR', 'EPS', 'DIV', 'DPS'] df = df.replace('-', '0', regex=True) df = df.replace('/', '', regex=True) df = df.replace('', '0', regex=True) df = df.replace(',', '', regex=True) df = df.astype( { "DIV": np.float32, "BPS": np.int32, "PER": np.float16, "PBR": np.float16, "EPS": np.int32, "DIV": np.float16, "DPS": np.int32 }, ) df = df.set_index('날짜') df.index = pd.to_datetime(df.index, format='%Y%m%d') return df.sort_index()
def get_shorting_trading_value_and_volume_by_date(fromdate: str, todate: str, ticker: str) -> DataFrame: """[32001] 개별종목 공매도 거래 Args: fromdate (str): 조회 시작 일자 (YYYYMMDD) todate (str): 조회 종료 일자 (YYYYMMDD) ticker (str): 인덱스 티커 Returns: DataFrame: >> get_shorting_trading_value_and_volume( "20201226", "20210126", "005930") 거래량 거래대금 공매도 매수 비중 공매도 매수 비중 날짜 2020-12-28 6924 40085044 0.02 544918800 3172810866091 0.02 2020-12-29 15834 30339449 0.05 1236917300 2368814098000 0.05 2020-12-30 2978 29417421 0.01 239159500 2344317462700 0.01 2021-01-04 9279 38655276 0.02 771889500 3185356823460 0.02 2021-01-05 169 35335669 0.00 14011100 2915618322800 0.00 """ isin = get_stock_ticker_isin(ticker) df = 개별종목_공매도_거래_개별추이().fetch(fromdate, todate, isin) df = df.set_index('TRD_DD') df.index.name = "날짜" df = df[[ 'CVSRTSELL_TRDVOL', 'ACC_TRDVOL', 'TRDVOL_WT', 'CVSRTSELL_TRDVAL', 'ACC_TRDVAL', 'TRDVAL_WT' ]] df.columns = pd.MultiIndex.from_product([['거래량', '거래대금'], ['공매도', '매수', '비중']]) df = df.replace(r'[^-\w\.]', '', regex=True).replace('', '0') df = df.astype({ ("거래량", "공매도"): np.int64, ("거래량", "매수"): np.int64, ("거래량", "비중"): np.float32, ("거래대금", "공매도"): np.int64, ("거래대금", "매수"): np.int64, ("거래대금", "비중"): np.float32 }) df.index = pd.to_datetime(df.index, format='%Y/%m/%d') return df.sort_index()
def get_market_trading_value_and_volume_on_ticker_by_date( fromdate: str, todate: str, ticker: str, option_a: str, option_b: str, detail_view: bool) -> DataFrame: """[12008] 투자자별 거래실적 Args: fromdate (str ): 조회 시작 일자 (YYMMDD) todate (str ): 조회 종료 일자 (YYMMDD) ticker (str ): 조회 종목 티커 option_a (str ): 일별 추이 옵션 1 (거래량/거래대금) option_b (str ): 일별 추이 옵션 2 (매수/매도/순매수) detail_view (bool): 상세조회 여부 Returns: DataFrame: TRD_DD TRDVAL1 TRDVAL2 TRDVAL3 TRDVAL4 TRDVAL_TOT 0 2021/01/22 67,656,491 6,020,990 927,119,399 110,426,104 1,111,222,984 1 2021/01/21 69,180,642 13,051,423 1,168,810,381 109,023,034 1,360,065,480 """ # pylint: disable=line-too-long # noqa: E501 isin = get_stock_ticker_isin(ticker) option_a = {"거래량": 1, "거래대금": 2}.get(option_a, 1) option_b = {"매도": 1, "매수": 2, "순매수": 3}.get(option_b, 3) if detail_view: df = 투자자별_거래실적_개별종목_일별추이_상세().fetch(fromdate, todate, isin, option_a, option_b) df.columns = [ '날짜', '금융투자', '보험', '투신', '사모', '은행', '기타금융', '연기금', '기타법인', '개인', '외국인', '기타외국인', '전체' ] else: df = 투자자별_거래실적_개별종목_일별추이_일반().fetch(fromdate, todate, isin, option_a, option_b) df.columns = ['날짜', '기관합계', '기타법인', '개인', '외국인합계', '전체'] df = df.set_index('날짜') df.index = pd.to_datetime(df.index, format='%Y/%m/%d') df = df.replace(r'[^-\w]', '', regex=True) df = df.replace('', '0') df = df.astype(np.int64) return df.sort_index()
def get_market_trading_value_and_volume_on_ticker_by_investor( fromdate: str, todate: str, ticker: str) -> DataFrame: """[12009] 투자자별 거래실적 기간합계(개별 종목) 다음 메뉴의 내용을 스크래핑 함 거래실적 ㄴ 투자자별 거래실적(개별종목) http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId= MDC0201020302 Args: fromdate (str ): 조회 시작 일자 (YYMMDD) todate (str ): 조회 종료 일자 (YYMMDD) ticker (str ): 조회 종목 티커 Returns: DataFrame: >> get_market_trading_value_and_volume_on_ticker_by_investor( "20210113", "20210120", "005930") 거래량 거래대금 매도 매수 순매수 매도 매수 순매수 투자자구분 금융투자 31324444 28513421 2811023 2765702311200 2510494630400 255207680800 보험 1790469 561307 1229162 158120209600 49570523900 108549685700 투신 3966211 1486178 2480033 351753222200 130513380300 221239841900 사모 756726 541912 214814 67202238800 47475872700 19726366100 은행 105323 70598 34725 9360874400 6170507400 3190367000 """ # pylint: disable=line-too-long # noqa: E501 isin = get_stock_ticker_isin(ticker) df = 투자자별_거래실적_개별종목_기간합계().fetch(fromdate, todate, isin) df = df.set_index('INVST_TP_NM') df.index.name = '투자자구분' df.columns = pd.MultiIndex.from_product([['거래량', '거래대금'], ['매도', '매수', '순매수']]) df = df.replace(r'[^-\w]', '', regex=True) df = df.replace('', '0') return df.astype(np.int64)
def get_market_ohlcv_by_date(fromdate: str, todate: str, ticker: str) -> DataFrame: """일자별로 정렬된 특정 종목의 OHLCV Args: fromdate (str): 조회 시작 일자 (YYYYMMDD) todate (str): 조회 종료 일자 (YYYYMMDD) ticker (str): 조회 종목의 ticker Returns: DataFrame: 시가 고가 저가 종가 거래량 2018-02-08 97200 99700 97100 99300 813467 2018-02-07 98000 100500 96000 96500 1082264 2018-02-06 94900 96700 93400 96100 1094871 2018-02-05 99400 99600 97200 97700 745562 """ isin = get_stock_ticker_isin(ticker) df = 개별종목시세().fetch(fromdate, todate, isin) df = df[[ 'TRD_DD', 'TDD_OPNPRC', 'TDD_HGPRC', 'TDD_LWPRC', 'FLUC_TP_CD', 'ACC_TRDVOL', 'ACC_TRDVAL' ]] df.columns = ['날짜', '시가', '고가', '저가', '종가', '거래량', '거래대금'] df = df.replace('/', '', regex=True) df = df.replace(',', '', regex=True) df = df.set_index('날짜') df = df.astype({ "시가": np.int32, "고가": np.int32, "저가": np.int32, "종가": np.int32, "거래량": np.int32, "거래대금": np.int64 }) df.index = pd.to_datetime(df.index, format='%Y%m%d') return df.sort_index()
def get_market_ohlcv_by_date_extend(fromdate, todate, ticker): isin = get_stock_ticker_isin(ticker) # '005930'-> 'KR7005930003'반환 df = MKD30040().read(fromdate, todate, isin) # df empty일시 dataframe_empty_handler가 처리 df = df[[ 'trd_dd', 'tdd_opnprc', 'tdd_hgprc', 'tdd_lwprc', 'tdd_clsprc', 'acc_trdvol', 'mktcap', 'list_shrs' ]] df.columns = ['날짜', '시가', '고가', '저가', '종가', '거래량', '시가총액', '주식수'] df = df.replace('/', '', regex=True) df = df.replace(',', '', regex=True) df = df.set_index('날짜') df = df.astype(np.int64) # 자료형 개선 필요 df.reset_index(inplace=True) df['날짜'] = pd.to_datetime(df['날짜'], format='%Y%m%d').astype(np.str) df['종목코드'] = 'A' + ticker # 종목코드 앞에 A추가 df = df[['날짜', '종목코드', '시가', '고가', '저가', '종가', '거래량', '시가총액', '주식수']] print('krx', ticker, df.shape) return df