OAuth · HashKey · 한국 주식 호가단위
W8까지의 시스템은 Alpaca = 미국 주식 위주입니다. 한국 투자자는 KOSPI/KOSDAQ 종목도 자동매매가 필요합니다. 한국투자증권(KIS) OpenAPI는:
POST https://openapivts.koreainvestment.com:29443/oauth2/tokenP
Content-Type: application/json
{
"grant_type": "client_credentials",
"appkey": "{APP_KEY}",
"appsecret": "{APP_SECRET}"
}
응답:
{
"access_token": "...",
"token_type": "Bearer",
"expires_in": 86400
}
토큰 24시간 유효. n8n에서 매일 1회 갱신하는 별도 워크플로우 + 발급된 토큰을 변수에 캐싱.
주문 요청 body를 서명한 HashKey를 헤더에 함께 전달해야 합니다.
// Step 1: 본문을 별도 hashkey 발급 API로 서명
POST https://openapivts.koreainvestment.com:29443/uapi/hashkey
Headers:
appkey: {APP_KEY}
appsecret: {APP_SECRET}
Body: {주문 본문 그대로}
응답: { "HASH": "abc123..." }
// Step 2: 실 주문 호출 시 헤더에 HashKey 추가
POST https://openapivts.koreainvestment.com:29443/uapi/domestic-stock/v1/trading/order-cash
Headers:
authorization: Bearer {access_token}
appkey: {APP_KEY}
appsecret: {APP_SECRET}
tr_id: VTTC0802U (모의 매수 / 매도는 VTTC0801U)
hashkey: {HASH}
Body: {위와 동일한 주문 본문}
| 가격대 | 호가 단위 |
|---|---|
| ~ 2,000원 | 1원 |
| 2,000 ~ 5,000원 | 5원 |
| 5,000 ~ 20,000원 | 10원 |
| 20,000 ~ 50,000원 | 50원 |
| 50,000 ~ 200,000원 | 100원 |
| 200,000 ~ 500,000원 | 500원 |
| 500,000원 이상 | 1,000원 |
지정가 주문 시 위 단위로 정렬되지 않으면 거부됩니다. 주문 직전 보정 함수:
function snapToTick(price) {
let tick;
if (price < 2000) tick = 1;
else if (price < 5000) tick = 5;
else if (price < 20000) tick = 10;
else if (price < 50000) tick = 50;
else if (price < 200000) tick = 100;
else if (price < 500000) tick = 500;
else tick = 1000;
return Math.round(price / tick) * tick;
}
{
"CANO": "5012345678", // 모의 계좌번호 앞 8자리
"ACNT_PRDT_CD": "01", // 상품코드
"PDNO": "005930", // 종목코드 (삼성전자)
"ORD_DVSN": "00", // 00=지정가, 01=시장가
"ORD_QTY": "10", // 주문수량
"ORD_UNPR": "71500" // 주문가 (시장가는 "0")
}
.KS)면 KIS, 미국 ticker면 Alpaca로 분기