현재가가 10,000원인데 왜 내 주문은 체결되지 않을까

Quick Summary

현재가는 방금 끝난 거래의 가격이지 다음 체결을 보장하는 가격이 아니다. 10,000원 주문 하나로 가격 우선, 시간 우선, 부분 체결, 시장가 슬리피지, 단일가매매와 KRX·NXT 주문 경로를 설명한다.

현재가와 같은 10,000원에 샀는데 체결 알림은 오지 않았다

오전 10시 12분, 한 주식의 현재가는 10,000원이다. 매수 버튼을 누르고 가격 칸에 똑같이 10,000원을 넣었다. 수량은 100주다. 주문 확인을 누르면 곧바로 체결 알림이 올 것 같다.

그런데 30초가 지나도 주문 상태는 미체결 100주다. 그사이 현재가는 여전히 10,000원이다. 가격을 잘못 입력한 것도 아니고 거래가 정지된 것도 아니다. 왜 내 주문만 멈춘 것처럼 보일까.

화면의 숫자를 한 줄 더 펼치면 이유가 드러난다.

  • 현재가: 10,000원
  • 최우선매수호가: 10,000원
  • 최우선매도호가: 10,010원
  • 내가 낸 주문: 10,000원 지정가 매수 100주

현재가 10,000원은 방금 끝난 거래의 가격이다. 지금 시장에 남아 있는 매도자 가운데 가장 낮은 가격은 10,010원이다. 나는 10,000원까지만 내겠다고 주문했으므로, 10,010원에 팔겠다는 사람과 아직 가격이 만나지 않았다.

마지막 체결은 뒤에 남고 새 매수 주문은 한 칸 높은 매도호가 아래에서 기다리는 장면

이 장면은 주문 체결을 이해하는 가장 중요한 출발점이다.

현재가는 다음에 살 수 있는 가격표가 아니라, 가장 최근에 끝난 거래의 영수증이다.

아래 계산은 아주 단순하지만 핵심을 정확히 보여준다. 지정가 매수가 즉시 체결되려면 내가 허용한 최고 가격이 지금 가장 싼 매도호가 이상이어야 한다.

last_trade = 10_000
best_ask = 10_010
buy_limit = 10_000

can_fill_now = buy_limit >= best_ask
print(can_fill_now)  # False

False인 이유는 현재가와 내 주문가격이 달라서가 아니다. 내 주문가격과 반대편 최우선호가가 만나지 않았기 때문이다. 한국거래소의 지정가 주문 설명도 지정가 주문은 정한 가격 또는 그보다 유리한 가격에서 거래되며, 조건에 맞는 반대 주문이 없으면 체결되지 않을 수 있다고 설명한다.

그러므로 “현재가와 같은 가격에 주문했는데 왜 안 사졌지?”라는 질문은 “마지막 거래는 얼마였나?”가 아니라 “지금 가장 싸게 팔겠다는 주문은 얼마인가?”로 바꿔야 한다.

이제 현재가, 매수호가, 매도호가가 각각 어느 시간을 가리키는지 조금 더 정확히 나눠 보자.

현재가는 가격표가 아니라 마지막 거래의 영수증이다

마트의 가격표는 물건에 붙어 있는 고정 조건이다. 10,000원이라고 쓰여 있으면 손님은 10,000원을 내고 가져간다. 주식시장의 현재가는 다르다. 매수자와 매도자가 조금 전 합의해 실제로 끝낸 거래의 기록이다.

한국거래소의 주문 유형 안내는 최근 체결가격을 가장 최근에 성립한 거래의 가격으로 설명한다. 당일 거래가 아직 한 건도 없다면 전일 종가가 화면의 기준 가격으로 쓰일 수 있다. 어느 쪽이든 “다음 주문도 이 가격에 체결된다”는 약속은 아니다.

현재가가 10,000원인 순간에 세 가격은 이렇게 서로 다른 질문에 답한다.

화면의 숫자시간
현재가 10,000원가장 최근 거래가 끝난 가격과거
최우선매도호가 10,010원지금 가장 싸게 팔겠다는 가격현재의 매도 의사
최우선매수호가 10,000원지금 가장 비싸게 사겠다는 가격현재의 매수 의사

따라서 매수자가 지금 바로 1주를 사고 싶다면 우선 10,010원 매도 주문과 만나야 한다. 반대로 보유자가 지금 바로 1주를 팔고 싶다면 10,000원 매수 주문과 만나야 한다. 두 가격의 차이인 10원이 스프레드다.

스프레드는 매수자와 매도자가 아직 합의하지 못한 간격이다. 거래가 활발하고 호가가 촘촘한 종목은 이 간격이 작을 때가 많다. 거래가 드물거나 불확실성이 큰 종목은 간격이 벌어질 수 있다. 다만 스프레드가 작다고 큰 주문도 같은 가격에 모두 체결된다는 뜻은 아니다. 각 가격에 쌓인 수량, 즉 잔량이 충분해야 한다.

이 차이는 차트와도 연결된다. 기술적 분석이란 무엇인가에서 보는 봉과 거래량은 이미 끝난 체결의 흔적이다. 호가창은 아직 끝나지 않은 주문을 보여준다. 차트가 과거의 발자국이라면 호가창은 지금 문 앞에 서 있는 줄에 가깝다.

또 현재가 10,000원은 회사 전체가 10,000원이라는 뜻도 아니다. 주가와 시가총액은 왜 다를까에서 나눠 본 것처럼 현재가는 주식 한 주의 마지막 체결가격이고, 기업 전체의 시장가치는 그 가격에 전체 주식 수를 연결해 계산한다.

다음 체결 후보를 알려면 이제 매수와 매도 주문이 쌓여 있는 가격 사다리를 읽어야 한다.

호가창은 매수와 매도가 마주 보는 가격 사다리다

호가는 “이 가격이라면 몇 주를 사고 싶다” 또는 “이 가격이라면 몇 주를 팔고 싶다”는 주문 의사다. 아직 거래는 아니다. 서로 맞는 주문이 만나기 전까지는 취소되거나 가격과 수량이 바뀔 수 있다.

매도 주문은 낮은 가격이 유리하다. 10,010원에 팔겠다는 사람과 10,020원에 팔겠다는 사람이 함께 있으면 매수자는 10,010원 주문을 먼저 만난다. 반대로 매수 주문은 높은 가격이 유리하다. 10,000원에 사겠다는 사람은 9,990원에 사겠다는 사람보다 먼저 매도자를 만난다.

현재가와 최우선호가는 서로 다른 질문에 답한다.

현재가 10,000원과 최우선매도호가 10,010원을 나눈 호가 사다리

이 예시의 매도호가는 다음과 같다.

  • 10,010원: 200주
  • 10,020원: 200주
  • 10,030원: 100주

매수 쪽에는 10,000원에 300주가 먼저 기다리고 있다. 내가 새로 낸 100주까지 더해지면 화면의 10,000원 매수잔량은 400주처럼 보일 수 있다. 그러나 이 400주는 하나의 주문이 아니다. 여러 사람이 서로 다른 시각에 낸 주문을 같은 가격별로 합한 값이다.

예시가 10,000원 다음에 10,010원을 쓴 것도 임의가 아니다. 한국거래소의 현행 호가단위 안내에 따르면 10,000원 이상 20,000원 미만 구간의 호가단위는 10원이다. 10,000원짜리 주식을 KRX에 10,003원처럼 주문할 수 없는 이유다.

한국거래소가 접속매매 중 공개하는 정보는 매수와 매도 각각 최우선부터 연속 10단계의 가격과 수량, 그리고 양쪽 총잔량이다. 이 사실에는 두 가지 한계가 숨어 있다.

첫째, 화면의 10단계는 시장 전체 가격대의 전부가 아니다. 더 멀리 떨어진 가격에 있는 주문은 화면 밖에 있다. 둘째, 증권사 앱은 KRX와 NXT 호가를 합치거나 나누는 등 자체 표시방식을 쓸 수 있다. 같은 종목이라도 어떤 화면을 보고 있는지에 따라 잔량의 범위가 다를 수 있다.

호가창을 볼 때는 가격 간격과 잔량을 함께 봐야 한다.

  • 스프레드: 최우선매수호가와 최우선매도호가의 차이
  • 깊이: 여러 가격대에 쌓인 주문수량
  • 내 주문 크기: 내 수량이 가까운 반대편 잔량에 비해 얼마나 큰지

가격 사다리의 어느 칸에서 만날지는 가격 우선 원칙이 정한다. 그런데 같은 10,000원 칸에 주문이 여러 개 있으면 누가 먼저 체결될까. 여기서 시간 우선이 등장한다.

같은 10,000원에서는 먼저 온 주문이 먼저 나간다

한국거래소 접속매매 체결원칙은 두 단계로 읽으면 쉽다.

  1. 가격 우선: 더 낮은 매도호가와 더 높은 매수호가가 먼저다.
  2. 시간 우선: 가격이 같으면 거래소에 먼저 접수된 주문이 먼저다.

가격 우선이 어느 층으로 갈지를 정하고, 시간 우선이 같은 층 안의 줄 순서를 정한다.

더 유리한 가격 레일과 같은 가격의 선착순 대기열

이제 10,000원 매수 대기열에 내 주문을 실제로 넣어 보자.

내가 주문하기 전에 다른 투자자들의 매수 300주가 먼저 접수돼 있었다. 나는 그 뒤에 100주를 넣었다. 이때 누군가 10,000원에 250주를 팔면 어떻게 될까.

선행 300주 뒤에 선 내 주문이 두 번의 매도로 50주 부분 체결되는 과정

첫 250주는 내 앞의 300주부터 체결한다. 내 앞에는 50주가 남고 내 주문은 한 주도 체결되지 않는다. 이어서 100주 매도가 들어오면 앞의 50주가 먼저 사라지고, 남은 50주가 내 주문과 만난다.

결과는 체결 50주, 미체결 50주다. 주문 한 번이 여러 차례로 나뉘어 체결되는 부분 체결은 오류가 아니다. 가격과 시간 우선, 그리고 들어온 반대 주문수량이 만든 자연스러운 결과다.

def match_sell(ahead, my_remaining, sell_qty):
    ahead_fill = min(ahead, sell_qty)
    ahead -= ahead_fill
    sell_qty -= ahead_fill

    my_fill = min(my_remaining, sell_qty)
    my_remaining -= my_fill
    return ahead, my_remaining, my_fill

ahead, my_remaining, first_fill = match_sell(300, 100, 250)
ahead, my_remaining, second_fill = match_sell(ahead, my_remaining, 100)

print(first_fill, second_fill, my_remaining)  # 0 50 50

여기서 화면의 잔량 감소를 곧바로 체결로 읽으면 안 된다. 앞의 300주 가운데 누군가 주문을 취소하면 거래량은 늘지 않아도 내 앞 수량은 줄어든다. 누군가 더 높은 가격으로 주문을 고쳐도 10,000원 줄에서 빠져나간다. 앱이 정확한 개인별 대기 순번을 보여주지 않는다면 가격대 전체 잔량만으로 내 순서를 완벽히 복원하기도 어렵다.

체결가격에는 먼저 들어온 주문도 영향을 준다. 예를 들어 10,010원 매도 주문이 먼저 기다리는 상황에서 10,020원 매수가 들어와 가격이 교차하면, 거래는 먼저 있던 10,010원 매도호가를 기준으로 성립한다. 공격적으로 높은 가격을 썼다고 무조건 그 높은 가격을 모두 지불하는 것이 아니라, 먼저 기다리던 상대 주문가격 또는 그보다 유리한 가격에서 체결될 수 있다.

내 줄이 너무 길어 보이면 가격을 높여 주문을 고치고 싶어진다. 그런데 정정과 취소는 비슷한 버튼처럼 보여도 시간 우선순위에 미치는 효과가 다르다.

가격을 고치면 줄을 다시 서고 일부 취소는 자리를 지킨다

10,000원 매수 100주를 넣고 기다리다가 10,010원으로 가격을 높였다고 하자. 가격 우선만 보면 더 유리한 칸으로 이동한다. 최우선매도호가가 여전히 10,010원이고 잔량이 남아 있다면 바로 체결될 가능성도 생긴다.

하지만 새 가격에도 이미 여러 매수 주문이 기다리고 있는데 당장 매도 주문과 만나지 못했다면, 같은 가격 안에서 쓰는 시간표는 정정 주문이 거래소에 접수된 시각으로 바뀐다. 원래 10,000원 주문을 낸 시각을 새 가격 줄까지 들고 갈 수는 없다.

반면 수량 일부만 취소하는 경우는 다르다. 10,000원 매수 100주 가운데 30주를 취소해 70주만 남기면, 남은 70주는 원래 주문의 접수시각을 유지한다. 한국거래소의 호가 정정과 취소 안내가 두 경우를 구분한다.

두 버튼은 비슷해 보여도 시간 우선순위에 미치는 효과가 다르다.

가격 정정은 새 시간표를 받고 부분 취소 뒤 남은 수량은 기존 시간을 유지하는 비교

정리하면 이렇다.

행동주문 결과시간 우선순위
가격 또는 주문 유형 정정새 조건으로 이동정정 접수시각으로 변경
일부 수량 취소남은 수량만 유지원래 접수시각 유지
전량 취소 뒤 새 주문기존 주문 소멸새 주문 접수시각 사용

그렇다고 10,010원으로 고치기만 하면 반드시 체결되는 것은 아니다. 내가 정정 버튼을 누른 뒤 주문이 거래소에 도착하는 짧은 사이에도 10,010원 매도잔량이 다른 주문과 먼저 체결되거나 취소될 수 있다. 화면은 연속해서 바뀌고 주문 전송에도 시간이 걸린다.

결국 지정가는 “이 가격보다 불리하면 거래하지 않겠다”는 가격 통제권을 주는 대신 기다릴 가능성을 남긴다. 기다리기보다 즉시 체결을 우선하면 시장가 주문을 선택할 수 있다. 이때 포기하는 것은 단순히 줄의 위치가 아니라 최종 체결가격의 상한이다.

시장가 주문은 가격이 아니라 속도를 산다

시장가 주문을 현재가로 주문이라고 생각하면 위험하다. 시장가 매수는 가격을 지정하지 않고 지금 체결 가능한 매도호가를 낮은 가격부터 받아들이는 주문이다. 한국거래소의 시장가 설명은 반대편 주문수량이 충분하지 않으면 가격이 크게 움직일 수 있다고 경고한다.

고정된 교육용 호가창에서 500주 시장가 매수를 계산해 보자.

  • 10,010원에 200주
  • 10,020원에 200주
  • 10,030원에 100주

첫 200주는 가장 싼 10,010원 매도호가를 가져간다. 하지만 아직 300주가 남았다. 다음 200주는 10,020원, 마지막 100주는 10,030원에서 체결된다.

큰 시장가 매수 주문이 세 층의 매도 유동성을 낮은 가격부터 소진하는 장면

500주 시장가 매수의 가격대별 체결수량과 평균 체결가격

총 체결금액과 평균가격은 다음과 같다.

fills = [
    (10_010, 200),
    (10_020, 200),
    (10_030, 100),
]

total_value = sum(price * qty for price, qty in fills)
total_qty = sum(qty for _, qty in fills)
average_price = total_value / total_qty

print(total_value)    # 5,009,000
print(average_price)  # 10,018

화면을 봤을 때의 최우선매도호가는 10,010원이었지만 평균 체결가격은 10,018원이다. 주당 평균 8원, 500주 전체로는 4,000원이 첫 호가 기준 계산보다 더 들었다. 이처럼 예상한 기준 가격과 실제 평균 체결가격 사이에 생기는 차이를 슬리피지라고 부른다.

슬리피지는 시장가 주문에만 생기는 신비한 수수료가 아니다. 주문수량이 가까운 호가의 유동성보다 클 때 여러 가격을 통과한 결과다. 다음 상황에서 커지기 쉽다.

  • 스프레드가 넓다.
  • 최우선호가 잔량이 적다.
  • 내 주문수량이 평소 거래량에 비해 크다.
  • 뉴스 직후라 취소와 신규 주문이 빠르게 바뀐다.
  • 장 시작과 종료 무렵처럼 주문이 몰린다.

이 계산에도 한계가 있다. 실제 시장에서는 내가 주문을 보내는 동안 다른 주문이 먼저 체결되고 새로운 주문이 들어온다. 화면에 200주가 보였다는 사실은 내가 그 200주를 모두 가져간다는 예약증이 아니다. 시장가 주문은 체결 속도를 높이지만 특정 가격이나 전량 체결을 무조건 보장하는 주문은 아니다. 거래정지, 가격제한, 반대 주문 부족 같은 조건도 남아 있다.

지금까지는 반대 주문이 들어올 때마다 한 건씩 연속해서 체결되는 접속매매를 봤다. 그러나 오전 9시의 첫 가격과 오후 3시 30분의 종가는 같은 방식으로 정해지지 않는다.

오전 9시와 오후 3시 30분의 가격은 주문을 모아 한 번에 정한다

한국 주식시장에서 흔히 동시호가라고 부르는 구간의 공식 원리는 단일가매매다. 여러 주문을 일정 시간 모은 뒤 가장 많은 수량이 체결될 수 있는 하나의 가격을 정해 한꺼번에 거래한다.

한국거래소의 단일가매매 설명에 따르면 개장가와 종가를 정할 때, 거래정지나 서킷브레이커 뒤 거래를 재개할 때 이 방식이 쓰인다. 정규시장 전체 운영시간은 09시부터 15시 30분이지만, 첫 가격을 위한 주문은 08시 30분부터 미리 접수된다.

여러 매수와 매도 주문이 중앙 청산실에 모였다가 한 출구로 나오는 단일가 장면

오전 9시의 첫 가격은 직전 주문 하나가 아니라 모인 주문 전체에서 나온다.

반대 주문이 올 때마다 체결하는 접속매매와 주문을 모아 한 가격을 정하는 단일가매매

접속매매와 단일가매매의 차이는 질문을 바꾸면 선명하다.

  • 접속매매: 지금 반대편 최우선호가가 얼마이며 같은 가격에서 내 순서는 어디인가?
  • 단일가매매: 모인 매수와 매도 주문이 가장 많이 만날 수 있는 가격은 얼마인가?

단일가매매에서도 가격 우선과 시간 우선은 일반적으로 적용된다. 동시호가라는 별명 때문에 모든 주문의 접수시각이 똑같이 취급된다고 생각하기 쉽지만 그렇지 않다. 다만 개장가나 거래 재개가격이 상한가 또는 하한가로 정해지는 특수한 경우에는 수량 우선 배분 예외가 있다.

또 예상체결가격이 종료 직전에 급격히 움직이는 특정 상황에서는 거래소가 예정 시각 뒤 최대 30초 안에서 임의로 종료시각을 정할 수 있다. 화면의 시계가 09시 또는 15시 30분에 닿았는데 체결이 몇 초 늦어 보이는 이유 가운데 하나다.

단일가 구간에서는 현재가보다 예상체결가격과 예상체결수량이 더 직접적인 정보다. 아직 최종 가격이 정해지기 전이므로 예상값은 주문 취소와 정정에 따라 계속 바뀔 수 있다. 예상체결가를 확정 개장가나 종가처럼 믿으면 안 된다.

급변장에는 여기에 거래제도 한 층이 더 붙을 수 있다. 사이드카가 발동되면 주식 거래가 모두 멈출까에서 본 것처럼 특정 프로그램 주문의 효력이 멈추거나 시장 전체의 거래 방식이 달라지면 평소 호가창과 같은 속도로 체결되지 않을 수 있다.

시간대가 가격 결정법을 바꾼다면, 2025년 이후에는 주문이 도착하는 시장 자체도 확인해야 한다.

같은 종목의 주문도 KRX와 NXT 가운데 다른 길을 갈 수 있다

오랫동안 국내 상장주식 주문은 사실상 한국거래소 KRX 한곳을 기준으로 설명해도 큰 틀에서 충분했다. 2025년 3월 4일 대체거래소 NXT가 출범하면서 같은 종목이 KRX와 NXT 두 시장에서 거래될 수 있는 복수시장 구조가 시작됐다.

금융위원회의 대체거래소 출범 안내는 투자자가 주문시장을 직접 선택할 수 있고, 별도로 선택하지 않으면 증권사의 스마트주문라우팅 시스템이 최선집행기준에 따라 주문을 배분한다고 설명한다. 앱에 따라 SOR, 스마트주문, 통합주문 같은 이름으로 보일 수 있다.

하나의 주문이 가격, 수량과 비용을 비교하는 라우터를 지나 두 거래시장 중 하나로 향하는 장면

여기서 가장 싼 가격 한 줄만 보고 무조건 그 시장으로 보낸다고 이해하면 부족하다. 주문이 즉시 반대편 호가와 만나는지, 아니면 호가창에 남아 기다리는지에 따라 판단 요소가 달라질 수 있다.

  • 즉시 체결을 시도하는 주문: 가격, 체결 가능한 수량, 수수료와 비용을 함께 비교한다.
  • 호가창에 남는 주문: 남아 있는 수량, 스프레드, 거래량 등 체결 가능성을 함께 볼 수 있다.

금융위원회의 최선집행의무 설명은 증권사가 이런 기준을 사전에 마련하고 공개하도록 한 취지를 설명한다. 같은 10,000원 지정가 매수라도 특정 시장을 직접 고른 주문과 SOR에 맡긴 주문은 도착하는 호가창이 다를 수 있다.

이 변화는 호가창을 볼 때 세 가지 질문을 추가한다.

  1. 지금 화면은 KRX 호가인가, NXT 호가인가, 두 시장을 합친 통합호가인가?
  2. 내 주문은 특정 시장으로 지정됐나, SOR가 경로를 골랐나?
  3. 체결 확인서에는 실제 체결시장이 어디로 표시됐나?

증권사마다 최선집행기준과 화면 이름, 수수료 표시가 다를 수 있다. 그러므로 주문 경로가 중요한 투자자는 앱의 주문 설정과 증권사가 공개한 최선집행기준을 직접 확인해야 한다. SOR를 쓰면 언제나 최저가에 전량 체결된다는 식의 보장은 없다. 주문이 도착하는 동안 호가와 수량은 계속 달라진다.

가격 우선과 시간 우선은 사라진 것이 아니다. 먼저 어느 시장으로 주문이 갈지 정해지고, 그 시장 안에서 해당 체결 규칙이 적용된다고 이해하면 된다. 현대의 체결 과정에는 가격과 시간 외에 경로가 하나 더 생긴 셈이다.

이제 한 화면의 커다란 잔량을 강한 지지나 저항으로 단정하기 어려운 이유도 분명해진다.

큰 호가벽은 약속이 아니라 취소 가능한 의사표시다

호가창에서 10,000원 매수잔량 10만 주가 보이면 든든한 벽처럼 느껴진다. 가격이 내려와도 이 물량이 모두 받아 줄 것 같아 10,000원은 지지선이라고 부르기도 한다.

그러나 호가잔량은 체결 계약이 아니다. 거래가 성립하기 전까지 주문자는 취소하거나 가격과 수량을 정정할 수 있다. 가격이 가까워지기 전에 10만 주가 사라질 수도 있고, 반대로 화면 밖 가격이나 다른 시장에 있던 주문이 새로 나타날 수도 있다.

호가벽을 미래 방향의 약속으로 읽기 어려운 이유는 네 가지다.

  • 보이는 잔량은 미체결 주문이라 취소와 정정이 가능하다.
  • KRX가 공개하는 상하 10단계 밖의 주문은 한 화면에 보이지 않는다.
  • 같은 종목 주문이 KRX와 NXT에 나뉠 수 있다.
  • 다른 참여자의 신규 주문과 체결이 계속 순서를 바꾼다.

그렇다고 호가창이 쓸모없다는 뜻은 아니다. 목적을 예측에서 실행으로 바꾸면 매우 유용하다.

  • 스프레드가 넓어 즉시 체결 비용이 큰지 본다.
  • 최우선호가 잔량이 내 주문수량보다 작은지 본다.
  • 지정가 주문이 대기할 가능성과 시장가 주문이 여러 가격을 지날 가능성을 가늠한다.
  • 체결 뒤 평균가격이 예상과 달랐던 이유를 복기한다.

기술적 투자란 무엇을 보는가에서 가격 지표를 맥락 없이 매수와 매도 신호로 만들 수 없다고 했듯, 호가잔량 하나도 미래 가격 공식으로 만들 수 없다. 호가창은 지금의 유동성 상태를 보여주는 사진이지 다음 장면의 대본이 아니다.

체결된 거래량과 투자자별 수급도 호가잔량과 구분해야 한다. 수급이란 무엇인가: 개인, 기관, 외국인에서 보는 순매수는 실제 체결을 투자자 유형별로 집계한 결과다. 호가창의 매수잔량은 아직 체결되지 않은 주문 의사라서 개인, 기관, 외국인의 최종 순매수와 같은 값이 아니다.

이제 처음의 10,000원 주문으로 돌아가 보자. 다음 주문에서 필요한 것은 호가벽의 의도를 맞히는 기술이 아니라 어떤 규칙 아래 내 주문이 놓였는지 확인하는 순서다.

다음 주문에서 확인할 네 가지 체결 시나리오

1. 현재가는 10,000원인데 최우선매도호가는 10,010원이다

조건: 10,000원 지정가 매수 100주를 넣었다.

메커니즘: 현재가는 마지막 체결의 기록이다. 내가 허용한 최고 매수가격 10,000원과 현재 가장 낮은 매도호가 10,010원이 만나지 않는다.

예상 결과: 주문은 10,000원 매수 대기열에 남는다. 누군가 10,000원 이하로 팔거나 내가 10,010원 이상으로 가격을 고칠 때까지 미체결일 수 있다.

확인할 값: 최우선매도호가, 내 지정가격, 미체결수량, 10,000원 선행잔량을 본다.

이 설명이 틀리는 조건: 10,000원 이하의 새 매도 주문이 도착했거나 내가 가격을 10,010원 이상으로 정정했다면 단순 대기 시나리오는 끝난다.

2. 같은 10,000원에 내 앞 수량이 300주다

조건: 내 주문은 100주이고 250주 매도가 먼저 들어왔다.

메커니즘: 같은 가격에서는 먼저 접수된 300주가 우선한다. 첫 250주는 선행 주문과만 체결한다.

예상 결과: 내 체결은 0주이고 앞 수량은 50주가 된다. 다음 100주 매도가 오면 앞의 50주 뒤에 내 주문 50주가 부분 체결된다.

확인할 값: 같은 가격의 선행잔량 변화, 실제 체결량, 내 체결수량과 미체결수량을 함께 본다.

이 설명이 틀리는 조건: 선행 주문이 취소되거나 더 높은 가격으로 이동하면 내 차례는 거래량이 300주 쌓이기 전에도 앞당겨질 수 있다. 내가 가격을 정정해 다른 줄로 가도 계산은 달라진다.

3. 최우선매도 잔량은 200주인데 시장가로 500주를 산다

조건: 10,010원 200주, 10,020원 200주, 10,030원 100주가 매도호가에 있다.

메커니즘: 시장가 매수는 낮은 매도호가부터 잔량을 차례로 소진한다.

예상 결과: 총 5,009,000원이 들고 평균 체결가격은 10,018원이 된다. 화면의 첫 매도호가보다 평균 주당 8원이 높다.

확인할 값: 가까운 매도호가별 잔량, 내 주문수량, 예상 평균 체결가격, 체결 뒤 실제 평균가격을 본다.

이 설명이 틀리는 조건: 주문이 도착하기 전 다른 주문이 먼저 체결되거나 새 매도 주문이 들어오면 호가별 체결수량과 평균가격은 달라진다.

4. 개장 전이거나 주문이 KRX와 NXT 가운데 경로를 골라야 한다

조건: 개장가 또는 종가 단일가 구간이거나 증권사의 SOR를 사용한다.

메커니즘: 단일가매매는 주문을 모아 최대 수량이 체결되는 하나의 가격을 정한다. 복수시장에서는 가격, 수량, 비용과 체결 가능성 등을 고려해 주문 경로가 정해질 수 있다.

예상 결과: 접속매매 때의 한 줄 대기열만으로 체결가격과 시점을 설명할 수 없다. 예상체결가격 또는 주문이 전달된 시장을 함께 봐야 한다.

확인할 값: 현재 거래 세션, 예상체결가격과 수량, 주문 설정의 시장 선택, 체결 확인서의 실제 시장을 본다.

이 설명이 틀리는 조건: 정규장 접속매매 중이고 주문을 특정 시장으로 직접 지정했다면 그 시장의 실시간 반대편 호가와 내 우선순위가 다시 핵심이다.

처음의 질문에 대한 답은 한 문장으로 줄일 수 있다.

현재가 10,000원은 마지막 영수증이고, 내 다음 체결은 반대편 가격과 수량, 가격·시간 우선순위, 거래 세션과 주문 경로가 만든다.

호가창을 잘 읽는다는 것은 벽 뒤의 세력을 맞히는 일이 아니다. 내가 원하는 가격과 수량이 어느 시장의 어느 줄에 들어갔고, 즉시 체결을 위해 무엇을 포기해야 하는지 아는 일이다.


이 글은 특정 종목의 매수·매도를 권유하지 않습니다.

양질의 기업분석을 계속 공유하기 위해 노력하고 있습니다. 도움이 되셨다면 dartlab을 후원해주세요.

Buy Me A Coffee
같은 시리즈에서 이어 읽기
DartLab

같은 카테고리에서 더 읽기

DartLab은 투자이야기 카테고리 안에서 글이 서로 이어지도록 설계합니다. 다음 글로 넘어가며 구조와 맥락을 같이 쌓는 방식입니다.

DartLab Product

이 글의 판단을 실제 데이터 흐름으로 옮기기

DartLab은 전자공시를 읽는 법을 코드와 데이터로 연결하기 위해 만든 제품입니다. 사업보고서 텍스트, 재무 시계열, 정기보고서 데이터를 한 흐름에서 다루도록 설계했습니다.