한국투자증권 KIS API
자동매매 제작
한국투자증권 KIS Developers API 기반 자동매매 프로그램을 맞춤 제작합니다. 국내주식, 해외주식(미국·홍콩·일본 등), 선물·옵션 모두 지원하는 현대적 REST API로, 키움보다 구조가 깔끔하고 클라우드 서버 배포에 유리합니다. 알고랩(AlgoLab)이 국내·해외주식 KIS API 자동매매 70건+ 제작 경험 반영.
/oauth2/tokenP로 access_token을 얻은 뒤 tr_id 헤더로 업무를 지정해 호출합니다. 키움과 달리 Windows·32bit 제약이 없어 리눅스 서버와 클라우드에서 그대로 돌아가고, 국내주식과 해외주식을 하나의 API로 처리합니다. 대신 해외주식 시장가 주문 불가, 해외 호출 한도가 매우 엄격하다는 제약이 있습니다. 발급 절차만 먼저 보시려면 → KIS API 발급 30분 가이드.
KIS API 자동매매 주요 유형
- 국내주식 + TradingView 웹훅 연동 — Pine Script 시그널을 KIS REST 로 실거래 집행
- 해외주식 자동매매 — 애플·테슬라·엔비디아 등 지정가 기반 자동매매 (시장가 제약 대응)
- 미국 나스닥 선물 자동매매 — 24시간 돌아가는 나스닥 선물에 TradingView 시그널 연결
- 국내주식 스크리닝 자동매매 — 시총 상위·거래대금 상위 종목 대상 지표 기반
- 해외주식 배당주 리밸런싱 — 주간·월간 주기로 포트폴리오 자동 조정
- 매매일지 자동화 — 모든 체결 내역을 Google Sheets·엑셀로 자동 기록
기술 구조
| 항목 | 사양 |
|---|---|
| API 문서 | apiportal.koreainvestment.com (KIS Developers) |
| 인증 | OAuth 2.0 (Access Token, 24시간 유효, 자동 갱신 로직 필수) |
| 언어 | Python 3.10+ 64bit (Windows·Linux·macOS·클라우드 모두 가능) |
| Rate Limit (국내) | 초당 20회 (실전 투자), 초당 2회 (모의 투자) |
| Rate Limit (해외) | 초당 1회만 허용 (매우 엄격 — 1초 딜레이 필수) |
| 실시간 시세 | WebSocket (별도 승인 필요, 계정당 41개 종목 한도) |
| 모의투자 | 도메인·tr_id·APP KEY가 모두 별도 (openapivts…:29443 vs openapi…:9443) |
※ 호출 한도·승인 조건 등 위 수치는 한국투자증권 정책에 따라 변경될 수 있습니다. 최신 스펙은 KIS Developers 포털에서 확인하세요.
해외주식 시장가 주문 불가 — 중요: KIS API 해외주식은 오직 지정가만 가능합니다. 시장가 효과가 필요하면 현재 호가 대비 슬리피지를 반영한 지정가를 넣어야 합니다. 알고랩 봇은 이를 자동으로 처리합니다 (예: 롱 진입 시 현재가 +0.2% 지정가, 숏 진입 시 -0.2%).
KIS 앱키(APP KEY)는 몇 개를 받나 — 실전·모의 두 벌
KIS Developers에서 API를 신청하면 앱키(appkey)와 앱시크릿(appsecret)이 한 쌍으로 나오고, 실전투자와 모의투자는 각각 따로 받습니다. 한국투자증권 공식 저장소 open-trading-api의 설정 파일 kis_devlp.yaml이 무엇을 준비해야 하는지 그대로 보여 줍니다(원문, 2026-10-19 main 기준).
#홈페이지에서 API서비스 신청시 받은 Appkey, Appsecret 값 설정
#실전투자
my_app: "앱키"
my_sec: "앱키 시크릿"
#모의투자
paper_app: "모의투자 앱키"
paper_sec: "모의투자 앱키 시크릿"
#계좌번호 뒤 2자리
my_prod: "01" # 종합계좌
# my_prod: "03" # 국내선물옵션계좌
# my_prod: "08" # 해외선물옵션 계좌
#domain infos
prod: "https://openapi.koreainvestment.com:9443" # 서비스
vps: "https://openapivts.koreainvestment.com:29443" # 모의투자 서비스
| 준비물 | 어디에 쓰나 |
|---|---|
실전 appkey·appsecret | openapi…:9443 토큰 발급·모든 실전 호출 헤더 |
모의 appkey·appsecret | openapivts…:29443 전용 — 실전 키와 섞어 쓸 수 없음 |
계좌번호 앞 8자리 (CANO) | 주문·잔고 바디. 모의계좌 번호는 실전과 다름 |
계좌상품코드 (ACNT_PRDT_CD) | 01 종합 · 03 국내선물옵션 · 08 해외선물옵션 |
| HTS ID | 체결통보 웹소켓 등 일부 API의 사용자 식별 |
토큰 규칙은 공식 예제 kis_auth.py 주석에 적혀 있습니다 — 유효기간 1일, 6시간 이내에 다시 발급을 요청하면 기존 토큰값이 그대로 오고, 발급할 때마다 알림톡이 발송됩니다. 봇이 재시작할 때마다 새로 발급받는 구조면 알림톡이 쌓이고, 짧은 간격으로 반복하면 EGW00133(토큰 발급 요청 과다)를 만납니다. 토큰은 파일에 저장해 두고 만료 전에만 다시 받으십시오. 앱키가 코드·깃허브에 노출됐다면 KIS Developers에서 재발급받아 기존 키를 무효화해야 합니다. 화면별 발급 순서는 맨 위 요약의 발급 가이드에 있습니다.
※ 발급 절차·토큰 정책은 한국투자증권 사정으로 바뀔 수 있습니다. KIS Developers 포털 공지와 공식 저장소에서 현재 값을 확인하세요.
KIS API는 실제로 어떻게 호출하나
맡기시더라도 무엇이 오가는지는 알고 계시는 편이 좋습니다. KIS API 호출은 항상 같은 3단계입니다 — ① APP KEY·APP SECRET으로 토큰 발급 → ② 헤더에 tr_id를 실어 업무 호출 → ③ 응답의 rt_cd로 성공·실패 판정.
① 접근토큰 발급
import requests, json
BASE = "https://openapi.koreainvestment.com:9443" # 실전투자
res = requests.post(f"{BASE}/oauth2/tokenP",
headers={"content-type": "application/json"},
data=json.dumps({
"grant_type": "client_credentials",
"appkey": APP_KEY, # KIS Developers에서 발급
"appsecret": APP_SECRET,
}), timeout=10)
token = res.json()["access_token"] # 유효기간 24시간 — 캐시 필수
토큰은 발급 요청을 짧은 간격으로 반복하면 차단되므로 반드시 파일이나 캐시에 저장해 두고 만료 직전에만 재발급해야 합니다. 이 갱신 로직을 빠뜨리면 봇이 하루 뒤에 조용히 멈춥니다.
② 주문 호출 — tr_id가 업무를 지정합니다
headers = {
"content-type": "application/json",
"authorization": f"Bearer {token}",
"appkey": APP_KEY,
"appsecret": APP_SECRET,
"tr_id": "TTTC0012U", # 국내주식 현금 매수(실전) / 모의는 VTTC0012U
"custtype": "P", # 개인
}
body = {"CANO": CANO, "ACNT_PRDT_CD": "01", "PDNO": "005930",
"ORD_DVSN": "01", "ORD_QTY": "1", "ORD_UNPR": "0", # 01 = 시장가
"EXCG_ID_DVSN_CD": "KRX"} # 거래소 구분 KRX·NXT·SOR
블로그·강의에 널리 퍼진 TTTC0802U(매수)·TTTC0801U(매도)는 구 tr_id입니다. 한국투자증권 공식 저장소(open-trading-api)의 현행 예제 order_cash.py는 매수 TTTC0012U·매도 TTTC0011U(모의 VTTC0012U·VTTC0011U)를 쓰고, 바디에 EXCG_ID_DVSN_CD를 필수로 넣습니다. 차이와 옮기는 순서는 → KIS 주문 tr_id 신·구 비교.
③ 응답 판정
{"rt_cd":"0","msg_cd":"APBK0013","msg1":"주문 전송 완료 되었습니다."}
{"rt_cd":"1","msg_cd":"EGW00201","msg1":"초당 거래건수를 초과하였습니다."}
rt_cd가 "0"이면 성공, 그 외는 실패이고 원인은 msg_cd에 찍힙니다. 실무에서 자주 보는 코드와 대처는 → KIS API 에러코드 11가지. 모의에서 실전으로 넘길 때 바꿔야 하는 항목은 → KIS 모의투자 실전 전환 6가지.
※ tr_id와 파라미터 규격은 KIS 공지로 변경될 수 있습니다. 실제 개발 시 KIS Developers 포털의 해당 API 문서에서 최종 확인하세요.
핵심 기능 구성 요소
- OAuth 자동 갱신: Access Token 만료 감지 후 백그라운드 재발급
- 국내·해외 모듈 분리: 엔드포인트·Rate Limit·주문 타입이 다르므로 별도 모듈로 관리
- 지정가 자동 산출: 해외주식 시장가 대안용 슬리피지 기반 지정가 계산
- Rate Limiter: 국내 초당 20회 / 해외 초당 1회 엄격 준수
- 실시간 시세 WebSocket: 41개 한도 내 종목 동적 등록·해제
- 체결·잔고 동기화: 주기적 폴링 + 체결 후 즉시 동기화
- 클라우드 배포 가이드: AWS Lightsail / Oracle Cloud 무료 티어 배포 옵션
제작 기간 가이드
| 유형 | 제작 기간 |
|---|---|
| 국내주식 단순 지표 기반 | 7~10일 |
| 국내주식 + TradingView 웹훅 연동 | 10~14일 |
| 해외주식 자동매매 (지정가 슬리피지 포함) | 10~16일 |
| 나스닥 선물 + 트레이딩뷰 양방향 | 14~18일 |
| 복합(백테스팅 + GUI + 클라우드 배포) | 18~28일 |
비용은 규칙의 복잡도와 포함할 기능에 따라 달라집니다. 기준은 비용 안내에 있고, 정확한 금액은 상담에서 범위를 정한 뒤 알려 드립니다.
자주 묻는 질문
API 신청은 어떻게 하나요?
KIS Developers(apiportal.koreainvestment.com) 회원가입 → 계좌 연결 → API 신청. 실전 투자 API는 별도 승인 절차(1~2일), 모의 투자 API 는 즉시 사용 가능합니다. 알고랩 제작 시 신청 가이드를 제공합니다.
KIS APP KEY와 APP SECRET은 무엇인가요?
KIS Developers에서 앱을 등록하면 나오는 한 쌍의 인증 문자열입니다. APP KEY가 앱 식별자, APP SECRET이 비밀키이며, 이 둘로 /oauth2/tokenP를 호출해 24시간짜리 access_token을 받습니다. 실전용과 모의투자용이 각각 별도로 발급되므로 서로 바꿔 쓸 수 없고, 코드에 직접 적지 말고 환경변수나 별도 설정 파일로 분리해 보관해야 합니다. 발급 화면 순서는 KIS API 발급 30분 가이드에 정리돼 있습니다.
왜 키움 대신 KIS API 를 쓰나요?
키움은 Windows + Python 32bit 고정이라 클라우드 서버 배포·macOS·Linux 사용이 불가합니다. KIS API는 현대적 REST 라 어떤 환경에서든 돌아가고, 해외주식까지 하나의 API로 커버됩니다. 단, 해외 시장가 불가 · Rate Limit 엄격 등 제약도 있습니다.
24시간 VPS 에서 돌릴 수 있나요?
가능합니다. KIS API는 HTTP REST 라 AWS·Oracle·Cloudflare 등 어디서든 동작합니다. 배포 가이드를 납품에 포함합니다. 다만 OAuth Access Token 24시간 주기 갱신만 빠뜨리지 않으면 됩니다.
모의투자로 먼저 테스트 가능한가요?
네. 다만 모의투자는 실전과 도메인·tr_id·APP KEY가 모두 다릅니다(모의 openapivts…:29443 / 실전 openapi…:9443, tr_id는 모의가 V·실전이 T로 시작). 알고랩은 설정 한 곳만 바꾸면 전환되도록 제작하며, 1~2주 모의투자 검증 후 실거래 전환을 권장합니다. 전환 시 확인할 항목은 KIS 모의투자 실전 전환 6가지에 정리했습니다.
제작 사례
KIS API 자동매매 실제 제작 사례는 포트폴리오에서 확인하실 수 있습니다.
전략 아이디어부터 바로 상담해보세요
국내·해외 중 어디에 집중할지, 모의·실전 중 뭘로 시작할지도 상담에서 함께 정합니다.
알고랩이 24시간 빠르게 답변드립니다.