본문 바로가기
퀀트 분석/퀀트 기초

REST API로 개발 가능한 국내 증권사 API

by 쿼카퀀트 2023. 7. 23.
728x90

업비트, 바이낸스같은 코인 거래소는 이미 예전부터 REST API를 사용했지만, 국내 증권사는 com, dll 등 windows를 기반으로만 사용 가능한 api만을 제공해 왔습니다.

 

하지만, 최근들어 국내 증권사 api도 REST API로 갈아타려는 움직임이 보이고 있습니다.

오늘 기준으로 두 증권사가 REST API를 지원하고 있는데요, 

 

1. 한국투자증권 KIS API (link)

가장 먼저 REST API를 지원한 곳은 한국투자증권입니다.

처음 출시됐을때보다 지원해주는 기능은 점점 늘고있지만, 아직 초기라 기능 제한이 있습니다. 기존 dll 요청에선 초당 10건 요청이 가능했지만 REST API에선 초당 2건 요청만 되거나, 받아올 수 있는 과거 기간이 최근 30일로만 가능한 경우가 있습니다.

때문에, 아직 기존 주문 api를 완벽히 대체하기에는 부족한 상황입니다.

 

 

2. 이베스트 Open API (link)

한투에서 api를 만들자마자 이베스트에서도 REST API를 출시했습니다(할수있었는데 안한거 아닌가요 이정도면).

이베스트증권은 아직 써보지 않았지만, 호출 제한은 한투와 마찬가지로 기존 dll기반 api보다 더 적은 호출만 허용하는 듯 합니다.

기능 자체는 일찍 출시한 한투보다 더 다양한 듯 하니, 앞으로 지켜보면 좋을 것 같습니다.

 

 

기존의 증권사 api가 윈도우 환경에서 32비트 파이썬으로만 사용 가능했던 점에 비하면, REST API로의 전환은 엄청난 발전인 것 같습니다. 아마 한투, 이베스트 api가 성공적으로 자리잡으면 더 큰 증권사에서도 빠르게 사용하기 편한 api들을 출시해줄 것으로 기대되네요.

 

간단한 사용 예시

REST API 사용방법은 간단하니까, 처음 oauth 토큰 발급 받는 코드만 보여드리고 마치도록 하겠습니다.

한국투자증권 api를 기준으로 설명드리면, 아래와 같은 코드로 주식의 현재가를 가져올 수 있습니다.

api_key, secret_key는 KIS DEVELOPERS에서 발급받으면 됩니다.

import requests
import json

api_key = '~~~'
secret_key = '~~~'
base_url = 'https://openapi.koreainvestment.com:9443'

def get_access_token(self):
    headers = {"content-type":"application/json"}
    body = {
            "grant_type":"client_credentials",
            "appkey":api_key, 
            "appsecret":secret_key,
            }
    url = base_url + '/oauth2/tokenP'
    res = requests.post(url, headers=headers, data=json.dumps(body)).json()
    return res['access_token']

def get_header(self,tr_id):
    headers = {"content-type":"application/json",
            "appkey":api_key, 
            "appsecret":secret_key,
            "authorization":f"Bearer {access_token}",
            "tr_id":tr_id,
            }
    return headers

def get_now(self,ticker):
    headers = get_header('FHKST01010100')
    params = {
            "fid_cond_mrkt_div_code":"J",
            "fid_input_iscd": ticker
            }
    url = base_url + '/uapi/domestic-stock/v1/quotations/inquire-price'
    res = requests.get(url, headers=headers, params=params).json()['output']

	return res
    
access_token = get_access_token()
data = get_now('005930')

get_access_token은 주문할 때 필요한 코드라 현재가 호출에선 필요없지만, 참고용으로 넣어봤습니다.

위 코드대로 하면 삼성전자 현재가가 data 변수에 저장되는 것을 확인할 수 있습니다.

 

그럼, REST API로 국내 주식 트레이딩도 화이팅입니다!

728x90

댓글