내 봇은 '시장가'로 던질까, '지정가'로 걸어둘까
자동매매를 준비하는 분들이 전략, 지표, 거래소는 열심히 고민하면서 정작 놓치는 것이 하나 있습니다. "봇이 실제로 어떤 방식으로 사고파는가"입니다. 같은 전략, 같은 종목, 같은 타이밍이라도 주문 유형 하나 때문에 어떤 봇은 좋은 값에 척척 체결되고, 어떤 봇은 계속 헛물을 켜거나 급락장에 손절이 불발됩니다. 이 글은 코딩을 몰라도 "내 봇은 어떤 주문으로 매매해야 하나"를 스스로 판단할 수 있도록, 자동매매에서 쓰이는 주문 유형을 처음부터 끝까지 쉬운 말로 정리합니다.
이 글의 흐름
- 왜 자동매매에서 '주문 유형'이 손익을 가르는가
- 딱 두 개만 알면 절반 — 시장가 vs 지정가
- 시장가가 배신하는 순간 / 지정가가 배신하는 순간
- 그 중간 — 국내주식 특유의 조건부·최유리·최우선지정가
- '언제까지 유효한가' — IOC·FOK·예약주문
- 코인 거래소 특유 — post-only·reduce-only·스탑주문
- 손절·익절은 어떤 주문으로 나가나 (봇의 생사)
- 봇이 주문을 낸 뒤 — 미체결·정정·중복 방지
- 내 전략엔 어떤 주문이 맞나 (판단표)
- 명세서에 꼭 적을 '주문 사양' 한 줄
1. 왜 자동매매에서 '주문 유형'이 손익을 가르는가
사람이 손으로 거래할 때는 주문 유형을 크게 의식하지 않습니다. 호가창을 보고 "여기서 사자" 하고 클릭 한 번이면 되니까요. 그런데 자동매매는 다릅니다. 봇은 화면을 보고 눈치껏 판단하지 않습니다. 우리가 미리 지정해 둔 주문 유형 그대로, 초 단위로, 감정 없이 실행합니다. 그래서 "어떤 주문으로 낼지"를 정해두지 않으면, 봇은 아무 주문도 내지 못하거나, 우리가 의도하지 않은 방식으로 매매합니다.
문제는 여기서 생기는 손익 차이가 생각보다 크다는 점입니다. 자동매매는 하루에도 수십·수백 번 주문을 낼 수 있는데, 매 주문마다 붙는 작은 불리함(예: 시장가로 던져 몇 틱 나쁘게 체결)이 쌓이면 전략의 기대수익을 통째로 갉아먹습니다. 실제로 백테스트는 좋았는데 실전에서 무너지는 대표 원인 중 하나가 바로 "백테스트가 가정한 주문 방식"과 "실전에서 봇이 실제로 낸 주문 방식"의 불일치입니다.
위 그림 한 장이 이 글 전체의 핵심입니다. 주문 유형이란 결국 "체결의 확실성"과 "체결 가격" 사이에서 무엇을 더 중요하게 볼지를 봇에게 알려주는 언어입니다. 나머지 온갖 주문 이름은 이 두 축을 조금씩 다르게 조합한 변주일 뿐입니다. 이 프레임만 잡으면 낯선 용어가 나와도 당황하지 않습니다.
왜 이 작은 차이가 무섭냐면, 자동매매는 이 불리함을 지치지 않고 반복하기 때문입니다. 아주 단순한 산수로 감을 잡아 봅시다. 어떤 봇이 하루 20번 매매하는데, 매수·매도마다 시장가로 던져 평균 0.05%씩 불리하게 체결된다고 해보죠. 한 번 왕복이면 0.1% 남짓, 별것 아닌 것 같습니다. 그런데 하루 20번이면 약 2%, 한 달 20거래일이면 수십 %에 달하는 마찰 비용이 조용히 쌓입니다(여기에 거래 수수료는 별도입니다). 이 숫자는 방향이나 수익을 예측한 게 아니라, 주문 방식 때문에 생기는 고정 마찰이 얼마나 누적될 수 있는지를 보여주는 예시일 뿐입니다. 전략의 기대수익이 이 마찰보다 두껍지 않으면, 좋은 전략도 주문 방식 하나로 적자가 됩니다. 그래서 "무슨 주문을 쓰느냐"는 취향이 아니라 생존의 문제입니다.
2. 딱 두 개만 알면 절반 — 시장가 vs 지정가
주문 유형은 종류가 많아 보이지만, 뿌리는 딱 두 개입니다. 이 둘만 제대로 이해하면 나머지는 곁가지입니다.
시장가(Market) — "값은 안 따질 테니 지금 사라/팔아라"
시장가 주문은 가격을 지정하지 않고 "현재 시장에 나와 있는 가장 좋은 반대편 호가"로 즉시 체결합니다. 편의점에서 정가에 바로 물건을 집어 오는 것과 비슷합니다. 장점은 거의 확실하게, 즉시 체결된다는 것. 단점은 얼마에 체결될지 내가 통제할 수 없다는 것입니다. 호가가 얇거나(거래가 뜸하거나) 시장이 급하게 움직이면, 생각한 값보다 훨씬 불리하게 체결될 수 있습니다. 이 "생각한 값과 실제 체결값의 차이"가 바로 슬리피지입니다.
지정가(Limit) — "이 값 아니면 안 산다/안 판다"
지정가 주문은 가격을 못 박습니다. "10,000원 이하면 매수", "10,050원 이상이면 매도"처럼요. 중고거래에서 "이 가격 아니면 안 삽니다" 하고 기다리는 것과 같습니다. 장점은 내가 정한 가격(또는 그보다 유리한 값)을 보장받는다는 것. 단점은 그 가격에 상대가 나타나지 않으면 영원히 체결되지 않는다는 것입니다. 좋은 자리를 노리다가 시세가 그냥 가버리면, 봇은 멀뚱히 주문만 걸어둔 채 기회를 통째로 놓칩니다.
여기서 초보가 자주 놓치는 두 가지가 있습니다. 첫째, 지정가라고 딱 그 가격에 체결되는 게 아니라 "그 가격보다 유리하면" 체결됩니다. 10,000원에 매수 지정가를 냈는데 마침 9,990원 호가가 있으면 9,990원에 사집니다. 둘째, 내 앞에 대기줄이 있습니다. 같은 가격에 먼저 주문을 낸 사람들이 있으면, 그 물량이 다 소화된 뒤에야 내 차례가 옵니다(가격-시간 우선). 그래서 지정가는 "내가 원하는 값을 적어두는" 것에 가깝지, "그 값이 오면 무조건 내가 산다"는 보장이 아닙니다. 봇이 "지정가 걸었으니 됐다"고 방심하면, 실제로는 한 주도 못 산 채 시세만 흘려보낼 수 있습니다.
한 줄 정리 — 시장가는 "체결은 확실, 가격은 운", 지정가는 "가격은 확실, 체결은 운". 자동매매 설계의 8할은 "이 상황에선 어느 쪽을 포기할까"를 정하는 일입니다.
3. 시장가가 배신하는 순간 / 지정가가 배신하는 순간
초보자가 흔히 하는 생각은 "그냥 확실한 시장가로 다 하면 되지 않나?"입니다. 반대로 신중한 분은 "손해 안 보게 다 지정가로 걸자"고 합니다. 둘 다 특정 상황에서 봇을 배신합니다. 언제인지 알아야 합니다.
⚠️ 시장가가 위험한 순간
- 급변장·갭: 호가가 순식간에 비어 예상보다 크게 불리한 값에 체결
- 거래량 적은 종목·시간대: 호가가 얇아 한 방에 몇 틱씩 밀림
- 잦은 매매 전략: 매번 붙는 슬리피지가 수수료처럼 누적
- 큰 수량: 호가를 여러 단계 먹으며 평균 체결가 악화(→ 집행 알고리즘으로 쪼개는 이유)
⚠️ 지정가가 위험한 순간
- 추세 추종: "뚫으면 산다"인데 지정가로 밑에 걸면 상승을 놓침
- 손절: 급락에 지정가를 스쳐 지나가면 손절 자체가 불발
- 반드시 진입해야 하는 신호: 체결 안 되면 전략 논리가 깨짐
- 한쪽만 체결: 매수만 되고 매도가 안 돼 의도치 않은 포지션 방치
이 둘을 가르는 실전 판단 기준이 하나 더 있습니다 — 호가창이 얼마나 두꺼운가(유동성)입니다. 거래가 활발해 호가마다 물량이 두툼한 종목은 시장가로 던져도 체결가가 크게 밀리지 않습니다. 반대로 거래가 뜸한 종목·시간대는 호가가 얇아, 시장가 한 방에 몇 단계씩 값이 튑니다. 그래서 같은 "시장가"라도 어떤 종목·언제 쓰느냐에 따라 위험도가 완전히 다릅니다. 봇을 만들 때 "이 전략이 다루는 종목의 유동성이 어느 정도인가"를 함께 따져야, 주문 유형 선택이 현실과 맞물립니다.
그래서 실전 자동매매는 "전부 시장가" 또는 "전부 지정가"가 아니라, 상황별로 갈아 쓰는 설계를 합니다. 예를 들어 진입 신호는 놓치면 안 되니 시장가(또는 뒤에 나올 절충형), 익절 목표가는 값을 지켜야 하니 지정가, 손절은 체결 확실성이 우선이니 스탑-마켓… 이런 식으로요. 이 조합을 미리 정해두는 것이 봇 설계의 알맹이입니다.
4. 그 중간 — 국내주식 특유의 조건부·최유리·최우선지정가
국내 주식시장(KRX)에는 시장가와 지정가 사이를 메우는 절충형 주문들이 있습니다. 코인만 하던 분에겐 낯설지만, 국내주식 봇을 만든다면 알아둘 가치가 있습니다. 이름이 길어 겁먹기 쉬운데, "지정가의 편리함 + 시장가의 확실성을 조금씩 섞은 것"으로 이해하면 됩니다.
| 주문 유형 | 쉽게 말하면 | 주로 쓰는 상황 |
|---|---|---|
| 조건부지정가 | 장중엔 지정가로 대기하다, 미체결이면 종가(장 마감 단일가)에 시장가로 전환 | "오늘은 이 값을 노리되, 안 되면 종가엔 꼭 체결하고 싶다" |
| 최유리지정가 | 주문 넣는 순간 반대편 최우선호가 값으로 지정가 접수 → 즉시 체결 유도 | "거의 시장가처럼 빨리 사되, 지정가 형태로 안전판은 두고 싶다" |
| 최우선지정가 | 주문 넣는 순간 같은 방향 최우선호가 값으로 지정가 접수 → 대기줄 맨 앞 | "내 편 호가 맨 앞에 서서 유리한 값을 노린다" |
⚠️ 반드시 공식 문서로 확인하세요. 위 설명은 일반적으로 알려진 동작이지만, 증권사·API마다 지원하는 주문 유형, 정확한 명칭, 세부 동작(특히 조건부지정가의 전환 시점)이 다를 수 있습니다. 코드로 주문 코드값을 넣기 전에 반드시 해당 증권사의 최신 공식 개발자 문서(REST API 가이드)에서 지원 여부와 파라미터를 확인해야 합니다. 실제 발급·연동 과정은 키움 REST API 가이드나 KIS API 키 발급 가이드를 참고하세요.
한 장면으로 감을 잡아 봅시다. 어떤 국내주식 봇이 "오늘 이 종목을 15,000원 근처에서 사되, 못 사면 오늘 안에는 꼭 담고 싶다"는 규칙을 가졌다고 하죠. 단순 지정가로 15,000원을 걸면 종가까지 안 오면 못 삽니다. 시장가로 던지면 장중 아무 때나 비싸게 살 위험이 있죠. 이때 조건부지정가를 쓰면 "장중엔 15,000원 지정가로 노리다가, 미체결이면 종가 단일가에 시장가로 전환"이라 두 마리 토끼를 어느 정도 잡습니다. 이렇게 절충형은 "가격도 챙기고 싶고 체결도 놓치기 싫은" 회색지대에서 진가를 발휘합니다. 다만 실제 전환 시점·조건은 앞서 강조했듯 증권사·API마다 다를 수 있으니 반드시 공식 문서로 확인하세요.
코인 거래소에는 보통 이런 절충형이 없고 시장가·지정가 + 옵션 플래그(뒤에서 설명) 조합으로 비슷한 효과를 냅니다. 그래서 "내가 국내주식 봇을 만드는지, 코인 봇을 만드는지"에 따라 쓸 수 있는 주문 유형 자체가 달라진다는 점을 기억해 두세요.
5. '언제까지 유효한가' — IOC·FOK·예약주문
지금까지가 "얼마에"에 대한 이야기였다면, 이제 "언제까지 살아 있나 / 얼마나 채워지나"라는 다른 축이 있습니다. 자동매매에서 은근히 중요한데 초보가 잘 모르는 부분입니다.
IOC — "지금 되는 만큼만 체결하고, 나머지는 취소"
IOC(Immediate-Or-Cancel)는 주문을 내는 즉시 체결 가능한 수량만 체결하고, 남는 수량은 곧바로 취소합니다. "주문서를 호가창에 남겨두고 싶지 않다"는 뜻입니다. 봇이 순간적으로 잡고 빠지는 전략, 또는 미체결 주문이 계속 쌓이는 걸 원치 않을 때 씁니다.
FOK — "전량 지금 안 되면, 아예 없던 일로"
FOK(Fill-Or-Kill)는 더 극단적입니다. 주문 수량 전체가 즉시 체결되지 않으면 전량 취소합니다. "반쯤만 사면 오히려 곤란하다"는 전략(예: 정확한 수량이 맞아야 하는 차익거래)에서 부분 체결을 원천 차단할 때 씁니다.
GTC·예약주문 — "취소할 때까지" 또는 "다음 장에 넣어줘"
반대 방향도 있습니다. 코인에서 흔한 GTC(Good-Till-Cancelled)는 내가 취소하기 전까지 주문을 계속 살려둡니다. 국내주식은 보통 당일에만 유효하고(장 마감 시 자동 소멸), 대신 예약주문으로 "다음 장 시작에 이 주문을 넣어줘"를 미리 걸 수 있습니다. 이 차이를 모르고 "어제 걸어둔 지정가가 오늘도 살아 있겠지" 했다가 봇 로직이 어긋나는 경우가 있습니다.
자동매매 관점 포인트 — "주문의 수명"은 봇의 상태 관리와 직결됩니다. 봇이 "나는 지금 매수 주문을 걸어둔 상태"라고 기억하는데 거래소에선 이미 취소·소멸됐다면, 둘의 인식이 어긋나 중복 주문이나 유령 포지션이 생깁니다. 그래서 좋은 봇은 주문을 낸 뒤 항상 실제 체결·잔량을 다시 조회해 자기 기억을 맞춥니다.
주문이 아예 '거부'되는 경우 — 호가단위·최소금액·가격제한폭
주문 유형을 아무리 잘 골라도, 그 이전에 주문 자체가 거래소·증권사 문턱을 못 넘어 반려되는 경우가 있습니다. 사람이 손으로 주문할 땐 화면이 알아서 막아주지만, 봇은 이걸 코드로 걸러주지 않으면 "주문 냈다고 생각했는데 사실은 거부당한" 상태가 됩니다. 대표적인 반려 사유입니다.
| 거부 사유 | 무슨 뜻 | 봇이 해야 할 일 |
|---|---|---|
| 호가 단위(틱) 위반 | 가격은 아무 값이나 못 넣고, 가격대별로 정해진 최소 눈금 단위로만 가능 | 주문가를 틱 단위에 맞게 반올림·정렬 |
| 최소 주문 수량·금액 미달 | 거래소·상품마다 "이 금액/수량 이상만" 받는 하한이 있음 | 계산된 수량이 하한 미만이면 주문 보류·조정 |
| 가격제한폭(상·하한가) 초과 | 국내주식은 하루 등락 범위에 제한이 있어 그 밖의 가격은 거부 | 제한폭을 넘는 지정가는 걸지 않기 |
| 잔고·증거금 부족 | 돈·증거금이 모자라면 주문이 반려되거나 일부만 접수 | 주문 전 가용 잔고 확인, 실패 시 재시도 규칙 |
| 정밀도(소수점) 초과 | 코인은 수량·가격 소수점 자릿수가 종목마다 정해져 있음 | 종목 규격(정밀도)에 맞춰 자리 맞춤 |
이 규격들(틱 단위, 최소 금액, 정밀도)은 종목마다·거래소마다 다르고 수시로 바뀝니다. 그래서 잘 만든 봇은 값을 하드코딩하지 않고, 거래소가 제공하는 종목 규격 정보를 조회해 자동으로 맞춥니다. 정확한 호가 단위·최소 주문 규격·가격제한폭은 반드시 해당 거래소·증권사 공식 문서에서 확인하세요. 이 부분을 봇이 안 챙기면, 겉으론 멀쩡히 도는데 실제론 주문이 계속 튕겨 "매매를 안 하는 봇"이 됩니다.
6. 코인 거래소 특유 — post-only·reduce-only·스탑주문
코인 거래소는 시장가·지정가에 옵션 플래그를 붙여 세밀하게 제어합니다. 자주 나오는 세 가지만 알면 충분합니다.
post-only (메이커 전용)
"호가를 대는 쪽(메이커)으로만 체결". 주문을 내는 순간 바로 체결될 상황이면 주문을 취소합니다. 테이커 수수료를 피하려는 그리드·마켓메이킹 봇이 애용.
reduce-only (감축 전용)
"포지션을 줄이는 방향으로만 체결". 손절·청산 주문이 실수로 반대 포지션을 새로 여는 사고를 막아줍니다. 선물 봇의 안전장치.
스탑(Stop) 주문
"트리거 가격에 닿으면 발동". 평소엔 대기하다 조건 충족 시 시장가(스탑-마켓) 또는 지정가(스탑-리밋)로 나갑니다. 손절·추격의 핵심.
참고로 스탑 주문은 트리거에 닿기 전까지는 호가창에 드러나지 않고 대기하는 경우가 많습니다. 그래서 "내 손절이 주문장에 안 보인다"고 당황할 필요는 없지만, 반대로 봇이 "스탑을 걸어뒀다"고 방심하지 말고 실제로 접수됐는지 상태를 확인하는 습관이 필요합니다.
스탑 주문은 특히 중요합니다. 손절과 익절 대부분이 이 스탑 계열로 구현되기 때문입니다. 여기서 갈림길이 하나 있습니다 — 발동될 때 시장가로 나갈지(스탑-마켓), 지정가로 나갈지(스탑-리밋). 이 선택이 봇의 생사를 가르기에 다음 장에서 따로 다룹니다.
⚠️ 거래소마다 다릅니다. post-only·reduce-only·스탑주문의 지원 여부와 정확한 동작(트리거 기준 가격이 '체결가'인지 '표시가/지수가'인지 등)은 거래소·상품(현물/선물)마다 제각각입니다. 반드시 해당 거래소 공식 API 문서에서 확인하고, 실거래 전 소액·모의로 실제 발동을 눈으로 검증하세요. 업비트처럼 상품·API 구조가 특수한 경우는 업비트 REST·웹소켓 정리를 참고하세요.
국내주식 vs 코인 — 쓸 수 있는 주문이 아예 다르다
여기까지 오면 한 가지가 분명해집니다. "어느 시장의 봇을 만드느냐"에 따라 손에 쥘 수 있는 주문 도구 자체가 달라진다는 것입니다. 국내주식과 코인을 나란히 놓으면 이렇게 갈립니다(개념 비교이며, 세부 지원은 증권사·거래소·API 버전마다 다르니 공식 문서 확인).
| 구분 | 국내주식(KRX) | 코인 거래소 |
|---|---|---|
| 기본 주문 | 시장가 · 지정가 | 시장가 · 지정가 |
| 절충형 | 조건부지정가 · 최유리 · 최우선지정가 | (대개 없음) — 옵션 플래그로 대체 |
| 옵션 플래그 | 제한적 | post-only · reduce-only · IOC/FOK 등 풍부 |
| 주문 수명 | 대개 당일 소멸 + 예약주문 | GTC(취소 전까지)가 기본인 경우 많음 |
| 가격제한폭 | 있음(상·하한가) | 대개 없음(또는 다른 방식) |
| 거래 시간 | 정규장 중심(시간외 별도 규칙) | 24시간 |
그래서 "국내주식 봇에서 잘 쓰던 주문 설계를 코인으로 그대로 옮기면" 안 맞는 부분이 생깁니다. 반대도 마찬가지입니다. 봇을 다른 시장으로 확장할 계획이 있다면, 전략 논리와 별개로 "이 시장에선 어떤 주문 도구가 있는가"부터 다시 확인해야 합니다.
7. 손절·익절은 어떤 주문으로 나가나 (봇의 생사)
여기가 이 글에서 가장 중요한 실전 대목입니다. 손절 주문 하나를 어떻게 설계하느냐로 봇이 오래 살기도, 한 번에 크게 다치기도 합니다. 익절도 마찬가지입니다. 목표가에 한 번에 전량 파는 대신 여러 지정가로 나눠 파는 분할 익절을 쓰면, 일부는 먼저 이익을 확정하고 나머지는 더 큰 흐름을 노릴 수 있습니다. 이때도 각 분할 주문을 지정가로 걸지, 조건 도달 시 시장가로 던질지를 정해야 하죠. 결국 "언제 팔까"라는 전략 판단은 "어떤 주문으로 팔까"라는 실행 결정과 짝이 되어야 실제로 작동합니다.
스탑-마켓 (발동 시 시장가)
- 장점: 트리거만 닿으면 거의 확실히 청산 → 손절 불발 위험 낮음
- 단점: 급락 중엔 예상보다 더 낮은 값에 팔릴 수 있음(슬리피지)
- 적합: "무슨 일이 있어도 이 선에서는 빠져나온다"는 원금 보호 우선 손절
스탑-리밋 (발동 시 지정가)
- 장점: 지정한 값 아래로는 안 팔림 → 가격 통제
- 단점: 급락이 지정가를 건너뛰면 체결 안 됨 → 손절이 통째로 불발
- 주의: 손절에 스탑-리밋을 쓰면 "가장 필요할 때 안 팔리는" 최악이 가능
실무 원칙 — 손절은 대체로 "체결 확실성" 우선(스탑-마켓 계열)으로, 익절은 "가격" 우선(지정가)으로 설계하는 경우가 많습니다. 다만 이건 절대 규칙이 아니라, 시장 유동성·변동성·상품 특성에 따라 조정할 판단의 문제입니다. 손절·익절 설계 전반은 청산 설계: 익절·트레일링 스탑·분할청산에서 더 깊이 다룹니다.
특히 시장 구조상 특정 시간대에 시장가 주문 자체가 막히는 경우도 있습니다. 대표적으로 미국주식은 정규장 외 시간대에 시장가가 제한돼, 국내처럼 "시장가 손절"을 그대로 옮기면 손절이 불발될 수 있습니다. 이런 시장별 제약은 미국주식 자동매매 가이드에서 짚었습니다. 봇을 다른 시장으로 옮길 때 전략은 옮겨져도 주문 방식은 그대로 못 옮기는 이유입니다.
트레일링 스탑 — '따라 올라가는 손절선'도 결국 주문이다
익절·손절 이야기에서 자주 나오는 트레일링 스탑(추적 손절)은 "가격이 오르면 손절선도 같이 끌어올려, 이익은 지키되 추세는 최대한 태우는" 방식입니다. 개념은 매력적이지만, 자동매매에서 이걸 구현하는 방법은 크게 둘로 갈립니다. ① 거래소가 제공하는 트레일링 주문 기능을 그대로 쓰거나, ② 봇이 가격을 지켜보다 직접 스탑 주문을 취소·재설정하는 방식입니다. ①은 간편하지만 지원 여부·동작이 거래소마다 다르고, ②는 유연하지만 앞서 말한 레이트 리밋·중복 주문 관리가 더 중요해집니다. 어느 쪽이든 "최종적으로 시장에 나가는 주문이 시장가냐 지정가냐"라는 질문은 그대로 남습니다. 트레일링이라는 이름에 가려 이 선택을 흐리면, 정작 발동 순간에 원치 않는 방식으로 청산됩니다.
스탑 주문의 숨은 함정 — '무엇에 닿으면' 발동하나
스탑 주문에는 초보가 놓치기 쉬운 디테일이 있습니다. 트리거(발동) 기준이 되는 가격이 실제 체결가인지, 호가 중간값인지, 지수(마크) 가격인지에 따라 발동 시점이 미묘하게 달라집니다. 특히 코인 선물은 급격한 변동 때 순간적으로 튄 가격에 스탑이 잘못 발동되거나, 반대로 안 되기도 합니다. 그래서 스탑을 쓸 때는 "얼마에 발동" 뿐 아니라 "무엇을 기준으로 발동"까지 정해야 하며, 이 기준은 거래소 공식 문서에서 반드시 확인하고 소액으로 실제 발동을 눈으로 검증해야 합니다. 이름이 같은 '스탑 주문'이라도 거래소마다 성격이 다를 수 있다는 걸 기억하세요.
8. 봇이 주문을 낸 뒤 — 미체결·정정·중복 방지
사람은 주문을 넣고 "체결됐나?" 한 번 보면 그만이지만, 봇은 그 확인까지 코드로 해줘야 합니다. 여기서 초보 봇이 가장 많이 사고를 냅니다.
봇이 챙겨야 할 대표적인 상황들입니다.
- 부분 체결: 100주 주문했는데 40주만 됐다면? 나머지 60주를 기다릴지, 취소할지, 다시 낼지 규칙이 있어야 합니다.
- 미체결 방치: 지정가를 걸어두고 잊으면 시세가 떠난 뒤 엉뚱한 자리에서 갑자기 체결될 수 있습니다. "N초/N분 지나면 취소"(주문 만료) 규칙이 흔한 안전판입니다.
- 정정(수정) vs 취소 후 재주문: 가격만 살짝 바꾸고 싶을 때 정정을 쓸지, 취소하고 새로 낼지. 거래소·증권사마다 정정 지원과 대기줄 우선순위 처리가 다릅니다(공식 문서 확인).
- 중복 주문 방지: 네트워크가 끊겨 응답을 못 받았을 때, 봇이 "실패했나 보다" 하고 또 주문을 내면 이중 매수가 됩니다. 그래서 주문마다 고유 표식을 붙여 "이미 낸 주문인지" 확인하는 장치를 둡니다.
봇은 '체결됐는지'를 어떻게 알까 — 확인의 두 방식
사람은 체결창을 눈으로 보면 되지만, 봇은 체결 사실을 데이터로 받아와야 압니다. 방식은 크게 둘입니다. ① 폴링: 봇이 주기적으로 "내 주문 어떻게 됐어?"라고 거래소에 물어보는 방식. 간단하지만 물어보는 간격만큼 반응이 늦고, 너무 자주 물으면 앞서 말한 횟수 제한에 걸립니다. ② 실시간 체결 통보(웹소켓 등): 체결·잔량 변화가 생기면 거래소가 봇에게 즉시 알려주는 방식. 빠르지만 연결이 끊길 수 있어, 끊김을 감지하고 다시 잇는 장치가 필요합니다. 잘 만든 봇은 보통 실시간 통보를 기본으로 쓰되, 폴링으로 주기적으로 대조해 혹시 놓친 체결이 없는지 자기 상태를 이중으로 점검합니다. 이 "상태 확인"이 부실하면, 주문 유형을 아무리 잘 골라도 봇이 헛발질을 합니다.
한 가지 더, 봇은 주문을 너무 자주 내도 문제입니다. 거래소·증권사는 "초당 몇 건"처럼 주문 횟수 제한(레이트 리밋)을 두는데, 미체결 지정가를 취소하고 다시 걸기를 쉼 없이 반복하면 이 한도에 걸려 정작 중요한 주문이 거부될 수 있습니다. 그래서 "가격이 조금 바뀔 때마다 취소 후 재주문"보다, 필요할 때만 정정(주문 수정)을 쓰거나 재주문 간격에 여유를 두는 설계가 안전합니다. 다만 정정 지원 여부와, 정정 시 대기줄 순서가 유지되는지 새로 밀리는지는 거래소·증권사마다 다르니 공식 문서로 확인해야 합니다.
이런 예외 처리야말로 자동매매에서 진짜 어려운 부분이고, "매수·매도 한 줄"보다 훨씬 많은 코드와 검증이 들어가는 지점입니다. 봇이 스스로 멈추는 안전 정지장치가 왜 필요한지도 같은 맥락입니다. 이 모든 예외를 실거래에 앞서 단계적으로 검증하는 과정이 반드시 필요합니다.
헷갈리기 쉬운 구분 — TWAP·VWAP·아이스버그(빙산) 같은 말은 엄밀히 '주문 유형'이 아니라 "큰 주문을 어떻게 나눠서 낼까"라는 집행 방식입니다. 안에서는 결국 시장가·지정가 같은 기본 주문을 여러 번 냅니다. 그래서 "주문 유형(무엇으로 살까)"과 "집행 방식(얼마나 나눠 살까)"은 별개의 결정이고, 둘 다 정해야 완성입니다. 집행 방식은 집행 알고리즘 편에서 따로 다룹니다.
9. 내 전략엔 어떤 주문이 맞나 (판단표)
이제 정리해 봅시다. 전략의 성격에 따라 기본으로 고려할 만한 주문 유형을 표로 묶었습니다. 절대 규칙이 아니라 출발점이며, 실제 유동성·변동성·거래소 특성에 맞춰 조정해야 합니다.
| 전략 성격 | 진입 | 청산(익절) | 손절 |
|---|---|---|---|
| 추세 추종 (뚫으면 진입) | 시장가 / 최유리·스탑-마켓 | 지정가 또는 트레일링 | 스탑-마켓 |
| 역추세·저가매수 (내리면 산다) | 지정가(원하는 값에 대기) | 지정가 | 스탑-마켓 |
| 그리드 (촘촘히 사고팔기) | 지정가(+post-only) | 지정가 | (전체 손절선 별도) |
| 스캘핑 (짧고 빠르게) | 시장가/IOC (속도 우선) | 지정가/IOC | 스탑-마켓 |
| 차익거래 (양쪽 동시) | FOK/IOC (부분체결 차단) | 대칭 청산 | 포지션 정리 |
표에서 보이듯 같은 봇 안에서도 진입·익절·손절이 서로 다른 주문 유형을 쓰는 게 정상입니다. "봇 = 시장가 하나로 통일"이 아니라, 각 국면에 맞는 주문을 배치하는 것이 잘 만든 자동매매입니다.
실전에서는 한 걸음 더 나아가 같은 국면 안에서도 상황에 따라 주문을 바꾸는 하이브리드를 씁니다. 예를 들어 진입할 때 평소엔 지정가로 좋은 값을 노리다가, "일정 시간 안에 안 잡히면 시장가로 전환"하는 규칙을 둡니다(놓치기 아까운 신호일 때). 또는 수량이 크면 한 번에 시장가로 던지지 않고 집행 알고리즘으로 잘게 나눠 시장 충격을 줄입니다. 이렇게 "조건에 따라 주문 유형을 바꾸는 로직"까지 설계하는 것이 사람 손매매를 진짜로 대체하는 지점입니다. 어떤 전략 스타일이 내게 맞는지부터 헷갈린다면 코인 자동매매 완전 입문 가이드나 국내주식 자동매매 완전 가이드에서 큰 그림을 먼저 잡으시길 권합니다.
10. 명세서에 꼭 적을 '주문 사양' 한 줄
제작을 맡기든 직접 만들든, 아래 항목을 미리 정해두면 봇의 매매 방식이 흔들리지 않습니다. 자동매매 명세서를 쓸 때 이 부분을 빠뜨리는 분이 많은데, 견적과 결과물의 품질을 좌우합니다.
✅ 주문 사양 체크리스트 (그대로 명세서에 옮겨 쓰세요)
- ① 진입 주문: 시장가 / 지정가(어느 값 기준) / 절충형 중 무엇?
- ② 익절 주문: 목표가 지정가 / 트레일링 스탑 / 분할 청산?
- ③ 손절 주문: 스탑-마켓 / 스탑-리밋? 트리거 기준 가격은?
- ④ 미체결 처리: 몇 초/분 뒤 취소·재주문? 부분 체결이면?
- ⑤ 주문 수명: 당일만 / 취소 전까지 / 예약주문?
- ⑥ 수량·분할: 한 번에? 나눠서(집행 알고)? 최대 수량 한도?
- ⑦ 거래소·상품: 어느 시장(국내주식/미국주식/코인 현물/선물)? → 쓸 수 있는 주문 유형이 달라짐
이 일곱 줄을 미리 정해 가면 제작 과정이 눈에 띄게 매끄러워집니다. 제작자 입장에서 "이 전략이 진입은 시장가인지 지정가인지, 손절은 어떻게 나가는지, 미체결은 어떻게 처리할지"가 비어 있으면, 결국 다시 물어보는 왕복이 생기고 그만큼 기간·비용이 늘어납니다. 반대로 주문 사양이 또렷하면 견적이 정확해지고, 완성된 봇이 "생각했던 대로" 매매합니다. 자동매매 의뢰에서 흔히 전략과 지표에만 신경 쓰다 이 주문 사양을 비워두는데, 실제 손익을 만드는 마지막 단계가 바로 여기라는 점을 기억하세요. 명세서 전체 틀은 명세서 작성 가이드에 정리돼 있으니, 거기에 이 일곱 줄을 더해 채우면 됩니다.
11. 자주 하는 실수 7가지
- 전부 시장가로 통일 — 편하지만 슬리피지가 수수료처럼 누적돼 잦은 매매 전략을 조용히 갉아먹습니다. 특히 호가가 얇은 종목·시간대에 치명적입니다.
- 손절에 스탑-리밋 사용 — 급락 때 지정가를 건너뛰어 "가장 필요한 순간 손절 불발"이라는 최악을 부릅니다. 손절은 대체로 체결 확실성 우선입니다.
- 미체결 주문 방치 — 걸어둔 지정가를 관리 안 하면 시세가 떠난 뒤 엉뚱한 자리에서 체결됩니다. "N분 뒤 자동 취소" 같은 만료 규칙이 안전판입니다.
- 주문 수명 착각 — "어제 주문이 오늘도 살아 있겠지" 하고 국내주식 당일 소멸을 잊거나, 코인 GTC 주문을 무한정 방치합니다.
- 백테스트-실전 주문 불일치 — 지정가 체결을 가정해 검증하고 실전은 시장가로 던지면 성과가 딴판이 됩니다(→ 슬리피지 가이드).
- 규격을 하드코딩 — 호가 단위·최소 주문 금액·소수점 자릿수를 코드에 박아두면, 종목이 바뀌거나 규격이 개정될 때 주문이 조용히 거부됩니다.
- 상태 확인 생략 — 주문을 "보내면 끝"으로 여기고 체결·잔량을 다시 조회하지 않으면, 중복 주문·유령 포지션이 쌓여도 봇이 모릅니다.
12. 이런 장면이 실제로 나옵니다 (시나리오 3)
"분명 손절 걸었는데 왜 그대로 물려 있죠?"
손절을 스탑-리밋으로 설정했는데, 갭 하락으로 지정가를 순식간에 건너뛰어 체결이 안 된 경우입니다. 손절은 대체로 스탑-마켓 계열로 체결 확실성을 확보하는 게 안전합니다.
"그리드 봇 수수료가 수익을 다 먹어요"
촘촘히 사고파는 그리드가 매번 테이커(시장가처럼 즉시 체결)로 나가 수수료가 쌓인 경우. post-only(메이커 전용) 지정가로 바꿔 수수료 구조를 개선하는 접근이 있습니다(거래소 지원·수수료율은 공식 확인).
"같은 종목을 두 번 샀어요"
네트워크 지연으로 주문 응답을 못 받은 봇이 재시도하며 이중 주문을 낸 경우. 주문마다 고유 식별값을 붙이고 체결·잔량을 재조회해 상태를 맞추는 장치가 없으면 반복됩니다.
"봇이 지정가를 걸었다는데 한 주도 안 사졌어요"
원하는 가격에 지정가를 걸긴 했지만, 그 가격에 이미 대기 중인 주문이 많아 대기줄 뒤에 섰거나(가격-시간 우선), 시세가 그 값을 살짝만 스치고 지나가 물량이 소화되지 않은 경우입니다. "지정가를 걸었다 = 샀다"가 아니라는 걸 봇이 인지하고, 일정 시간 미체결이면 값을 조정하거나 전환하는 규칙이 필요합니다.
13. 흔한 오해 5가지
| 오해 | 사실 |
|---|---|
| "시장가가 제일 확실하니 무조건 좋다" | 체결은 확실하나 가격이 불리해질 수 있음. 잦은 매매·급변장에선 오히려 독 |
| "지정가는 손해 안 보니 항상 안전" | 체결 자체가 안 될 수 있어, 손절·추세 진입에선 전략을 망칠 수 있음 |
| "주문 유형은 코인·주식 다 똑같다" | 국내주식 절충형(조건부·최유리)·코인 옵션 플래그(post-only 등) 등 시장마다 다름 |
| "봇이 알아서 최적 주문을 고른다" | 봇은 지시한 대로만 냄. 주문 유형은 사람이 설계 단계에서 정해야 함 |
| "주문만 보내면 끝" | 체결 확인·미체결 처리·상태 동기화까지가 한 세트. 이게 진짜 어려운 부분 |
| "TWAP·아이스버그도 주문 유형이다" | 그건 '큰 주문을 나눠 내는 집행 방식'. 안에서는 결국 시장가·지정가를 여러 번 냄 |
14. 한 장 요약
① 모든 주문 유형은 "체결 확실성 vs 체결 가격"의 맞바꿈이다. ② 뿌리는 시장가·지정가 둘, 나머지는 변주다. ③ 국내주식엔 조건부·최유리·최우선지정가, 코인엔 post-only·reduce-only·스탑 같은 특유 옵션이 있다. ④ 손절은 체결 확실성(스탑-마켓) 우선이 일반적이다. ⑤ 잘 만든 봇은 진입·익절·손절에 서로 다른 주문을 쓰고, 미체결·중복까지 관리한다. ⑥ 그래서 주문 유형은 명세서 필수 항목이다.
주문 유형은 화려하지 않지만, 전략의 아이디어를 실제 손익으로 번역하는 마지막 배관입니다. 이 배관이 새면 아무리 좋은 전략도 물이 다 빠져나갑니다. 반대로 여기만 제대로 잡아도, 이미 가진 전략의 실전 성과가 눈에 띄게 안정됩니다. 화려한 지표를 하나 더 얹는 것보다, 지금 쓰는 전략이 "어떤 주문으로, 어떻게 체결되고 있는지"를 점검하는 편이 훨씬 큰 차이를 만드는 경우가 많습니다.
⚠️ 안내 — 이 글은 자동매매 주문 방식을 이해하기 위한 교육용 정리입니다. 특정 종목·방향·수익을 권하거나 예측하지 않으며, 개별 주문 유형의 지원 여부·정확한 동작·수수료는 거래소·증권사 공식 문서 기준이 우선합니다. 과거의 체결 방식이 미래의 결과를 보장하지 않으며, 특정 전략의 수익을 약속하지 않습니다. 실거래 전 반드시 소액·모의로 실제 주문 동작을 눈으로 검증하세요.
자주 묻는 질문
자동매매 봇은 기본적으로 어떤 주문으로 사고파나요?
정답은 없고 '설계하기 나름'입니다. 봇은 지시한 주문 유형으로만 냅니다. 추세 전략은 시장가, 그리드·역추세는 지정가를 흔히 쓰며, 제작 단계에서 상황별로 못 박아 둡니다. 그래서 주문 유형은 명세서 필수 항목입니다.
시장가와 지정가, 무엇을 써야 하나요?
'확실성 vs 가격'의 맞바꿈입니다. 지금 반드시 들어가야 하면 시장가, 가격을 지키는 게 우선이면 지정가. 급변장의 무심한 시장가는 슬리피지의 주범이니 주의하세요.
조건부지정가·최유리지정가는 무엇인가요?
국내주식(KRX)의 지정가와 시장가 중간 형태 주문입니다. 조건부지정가는 미체결 시 종가에 시장가 전환, 최유리지정가는 반대편 최우선호가로 즉시 체결을 노리는 방식으로 알려져 있습니다. 증권사·API마다 다르니 공식 문서 확인이 필수입니다.
손절 주문은 시장가로 하나요, 지정가로 하나요?
봇의 생사를 가르는 선택입니다. 원금 보호가 목적인 손절은 대체로 체결 확실성(스탑-마켓 계열)을 우선합니다. 스탑-리밋은 급락에 지정가를 건너뛰면 손절이 불발될 수 있습니다.
post-only, reduce-only는 무슨 뜻인가요?
주로 코인 거래소 옵션입니다. post-only는 메이커로만 체결(즉시 체결이면 취소)해 수수료를 아끼고, reduce-only는 포지션 감축 방향으로만 체결해 손절이 반대 포지션을 새로 여는 사고를 막습니다. 거래소별 지원은 공식 문서 확인.
주문 유형을 잘못 고르면 어떤 일이 생기나요?
백테스트는 좋은데 실전이 무너지는 대표 원인입니다. 지정가 가정으로 검증하고 실전은 시장가로 던지면 슬리피지가 쌓이고, 급한 전략을 지정가로 걸면 기회를 놓칩니다. 주문 유형과 미체결 처리까지 함께 정해야 성패가 갈립니다.
"어떤 주문으로 사고팔지"까지 설계해 드립니다
"무엇을 언제 사고팔지"만 알려주시면, 진입·익절·손절 주문 유형과 미체결·안전장치까지 포함해 봇을 맞춤 제작해 드립니다. 코딩을 몰라도 괜찮습니다.
24시간 빠른 답변 가능합니다.