호돌찌의 AI 연구소
article thumbnail

타 증권사 API는 운영체제와 구동방식에 대해 제약이 많았습니다. 작년 초부터 대한민국 유일하게 한국투자증권에서의 API Key를 발급 받아 인터넷만 연결되어 있다면 매매와 데이터 수집을 허들 없이 쉽게 활용을 할 수 있습니다. Open API Key를 발급받기 위해서는 계좌가 개설이 되어있어야 합니다. 아래 글은 계좌가 개설이 되어있고, 한국투자증권 사이트에 로그인이 되어있다고 가정하에 시작하겠습니다. 계좌 개설하는 방법은 여기 글을 참고하시면 됩니다. 그럼 시작하겠습니다.

 

 

KIS Developers 서비스 신청하기 


한국투자증권 홈페이지에 접속하여 로그인합니다. (스마트폰으로 홈페이지 QR 코드 인증으로 쉽게 접근이 용이한 것이 한투의 장점인 것 같습니다.) 그 이후에 메뉴얼은 여기 글을 참고하시는 것이 훨씬 좋습니다. 홈페이지가 조금씩 리뉴얼이 되는데, 아래 wikidocs에서 업데이트를 해주는 것 같습니다. 

https://wikidocs.net/165188

참고로 아래같이 이용기간은 신청일로 부터 1년임을 유의하여야 합니다. 

그리고 신청하면 카카오톡으로 아이디와 임시비밀번호를 입력해서 재설정하라는 알림이 옵니다. 이 부분은 아래 가이드를 읽고 수행하셔야 합니다.

https://wikidocs.net/165210

개발자 도구에서는 아래 Github를 참고할 수 있습니다. 

https://github.com/koreainvestment/open-trading-api

 

모의투자 & 실전투자 계좌 Key 발급받기 


신청을 했다면 아래와 같이 App Key와 App Secret을 얻은 것을 확인할 수 있습니다. 메모장에 클립보드 복사하여 붙여놓습니다. 

그 후에, python으로 작업할 폴더에 복사했던 내용과 나의 계좌번호 정보를 yaml 파일로 저장합니다. 저는 'stockinfo.yaml' 로 저장하였습니다. 

## stockinfo.yaml

#내 실계좌 정보
REAL_APP_KEY: "복사한 것 붙여넣기"
REAL_APP_SECRET: "복사한 것 붙여넣기"
REAL_CANO: "한국투자증권 개인계좌 8자리"
REAL_ACNT_PRDT_CD: "01" # 상품코드2자리 
REAL_URL: "https://openapi.koreainvestment.com:9443" # 실전 Domain

 

저장하는 방식을 pickle로 하거나 json으로 하거나 큰 상관은 없습니다. 제가 이전에 했던 방식은 여기 글들을 참고하시면 됩니다. 

2022.06.12 - [Programming/Crypto] - 업비트(Upbit) API Key 발급하기

2022.09.02 - [Programming/Crypto] - 바이낸스(Binance) API Key 발급하기

 

발급받은 Key를 Python으로 불러오기 


위에서 저장한 yaml 파일을 불러오겠습니다. 

# pip install pyyaml
import yaml

with open('./stockinfo.yaml', encoding='UTF-8') as f:
    stock_info = yaml.load(f, Loader=yaml.FullLoader)

 

dictionary 형태로 불러와진 것을 확인할 수 있습니다. 

 

한국투자증권 오픈API 접근 토큰 발급받기 


하지만 업비트나 바이낸스와 같은 암호화폐 거래소와는 또 다른 것이, '인증'이라는 과정을 거쳐야 하기 때문에 또 다른 허들이 존재합니다. 한국투자증권에서 오픈 API 접근 토큰을 발급을 받아야 주문, 계좌조회 등의 활공이 가능합니다. request 방식으로 토큰을 발급받는 코드 방식은 아래와 같습니다. 

import json
import requests

def maketoken(dist = "REAL"):

    global stock_info
    
    headers = {"content-type":"application/json"}
    body = {
        "grant_type":"client_credentials",
        "appkey":stock_info['REAL_APP_KEY'], 
        "appsecret":stock_info['REAL_APP_SECRET']
        }

    # 한국투자증권에 Request
    PATH = "oauth2/tokenP"
    URL = f"{stock_info['REAL_URL']}/{PATH}"
    res = requests.post(URL, headers=headers, data=json.dumps(body))
    
    if res.status_code == 200:
        my_token = res.json()["access_token"]

        datadict = dict()

        # 해당 토큰을 작업 공간에 저장
        datadict["authorization"] = my_token
        with open('./stock_token.json', 'w') as outfile:
            json.dump(datadict, outfile)   

        print("My TOKEN : ", my_token)
        return my_token

    else:
        raise Exception('status code not 200 & Token Auth Fail!')

 

위 코드 방식을 활용하여 작업 폴더에 .json 파일을 열어보면 토큰 값이 생성된 것을 확인할 수 있습니다. 일반 고객 경우에는 이러한 발급받은 토큰 값의 유효기간은 1일이기 때문에 매일 발급을 받아야 하는 번거로움이 존재합니다. 스케쥴링 등을 활용하여 일정한 시간에 발급을 받아 저장하는 것을 권장합니다.

위 코드가 정상적으로 수행했다면 아래와 같은 카톡이 오게됩니다.

 

다음 글에서는 이를 바탕으로 계좌 잔고나, 주식의 현재가격 등을 조회하거나 내용을 불러오는 글에 대해서 서술해 보겠습니다. 

 


위 코드는 게만아님 블로그에 있는 내용에서 수정/응용하였습니다. 정말 잘 가르쳐주시니 시스템 구축하고 싶으시다면 이 분 강의 추천드립니다. 

https://blog.naver.com/zacra/223086628069

 

빨리? 자동매매? 클래스 다 듣기 싫어? 초보자를 위한 주식&코인 게만아 자동매매 컨텐츠 공부 및

종목을 모아가지 말고 전략을 소유하세요! 수많은 종목들은(게만아!) 압도감과 막연함만 줍니다 검증된 전...

blog.naver.com

 

profile

호돌찌의 AI 연구소

@hotorch's AI Labs

포스팅이 도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!