kquant 패키지 소개
kquant 패키지 소개
본 글에서는 파이썬에서 CHECK-API 사용을 쉽게 할 수 있도록 도와주는 kquant 패키지를 소개합니다.
준비사항
여기에서는 컴퓨터에 이미 파이썬 배포판과 주피터랩이 설치되어 있다고 가정합니다.
만약 파이썬 배포판이 설치되어 있지 않은 경우에는 다음 블로그 글을 참고하여 설치해 주세요.
파이썬 패키지의 설치 및 관리 방법에 대해서는 다음 블로그 글을 참고해 주세요.
주피터랩이 설치되어 있지 않은 경우에는 다음 블로그 글을 참고하여 설치해 주세요.
본 설명글은 주피터랩에서 노트북으로 진행합니다.
패키지 소개
kquant
패키지는 코스콤에서 개발한 금융데이터 분석용 파이썬 패키지로 다음과 같은 기능을 제공합니다.
1. CHECK-API 기능에 대한 파이썬 래핑(wrapping) 함수 제공
kquant 패키지는 requests 등의 파이썬 패키지를 사용하여 CHECK-API를 호출하고 pandas 데이터프레임에 결과를 정리하여 출력하는 기능을 파이썬 함수로 미리 구현하여 제공합니다.
예를 들어 삼성전자의 2023년 상반기의 일간 시세를 받아 pandas 데이터프레임에 정리하려면 다음과 같은 코드를 사용자가 직접 작성해야 합니다.
# 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
함수를 실행하는 것 만으로 위와 같은 모든 과정을 처리할 수 있습니다.
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
함수를 사용하면 위 코드로 받은 삼성전자의 시세 데이터를 일봉차트로 표시할 수 있습니다.
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
명령으로 설치할 수 있습니다.
설치 후에는 파이썬을 실행하여 다음과 같이 kquant
패키지가 정상적으로 임포트되는지 확인합니다.
CHECK-API KEY 설정 방법
kquant 패키지는 CHECK-API를 사용하여 금융 데이터를 입수하므로 사용전에 미리 CHECK-API ID와 KEY를 다음과 같이 설정하여야 합니다.
set_api
함수로 API ID 및 API KEY를 설정하면 설정 데이터는 사용자의 홈 디렉토리 아래의 .kquant 디렉토리 상의 credential 파일에 다음과 같은 형식으로 저장됩니다.
따라서 한 번 set_api
함수로 API 정보를 설정하면 이 파일이 삭제되거나 손상되지 않는 한 다시 set_api
함수로 API 정보를 설정할 필요는 없습니다.
API 참조문서
kquant
패키지의 모든 모듈과 함수에 대한 자세한 설명을 포함하는 API 참조문서는 다음 웹페이지에서 제공합니다.