SP · KIS API 한국투자증권 모의투자 완전정복 0%
⭐ SPECIAL SESSION · SP1-SP3

KIS API 한국투자증권 모의투자 완전정복

Alpaca(미국주식) 다음 단계 — 국내 주식을 AI 에이전트로 자동매매

3세션OAuth → 시세
→ 주문
5천만원모의투자
가상 자본
KOSPI국내 상장
전 종목
Overview

왜 KIS API를 추가로 배우는가

W8에서 Alpaca Paper Trading으로 미국 주식을 자동매매했습니다. 하지만 한국 수강생에게는 국내 주식 경험이 더 친근하고 실전적입니다. 삼성전자, SK하이닉스, 네이버, 카카오 같은 종목을 직접 자동매매해야 진정한 "내 시장"이 됩니다.

💡 Alpaca vs KIS 비교:
Alpaca: 미국 주식 전용, 이메일만으로 가입, 단순한 API, 즉시 시작
KIS: 국내+해외 주식, 실계좌 연동 필요, 해시키 등 복잡, 한국 종목 지원
W8까지 Alpaca로 기본기 익힌 수강생이 KIS로 실전 한국 시장까지 확장하는 구조입니다.
🚨 시작 전 필수 숙지
KIS Developers는 실계좌와 모의계좌를 같은 API로 다룹니다. URL과 TR_ID의 단 한 글자(T vs V)로 구분됩니다. 실수하면 실제 돈이 나갑니다. 이번 세션은 절대적으로 모의계좌만 사용하며, 실계좌 전환은 수료 후 각자의 판단에 따릅니다.
SP 1 OAuth + 인증
SP 2 시세 + 잔고
SP 3 자동매매 + Claude
▶ SPECIAL SESSION 1
KIS Developers 가입 + OAuth 토큰 발급
모든 KIS API 호출의 전제 — 계좌·앱키·접근토큰 3종 세트 확보
세션
60분
레벨
중급
선수
W8 완료
목표
토큰 확보

학습 목표

1
한국투자증권 모의투자 계좌 개설 + KIS Developers 서비스 신청을 완료할 수 있다
2
AppKey + AppSecret + 계좌번호 3종 세트를 발급받아 안전하게 n8n Credentials에 저장할 수 있다
3
Access Token 24시간 유효 발급 + n8n에서 자동 재발급 워크플로를 구축할 수 있다
Step 1 · 20min

1단계 — 모의투자 계좌 개설

한국투자증권 앱 가입 (이미 계좌 있으면 스킵)
  1. 한국투자증권 앱 설치 또는 securities.koreainvestment.com 접속
  2. 비대면 계좌개설 → 신분증 + 본인인증 (미성년자는 부모 동반)
  3. 계좌 개설 후 로그인 → HTS ID(영문) 설정 — 나중에 API에서 사용
  4. 입금 불필요. 모의투자는 별도 가상자본 지급
모의투자 신청 (가상 5천만원 지급)
  1. 홈페이지 상단 트레이딩 → 모의투자 메뉴 진입
  2. 주식 모의투자 대회 신청 — 상시 신청 가능
  3. 신청 완료 후 모의투자 계좌번호 자동 발급 (실계좌와 별개)
  4. 계좌번호 형식 예: 50123456-01 — 앞 8자리 + 뒤 2자리
  5. 계좌번호 메모장에 안전하게 저장
💡 모의투자 특징: 가상 5천만원 자동 지급, 실제 시세 기반 주문 체결, 매월 1일 자본 리셋. 주식 종목은 KOSPI + KOSDAQ 전 종목 주문 가능. 단, ETF 일부 · 파생상품은 제한될 수 있으니 주의.
Step 2 · 15min

2단계 — KIS Developers API 서비스 신청

KIS Developers 서비스 신청 (5분)
  1. apiportal.koreainvestment.com 접속 → 우측 상단 로그인
  2. KIS Developers 서비스 신청하기 클릭
  3. 모의투자 계좌 선택 → 아까 발급받은 모의계좌 번호 입력
  4. 간편인증 · 휴대폰 인증 완료 → 신청
  5. 승인 즉시 AppKey (36자리) + AppSecret (180자리) 화면에 표시
  6. ⚠️ AppSecret은 단 한 번만 표시! 즉시 복사해 안전한 곳에 저장
🔐 앱키·시크릿 보관 원칙
• 절대 GitHub에 커밋하지 않기 — .env 파일 + .gitignore 필수
• AppSecret 유출 시 즉시 KIS Developers에서 재발급 (기존 키 자동 만료)
• n8n Credentials에 저장할 때 실전/모의 구분 명확히 (이름에 "paper" 포함)
• 절대로 채팅·메신저·이메일로 앱키 전송 금지

n8n Credentials에 저장

🔑 n8n Credentials — KIS Paper SECURE
Generic Credential Type으로 저장. n8n 변수 시스템에서 호출할 수 있게 일관된 이름 사용.
Credential Name: kis_paper_credentials
APP_KEY: 36자리 문자열
APP_SECRET: 180자리 문자열
CANO: 계좌 앞 8자리 (50123456)
ACNT_PRDT_CD: 계좌 뒤 2자리 (01)
HTS_ID: 가입 시 설정한 영문 ID
Step 3 · 25min

3단계 — Access Token 발급 + 자동 재발급 워크플로

KIS API 호출 시마다 Access Token을 헤더에 실어야 합니다. 토큰은 24시간 유효하며, 하루에 최대 1회만 발급 가능(과도 발급 시 이용 제한). 따라서 토큰을 저장·재사용하는 워크플로가 필수입니다.

Base URL 구분 — 실수 금지

📗 모의투자 (우리가 사용할 URL)
https://openapivts.koreainvestment.com:29443
⚠️ 실전투자 (절대 건드리지 말 것)
https://openapi.koreainvestment.com:9443

토큰 발급 API 호출

🎫 HTTP Request — Access Token 발급 AUTH
모의투자 URL에 POST. 앱키·시크릿을 Body에 전송.
Method: POST
URL: https://openapivts.koreainvestment.com:29443/oauth2/tokenP
Content-Type: application/json
Body Mode: JSON (아래)
// Request Body
{
  "grant_type": "client_credentials",
  "appkey": "{{ $credentials.APP_KEY }}",
  "appsecret": "{{ $credentials.APP_SECRET }}"
}

// Response (성공)
{
  "access_token": "eyJ0eXAiOiJKV1QiLCJh...",
  "token_type": "Bearer",
  "expires_in": 86400,
  "access_token_token_expired": "2026-04-23 08:30:00"
}

토큰 자동 재발급 워크플로

24시간마다 새 토큰을 발급받아 n8n 워크플로 변수 또는 Google Sheets에 저장하면 다른 워크플로에서 재사용 가능합니다.

🔧 KIS 토큰 관리 워크플로 (별도 생성)
Schedule매일 오전 6시 30분 (장전 여유있게)
HTTP: Token 발급KIS /oauth2/tokenP 호출
Code: 유효시간 계산expires_in + 안전마진 -5분
Sheets: 토큰 저장kis_tokens 탭에 token·expiry·timestamp 기록
Discord 알림 (옵션)"토큰 재발급 완료, 유효기한 ~4/23 06:30"

토큰 조회 함수 — 다른 워크플로에서 재사용

// 다른 워크플로에서 토큰이 필요할 때
// Sheets "kis_tokens" 탭에서 최신 1행 조회 후 사용

const tokenRow = $('Sheets Get Latest Token').item.json;
const token = tokenRow.access_token;
const expiry = new Date(tokenRow.expiry);
const now = new Date();

// 만료 체크 (안전마진 5분)
const minutesLeft = (expiry - now) / 60000;
if (minutesLeft < 5) {
  throw new Error('KIS 토큰 만료 임박 — 재발급 워크플로 수동 실행 필요');
}

return {
  authorization: `Bearer ${token}`,
  valid_for_minutes: Math.round(minutesLeft)
};
🚨 SP1 자주 발생하는 오류
토큰 발급이 "EGW00133" 오류
앱키·시크릿 오타 또는 KIS Developers 신청 승인 대기 중. 포털에서 승인 상태 확인. 승인 직후 1~2분 기다렸다 재시도.
하루에 토큰을 여러 번 발급하다 차단됨
KIS는 과도한 토큰 발급을 제한. 토큰 재사용 필수. Sheets 저장 방식이 안전. 차단 시 몇 시간 후 자동 해제되나 반복되면 장기 제한될 수 있음.
Body를 JSON이 아닌 form-data로 보내 실패
KIS는 엄격히 Content-Type: application/json + JSON body 요구. n8n HTTP Request의 Body Content Type을 "JSON"으로 명시. Send Body 옵션 체크.

SP1 완료 체크리스트

✅ 아래 모두 체크되면 SP1 완료
한국투자증권 실계좌 개설 완료
모의투자 계좌 개설 완료 (가상 5천만원 지급 확인)
KIS Developers 서비스 신청 → AppKey/AppSecret 발급
n8n Credentials에 kis_paper 자격증명 저장 (APP_KEY, APP_SECRET, CANO, ACNT_PRDT_CD, HTS_ID)
토큰 발급 API 호출 성공 → access_token 획득
Sheets "kis_tokens" 탭 생성 + 토큰 자동 재발급 스케줄 워크플로 가동
▶ SPECIAL SESSION 2
시세 조회 + 잔고 확인 + TR_ID 체계
주식 현재가·일자별 차트 조회 + 계좌 잔고·평가손익 조회
세션
60분
레벨
중급
선수
SP1 완료
목표
데이터 조회

학습 목표

1
TR_ID 체계를 이해하고 실전/모의의 T/V 접두어 규칙을 구분할 수 있다
2
삼성전자(005930) 현재가 + 60일 일봉 차트를 조회하는 n8n 워크플로를 구축할 수 있다
3
계좌 잔고·보유종목·평가손익을 조회해 Google Sheets에 자동 기록할 수 있다
Step 1 · 15min

1단계 — KIS TR_ID 체계 이해

KIS API는 TR_ID(Transaction ID)로 각 기능을 구분합니다. Alpaca처럼 URL 하나로 모든 걸 하지 않고, 헤더의 TR_ID 값이 실제 동작을 결정합니다. 같은 URL이라도 TR_ID가 다르면 매수/매도/조회가 달라집니다.

TR_ID 명명 규칙

📐 TR_ID 첫 글자:
T: 실전투자 (T로 시작) — 예: TTTC0802U
V: 모의투자 (V로 시작) — 예: VTTC0802U
FH: 시세조회 (실전·모의 공통) — 예: FHKST01010100
한 글자 차이로 실전/모의가 구분되므로 매우 주의. 모의투자에서 T로 시작하는 TR_ID 쓰면 403 오류.

이 과정에서 사용할 핵심 TR_ID 9개

📊 주식 현재가
실시간 시세 조회 — 실전/모의 공통
FHKST01010100
📈 일자별 시세 (일봉)
최근 30~100일 OHLC — 실전/모의 공통
FHKST01010400
📉 기간별 시세 (일/주/월/년)
커스텀 기간 OHLC — 실전/모의 공통
FHKST03010100
💼 계좌 잔고 조회
보유 종목 리스트 + 평가손익
VTTC8434R
💰 주문가능 조회
매수 가능 금액·수량
VTTC8908R
🟢 현금 매수
모의 매수 주문 (SP3에서 사용)
VTTC0802U
🔴 현금 매도
모의 매도 주문 (SP3에서 사용)
VTTC0801U
🔄 주문 정정/취소
미체결 주문 변경
VTTC0803U
📋 일별 주문 체결 조회
당일/과거 주문 내역
VTTC8001R
Step 2 · 20min

2단계 — 삼성전자 현재가 조회

💹 HTTP Request — 주식 현재가 QUOTE
GET 방식 + 쿼리 파라미터로 종목코드 전달. 헤더에 token·appkey·TR_ID 필수.
Method: GET
URL: https://openapivts.koreainvestment.com:29443/uapi/domestic-stock/v1/quotations/inquire-price
Query FID_COND_MRKT_DIV_CODE: J (주식)
Query FID_INPUT_ISCD: 005930 (삼성전자)

필수 헤더 5개

// KIS 시세 조회 헤더 (모든 조회 API 공통)
{
  "content-type": "application/json",
  "authorization": "Bearer {{ $json.access_token }}",
  "appkey": "{{ $credentials.APP_KEY }}",
  "appsecret": "{{ $credentials.APP_SECRET }}",
  "tr_id": "FHKST01010100"
}

응답 파싱 — 핵심 필드

// 응답 예시 (삼성전자 005930)
{
  "rt_cd": "0",          // 0 = 성공
  "msg_cd": "MCA00000",
  "msg1": "정상처리 되었습니다",
  "output": {
    "stck_prpr": "72400",      // 현재가
    "prdy_vrss": "-800",       // 전일 대비
    "prdy_ctrt": "-1.09",      // 전일 대비율 (%)
    "stck_oprc": "73000",      // 시가
    "stck_hgpr": "73200",      // 고가
    "stck_lwpr": "72200",      // 저가
    "acml_vol": "8724563",    // 누적 거래량
    "per": "15.23",          // PER
    "pbr": "1.45"            // PBR
  }
}
📌 필드명이 암호 같은 이유: KIS API는 한글 약어를 영문으로 표기.
stck_prpr = "주식 현재가" (STocK PResent PRice)
prdy_vrss = "전일 대비" (PReviouS DaY VeRSuS)
acml_vol = "누적 거래량" (ACcuMuLated VOLume)
처음엔 낯설지만 한 번 익히면 직관적. KIS API 문서 페이지에 전체 필드 한글 설명 있음.
Step 3 · 25min

3단계 — 일자별 시세 + 계좌 잔고

일자별 시세 (60일 OHLC)

W2에서 Yahoo Finance로 미국 주식 OHLC를 가져왔습니다. 한국 주식은 KIS의 FHKST01010400을 씁니다.

📈 HTTP Request — 일봉 60일 CHART
URL Path: /uapi/domestic-stock/v1/quotations/inquire-daily-price
tr_id: FHKST01010400
FID_COND_MRKT_DIV_CODE: J
FID_INPUT_ISCD: 005930
FID_PERIOD_DIV_CODE: D (일봉)
FID_ORG_ADJ_PRC: 1 (수정주가)

W2 지표 계산 연결 — 한국 종목 대응

// KIS 일봉 응답 → W2 RSI·MA·볼린저 계산 어댑터
const kisData = $input.item.json.output;

// output은 최근부터 과거 순 - 역순으로 변환
const closes = [];
for (let i = kisData.length - 1; i >= 0; i--) {
  closes.push(parseFloat(kisData[i].stck_clpr));  // 종가
}

const symbol = '005930.KS';
const currentPrice = closes[closes.length - 1];

// W2의 calcRSI, calcMA, calcBB 재사용 (코드 생략)
// ...

return {
  ticker: symbol,
  ticker_name: '삼성전자',
  price: currentPrice,
  rsi14: rsi14.toFixed(2),
  ma20: ma20.toFixed(2),
  bb_upper: bb.upper.toFixed(2),
  bb_lower: bb.lower.toFixed(2),
  market: 'KOSPI'
};

계좌 잔고 조회

💼 HTTP Request — 계좌 잔고 ACCOUNT
URL Path: /uapi/domestic-stock/v1/trading/inquire-balance
tr_id: VTTC8434R
CANO: 계좌 앞 8자리
ACNT_PRDT_CD: 계좌 뒤 2자리
AFHR_FLPR_YN: N
INQR_DVSN: 01
UNPR_DVSN: 01
FUND_STTL_ICLD_YN: N
FNCG_AMT_AUTO_RDPT_YN: N
PRCS_DVSN: 01
CTX_AREA_FK100: (공란)
CTX_AREA_NK100: (공란)
// 잔고 조회 응답 구조
{
  "rt_cd": "0",
  "output1": [       // 보유 종목 리스트
    {
      "pdno": "005930",         // 종목코드
      "prdt_name": "삼성전자",      // 종목명
      "hldg_qty": "10",            // 보유 수량
      "pchs_avg_pric": "71500",    // 매입평균가
      "prpr": "72400",             // 현재가
      "evlu_amt": "724000",         // 평가금액
      "evlu_pfls_amt": "9000",      // 평가손익
      "evlu_pfls_rt": "1.26"        // 평가손익률 %
    }
  ],
  "output2": [       // 계좌 요약
    {
      "dnca_tot_amt": "49276000",   // 예수금 총액
      "tot_evlu_amt": "50000000",   // 총 평가금액
      "asst_icdc_amt": "0",          // 자산증감액
      "asst_icdc_erng_rt": "0"        // 자산증감수익률
    }
  ]
}

SP2 완료 체크리스트

✅ 아래 모두 체크되면 SP2 완료
TR_ID 체계 이해 (실전 T / 모의 V / 시세 FH)
삼성전자 현재가 조회 성공 + rt_cd=0 수신
일자별 60일 OHLC 조회 성공
W2 Code 노드 연결 → 한국 종목 RSI·MA·볼린저 계산 검증
계좌 잔고 조회 성공 + 가상 5천만원 확인
잔고 결과를 Sheets "kis_balance" 탭에 자동 기록
▶ SPECIAL SESSION 3
자동매매 주문 실행 + Claude 연동
매수/매도 주문 + 해시키 생성 + 2단계 승인 시스템
세션
60분
레벨
고급
선수
SP2 완료
목표
자동매매

학습 목표

1
해시키(HashKey) 생성 매커니즘을 이해하고 n8n에서 자동 생성해 주문 API에 첨부할 수 있다
2
Claude verdict → 모의 매수/매도 주문 실제 체결로 이어지는 완전한 자동매매 워크플로를 완성할 수 있다
3
2단계 승인 시스템(Discord 버튼·텔레그램)으로 자동 주문 전 인간 검토 단계를 구현할 수 있다
Step 1 · 20min

1단계 — 해시키(HashKey) 이해와 생성

KIS의 주문 관련 API(매수/매도/정정/취소)는 Body 변조 방지를 위해 HashKey를 요구합니다. Body를 KIS 서버에 먼저 보내 해시를 발급받고, 그 해시를 실제 주문 요청의 헤더에 추가하는 2단계 구조입니다.

1
주문 Body JSON을 먼저 HashKey 엔드포인트에 POST
POST /uapi/hashkey
2
응답에서 HASH 필드 추출 (40자리 문자열)
3
실제 주문 요청 헤더에 hashkey: {HASH} 추가해서 전송
4
KIS 서버가 Body와 HASH 일치 검증 후 주문 처리

해시키 생성 노드

🔐 HTTP Request — HashKey 생성 HASH
주문 실행 직전에 호출. Body는 실제 주문과 완전히 동일해야 함.
Method: POST
URL Path: /uapi/hashkey
Headers: content-type, appkey, appsecret
Body: 실제 주문 Body (아래 참조)
// HashKey 생성 Body (실제 주문과 동일)
{
  "CANO": "{{ $credentials.CANO }}",
  "ACNT_PRDT_CD": "{{ $credentials.ACNT_PRDT_CD }}",
  "PDNO": "005930",
  "ORD_DVSN": "00",
  "ORD_QTY": "10",
  "ORD_UNPR": "72400"
}

// Response
{
  "HASH": "1f9b2d4e8a...",      // 40자리 해시
  "BODY": { ... }
}
⚠️ HashKey 주의사항:
1. Body 한 글자라도 다르면 HASH 불일치 → 주문 거부
2. HashKey 생성 직후 바로 주문 실행 (수분 이상 지연 시 무효화 가능성)
3. JSON 필드 순서도 영향 줄 수 있음 — 해시 생성과 실제 주문 완전 동일한 Body
Step 2 · 20min

2단계 — 매수/매도 주문 실행

매수 주문 API

🟢 HTTP Request — 현금 매수 BUY
Method: POST
URL Path: /uapi/domestic-stock/v1/trading/order-cash
tr_id: VTTC0802U (모의 매수)
hashkey: {{ 1단계 HASH }}
authorization: Bearer {{ access_token }}

주문 Body 파라미터

// 삼성전자 10주 시장가 매수
{
  "CANO": "{{ $credentials.CANO }}",
  "ACNT_PRDT_CD": "{{ $credentials.ACNT_PRDT_CD }}",
  "PDNO": "005930",        // 종목코드
  "ORD_DVSN": "01",          // 주문구분: 01=시장가, 00=지정가
  "ORD_QTY": "10",           // 주문 수량
  "ORD_UNPR": "0"             // 시장가는 0, 지정가는 가격
}

// 지정가 매수 (72,000원에 10주)
{
  "CANO": "...",
  "ACNT_PRDT_CD": "01",
  "PDNO": "005930",
  "ORD_DVSN": "00",          // 지정가
  "ORD_QTY": "10",
  "ORD_UNPR": "72000"
}

매도는 TR_ID만 변경

매도 주문은 TR_ID만 VTTC0801U로 바꾸면 됩니다. Body 구조·파라미터는 매수와 완전히 동일. n8n에서는 IF 노드로 side에 따라 TR_ID를 분기합니다.

// IF 노드에서 매수/매도 분기 후 Set 노드
const side = $input.item.json.side;

return {
  tr_id: side === 'buy' ? 'VTTC0802U' : 'VTTC0801U',
  action: side === 'buy' ? '매수' : '매도'
};

성공 응답 확인

{
  "rt_cd": "0",
  "msg_cd": "APBK0013",
  "msg1": "주문 전송 완료 되었습니다.",
  "output": {
    "KRX_FWDG_ORD_ORGNO": "00950",  // 거래소 전송 기관번호
    "ODNO": "0000117057",            // 주문번호 (정정/취소에 사용)
    "ORD_TMD": "093045"               // 주문 시각
  }
}
Step 3 · 20min

3단계 — W7 Claude 에이전트 + 2단계 승인 시스템

W7 Orchestrator의 verdict를 KIS 주문으로 연결하되, 자동 실행 전 인간 검토 단계를 추가합니다. 모의투자라도 습관을 미리 들이는 것이 중요합니다.

🪜 안전 사다리 — 3단계 자동화 레벨
L0Manual Only: 에이전트는 조언만, 주문은 수동 (초기 학습기)
L1Human-in-the-Loop: 에이전트 주문 제안 → Discord 버튼 승인 → 실행 (추천)
L2Approved Whitelist: 특정 종목+금액 사전 승인 건만 완전 자동
L3Fully Autonomous: confidence 5/5 + 엄격한 Risk Guard 하에서만 자동 (실계좌 금지 권장)

Level 1 — Discord 2단계 승인 구현

🔧 W7 Orchestrator + KIS + Discord 승인 워크플로
Schedule평일 오전 8시 30분 (장 개장 전)
W7 OrchestratorNews·Macro 에이전트 실행 → 한국 종목 verdict
IF: BUY & conf ≥ 4강한 신호만 승인 요청 단계로
Discord 버튼 메시지"삼성전자 10주 매수 승인? [✅] [❌]" 전송
Webhook: 응답 대기Discord Interaction 수신 (최대 30분 대기)
Switch: 승인/거부✅ 승인 → 주문, ❌ 거부 → 로그만
HTTP: HashKey 생성주문 Body로 HASH 발급
HTTP: 매수 주문VTTC0802U + hashkey 헤더로 KIS 주문
Sheets + Discord 완료주문번호·체결가·시각 기록 + 알림

Discord 버튼 메시지 구성

// Discord Interaction 메시지 Body (Webhook 또는 Bot)
{
  "content": "🤖 **자동매매 승인 요청**",
  "embeds": [{
    "title": "삼성전자 (005930) 매수 제안",
    "color": 3066993,
    "fields": [
      { "name": "수량", "value": "10주", "inline": true },
      { "name": "예상금액", "value": "724,000원", "inline": true },
      { "name": "Claude 신뢰도", "value": "4/5", "inline": true },
      { "name": "근거", "value": "HBM 수요 증가 뉴스 + RSI 과매도 반등" }
    ]
  }],
  "components": [{
    "type": 1,
    "components": [
      {
        "type": 2,
        "style": 3,
        "label": "✅ 승인하고 주문",
        "custom_id": "approve_order_12345"
      },
      {
        "type": 2,
        "style": 4,
        "label": "❌ 거부",
        "custom_id": "reject_order_12345"
      }
    ]
  }]
}

Claude 주문 결정 프롬프트 — 한국 종목 특화

KIS 주문 어시스턴트 System Message
당신은 한국 주식 자동매매 어시스턴트입니다. W7 Orchestrator의 verdict와 현재 계좌 상태를 받아 구체적 주문 파라미터를 생성합니다.

입력:
• orchestrator_verdict (BUY / AVOID / WATCH / HOLD)
• confidence (1~5)
• ticker + 현재가
• account_balance (가용 예수금)
• current_holdings (기존 보유 수량)

주문 규칙:
BUY & confidence ≥ 4만 주문 생성 (나머지는 SKIP)
• 한 종목에 예수금의 2% 이내
• 한국 주식 최소 단위 1주, 10주 미만 투자는 SKIP (비용 대비 비효율)
• 시장가(ORD_DVSN:01) 기본, 변동성 높은 종목은 지정가(00) 권장

출력 JSON:
{
  "action": "ORDER" | "SKIP",
  "tr_id": "VTTC0802U" or "VTTC0801U",
  "pdno": "종목코드",
  "ord_dvsn": "00" | "01",
  "ord_qty": 수량 문자열,
  "ord_unpr": 가격 문자열,
  "reasoning": "한 문장 근거",
  "risk_note": "주의사항 한 문장"
}

모의투자임을 명심 — 실계좌 전환은 별도 심사 필요.
🚨 SP3 자주 발생하는 오류
"EGW00121 해시키 불일치"
HashKey 생성 Body와 실제 주문 Body가 다름. JSON 필드 순서·공백·타입 모두 동일해야. n8n에서는 Set 노드로 하나의 Body 객체를 만들고 두 노드에 동일 expression으로 전달.
"APBK0912 매수 가능 금액 부족"
모의투자 계좌도 매수 시 예수금 + 체결 대기 주문 금액이 맞아야. 이미 대기 주문이 많은지 확인. 미체결 주문 취소 후 재시도.
장외 시간 주문 거부
KIS 모의투자는 정규장 시간(09:00~15:30)만 체결. 단일가·시간외 주문은 별도 API. Schedule을 장 시간 내로 설정하거나, 08:30 분석 → 09:05 주문 구조.
Discord 버튼 응답이 n8n에 안 옴
Interactions Endpoint URL이 Discord Application Settings에 제대로 등록됐는지 + n8n Webhook이 Active 상태인지 확인. Discord 서명 검증 실패하면 Interactions 거부됨.
주문은 성공했는데 잔고에 안 보임
미체결 상태일 수 있음. 시장가가 아닌 지정가라면 가격이 맞지 않아 대기 중. VTTC8001R(주문 조회)로 상태 확인 — "접수" vs "체결".

SP3 완료 체크리스트

✅ 아래 모두 체크되면 KIS 특별세션 전체 완료
HashKey 생성 워크플로 구현 + 주문 Body와 동일 유지
매수 주문 API 성공 — 모의계좌 잔고에 반영 확인
매도 주문 API 성공 — TR_ID 분기 로직 검증
W7 Orchestrator verdict → KIS 주문 연결 완성
Discord 버튼 2단계 승인 시스템 구축 + 실제 테스트
주문 결과(주문번호·시각·수량) Sheets "kis_orders" 탭에 자동 기록
에러 발생 시 Discord 관리자 채널로 자동 알림 (W5 Error Trigger 재활용)
1주일간 운영 후 가상 자본 수익률 측정 + 회고
Integration Summary

KIS 특별세션 전체 통합

🎯 이제 여러분이 가진 것:
• Alpaca Paper Trading (미국 주식) — W8에서 완성
• KIS 모의투자 (한국 주식) — SP1~3에서 완성
• Binance Testnet (암호화폐) — 과제로 확장 가능
3대 시장을 모두 자동매매할 수 있는 통합 에이전트 시스템을 갖추게 됐습니다. 이 수준의 포트폴리오는 입문자뿐 아니라 주니어 퀀트 경력자에게도 강한 차별점입니다.

이력서/지원서 한 줄 추가 문구

KIS 경험 이력서 Bullet
• 한국투자증권 Open API (KIS Developers) 연동 자동매매 시스템 구축 — OAuth2 토큰 자동 재발급, HashKey 생성, TR_ID 체계 이해
• W7 멀티 에이전트 시스템과 통합해 국내 주식(KOSPI/KOSDAQ) 대상 자동 매수/매도 실행, Discord 2단계 승인 시스템 구현
• 모의투자 환경에서 1주일간 운영, 가상 자본 수익률 +X.X% 달성

다음 단계 — 실계좌 전환 전 체크리스트

🔍 실계좌 연동을 고려한다면 (필수 검증)
모의투자에서 최소 3개월 안정 운영 (월별 수익률 양의 값)
Risk Guards 4단계 모두 실제 발동 경험 + 로그 확인
에이전트 판단 오류 발견 시 즉시 중단 버튼 구현
KIS Developers 실계좌 별도 신청 (모의와 별개)
URL과 TR_ID를 전환하기 전 100번 이상 재확인
처음에는 소액 (1종목 10만원 이내) 단일 매수로 검증
세금 신고 대비 매매 기록 백업 시스템 구축
🚨 실계좌 전환에 대한 최종 조언
이 과정은 교육 목적입니다. AI 에이전트가 아무리 정확해도 시장은 예측 불가능하고, 시스템 오류로 대규모 손실이 발생할 수 있습니다. 실계좌 전환은 반드시 소액부터 + 엄격한 손실 한도 + 수동 모니터링 하에서만. 수강생 여러분은 이 8주+특별세션 기록을 포트폴리오로 활용해 금융 IT·퀀트 인턴십에 도전하는 것이 최고의 다음 단계입니다. 돈은 커리어로 훨씬 더 크게 벌 수 있습니다.
References

참고 자료

자료용도
KIS Developers 공식 포털
apiportal.koreainvestment.com
모든 API 문서·TR_ID·파라미터 상세
KIS Developers GitHub 샘플
github.com/koreainvestment/open-trading-api
Python 공식 샘플 코드 (참고용)
python-kis 라이브러리
pypi.org/project/python-kis
(선택) Python으로 확장할 때 커뮤니티 라이브러리
위키독스 KIS 초급 예제
wikidocs.net/159296
한글 튜토리얼 (초보 친화적)
Discord Interactions Docs
discord.com/developers/docs/interactions
2단계 승인 버튼 메시지 구조
DART 공시 API
opendart.fss.or.kr
(선택) 한국 기업 공시 데이터로 News Agent 확장
네이버 금융 / 토스 증권 UI주문 실행 확인용 참고 (수동 크로스체크)
⭐ SPECIAL SESSION COMPLETE
KIS Developers 모의투자 완전정복
한국투자증권 Open API × n8n × Claude
2026 · ZeroOneAI Education