Пример #1
0
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()
Пример #2
0
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()
Пример #3
0
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()
Пример #4
0
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()
Пример #5
0
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()
Пример #6
0
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()
Пример #7
0
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()
Пример #8
0
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()
Пример #9
0
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()
Пример #10
0
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()
Пример #11
0
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()
Пример #12
0
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)
Пример #13
0
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()
Пример #14
0
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