한국투자증권 주식매매프로그램 만들기

파이썬 주식매매프로그램 만들기

미국 주식 프로그램 만들기(KIS Developers)/1. KIS Developer API 연동

3) 한국 계좌 잔고 확인

토폴로지 2022. 9. 13. 15:21

적기 앞서 운영체제는 ubuntu 20.04

프로그램 코딩 환경은 vscode로 변경해서 작성함을 미리 알린다.

요새 서브라임 안쓰고 vscode 쓰는 것 같아서 뭔가 유행따라 바꿔봄...

windows에서 작업해도 전혀 상관없으니

굳이 vscode, 우분투 설치할 필요없이 그냥 윈도우에서 idle로 작업해도 잘 돌아간다.

#koreainvestment developer info
#홈페이지에서 API서비스 신청시 받은 Appkey, Appsecret 값 설정
APP_KEY: ""
APP_SECRET: ""
#계좌번호
CANO: ""
#계좌번호 - 뒷자리
ACNT_PRDT_CD: ""
PHONE: ""

#domain info
#실전투자
ACTUAL_DOMAIN: "https://openapi.koreainvestment.com:9443" 
#웹소켓
ops: "ws://ops.koreainvestment.com:21000" 
#모의투자서비스
vts: "https://openapivts.koreainvestment.com:29443"

위와 같이 config.yaml 파일을 하나 생성해야한다.

(메모장으로 만들다가 config.yaml.txt 로 안되게 주의)

APP_KEY, APP_SECRET 은 앞서 발급받은 키

CANO는 계좌번호 8자리 ex. 61114838

ACNT_PRDT_CD 는 계좌번호 뒷자리 2자리 ex. 01

PHONE은 자기 폰번호 ex.01012345678

 

 

내가 실행하려는 파일 이름은 2.py 이고 config.yaml가 반드시 같은 폴더에 있어야 한다.

(코드에서 소스파일과 동일 위치에서 config.yaml을 찾도록 작성했기 때문)

 

import requests
import json
import yaml

with open(r'config.yaml', encoding='UTF-8') as f:
    _cfg = yaml.load(f, Loader=yaml.FullLoader)
APP_KEY = _cfg['APP_KEY']
APP_SECRET = _cfg['APP_SECRET']
ACCESS_TOKEN = ""
CANO = _cfg['CANO']
ACNT_PRDT_CD = _cfg['ACNT_PRDT_CD']
ACTUAL_DOMAIN = _cfg['ACTUAL_DOMAIN']

# ACCESS TOKEN 발급
def get_access_token():
    url = '/oauth2/tokenP'
    request_url = f"{ACTUAL_DOMAIN}/{url}"
    headers = {
    }
    body = {
        "grant_type": "client_credentials",
        "appkey": APP_KEY,
        "appsecret": APP_SECRET,
    }
 
    res = requests.post(request_url, data=json.dumps(body), headers=headers)
    rescode = res.status_code
    if rescode == 200:
        ACCESS_TOKEN = res.json()["access_token"]
    else:
        print("Error Code : " + str(rescode) + " | " + res.text)
    
    return ACCESS_TOKEN

def get_balance():
    url = "/uapi/domestic-stock/v1/trading/inquire-psbl-order"
    request_url = f"{ACTUAL_DOMAIN}/{url}"
    headers = {"Content-Type": "application/json",
               "authorization": f"Bearer {ACCESS_TOKEN}",
               "appKey": APP_KEY,
               "appSecret": APP_SECRET,
               "tr_id": "TTTC8908R",   #실전투자값: TTTC8908R
               "custtype": "P", #P: 개인
               }
    params = {
        "CANO": CANO, #계좌번호
        "ACNT_PRDT_CD": ACNT_PRDT_CD, #계좌번호 뒷자리
        "PDNO": "005930", # 종목 코드 005930은 삼성
        "ORD_UNPR": "65500", #1주당 가격
        "ORD_DVSN": "01", # 01: 시장가
        "CMA_EVLU_AMT_ICLD_YN": "Y", #CMA 평가금액포함여부: Y
        "OVRS_ICLD_YN": "Y" #해외포함여부: Y
    }
    res = requests.get(request_url, headers=headers, params=params)
    cash = res.json()['output']['ord_psbl_cash']
    print(f"주문 가능 현금 잔고: {cash}원")
    return int(cash)

ACCESS_TOKEN = get_access_token()
get_balance()

 

결과화면

현재는 내 계좌 잔고에 20000원 있다 ㅠ

반응형