슬리피지와 체결 품질 관리: 시장가 vs 지정가
백테스트 곡선은 우상향인데 실계좌만 제자리인 경험, 자동매매를 해본 사람이라면 압니다. 원인의 대부분은 전략이 아니라 체결에 있습니다. 화면에 뜬 가격과 내 주문이 실제로 채워진 가격의 차이 — 이것이 슬리피지(slippage)입니다.
⚠️ 이 글은 교육·정보 제공 목적입니다. 특정 기법의 수익을 보장하지 않으며, 투자 손실 책임은 본인에게 있습니다.
1. 슬리피지는 어디서 생기나
백테스트는 보통 "종가에 체결됐다"고 가정합니다. 하지만 실전에서 시장가 주문은 호가창을 위에서부터 먹어 들어갑니다. 매도 1호가 물량이 내 주문보다 적으면, 남은 수량은 2호가·3호가로 넘어가 평균 체결가가 밀립니다.
매수 시장가 500주를 넣으면:
매도1호가 10,000원 × 300주 → 300주 체결
매도2호가 10,005원 × 200주 → 200주 체결
평균 체결가 = (10,000×300 + 10,005×200) / 500 = 10,002원
→ 화면가 10,000 대비 2원(0.02%) 슬리피지
스프레드가 넓거나 호가가 얇은 종목일수록, 주문이 클수록 이 손실은 커집니다. 왕복(진입+청산) 매매라면 슬리피지도 왕복으로 두 번 물립니다.
2. 시장가 vs 지정가 — 무엇을 포기할 것인가
증권사 API에서 주문 유형은 대개 코드로 구분됩니다. 실제 봇 코드에서도 이렇게 다룹니다.
OrderType string // "00" 지정가, "01" 시장가
- 시장가("01"): 체결은 거의 보장되지만 가격을 포기합니다. 급한 청산·손절에 적합. 대신 슬리피지를 감수.
- 지정가("00"): 가격을 통제하지만 체결을 포기할 수 있습니다. 원하는 값에 안 오면 미체결로 남습니다.
핵심은 "무엇이 더 아픈가"입니다. 차익거래·페어처럼 진입가가 곧 엣지인 전략은 지정가가 원칙입니다. 반대로 추세가 꺾여 반드시 빠져나와야 하는 손절은 시장가가 안전합니다.
3. 호가 깊이 대비 주문 크기
실시간 호가(잔량)를 구독하면, 주문 전에 내 물량이 몇 호가를 먹을지 미리 계산할 수 있습니다. 봇은 호가 데이터를 이렇게 들고 있습니다.
type RealtimeQuote struct {
AskPrice float64 // 매도1호가
BidPrice float64 // 매수1호가
AskQty int64 // 매도1호가 잔량
BidQty int64 // 매수1호가 잔량
}
// 주문이 1호가 잔량을 넘으면 슬리피지 경고
func checkDepth(orderQty, askQty int64) bool {
if orderQty > askQty {
// 1호가로 다 못 먹음 → 분할 or 지정가 검토
return false
}
return true
}
주문이 1호가 잔량 안에 들어오면 슬리피지는 사실상 0에 가깝습니다. 넘어간다면 주문을 쪼개(분할 체결) 여러 번에 나눠 넣거나, 아예 지정가로 바꿔 시장이 오길 기다리는 편이 낫습니다.
4. 미체결 대응 — 주문은 걸고 끝이 아니다
지정가를 쓰면 반드시 미체결 관리가 따라옵니다. 걸어둔 주문이 방치되면, 시장이 이미 떠난 뒤 뒤늦게 체결돼 원치 않는 포지션을 안게 됩니다.
- 타임아웃 취소: N초 안에 안 채워지면 주문을 취소하고 재평가. "이 가격은 이제 유효하지 않다"를 인정하는 장치.
- 재주문(chase): 취소 후 현재 호가에 맞춰 한 틱 따라가며 다시 건다. 단, 무한 추격은 슬리피지를 자초하므로 횟수를 제한.
- 부분 체결 처리: 500주 중 300주만 채워진 상태를 정확히 추적해야 합니다. 남은 200주를 다시 계산에 넣지 않으면 포지션이 어긋납니다.
if !filled && elapsed > orderTimeout {
cancelOrder(orderID) // 미체결 취소
if retries < maxChase {
placeLimit(currentBid) // 현재가로 재주문
retries++
} else {
placeMarket() // 포기하고 시장가로 확실히
}
}
정리
- 백테스트와 실전의 괴리는 대부분 슬리피지에서 온다 — 종가 체결 가정은 거짓말
- 시장가는 체결을, 지정가는 가격을 산다. 전략의 엣지가 가격이면 지정가
- 주문 전 호가 잔량과 주문 크기를 비교해 슬리피지를 예측·분할
- 지정가는 타임아웃·재주문·부분체결 관리가 세트
화려한 진입 신호보다, 그 신호를 손실 없이 체결로 옮기는 기술이 실전 수익률을 가릅니다. 슬리피지 0.1%는 작아 보여도, 하루 수십 번 왕복하는 봇에게는 전략 전체를 적자로 뒤집는 크기입니다.
댓글
댓글 쓰기