kquant 패키지 소개

kquant 패키지
Python
작성일

2024-01-10

kquant 패키지 소개

본 글에서는 파이썬에서 CHECK-API 사용을 쉽게 할 수 있도록 도와주는 kquant 패키지를 소개합니다.

준비사항

여기에서는 컴퓨터에 이미 파이썬 배포판과 주피터랩이 설치되어 있다고 가정합니다.

만약 파이썬 배포판이 설치되어 있지 않은 경우에는 다음 블로그 글을 참고하여 설치해 주세요.

파이썬 패키지의 설치 및 관리 방법에 대해서는 다음 블로그 글을 참고해 주세요.

주피터랩이 설치되어 있지 않은 경우에는 다음 블로그 글을 참고하여 설치해 주세요.

본 설명글은 주피터랩에서 노트북으로 진행합니다.

패키지 소개

kquant 패키지는 코스콤에서 개발한 금융데이터 분석용 파이썬 패키지로 다음과 같은 기능을 제공합니다.

1. CHECK-API 기능에 대한 파이썬 래핑(wrapping) 함수 제공

kquant 패키지는 requests 등의 파이썬 패키지를 사용하여 CHECK-API를 호출하고 pandas 데이터프레임에 결과를 정리하여 출력하는 기능을 파이썬 함수로 미리 구현하여 제공합니다.

예를 들어 삼성전자의 2023년 상반기의 일간 시세를 받아 pandas 데이터프레임에 정리하려면 다음과 같은 코드를 사용자가 직접 작성해야 합니다.

# 1. CHECK API 정보
CHECK_API_ID = "id_xxxxxxx"
CHECK_API_KEY = "key_xxxxxxx"
# 2. 삼성전자 일간시세 정보용 API 호출

from requests import post

host_url = "https://checkapi.koscom.co.kr"
api_url = "/stock/m001/hist_info"
payload = {
    "cust_id": CHECK_API_ID,
    "auth_key": CHECK_API_KEY,
    "jcode": "005930",
    "sdate": "20230101",
    "edate": "20230630",
}

r = post(host_url + api_url, data=payload)
results = r.json()["results"]
# 3 결과 데이터를 pandas 데이터프레임으로 정리

import pandas as pd

df = pd.DataFrame(results)
df = df.rename(
    columns={
        "F12506": "DATE",
        "F16013": "SYMBOL",
        "F15009": "OPEN",
        "F15010": "HIGH",
        "F15011": "LOW",
        "F15001": "CLOSE",
        "F15015": "VOLUME",
        "F15023": "AMOUNT",
        "F15472": "CHG",
        "F15004": "CHG_PCT",
        "F15006": "CHG_TYPE",
        "F16073": "EX_EVENT",
        "F30704": "OPEN_NOTADJ",
        "F30705": "HIGH_NOTADJ",
        "F30706": "LOW_NOTADJ",
        "F30700": "CLOSE_NOTADJ",
        "F30701": "CHG_NOTADJ",
        "F30702": "CHG_PCT_NOTADJ",
        "F30703": "CHG_TYPE_NOTADJ",
        "F15028": "MARKETCAP",
        "F16143": "SHARES",
        "F15037": "VWAP",
    }
)
df
DATE SYMBOL CLOSE OPEN HIGH LOW CHG CHG_TYPE CHG_PCT VOLUME ... EX_EVENT SHARES CLOSE_NOTADJ CHG_NOTADJ CHG_PCT_NOTADJ CHG_TYPE_NOTADJ OPEN_NOTADJ HIGH_NOTADJ LOW_NOTADJ VWAP
0 20230630 005930 72200 72500 72700 71700 -200 5 -0.28 11694765 ... 00 5969782550 72200 -200 -0.28 5 72500 72700 71700 72199
1 20230629 005930 72400 73100 73400 72400 -300 5 -0.41 12229967 ... 00 5969782550 72400 -300 -0.41 5 73100 73400 72400 72914
2 20230628 005930 72700 72600 72700 72000 100 2 0.14 8783093 ... 00 5969782550 72700 100 0.14 2 72600 72700 72000 72357
3 20230627 005930 72600 72500 72600 72000 200 2 0.28 9442997 ... 00 5969782550 72600 200 0.28 2 72500 72600 72000 72395
4 20230626 005930 72400 71700 72500 71500 800 2 1.12 10541901 ... 00 5969782550 72400 800 1.12 2 71700 72500 71500 72238
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
118 20230106 005930 59000 58300 59400 57900 800 2 1.37 17334989 ... 00 5969782550 59000 800 1.37 2 58300 59400 57900 58770
119 20230105 005930 58200 58200 58800 57600 400 2 0.69 15682826 ... 00 5969782550 58200 400 0.69 2 58200 58800 57600 58151
120 20230104 005930 57800 55700 58000 55600 2400 2 4.33 20188071 ... 00 5969782550 57800 2400 4.33 2 55700 58000 55600 57037
121 20230103 005930 55400 55400 56000 54500 -100 5 -0.18 13547030 ... 00 5969782550 55400 -100 -0.18 5 55400 56000 54500 55208
122 20230102 005930 55500 55500 56100 55200 200 2 0.36 10031448 ... 00 5969782550 55500 200 0.36 2 55500 56100 55200 55668

123 rows × 22 columns

하지만 kquant 패키지를 사용할 경우 daily_stock 함수를 실행하는 것 만으로 위와 같은 모든 과정을 처리할 수 있습니다.

import kquant as kq

df = kq.daily_stock("005930", "20230101", "20230630")
df
DATE SYMBOL OPEN HIGH LOW CLOSE VOLUME AMOUNT CHG CHG_PCT CHG_TYPE EX_EVENT OPEN_NOTADJ HIGH_NOTADJ LOW_NOTADJ CLOSE_NOTADJ CHG_NOTADJ CHG_PCT_NOTADJ CHG_TYPE_NOTADJ MARKETCAP SHARES
0 2023-01-02 005930 55,500 56,100 55,200 55,500 10,031,448 558,433,491,400 200 0.3600 2 00 55,500 56,100 55,200 55,500 200 0.3600 2 331,322,931,525,000 5,969,782,550
1 2023-01-03 005930 55,400 56,000 54,500 55,400 13,547,030 747,898,872,200 -100 -0.1800 5 00 55,400 56,000 54,500 55,400 -100 -0.1800 5 330,725,953,270,000 5,969,782,550
2 2023-01-04 005930 55,700 58,000 55,600 57,800 20,188,071 1,151,473,733,800 2,400 4.3300 2 00 55,700 58,000 55,600 57,800 2,400 4.3300 2 345,053,431,390,000 5,969,782,550
3 2023-01-05 005930 58,200 58,800 57,600 58,200 15,682,826 911,973,904,900 400 0.6900 2 00 58,200 58,800 57,600 58,200 400 0.6900 2 347,441,344,410,000 5,969,782,550
4 2023-01-06 005930 58,300 59,400 57,900 59,000 17,334,989 1,018,769,177,900 800 1.3700 2 00 58,300 59,400 57,900 59,000 800 1.3700 2 352,217,170,450,000 5,969,782,550
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
118 2023-06-26 005930 71,700 72,500 71,500 72,400 10,541,901 761,525,382,100 800 1.1200 2 00 71,700 72,500 71,500 72,400 800 1.1200 2 432,212,256,620,000 5,969,782,550
119 2023-06-27 005930 72,500 72,600 72,000 72,600 9,442,997 683,624,715,982 200 0.2800 2 00 72,500 72,600 72,000 72,600 200 0.2800 2 433,406,213,130,000 5,969,782,550
120 2023-06-28 005930 72,600 72,700 72,000 72,700 8,783,093 635,516,679,700 100 0.1400 2 00 72,600 72,700 72,000 72,700 100 0.1400 2 434,003,191,385,000 5,969,782,550
121 2023-06-29 005930 73,100 73,400 72,400 72,400 12,229,967 891,731,369,446 -300 -0.4100 5 00 73,100 73,400 72,400 72,400 -300 -0.4100 5 432,212,256,620,000 5,969,782,550
122 2023-06-30 005930 72,500 72,700 71,700 72,200 11,694,765 844,353,820,176 -200 -0.2800 5 00 72,500 72,700 71,700 72,200 -200 -0.2800 5 431,018,300,110,000 5,969,782,550

123 rows × 21 columns

2. 금융 데이터 시각화

금융 데이터에 대한 인터랙티브 시각화 기능을 제공합니다.

예를 들어 kquant 패키지의 chart_candle 함수를 사용하면 위 코드로 받은 삼성전자의 시세 데이터를 일봉차트로 표시할 수 있습니다.

kq.chart_candle(df)

3. 금융 데이터 분석 기능 제공

주식 백테스트를 포함한 다양한 금융분석 기능을 제공합니다.

예를 들어 다음과 같은 방법으로 5일-10일 이동평균 교차 전략을 사용한 모의 거래의 결과를 얻을 수 있습니다.

import logging

kq.sma(df, 5, out_column="FAST", inplace=True)  # 5일 이동평균
kq.sma(df, 10, out_column="SLOW", inplace=True)  # 10일 이동평균
kq.cross(df, "FAST", "SLOW", inplace=True)  # 이동평균 교차

df = kq.add_order_from_signals(df, "CROSS_UP", "CROSS_DOWN")  # 이동평균 교차 매매

df_result = kq.backtest_stock_daily(
    "005930",
    df,
    init_cash=100_000,
    broker_fee_percent=0,
    exchange_fee_percent=0,
    loglevel=logging.CRITICAL,
)

kq.backtest_plot_stock_daily(df_result)

kquant 패키지 설치 방법

kquant 패키지는 pip install 명령으로 설치할 수 있습니다.

pip install kquant

설치 후에는 파이썬을 실행하여 다음과 같이 kquant 패키지가 정상적으로 임포트되는지 확인합니다.

$ python
>>> import kquant as kq
>>> kq.__version__
'0.3.4'

CHECK-API KEY 설정 방법

kquant 패키지는 CHECK-API를 사용하여 금융 데이터를 입수하므로 사용전에 미리 CHECK-API ID와 KEY를 다음과 같이 설정하여야 합니다.

import kquant as kq

kq.set_api("발급받은 API ID 문자열", "발급받은 API KEY 문자열")

set_api 함수로 API ID 및 API KEY를 설정하면 설정 데이터는 사용자의 홈 디렉토리 아래의 .kquant 디렉토리 상의 credential 파일에 다음과 같은 형식으로 저장됩니다.

API_ID = "발급받은 API ID 문자열"
API_KEY = "발급받은 API KEY 문자열"

따라서 한 번 set_api 함수로 API 정보를 설정하면 이 파일이 삭제되거나 손상되지 않는 한 다시 set_api 함수로 API 정보를 설정할 필요는 없습니다.

API 참조문서

  • kquant 패키지의 모든 모듈과 함수에 대한 자세한 설명을 포함하는 API 참조문서는 다음 웹페이지에서 제공합니다.