Strasmore Research
심층 분석 Matt Connor작성자 Matt Connor

자기매매 방지 기능과 가장매매 규제 이해하기

자기매매 방지(Self-match prevention)는 동일 계좌의 주문이 서로 체결되지 않도록 매칭 엔진에서 차단하는 기능입니다. 시스템적 기술 설정인 자기매매 방지와 법적 규제 대상인 가장매매(wash trade)의 차이점 및 매칭 엔진의 작동 원리를 상세히 설명합니다.

자기매매 방지(Self-match prevention)는 동일한 기업의 두 주문이 서로 체결되지 않도록 막는 매칭 엔진의 기능입니다. 주문은 입력 시 식별자를 포함하며, 동일한 식별자를 가진 두 주문이 교차하려고 할 때 엔진은 거래가 성사되기 전에 하나 또는 두 주문 모두를 취소합니다. 자기매매 방지는 거래소 시스템에 설정하는 일종의 '배관'인 반면, 가장매매(wash trade) 금지는 법적 규제이며, 이 둘은 서로 다른 영역을 다룹니다.

두 번째 전략이 첫 번째 전략과 동일한 종목에 대해 호가를 제시하는 순간, 이 규칙은 귀하에게 적용됩니다. 단일 종목에 대해 두 개의 사다리형 그리드 봇(two-ladder grid bot)을 운영하는 경우, 은행 트레이딩 데스크와 동일한 조건으로 이 규칙을 마주하게 됩니다.

매칭 엔진에서 자기매매 방지가 작동하는 방식

거래소가 수신하는 모든 주문에는 엔진이 매칭 전 확인하는 필드(방향, 가격, 수량, 주문 유효기간)가 포함됩니다. 자기매매 방지는 여기에 두 가지를 추가합니다. 첫 번째는 해당 주문이 어느 기업, 계좌, 또는 전략 그룹에 속하는지 나타내는 식별자(숫자 또는 문자열)입니다. 두 번째는 해당 식별자를 가진 두 활성 주문이 서로 체결되려 할 때 엔진이 무엇을 해야 하는지 알려주는 지침입니다.

이 확인 절차는 공격적 주문(aggressing order)이 매칭 대상인 대기 주문(resting order)의 가격에 도달하는 즉시 실행됩니다. 일반적으로 네 가지 결과가 사용됩니다.

  • 대기 주문 취소: 유입된 주문은 호가창으로 진입하여 해당 가격대에 있는 다른 주문과 매칭될 수 있습니다.
  • 유입 주문 취소: 대기 주문은 큐(queue) 위치를 유지하고 공격적 주문은 사라집니다.
  • 두 주문 모두 취소: 가장 엄격한 설정입니다.
  • 수량 차감 후 취소: 큰 주문에서 작은 주문의 수량만큼을 차감하고, 작은 주문은 취소하며, 남은 수량은 활성 상태로 유지됩니다.

위 네 가지 경우 모두 거래는 발생하지 않습니다. 테이프(체결 기록)에 기록되는 내용은 없으며, 체결 로그에도 남지 않고, 대신 한쪽 또는 양쪽 주문에 대해 요청하지 않은 취소 메시지가 전달됩니다.

큐 위치는 눈에 보이지 않는 비용입니다. '가장 오래된 주문 취소(cancel-oldest)' 지침에 따라 취소된 대기 주문은 대기하며 얻은 모든 우선순위를 잃게 됩니다. 가격-시간 우선순위(price-time priority) 체계에서 이러한 손실은 치명적입니다. 재진입 시 해당 주문은 그동안 큐에 합류한 모든 사람보다 뒤로 밀려나기 때문입니다. 큐 위치 추정(estimating queue position)에 관한 당사의 가이드에서 해당 순위가 가지는 가치를 다룹니다.

하나의 종목, 여러 개의 호가창

이 확인 절차는 거래소별로 적용됩니다. 엔진은 자신이 보유한 주문만을 비교합니다. 서로 다른 두 호가창에 대기 중인 귀하의 두 주문은 서로를 인식하지 못하며, 미국 주식 시장의 어떤 메커니즘도 이를 가로질러 제어하지 않습니다. 단일 미국 주식은 동시에 여러 호가창에서 호가가 제시됩니다. 아래 패널은 2026년 6월 10일 오전, 15분 동안 6개 주요 종목에 대해 호가 제시 및 체결이 이루어진 거래소 수를 집계한 것입니다.

조회15분 단위로 동일 종목을 호가 및 체결하는 거래소(Venue)
모든 수치 뒤에 숨겨진 정확한 SQL
SELECT
    q.ticker          AS ticker,
    q.quoting_venues  AS quoting_venues,
    t.printing_venues AS printing_venues
FROM
(
    SELECT
        ticker,
        countDistinct(bid_exchange) AS quoting_venues
    FROM global_markets.cache_stocks_quotes
    WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'SPY', 'KO', 'JNJ')
      AND sip_timestamp >= toDateTime('2026-06-10 14:00:00', 'UTC')
      AND sip_timestamp <  toDateTime('2026-06-10 14:15:00', 'UTC')
      AND bid_price > 0
    GROUP BY ticker
) AS q
INNER JOIN
(
    SELECT
        ticker,
        countDistinct(exchange) AS printing_venues
    FROM global_markets.stocks_trades
    WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'SPY', 'KO', 'JNJ')
      AND sip_timestamp >= toDateTime('2026-06-10 14:00:00', 'UTC')
      AND sip_timestamp <  toDateTime('2026-06-10 14:15:00', 'UTC')
    GROUP BY ticker
) AS t ON t.ticker = q.ticker
ORDER BY quoting_venues DESC, ticker
Run this yourself

AAPL은 해당 15분 동안 16개의 서로 다른 거래소에서 호가를 받았으며, 17개의 거래소에서 체결이 발생했습니다. 패널에서 가장 거래가 적은 종목조차 11개의 호가 제시 거래소를 기록했습니다. 자식 주문(child order)을 분할하도록 설계된 스마트 주문 라우터(smart order router)는 귀하의 두 전략을 대부분 서로 다른 호가창에 배치하게 되며, 이 경우 엔진 수준의 확인 절차는 적용되지 않습니다. 기업들은 주문 관리 계층에서 주문이 외부로 나가기 전에 이러한 격차를 해소합니다. 두 호가창에서 동일한 가격의 반대 방향에 대기 중인 귀하의 주문은 락드 또는 크로스드 마켓(locked or crossed market)을 형성하며, 이는 별도의 규칙을 따릅니다.

한 세션 동안 하나의 호가창에서 발생하는 매칭 횟수

자기매매 확인 절차는 엔진이 수행하는 모든 매칭 경로에 위치하며, 유동성이 높은 종목의 경우 이 경로는 하루 종일 바쁘게 움직입니다. 아래 패널은 한 종목의 전체 세션을 15분 단위로 나누어 각 구간의 체결 건수를 집계했으며, 200건 이상 발생한 구간만을 표시했습니다.

조회15분 단위 구간별 체결량, 1거래일 전체
모든 수치 뒤에 숨겨진 정확한 SQL
SELECT
    formatDateTime(toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), INTERVAL 15 MINUTE), '%H:%i') AS et_time,
    count() AS trade_count
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
  AND sip_timestamp >= toDateTime('2026-06-10 08:00:00', 'UTC')
  AND sip_timestamp <  toDateTime('2026-06-11 04:00:00', 'UTC')
GROUP BY et_time
HAVING count() >= 200
ORDER BY et_time
Run this yourself

04:00 ET에 해당 종목은 15분 동안 9402건의 거래를 체결했으며, 19:45 ET에는 1345건을 체결했습니다. 이는 200건 이상의 체결 기준을 넘은 64개의 구간에 걸친 결과입니다. 각 체결은 엔진이 결합한 한 쌍의 주문이며, 엔진은 주문이 만나기 전에 양쪽의 식별자를 확인합니다. 호가창에 대기 중인 모든 주문은 당일 나중에 동일 계좌의 다른 주문과 만날 가능성이 있는 후보입니다.

자기매매가 체결될 때 테이프에 나타나는 것

방지된 자기매매는 아무런 흔적을 남기지 않습니다. 테이프에는 체결된 거래만 기록되며, 모든 체결 기록에는 거래가 어떻게 이루어졌는지 설명하기 위해 보고 거래소가 첨부하는 조건 플래그(condition flags)가 포함됩니다. 아래 패널은 한 종목의 전체 세션을 해당 플래그별로 분류합니다.

조회1거래일 전체의 체결 조건(Trade condition) 플래그
모든 수치 뒤에 숨겨진 정확한 SQL
SELECT
    condition_name,
    print_count,
    round(100 * print_count / sum(print_count) OVER (), 2) AS share_pct
FROM
(
    SELECT
        cc.id        AS condition_id,
        any(cc.name) AS condition_name,
        count()      AS print_count
    FROM
    (
        SELECT toInt32(arrayJoin(conditions)) AS condition_id
        FROM global_markets.stocks_trades
        WHERE ticker = 'AAPL'
          AND sip_timestamp >= toDateTime('2026-06-10 08:00:00', 'UTC')
          AND sip_timestamp <  toDateTime('2026-06-11 04:00:00', 'UTC')
    ) AS f
    INNER JOIN
    (
        SELECT
            toInt32(id)  AS id,
            any(name)    AS name
        FROM global_markets.stocks_condition_codes
        WHERE asset_class = 'stocks'
          AND has(data_types, 'trade')
        GROUP BY id
    ) AS cc ON cc.id = f.condition_id
    GROUP BY condition_id
)
ORDER BY print_count DESC
LIMIT 10
Run this yourself

Odd Lot Trade는 해당 세션에서 플래그가 지정된 체결의 48.34%를 차지하며, 패널은 당일 가장 흔한 10개의 플래그를 나열합니다. 목록을 보면 무엇이 빠져 있는지 알 수 있습니다. 특정 코드가 없다는 것은 두 주문이 한 기업에서 나왔음을 의미합니다. 체결된 자기매매는 해당 가격의 다른 거래와 동일하게 보이기 때문에, 이에 대한 감시는 테이프가 아닌 거래소가 보유한 참가자 식별자와 주문에 포함된 계좌 번호를 통해 이루어집니다.

자기매매 방지와 가장매매법의 경계

자기매매 방지는 거래소 서비스입니다. 귀하가 이를 선택하고 설정해야 하며, 설정하지 않으면 엔진은 귀하의 두 주문을 기꺼이 매칭시킵니다. 반면 가장매매 금지는 선택 사항이 아니며 설정 여부에 의존하지 않습니다.

1934년 증권거래법(Securities Exchange Act of 1934) 제9조(a)(1)항은 실질적인 소유권 변동 없이 활발한 거래가 이루어지는 것처럼 오도하기 위해 입력된 증권 거래를 다룹니다. 상품거래법(Commodity Exchange Act)에도 선물 관련 유사 조항이 있으며, CME 규칙 534는 이를 거래소 규정집에 재확인하고 있습니다. FINRA 규칙 5210은 브로커-딜러를 대상으로 이 두 법령 아래에 위치하며, 보충 자료에서 자기매매를 직접적으로 다룹니다. 즉, 한 기업 내의 서로 관련 없는 알고리즘 간의 거래는 그 자체로 위반은 아니지만, 기업은 이를 검토하고 줄이기 위한 정책을 유지해야 합니다.

둘 이상의 전략을 운영하는 사람에게는 두 가지 결과가 따릅니다. 자기매매 방지 지침을 설정하지 않은 거래소에서 자기 교차(self-cross)가 발생하면 가장매매 금지 조항을 위반할 수 있습니다. 이는 해당 규칙이 거래 자체와 그 이면의 의도에 적용되기 때문입니다. 자기매매 방지 기능에 의해 차단된 자기 교차는 아무것도 위반하지 않습니다. 차단하는 것 자체가 그 목적이기 때문입니다.

운영자의 설정 방식: CME, ICE, LME 및 MiFID II

CME Globex에서 자기매매 방지는 주문 입력 시 제출되는 식별자를 기반으로 작동합니다. 기업은 사용할 식별자를 등록하고, 각 주문은 식별자를 포함하며, 쌍을 이루는 지침은 해당 식별자를 가진 두 주문이 만날 때 엔진이 어느 쪽을 취소할지 명시합니다. 식별자 없이 전송된 주문은 정상적으로 매칭되는데, 이것이 신규 운영자가 빠지기 쉬운 함정입니다. 기본값은 '꺼짐'이기 때문입니다.

ICE는 주문별이 아닌 트레이딩 기업 식별자 단위로 설정되는 '자기매매 방지 기능(Self-Trade Prevention Functionality)'을 운영하며, 동일한 취소 결과 유형을 제공합니다. 런던금속거래소(LME)는 LMEselect에서 회원 트레이딩 식별자를 위한 '자기실행 방지(Self-Execution Prevention)'를 제공합니다. 유럽의 MiFID II 제17조는 알고리즘 트레이딩에 참여하는 모든 투자 기업에 테스트, 킬 스위치(kill functionality), 무질서한 거래 방지를 포함한 시스템 및 통제 의무를 부과합니다. 제48조는 거래소 자체에 병행 의무를 부과하며, 거래소 측의 방지 도구는 이와 함께 표준 장비가 되었습니다.

설정은 종목별이 아닌 계좌 또는 기업 수준에서 이루어집니다. 단일 기초자산의 옵션 표면(option surface) 규모를 보면 그 이유를 알 수 있습니다.

조회2026년 6월 만기, 단일 기초자산(Underlying) 기준 거래량 발생 옵션 계약
모든 수치 뒤에 숨겨진 정확한 SQL
SELECT
    toString(date)                 AS session_date,
    countDistinct(ticker)          AS contracts_traded,
    countDistinct(strike_price)    AS strikes_traded
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
  AND date >= '2026-06-01'
  AND date <= '2026-06-30'
  AND volume > 0
  AND iv_converged = 1
GROUP BY date
ORDER BY date
Run this yourself

2026-06-01에서 한 기초자산은 거래량이 있는 1579개의 개별 거래 가능 계약을 보유하고 있으며, 이는 112개의 행사가격에 걸쳐 있습니다. 패널은 유사한 형태의 21개 세션을 다룹니다. 이 정도 수량에서 계약별로 규칙을 설정하는 것은 불가능합니다. 따라서 식별자는 계좌에 부착되어 해당 계좌가 보내는 모든 주문과 함께 이동합니다.

체결 로그가 설명해주지 않는 실패 모드

실제 상황에서는 다음과 같이 나타납니다. '최신 주문 취소(cancel-newest)' 지침은 방금 전송한 주문이 매칭되기도 전에 도착 즉시 삭제합니다. 봇 내부에서 이 순서는 새로운 주문 후 아무도 요청하지 않은 취소로 읽힙니다. 체결도, 거부도 없으며 이유를 명시하는 오류 문자열도 없기 때문에, 이를 처음 접하는 운영자는 자신의 취소 경로에서 버그를 찾으려 하는 경향이 있습니다.

두 가지 습관을 들이면 이를 쉽게 파악할 수 있습니다. 첫째, 정규화된 요약본 대신 거래소의 주문 상태 메시지를 그대로 기록하십시오. 방지 이유가 보통 해당 메시지의 필드에 포함되어 있기 때문입니다. 둘째, 귀하의 코드가 생성하지 않은 모든 취소에 대해 알림을 설정하십시오. 이 실패는 귀하의 자동 트레이딩 서킷 브레이커(automated trading circuit breakers)와 같은 범주에 속하므로, 해당 알림은 그곳에 포함되어야 합니다. 거래소가 귀하의 주문 상태를 변경했음에도 귀하의 프로세스는 아무 일도 없었던 것처럼 계속 진행되기 때문입니다.

FAQ

자기매매 방지란 무엇입니까?

동일한 기업 또는 계좌 식별자를 가진 두 주문이 서로 체결되지 않도록 막는 매칭 엔진의 확인 절차입니다. 주문이 매칭되려 할 때, 엔진은 주문에 부착된 지침에 따라 대기 주문, 유입 주문 또는 둘 다를 취소합니다.

자기매매와 가장매매는 같은 것입니까?

아닙니다. 자기매매는 동일한 실질 소유주로부터 나온 두 주문 간의 모든 체결을 의미합니다. 가장매매는 진정한 시장 위험 없이 거래가 활발한 것처럼 오도할 의도로 입력된 자기매매를 말합니다. 관련 없는 알고리즘 간의 의도치 않은 자기매매는 계획된 거래와는 다르게 취급되며, 기업은 여전히 이를 모니터링해야 합니다.

자기매매 방지는 서로 다른 거래소 간에도 작동합니까?

아닙니다. 각 매칭 엔진은 자신의 호가창에 있는 주문에 대해서만 확인 절차를 적용합니다. 한 기업의 두 주문이 서로 다른 거래소에 대기 중인 경우 서로 체결될 수 있으며, 이는 거래소 상위 단계에서 기업 자체의 사전 거래 확인 절차를 통해 관리해야 할 몫입니다.

체결도 없고 이유도 없이 주문이 취소된 이유는 무엇입니까?

'최신 주문 취소' 자기매매 지침이 원인일 수 있습니다. 거래소가 귀하의 식별자를 가진 대기 주문과 매칭되기 전에 도착 즉시 주문을 취소한 것입니다. 그 이유는 보통 거부 메시지가 아닌 거래소의 취소 메시지 내 필드로 나타납니다.

어떤 거래소가 자기매매 방지 식별자를 요구합니까?

요구 사항은 거래소와 상품에 따라 다릅니다. CME는 사전에 등록된 식별자를 주문 입력 시 요구하며, ICE와 런던금속거래소는 기업 수준에서 자체 설정을 제공합니다. 유럽 거래소들은 MiFID II에 따라 시스템 및 통제 의무를 이행합니다. 귀하가 거래하는 상품의 거래소 규정집이 기준이 됩니다.


여기에 있는 모든 패널은 이를 생성한 SQL을 포함하고 있으므로, 언제든지 확장하여 읽어보십시오. 귀하가 거래하는 종목의 호가 제시 거래소 수를 집계하거나, 세션을 조건 플래그별로 분류하려면 Strasmore 터미널에서 평이한 영어로 질문하십시오.