주식 시가 결정 경매의 원리와 과정
오전 9시 30분 단일 교차 거래를 통해 공식 시가가 결정되는 원리와 첫 거래와의 차이점을 상세히 설명합니다.
시가 결정 경매는 동부 표준시 오전 9시 30분에 진행되는 단일 교차 거래이며, 각 주식의 공식 시가를 결정합니다. 장 시작 전, 상장 거래소는 시가로 표시된 모든 주문을 수집합니다. 이후 가장 많은 수량이 체결될 수 있는 단일 가격을 계산하며, 해당 주문 풀 전체를 한 번의 체결로 실행합니다. 이는 하루를 마감하는 종가 경매의 아침판과 같습니다. 아래의 모든 수치는 미국 주식 거래의 공적 기록인 통합 테이프(consolidated tape)에서 추출되었으며, 각 패널에는 정확한 SQL이 첨부되어 있습니다.
시가 경매란 무엇인가? 쉬운 정의
거래소는 오전 9시 30분에 단순히 가동을 시작하여 주문을 하나씩 체결시키지 않습니다. 야간 및 프리마켓(pre-market) 동안 상장 거래소는 개장 시 체결될 주문과 호가창에 남아 있는 적격 지정가 주문을 모읍니다. 그리고 개장 벨이 울리면 전체 주문 물량을 하나의 가격으로 단일 거래를 통해 체결시킵니다. 이 체결 결과에는 고유한 매매 조건 라벨(코드 17, "Market Center Opening Trade" — 마지막 패널의 영수증)이 붙으며, 해당 가격은 공식 시가가 됩니다. 이는 일일 가격 기록의 "시가"가 되며, "갭 상승(gapped up)" 및 "갭 하락(gapped down)"의 기준점이 됩니다. 경매와 연속 시장은 하나의 테이프(tape)로 연결되어 있으며, 개장 벨이 울릴 때 변하는 것은 체결 방식뿐입니다.
실거래 데이터 기반 시가 경매: SPY, AAPL, NVDA
아래 표는 2026년 7월 2일—검증된 전체 세션 데이터(다음 패널에서 확인 가능)—를 기준으로 SPY, AAPL, NVDA의 시가 경매(opening cross) 규모를 당일 전체 거래량과 비교합니다. "체결 거래량(Matched volume)"은 통합 거래량에 추가되는 주식 수만을 집계하며, 행정 메시지(매매 조건 15, 16, 38)는 모든 분모 계산에서 제외됩니다.
모든 수치 뒤에 숨겨진 정확한 SQL
SELECT
ticker,
round(toFloat64(maxIf(size, has(conditions, 17))) / 1e3, 1) AS auction_shares_k,
toFloat64(argMaxIf(price, (size, sip_timestamp), has(conditions, 17))) AS auction_price,
formatDateTime(toTimeZone(argMaxIf(sip_timestamp, (size, sip_timestamp), has(conditions, 17)), 'America/New_York'), '%H:%i:%S') AS auction_time_et,
countIf(has(conditions, 17)) AS opening_print_count,
countIf(has(conditions, 17) AND formatDateTime(toTimeZone(sip_timestamp, 'America/New_York'), '%H:%i:%S') = '09:30:00') AS open_prints_at_0930,
minIf(size, has(conditions, 17)) AS smallest_open_print_shares,
round(toFloat64(sumIf(size, NOT hasAny(conditions, [15, 16, 38]) AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) >= 570 AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) < 575)) / 1e3) AS first5_shares_k,
round(100 * toFloat64(maxIf(size, has(conditions, 17))) / toFloat64(sumIf(size, NOT hasAny(conditions, [15, 16, 38]) AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) >= 570 AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) < 575)), 1) AS auction_pct_of_first5,
round(100 * toFloat64(maxIf(size, has(conditions, 17))) / toFloat64(sumIf(size, NOT hasAny(conditions, [15, 16, 38]))), 2) AS auction_pct_of_day,
round(toFloat64(maxIf(size, has(conditions, 8))) / 1e6, 2) AS closing_auction_shares_m,
round(toFloat64(maxIf(size, has(conditions, 8))) / toFloat64(maxIf(size, has(conditions, 17))), 1) AS close_vs_open_x
FROM global_markets.stocks_trades
WHERE ticker IN ('SPY', 'AAPL', 'NVDA')
AND sip_timestamp >= '2026-07-02 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'
GROUP BY ticker
ORDER BY indexOf(['SPY', 'AAPL', 'NVDA'], ticker)AAPL 행을 먼저 확인하십시오. $294.1 가격에 323.3 thousand 주가 체결되었으며, 시간은 09:30:00 ET입니다. NVDA의 경매 규모는 690 thousand 주였고, SPY는 122 thousand 주였습니다. 시가 경매 거래량은 세션 시작 후 첫 5분 동안 체결된 전체 AAPL 주식 수(1856 thousand 주)의 17.4%에 해당하며, NVDA는 13.8%, SPY는 9.4%를 차지했습니다. 그러나 당일 전체 거래량 대비 비중은 각각 0.43%, 0.48%, 0.21%로 0.5% 미만이었습니다.
마지막 두 열은 양 끝단을 나타냅니다. 같은 날 AAPL의 종가 경매(closing cross)는 10.89 million 주가 체결되었으며, 이는 시가 대비 33.7 배에 달합니다. NVDA는 25.2 배, SPY는 13.5 배였습니다. 인덱스 펀드(Index funds)와 벤치마크 기반 데스크는 공식 종가로 거래하며, 이러한 흐름은 오후 4시 경매에 집중됩니다. 오전에는 이와 대등한 거래가 존재하지 않습니다. 종가 경매는 당일 가장 큰 규모의 거래이며, 시가 경매는 공식적인 거래일이 시작되는 지점입니다.
공식 시가가 첫 거래 가격과 다를 수 있는 이유는 무엇인가?
경매가 시작될 때 주식은 대개 이미 몇 시간 동안 거래된 상태입니다. 장전 거래(pre-market trading)는 동부 표준시 기준 이른 새벽 4시부터 시작되지만, 이 거래 기록들은 공식 시가를 결정하지 않습니다. 아래의 한 줄 영수증은 2026년 7월 1일부터 2일까지의 AAPL 데이터를 다루며 세션 확인을 포함합니다. SPY는 7월 2일에 정확히 390개의 정규 세션 분봉(minute bars)을 기록했습니다. 이는 가정이 아닌 검증된 전체 세션 데이터입니다.
모든 수치 뒤에 숨겨진 정확한 SQL
WITH
(
SELECT countIf(window_start >= toDateTime('2026-07-02 09:30:00', 'America/New_York') AND window_start < toDateTime('2026-07-02 16:00:00', 'America/New_York'))
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-07-02 00:00:00', 'America/New_York') AND window_start < toDateTime('2026-07-03 00:00:00', 'America/New_York')
) AS bars_jul02,
(
SELECT argMax(sip_timestamp, (size, sip_timestamp))
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL' AND sip_timestamp >= '2026-07-02 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00' AND has(conditions, 17)
) AS auction_ts,
(
SELECT argMax(exchange, (size, sip_timestamp))
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL' AND sip_timestamp >= '2026-07-02 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00' AND has(conditions, 17)
) AS listing_exchange
SELECT
bars_jul02 AS spy_session_bars_jul02,
countIf(has(conditions, 8) AND sip_timestamp < '2026-07-02 00:00:00') AS jul01_close_print_count,
toFloat64(argMaxIf(price, (size, sip_timestamp), has(conditions, 8) AND sip_timestamp < '2026-07-02 00:00:00')) AS prior_close_price,
countIf(has(conditions, 17) AND sip_timestamp >= '2026-07-02 00:00:00') AS opening_print_count,
toFloat64(argMaxIf(price, (size, sip_timestamp), has(conditions, 17) AND sip_timestamp >= '2026-07-02 00:00:00')) AS auction_price,
formatDateTime(toTimeZone(auction_ts, 'America/New_York'), '%H:%i:%S.%f') AS auction_et,
round(100 * (toFloat64(argMaxIf(price, (size, sip_timestamp), has(conditions, 17) AND sip_timestamp >= '2026-07-02 00:00:00')) - toFloat64(argMaxIf(price, (size, sip_timestamp), has(conditions, 8) AND sip_timestamp < '2026-07-02 00:00:00'))) / toFloat64(argMaxIf(price, (size, sip_timestamp), has(conditions, 8) AND sip_timestamp < '2026-07-02 00:00:00')), 2) AS overnight_gap_pct,
formatDateTime(toTimeZone(minIf(sip_timestamp, sip_timestamp >= '2026-07-02 00:00:00' AND NOT hasAny(conditions, [15, 16, 38])), 'America/New_York'), '%H:%i:%S') AS first_trade_et,
toFloat64(argMinIf(price, (sip_timestamp, sequence_number), sip_timestamp >= '2026-07-02 00:00:00' AND NOT hasAny(conditions, [15, 16, 38]))) AS first_trade_price,
countIf(sip_timestamp >= '2026-07-02 00:00:00' AND sip_timestamp < auction_ts AND NOT hasAny(conditions, [15, 16, 38])) AS trades_before_official_open,
countIf(sip_timestamp >= toDateTime('2026-07-02 09:30:00', 'America/New_York') AND sip_timestamp < auction_ts AND NOT hasAny(conditions, [15, 16, 38])) AS bell_to_cross_trades,
countIf(has(conditions, 16) AND sip_timestamp >= '2026-07-02 00:00:00') AS official_open_msgs,
countIf(has(conditions, 16) AND sip_timestamp >= '2026-07-02 00:00:00' AND exchange = listing_exchange) AS listing_venue_open_msgs,
round(toFloat64(anyIf(price, has(conditions, 16) AND sip_timestamp >= '2026-07-02 00:00:00' AND exchange = listing_exchange)) - toFloat64(argMaxIf(price, (size, sip_timestamp), has(conditions, 17) AND sip_timestamp >= '2026-07-02 00:00:00')), 4) AS listing_open_msg_price_difference
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL' AND sip_timestamp >= '2026-07-01 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'AAPL의 7월 2일 첫 거래량 기록은 동부 표준시 04:00:00에 $296.1로 나타났습니다. 공식 시가는 동부 표준시 09:30:00.491313에 경매 가격이 $294.1로 기록될 때까지 존재하지 않았습니다. 그 시점까지 이미 15832개의 AAPL 거래 기록이 있었으며, 여기에는 9:30:00.000과 경매 사이의 아주 짧은 순간 동안 발생한 173개의 거래가 포함됩니다. 이는 개장 벨과 동시에 매칭을 시작하는 타 거래소의 연속 거래입니다. 잠시 후 2개의 "Market Center Official Open" 메시지(매매 조건 16)가 발생했습니다. 이는 각 시장 센터가 기록한 자체 공식 시가이며 거래량에는 포함되지 않습니다. 상장 거래소는 경매 가격을 정확히 반복합니다(차이: 0).
이 영수증은 야간 갭(overnight gap)도 측정합니다. AAPL의 직전 공식 종가인 7월 1일 1 종가는 $294.38였습니다. 다음 날 아침 경매 가격은 $294.1로 기록되었으며, 이는 -0.1%의 야간 변동을 의미합니다. 조용한 밤이었기에 갭은 작았습니다. 실적 발표나 뉴스가 야간에 발생하면 장전 거래에서 먼저 가격이 재산정되며, 경매를 통해 해당 변동이 공식 기록으로 확정됩니다.
개장 경매는 어떻게 작동하는가? Market-on-open 및 Limit-on-open 주문
종가 경매와 유사하게, 개장 시점에 반영되는 두 가지 전용 주문 유형이 있습니다.
- Market-on-open (MOO, 개장 시 시장가 주문) 주문은 경매가 결정하는 가격으로 체결됩니다. 가격 보호 기능은 없으나, 공식 개장 시 체결이 거의 보장됩니다.
- Limit-on-open (LOO, 개장 시 지정가 주문) 주문은 개장 가격이 지정가와 같거나 유리할 때만 경매에 참여합니다. 가격 보호 기능이 있으나, 체결되지 않을 위험이 있습니다.
두 주문 모두 경매 시점까지 거래소에 머물며, 그 과정에서 Pre-market(장전 시간외 거래)을 통해 거래되지 않습니다. 거래소는 9:30 직전에 개장 주문의 접수 및 수정을 중단하며(거래소마다 마감 시간 상이), 많은 브로커가 이보다 이른 마감 시간을 설정합니다.
개장 경매 불균형(Opening auction imbalance)이란 무엇인가?
장 개시 전, 거래소는 개장을 위한 불균형 데이터를 공시합니다. 여기에는 매수 대기 수량과 매도 대기 수량, 그리고 현재 시점에서 경매가 체결될 수 있는 예상 가격이 포함됩니다. 매수 불균형이 백만 주라는 것은 현재 매수 주문 중 백만 주가 매칭되지 않은 상태임을 의미합니다. Pre-market 트레이더들은 이 데이터를 주시하며 이를 바탕으로 포지션을 구축합니다.
9:30 분 봉이 공식 시가인 것도 아닙니다
대부분의 차트 플랫폼은 개장 시점을 첫 1분 봉에 포함합니다. 이는 9:30:00.000부터 9:30:59.999까지 모든 거래소에서 발생한 데이터, 즉 경매(auction)와 약 1분간의 연속 거래를 모두 포함한 결과입니다. 플랫폼의 "시가"는 해당 시간 범위 내에서 포착된 첫 번째 체결가이며, 이것이 반드시 경매 가격인 것은 아닙니다.
모든 수치 뒤에 숨겨진 정확한 SQL
WITH auctions AS (
SELECT ticker, toFloat64(argMax(price, (size, sip_timestamp))) AS official_open
FROM global_markets.stocks_trades
WHERE ticker IN ('SPY', 'AAPL', 'NVDA')
AND sip_timestamp >= '2026-07-02 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'
AND has(conditions, 17)
GROUP BY ticker
)
SELECT
b.ticker AS ticker,
toFloat64(anyIf(b.open, b.window_start = toDateTime('2026-07-02 09:30:00', 'America/New_York'))) AS bar_0930_open,
a.official_open AS official_open,
round(100 * (toFloat64(anyIf(b.open, b.window_start = toDateTime('2026-07-02 09:30:00', 'America/New_York'))) - a.official_open), 0) AS bar_open_minus_official_cents,
round(sumIf(b.volume, b.window_start = toDateTime('2026-07-02 09:30:00', 'America/New_York')) / 1e3) AS bar_0930_vol_k,
anyIf(b.transactions, b.window_start = toDateTime('2026-07-02 09:30:00', 'America/New_York')) AS bar_0930_trades,
round(sumIf(b.volume, b.window_start = toDateTime('2026-07-02 12:30:00', 'America/New_York')) / 1e3) AS bar_1230_vol_k,
round(sumIf(b.volume, b.window_start = toDateTime('2026-07-02 09:30:00', 'America/New_York')) / sumIf(b.volume, b.window_start = toDateTime('2026-07-02 12:30:00', 'America/New_York')), 1) AS x_0930_vs_1230
FROM global_markets.delayed_stocks_minute_aggs AS b
INNER JOIN auctions AS a ON a.ticker = b.ticker
WHERE b.ticker IN ('SPY', 'AAPL', 'NVDA')
AND b.window_start >= toDateTime('2026-07-02 00:00:00', 'America/New_York')
AND b.window_start < toDateTime('2026-07-03 00:00:00', 'America/New_York')
GROUP BY b.ticker, a.official_open
ORDER BY indexOf(['SPY', 'AAPL', 'NVDA'], b.ticker)7월 2일 세 개의 9:30 분 봉은 모두 공식 시가보다 높게 시작했습니다. AAPL의 봉은 공식 가격인 $294.1 대비 $294.12로 나타나며, 이는 2 센트 차이입니다. SPY는 18 센트, NVDA는 2 센트가 각각 교차점보다 높았습니다. 다른 거래소의 경매 전 체결가가 각 봉의 가장 처음에 기록된 것입니다. 차트의 시가가 공식 시가와 몇 센트 정도 다를 경우, 대개 이러한 메커니즘 때문입니다.
거래량 막대는 첫 1분간의 비중을 보여줍니다. AAPL의 9:30 분 봉은 14662건의 거래를 통해 743 thousand 주를 기록했습니다. 이는 12:30 점심시간 봉인 121 thousand 주의 6.1 배에 해당합니다. NVDA의 비율은 7.5 배, SPY는 3.6 배였습니다. 이처럼 거래량이 집중되는 시간대는 VWAP(거래량 가중 평균 가격)에 실질적인 영향을 미칩니다.
개장 전후의 하루 흐름은 어떠한가?
오전 4시부터 오후 8시까지 AAPL의 7월 전체 거래 데이터를 64 15분 단위로 분류하면 개장 직후의 거래 급증 양상을 파악할 수 있다. 장전 거래량은 미미한 수준이다. 9:30에 거래량이 급격히 증가하며, 점심시간을 향해 갈수록 감소한다. 이후 장 마감 시점까지 거래량이 다시 증가한다. 하루는 10.89 million AAPL 주식의 교차 거래와 함께 시작된 모습 그대로 마무리된다.
모든 수치 뒤에 숨겨진 정확한 SQL
SELECT
formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 15 MINUTE), '%H:%i') AS et_time,
round(sum(volume) / 1e6, 2) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'AAPL'
AND window_start >= toDateTime('2026-07-02 00:00:00', 'America/New_York')
AND window_start < toDateTime('2026-07-03 00:00:00', 'America/New_York')
GROUP BY et_time
ORDER BY et_time개장 경매 체결가 식별 방법: 매매 조건 코드
어떤 체결이 경매 결과입니까? 거래 내역(tape) 자체가 답을 제공합니다. 코드 사전은 동일한 데이터 저장소에 포함되어 있으며, 아래의 영수증은 주장이 아닌 쿼리 결과입니다.
모든 수치 뒤에 숨겨진 정확한 SQL
SELECT
name,
id,
toUInt8(JSONExtractBool(update_rules, 'consolidated', 'updates_volume')) AS counts_toward_volume
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks' AND type = 'sale_condition' AND id IN (8, 15, 16, 17, 38)
ORDER BY id한 가지 비대칭성이 존재합니다. 종가에는 하나의 통합된 라벨(코드 8, "Closing Prints")이 부여됩니다. 반면 개장 라벨은 거래소별로 다릅니다. 코드 17, "Market Center Opening Trade"는 각 시장 센터의 개장 거래를 나타내며, 상장 거래소의 거래가 곧 경매입니다. SPY의 7월 2일 거래 내역에는 2개의 해당 체결이 포함되어 있습니다. 구체적으로는 122천 주 규모의 교차 거래(cross)와 다른 거래소의 4주 체결이 포함됩니다. 반면 AAPL과 NVDA는 각각 정확히 하나씩(1 및 1)을 보여주며, 모두 9:30:00초 이내에 발생합니다(open_prints_at_0930 열에서 확인 가능). 위에 언급된 모든 경매 수량은 해당 세션에서 가장 큰 규모의 체결입니다. 코드 16, "Market Center Official Open"는 거래량이 없는 행정적 에코(0)이며, 코드 15 및 38와 함께 모든 분모 계산에서 제외됩니다.
개장 경매 FAQ
개장 경매 시간은 언제입니까?
미국 동부 표준시(ET) 오전 9시 30분 정규 거래 세션 시작 시점에 진행됩니다. 유동성이 낮은 종목은 잠시 후 체결될 수 있습니다. 2026년 7월 2일 SPY, AAPL, NVDA의 체결 시간은 모두 정확히 09:30:00 ET였습니다. 조기 종료일에는 오후 거래 시간이 단축되며 오전 거래에는 영향을 주지 않습니다. 이 경우 종가 경매는 오후 1시로 변경됩니다. 시장 휴장일 및 조기 종료를 참조하십시오.
공식 시가는 무엇입니까?
해당 주식이 상장된 거래소에서 결정되는 개장 경매 가격입니다. 2026년 7월 2일 AAPL의 체결가는 $294.1였습니다. 15832 AAPL의 거래가 당일 오전 일찍 발생했음에도 불구하고, 이 가격이 당일의 공식 시가가 됩니다.
개장 경매에서 거래할 수 있습니까?
네, 가능합니다. 대부분의 브로커(Broker)에서 Market-on-open (MOO, 시가 지정 주문) 및 Limit-on-open (LOO, 지정가 개장 주문) 주문을 표준으로 제공합니다. MOO는 경매에서 결정된 가격으로 체결되며, LOO는 지정가 또는 그보다 유리한 가격에서만 체결됩니다. 주문 접수는 9시 30분 직전에 마감되며, 많은 브로커에서 이보다 일찍 마감됩니다.
주가가 전일 종가와 큰 차이를 보이며 시작하는 이유는 무엇입니까?
거래소가 폐장된 동안 밤새 주문이 누적되며, 경매는 이 누적된 수요를 하나의 가격으로 체결합니다. 거래량이 적은 밤에는 가격 격차가 작습니다. 2026년 7월 2일 AAPL의 야간 가격 변동폭은 -0.1%였습니다.
개장 경매 규모가 종가 경매보다 큽니까?
아니요, 종가 경매 규모가 훨씬 더 큽니다. 2026년 7월 2일 AAPL의 종가 체결 규모는 개장 체결 규모의 33.7배였으며, NVDA는 25.2배, SPY는 13.5배였습니다. 벤치마크 추종 자금은 공식 종가에 거래되므로, 종가 경매가 해당 거래를 처리합니다.
위의 모든 수치는 저장된 검증 가능한 쿼리에서 도출됩니다. 각 패널 아래의 SQL을 확장하여 감사할 수 있습니다. 팔로우하는 티커의 개장 체결 내역을 상세히 분석하려면 Strasmore 터미널에서 동일한 질문을 영어로 입력하십시오.