반응형
예전에는 증권사 API 를 사용하려면 윈도우에서 공인인증서로 로그인을 한 다음에야 가능했기 때문에 너무 불편했다. 특히나 클라우드에서 하려면 윈도우즈 셋팅을 전부 다 해주고 인증서까지 받은 다음에 해야했으니.. 윈도우즈 사용비용까지 발생했다.
이제는 REST API 도 나오기 때문에 한결 편해졌다. 단순히 키만 발급받아서 사용하면 되니 너무너무 편해졌다.
한국투자증권의 경우 kis 라는 파이썬 라이브러리를 제공하고 있기 때문에 훨씬 편하게 사용할 수 있다.
https://github.com/koreainvestment/open-trading-api
https://wikidocs.net/book/7559
https://wikidocs.net/book/7847
한국투자증권 매우매우 칭찬한다.
반응형
한국투자증권 REST API와 KIS 라이브러리 소개 및 파이썬 예시 코드
1. 한국투자증권 REST API와 KIS 라이브러리 소개
한국투자증권은 투자자들이 프로그래밍을 통해 금융 데이터를 활용할 수 있도록 REST API를 제공하고 있다. 이러한 API를 보다 편리하게 사용하기 위해 KIS 라이브러리가 개발되었다. 이 라이브러리를 활용하면 인증 절차와 API 호출을 간소화하여 개발 생산성을 높일 수 있다.
주요 기능:
- 인증 관리: 액세스 토큰 발급 및 자동 갱신
- 시세 조회: 주식, ETF 등의 실시간 및 과거 시세 데이터 조회
- 주문 실행: 매수, 매도 주문 생성 및 관리
- 계좌 정보 조회: 잔고, 거래 내역 등 계좌 관련 정보 접근
2. KIS 라이브러리를 이용한 간단한 사용 방법
사전 준비:
- API 키 발급: 한국투자증권 개발자 센터에서 APP_KEY와 APP_SECRET을 발급받는다.
- 라이브러리 설치: kis 라이브러리를 설치한다.
pip install kis
예시 코드:
from kis import Kis
# API 키 설정
APP_KEY = '발급받은 APP_KEY를 입력하세요'
APP_SECRET = '발급받은 APP_SECRET을 입력하세요'
ACCESS_TOKEN = None # 초기에는 None으로 설정
# Kis 인스턴스 생성
kis = Kis(APP_KEY, APP_SECRET)
# 인증 토큰 발급
ACCESS_TOKEN = kis.get_access_token()
# 토큰 설정
kis.set_access_token(ACCESS_TOKEN)
# 주식 시세 조회 함수
def get_stock_price(stock_code):
response = kis.get_stock_price(stock_code)
if response.status_code == 200:
data = response.json()
stock_name = data['stock_name']
current_price = data['current_price']
print(f"종목명: {stock_name}, 현재가: {current_price}원")
else:
print("데이터 조회에 실패하였다.")
# 사용 예시
get_stock_price('005930') # 삼성전자 종목 코드
설명:
- Kis 인스턴스 생성: Kis 클래스를 사용하여 APP_KEY와 APP_SECRET을 설정한다.
- 인증 토큰 발급: get_access_token 메서드를 통해 액세스 토큰을 발급받고 set_access_token으로 설정한다.
- 시세 조회: get_stock_price 메서드를 이용하여 특정 종목의 현재가를 조회한다.
- 응답 처리: 응답이 성공적이면 종목명과 현재가를 출력하고, 그렇지 않으면 오류 메시지를 출력한다.
주의사항:
- 실제 kis 라이브러리의 사용 방법과 메서드 이름은 공식 문서를 참고해야 한다.
- API 호출 시 예외 처리를 추가하여 오류에 대비하는 것이 좋다.
- 개인 정보와 인증 정보는 안전하게 관리해야 한다.
참고로 필자가 사용하는 예수금 계산 방법이다. 미증시 예수금 계산시 유용하다.
def get_balance():
logger.info('get_balance')
resp = kis.fetch_present_balance()
if resp.get('rt_cd') != '0':
raise Exception(f"예수금조회 오류: {resp}")
#{'pchs_amt_smtl': '145', 'evlu_amt_smtl': '147', 'evlu_pfls_amt_smtl': '1', 'dncl_amt': '0', 'cma_evlu_amt': '0', 'tot_dncl_amt': '4781794', 'etc_mgna': '0', 'wdrw_psbl_tot_amt': '4781794', 'frcr_evlu_tota': '19084', 'evlu_erng_rt1': '1.1900000000', 'pchs_amt_smtl_amt': '189131', 'evlu_amt_smtl_amt': '191386', 'tot_evlu_pfls_amt': '2255.00000000', 'tot_asst_amt': '12676325', 'buy_mgn_amt': '0', 'mgna_tota': '0', 'frcr_use_psbl_amt': '19084.00', 'ustl_sll_amt_smtl': '7873659', 'ustl_buy_amt_smtl': '189598', 'tot_frcr_cblc_smtl': '4800878.000000', 'tot_loan_amt': '0'}
output = resp.get('output3')
logger.debug(output)
usd_krw = get_usd_krw()
tot_dncl_amt = float(output.get('tot_dncl_amt')) # 총예수금액
ustl_sll_amt_smtl = float(output.get('ustl_sll_amt_smtl')) # 미결제매도금액합계(매도하고 나면 바로 예수금에 채워지는게 아니라서 이 값이 필요)
frcr_evlu_tota = float(output.get('frcr_evlu_tota')) # 외화평가총액(외화예수금))
ustl_buy_amt_smtl = float(output.get('ustl_buy_amt_smtl')) # 미결제매수금액합계(매수하고 나서 예수금이 바로 차감되는게 아니라서 이 값이 필요)
# 공식: 총예수금액 + 매결제매도금액합계 + 외화평가총액 - 미결제매수금액합계
balance = tot_dncl_amt + ustl_sll_amt_smtl + frcr_evlu_tota - ustl_buy_amt_smtl
return balance / usd_krw
반응형
'Trading' 카테고리의 다른 글
비상계엄과 비트코인 (0) | 2024.12.04 |
---|---|
이더리움 500만원 돌파 (0) | 2024.11.28 |
비트코인 매도 (매매봇) (0) | 2024.11.26 |
트럼프와 바이오주 (0) | 2024.11.23 |
비트코인 수익률 무려 1644% !! (0) | 2024.11.22 |