3년 국채선물 근월물 | 코스콤 마이크로초 호가와 체결 2026-07 ~ 11 | 가상 지정가 311,646건 | 사전등록 3가설 Holm

체결 확률 모형으로 3년 국채선물 지정가와 시장가를 고르면 진입 비용이 얼마나 줄어드나

최우선 호가 큐 맨 뒤에 넣은 지정가가 60초 안에 채워질 확률을 호가와 체결 흐름으로 예측하고, 예상 비용이 시장가보다 작을 때만 지정가를 내는 정책이 시장가보다 주문당 얼마나 아끼는지 확인 구간 24거래일에서 쟀다.

보류 | H822 ~ H824 미지지 시장가 대비 주문당 +0.098틱 Brier 개선 7.4%(문턱 10%) 확인 24일 105,856건

세 줄 요약

  1. 3년 국채선물 근월물에서 큐 맨 뒤 50계약 지정가가 60초 안에 채워질 확률은 13.2%였다. LightGBM 체결 확률 모델의 Brier 점수는 큐 길이만 쓴 기준보다 7.4% 낮아 사전 문턱 10% 에 못 미쳤다.
  2. 모델이 고른 주문만 지정가로 내고 못 채우면 60초 뒤 시장가로 넘기는 정책은 시장가(주문당 0.504틱)보다 0.098틱 아꼈다. 24일 모두 양이고 0 보다 크다는 것은 뚜렷하지만(p 0.0002) 문턱 0.25틱에는 멀다.
  3. 판정은 보류다. 이득의 93%는 «큐가 짧을 때만 지정가» 라는 한 줄 규칙에서 나오고, 미래를 아는 오라클도 0.177틱이라 0.25틱은 큐 앞자리를 미리 잡지 않으면 닿지 않는다.

가설과 결론

앞선 장중 실험들은 공격적으로 시장가로 들어가는 신호가 1틱 비용을 넘지 못한다는 결론을 여러 번 냈다. 신호를 바꾸지 않고 비용을 줄이는 길은 실행에 있다. 시장가 매수는 매도 1호가에 사므로 스프레드가 1틱이면 중간가보다 0.5틱 비싸게 산다. 매수 1호가에 지정가를 걸어 채워지면 반대로 0.5틱 싸게 산다. 둘의 차는 주문당 1틱이다. 문제는 지정가가 늘 채워지지 않는다는 것이고, 채워지지 않는 때가 하필 가격이 우리 방향으로 달아날 때라는 것(역선택)이다. 앞선 실험 하나는 무조건 지정가를 냈다가 이 역선택에 이득을 거의 다 잃었다.

이 실험은 «언제 지정가를 내야 하나» 를 모델에게 맡긴다. 지정가를 내기 전에 그 주문이 10초, 60초 안에 채워질 확률을 호가 잔량, 불균형, 직전 체결 흐름으로 예측하고, 못 채웠을 때 치를 비용까지 예측해, 기대 비용이 시장가보다 작을 때만 지정가를 낸다. 아이디어는 Jane Street 인턴 성과 글(2026)의 «호가창의 모든 주문의 미래를 답하는 신경망» 한 줄에서 왔다. 원문에는 라벨, 시간 지평, 특징이 적혀 있지 않아 설계는 이 실험의 사전등록이 정했다. 장중 신호 봇이 실제로 주문을 낼 때 바로 붙일 수 있는 실행 덮개라 빈도 규칙은 적용하지 않았다.

가설
H822: LightGBM 이 예측한 60초 체결 확률의 확인 구간 Brier 점수가 큐 길이만 쓴 로지스틱 기준보다 10% 이상 낮다. H823: 정책 비용이 시장가 비용보다 주문당 0.25틱 이상 작다. H824: 정책이 지정가로 낸 주문 중 체결된 것의 60초 마크아웃이, 모든 주문을 지정가로 냈을 때 체결된 것의 마크아웃보다 0.2틱 이상 낫다. 세 가설 모두 거래일 블록 부트스트랩 한쪽 p 와 Holm 보정으로 판정한다.
결론
세 가설 모두 지지되지 않았다. Brier 개선은 7.4%(90% 구간 6.3 ~ 8.4%), 정책 절감은 0.098틱(0.093 ~ 0.102), 마크아웃 차는 0.020틱이다. 세 Holm p 는 모두 1.00 이다. 다만 정책 절감이 0 보다 크다는 것은 p 0.0002 로 뚜렷해 사전 규칙에 따라 판정은 보류다.
가설별 확증 결과(정본 런 metrics.json, 확인 구간 2026-10-01 ~ 11-05)
가설내용예측값Holm p판정
H822Brier 개선 ≥ 10%15 ~ 30%7.4% (0.1041 → 0.0965)1.00미지지
H823정책 절감 > 0.25틱0.1 ~ 0.3틱+0.098틱1.00미지지
H824체결분 마크아웃 차 > 0.2틱0.05 ~ 0.2틱+0.020틱1.00미지지

예측 칸은 사전등록 때 적은 부호와 크기다. 정책 절감과 마크아웃 차는 예측 구간의 아래쪽 끝에, Brier 개선은 예측 구간 바로 아래에 떨어졌다. 모델은 체결을 잘 맞히고 비용도 꾸준히 줄이지만, 줄이는 크기가 사전에 요구한 0.25틱의 40% 안팎이다.

용어와 기호

3선
한국거래소 3년 국채선물. 이 페이지의 주문은 모두 그날 거래량이 가장 많은 월물(근월물)에 낸다
틱
3선 가격의 최소 단위 0.01. 비용과 절감은 모두 주문 한 건당 틱이다
최우선 호가, 1호가
가장 높은 매수 호가 b1 과 가장 낮은 매도 호가 a1. 스프레드는 a1 − b1 이고 98% 이상의 시각에서 1틱이다
시장가, 지정가
시장가는 반대편 1호가에 바로 체결하는 주문이다. 지정가는 자기 쪽 1호가 가격에 걸어 두고 상대가 와서 칠 때까지 기다린다
큐, Q0
같은 가격에 먼저 걸린 주문들의 줄. Q0 는 주문을 넣는 순간 우리 앞에 선 잔량(계약)이다. 거래소는 가격이 같으면 먼저 온 주문부터 채운다
t0, s, P
t0 는 가상 주문을 넣는 시각, s 는 방향(매수 +1, 매도 −1), P 는 자기 쪽 1호가 가격(매수면 b1)이다
M0
t0 의 중간가 (a1 + b1) / 2. 모든 비용은 이 도착 중간가를 기준으로 잰다
F10, F60, tf
지정가가 t0 뒤 10초, 60초 안에 채워졌으면 1. tf 는 채워진 시각이다
cM, cF, cU
시장가 비용 s(반대 1호가 − M0), 지정가 체결 비용 s(P − M0), 못 채웠을 때 60초 뒤 시장가로 넘긴 비용 s(반대 1호가(t0+60초) − M0). 단위 틱, 양수가 비용이다. 스프레드 1틱이면 cM = 0.5, cF = −0.5
p̂60, ĉU, Ê
모델이 예측한 60초 체결 확률, 못 채웠을 때의 예상 대체 비용, 예상 지정가 비용 Ê = p̂60 cF + (1 − p̂60) ĉU
정책
Ê < cM 이면 지정가 + 60초 대체, 아니면 바로 시장가. 문턱을 고르는 단계가 없다
절감
cM − 정책 비용. 양수면 시장가보다 싸게 샀다는 뜻이다
마크아웃 mk60
체결된 지정가에 대해 s(체결 60초 뒤 중간가 − P). 음수면 채워진 뒤 가격이 불리하게 갔다(역선택)
Brier 점수
예측 확률과 실제 0/1 의 차 제곱 평균. 작을수록 좋다. 60초 체결률이 13% 라 항상 0.13 을 말하는 예측의 Brier 는 약 0.115 다
AUC
체결된 주문 하나와 안 된 주문 하나를 골랐을 때 모델이 체결된 쪽에 더 높은 확률을 줄 비율. 0.5 는 동전
오라클
미래를 알고 주문마다 시장가와 지정가 중 싼 쪽을 고르는 가상의 정책. 어떤 모델도 넘을 수 없는 상한이다
거래일 블록 부트스트랩
확인 구간 24거래일을 날짜째 복원 추출해 통계량을 5,000번 다시 구한다. 같은 날 표본끼리의 상관을 그대로 둔다. 한쪽 p 는 통계량이 0 이하인 재표본의 비율이다
Holm 보정
H822, H823, H824 세 p 를 한 묶음으로 보고, 여럿을 시험해 생기는 우연 통과를 막는 보정

자료

데이터셋

쓴 자료
자료기간해상도쓰임
코스콤 KRX 선물 호가(B606F)2026-07-08 ~ 2026-11-05, 74거래일호가 갱신 하나하나, 거래소 시각 마이크로초1~5단 가격과 잔량, 큐 길이, 중간가
코스콤 KRX 선물 체결(G706F)같음체결 하나하나, 마이크로초체결 재생, 체결 흐름 특징
앞선 장중 되돌림 실험 두 개의 사건 목록2026-07 ~ 2026-10사건 시각과 방향실제 신호에 정책 적용(탐색, 51건)

코스콤 직수신 시세를 미러 데이터베이스에서 하루 파일로 받은 것이다. 거래소가 찍은 시각(HOGA_TIME, TRADE_TIME)을 쓰고 우리 쪽 수신 시각은 쓰지 않았다. 근월물은 그날 3선 종목 가운데 체결량이 가장 많은 것으로 정했고, 9월물에서 12월물로의 교체는 09-14 에 일어났다. 롤 주간(09-08 ~ 09-14)에는 근월물의 거래량 점유율이 0.58 ~ 0.92 로 낮았지만, 실제 거래자가 겪는 조건이라 그대로 두었다. 온전한 날의 3선 근월물 하루 체결은 약 2,600 ~ 7,800건, 거래량은 7만 ~ 19만 계약이고, 1호가 잔량의 하루 중앙값은 약 490 ~ 1,160계약이다.

정리와 제외

결과 지표를 보기 전에 날짜별 행 수, 첫 행과 끝 행 시각, 중복, 시각 공백을 점검해 제외 규칙을 사전등록에 적었다. 07-29 는 체결이 1,368건뿐이고 5시간 넘는 공백이 있어 뺐다. 07-31 은 같은 행이 겹쳐 들어온 날로, 완전 중복을 지운 뒤에도 체결 9,770건과 거래량 24만 계약으로 평소의 두 배라 행을 믿을 수 없어 뺐다. 그 밖의 날에도 호가가 90초 넘게 끊긴 구간이 있었다(07-09 34분, 09-10 34분, 10-30 21분, 11-04 2시간 25분). 가상 주문 시각의 앞 5분과 뒤 3분 안에 이런 공백이 있으면 그 주문을 버렸고, 그날 첫 호가 뒤 5분 안과 마지막 자료 3분 전 뒤의 주문도 버렸다. 07-08, 08-20, 09-04 처럼 일부 시간만 받은 날은 받은 구간만 쓴다.

11-04 와 11-05 는 다른 미러에서 받은 날이라 호가 행이 평소의 세 배다. 갱신이 더 촘촘하게 기록됐을 뿐 상태는 같으므로, 갱신 횟수처럼 기록 밀도에 따라 값이 바뀌는 특징은 처음부터 쓰지 않았다. 결과를 본 뒤에는 체결 표의 공격 방향 필드가 10월 말까지 모든 행 «매도», 그 뒤 빈 값이라는 것도 알았다. 이 결함의 영향은 결과 절의 실패 진단에서 따로 잰다.

날짜별 가상 주문 수와 학습 확인 구간 경계, 제외한 두 날
그림 1. 날짜별 가상 주문 수. 초록은 학습 구간(48일, 205,790건), 금색은 확인 구간(24일, 105,856건)이다. 빗금 빨강 두 날은 제외했고, 낮은 막대는 부분 수신일이거나 공백 주변 표본을 버린 날이다.

방법

가상 주문과 체결 재생

09:00:00 부터 15:15:00 까지 10초마다(하루 최대 2,251 시각) 매수와 매도 가상 주문을 하나씩 넣는다. 장 시작 15분과 마감 단일가 앞 20분을 뺀 연속 거래 구간이다. 주문은 50계약이고, 그 순간 자기 쪽 1호가 가격 P 에 큐 맨 뒤로 선다. 그 순간 같은 가격에 걸린 잔량 Q0 가 모두 우리 앞에 있다고 본다.

체결은 보수적으로 판정한다. t0 뒤 가격 P 에서 일어난 체결의 누적 수량이 Q0 + 50 이상이 되면, 또는 가격 P 를 넘어서는 체결(매수면 P 보다 낮은 체결)이 나오면, 그 시각에 50계약 전부가 채워진 것으로 본다. 우리 앞 주문의 취소는 실제로는 우리 차례를 앞당기지만 자료에서 알 수 없으므로 세지 않는다. 부분 체결도 미체결로 본다. 그래서 이 재생의 체결률은 실제보다 낮은 쪽으로 기운다. 격자에서는 큐 앞 잔량의 절반만 앞에 있다고 보는 가정과 맨 앞에 선다고 보는 가정도 함께 돌려 그 폭을 보였다.

비용과 정책

모든 비용은 주문을 넣는 순간의 중간가 M0 와 실제 실행 가격의 차로 잰다. 시장가는 그 순간 반대편 1호가에 산다. 지정가가 60초 안에 채워지면 P 에 산 것이고, 못 채우면 60초 뒤의 반대편 1호가에 시장가로 산다. 못 채운 주문은 대개 가격이 우리 방향으로 달아난 경우라 이 대체 비용이 시장가보다 크다. 이것이 역선택이 비용에 들어오는 길이다. 정책은 주문마다 예상 지정가 비용 Ê 를 계산해 시장가 비용 cM 보다 작으면 지정가를, 아니면 시장가를 고른다. cM 은 주문 순간 화면에 보이는 값이고 Ê 는 t0 이전 정보로만 만든 예측이다. 비교 문턱이 cM 자체라 학습 자료에서 문턱을 고르는 단계가 없고, 그래서 선택 편향을 막는 순열 귀무를 따로 돌릴 필요가 없었다. 대신 같은 비율로 무작위로 지정가를 고르는 귀무 1,000회를 함께 보였다.

검정, 기준선, 격자

학습은 2026-07-08 ~ 09-30 의 48거래일, 확인은 10-01 ~ 11-05 의 24거래일이다. 공통 규칙인 «확인 구간 2024년 이후» 는 마이크로초 호가가 2026-07 부터라 지킬 수 없었다. 모델 설정은 미리 고정했고 튜닝하지 않았다. 세 가설의 통계량은 확인 구간에서 계산하고, 거래일 블록 부트스트랩 5,000회로 한쪽 p 를 구해 Holm 으로 보정한다. H822 는 0.9 × 기준 Brier − 모델 Brier 가 0 보다 큰지, H823 은 평균 절감 − 0.25 가 0 보다 큰지, H824 는 마크아웃 차 − 0.2 가 0 보다 큰지 본다. 채택은 H823 과 H822 가 모두 Holm 을 통과할 때, 보류는 그렇지 않지만 정책 절감이 0 보다 유의하게 클 때, 폐기는 그 밖이다.

기준선은 여섯이다. 항상 시장가, 항상 지정가 + 60초 대체, 큐가 학습 구간 중앙값(678계약)보다 짧을 때만 지정가, 큐 길이만 쓴 로지스틱 정책, 전체 특징 로지스틱 정책, 오라클이다. 강건성 격자는 대기 시간 10, 30, 60초와 큐 가정 셋(전부, 절반, 맨 앞), 주문 크기 10, 50, 100계약의 27칸이고 칸마다 그 칸의 라벨로 모델을 다시 학습했다. 실행 지연은 주문이 1초 늦게 닿는 경우로, 그때의 호가로 P 와 Q0 를 다시 정하고 비용은 여전히 t0 중간가로 잰다. 충격 구간은 확인 구간 안의 금통위 날 하루(10-22)를 뺀 결과로 본다.

모델

확증 모델은 LightGBM 이진 분류기다. 주문 하나의 특징 23개를 받아 60초 안 체결 확률 p̂60 을 낸다. 특징은 네 무리다. 큐와 불균형(자기 쪽 1호가 잔량의 로그, 반대쪽 잔량의 로그, 1호가 불균형, 1~5단 누적 불균형, 2~5단 잔량, 지금 큐가 직전 5분 평균의 몇 배인지), 체결 흐름(직전 10초와 60초의 체결 건수, 같은 가격 체결량, 방향별 공격 수량), 가격(직전 10초, 60초, 5분 중간가 변화를 주문 방향 부호로, 5분 변동성, 마지막 가격 변경 뒤 경과 초), 그리고 시각과 방향이다. 같은 설정의 LightGBM 회귀기를 학습 구간에서 못 채운 주문만으로 학습해 대체 비용 ĉU 를 예측한다. 비교 모델은 큐 길이 하나만 넣은 로지스틱 회귀(기준)와 23개 특징을 표준화해 넣은 로지스틱 회귀다. 아래 구조도는 정본 런에 저장된 분류기 파일을 그대로 읽어 그렸고, 그리기 전에 그 파일의 예측이 탐색 스크립트의 재적합 예측과 소수 9자리까지 같은지 확인했다.

체결 확률 모델 개요 입력(시각 t0, 방향 s) 3선 근월물 1~5단 호가 직전 300초 체결 10초 격자 x 매수/매도 특징 23개 큐와 불균형 7 체결 흐름 10 가격 변화, 변동성 4 시각, 방향 2 학습 205,790행 그래디언트 부스팅 결정트리 (LightGBM, 이진 분류) f₁ f₂ f₃ f₄ f₅ , , , f₃₀₀ 위는 이 모델 트리 5그루와 마지막 그루의 실제 위상(점 = 잎), 실물은 그림 B, C logit p̂60(x) = f₁(x) + … + f₃₀₀(x) 트리 300그루, 학습률 0.05, 잎 31, 잎 최소 200행 출력 p̂60 = 60초 체결 확률 Ê = p̂60 cF + (1 − p̂60) ĉU Ê < cM 이면 지정가 하이퍼파라미터, 세팅한 상한과 학습이 실제로 닿은 값 n_estimators = 300 이어 붙이는 트리 개수, 위 f₁ … 가 이만큼 실제 300그루 num_leaves = 31 트리 한 그루의 잎(끝 상자) 최대 개수 실제 잎 31~31개, 상한에 닿은 트리 300/300 min_data_in_leaf = 200 잎 하나에 학습 표본 200개 미만이면 그 분기를 하지 않는다 실제 가장 작은 잎 n=39 (하한 200 아래, 근사 검사, 오류 아님) feature_fraction = 0.8 트리마다 피처 23개 중 80%만 무작위로 후보에 올린다 → 그림 D 의 피처별 분기 횟수가 고르게 퍼지는 이유 learning_rate = 0.05 트리 하나가 더하는 값 = 적합값 × 0.05 (아래 잎값에 이미 곱해져 있다) 작을수록 트리 한 그루의 발언권이 작다 그루별 잎 수 분포 31 잎 31~31개, 상한 31
정본 런의 LightGBM 체결 확률 분류기. 대체 비용 회귀기도 같은 설정이다.
첫 트리(1번) 깊이 0, 뿌리 분기 조건, n 깊이 1 분기 조건, n 깊이 2 분기 조건, n 깊이 3 분기 조건, n 깊이 4, 접힘 아래를 접었다 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 log(1+Q0) ≤ 5.654 n=164,460 직전 10초 같은 가격 체결 ≤ 1.701 n=17,617 60초 체결 건수 ≤ 5.5 n=8,715 1호가 불균형 ≤ -0.4841 n=3,838 잎값 -1.8338 n=2,463 잎값 -1.8843 n=1,375 1호가 불균형 ≤ -0.6497 n=4,877 잎값 -1.7610 n=2,325 잎값 -1.8118 n=2,552 log(1+Q0) ≤ 4.887 n=8,902 60초 체결 건수 ≤ 10.5 n=3,573 잎값 -1.7242 n=824 하위 2잎 n=2,749 직전 10초 같은 가격 체결 ≤ 5.615 n=5,329 하위 2잎 n=4,410 잎값 -1.6894 n=919 직전 10초 같은 가격 체결 ≤ 1.869 n=146,843 1호가 불균형 ≤ 0.09185 n=128,582 5분 변동성 ≤ 62.25 n=63,389 하위 7잎 n=62,735 하위 2잎 n=654 5분 변동성 ≤ 129.5 n=65,193 하위 3잎 n=64,583 하위 2잎 n=610 log(1+Q0) ≤ 6.388 n=18,261 60초 체결 건수 ≤ 28.5 n=9,443 하위 3잎 n=7,885 잎값 -1.7640 n=1,558 1호가 불균형 ≤ 0.3183 n=8,818 하위 2잎 n=6,781 잎값 -1.8922 n=2,037 잎값 ≥ 0 (예측을 위로) 잎값 < 0 (예측을 아래로) n = 그 노드에 떨어진 학습 표본 수, 조건(≤)이 참이면 왼쪽 가지 '예', 거짓(>)이면 오른쪽 '아니오', 잎이 많아 깊이 4 아래를 접었다(이 트리 전체 깊이 7, 잎 31개)
첫 트리의 뿌리는 큐 앞 잔량 log(1+Q0) ≤ 5.65(약 285계약)로 가르고, 두 갈래 모두 직전 10초 같은 가격 체결량으로 다시 가른다. 잎값은 로그오즈 기여분이다.
마지막 트리(300번) 깊이 0, 뿌리 분기 조건, n 깊이 1 분기 조건, n 깊이 2 분기 조건, n 깊이 3 분기 조건, n 깊이 4 분기 조건, n 깊이 5, 접힘 아래를 접었다 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 예 아니오 가격 변경 뒤 초 ≤ 1014 n=165,005 10초 반대 공격량 ≤ 6.548 n=162,394 10초 반대 공격량 ≤ 4.297 n=161,855 5분 변동성 ≤ 281 n=150,637 10초 반대 공격량 ≤ 4.241 n=150,000 잎값 +0.0005 n=149,661 잎값 +0.0181 n=339 직전 60초 같은 가격 체결 ≤ 3.511 n=637 잎값 +0.0033 n=357 잎값 -0.0261 n=280 1호가 불균형 ≤ 0.4571 n=11,218 Q0 / 5분 평균 잔량 ≤ 1.183 n=8,252 하위 9잎 n=6,525 하위 2잎 n=1,727 10초 체결 건수 ≤ 3.5 n=2,966 하위 3잎 n=732 하위 4잎 n=2,234 가격 변경 뒤 초 ≤ 6.703 n=539 잎값 +0.0017 n=361 잎값 +0.0269 n=178 60초 자기 쪽 공격량 ≤ 3.541 n=2,611 Q0 / 5분 평균 잔량 ≤ 1.023 n=2,349 가격 변경 뒤 초 ≤ 1285 n=1,265 직전 60초 같은 가격 체결 ≤ 1.242 n=622 잎값 +0.0192 n=339 잎값 -0.0432 n=283 직전 60초 같은 가격 체결 ≤ 1.869 n=643 하위 2잎 n=479 잎값 +0.0651 n=164 잎값 -0.0248 n=1,084 잎값 -0.0408 n=262 잎값 ≥ 0 (예측을 위로) 잎값 < 0 (예측을 아래로) n = 그 노드에 떨어진 학습 표본 수, 조건(≤)이 참이면 왼쪽 가지 '예', 거짓(>)이면 오른쪽 '아니오', 잎이 많아 깊이 5 아래를 접었다(이 트리 전체 깊이 10, 잎 31개)
마지막 트리의 뿌리는 마지막 가격 변경 뒤 경과 초(약 1,014초)다. 남은 오차를 작게 다듬는 트리라 잎값이 작다.
깊이별 분기 피처
분기 위치 \ 피처장 시작 뒤 분5분 변동성log(1+반대 잔량)log(1+Q0)가격 변경 뒤 초1호가 불균형Q0 / 5분 평균 잔량직전 60초 같은 가격 체결반대 2~5단자기 쪽 2~5단5단 불균형5분 중간가 변화60초 체결 건수60초 자기 쪽 공격량60초 반대 공격량60초 중간가 변화직전 10초 같은 가격 체결10초 중간가 변화10초 반대 공격량10초 체결 건수10초 자기 쪽 공격량매수 여부스프레드합
깊이 0 (뿌리)1531425202251912952157913106988217300
깊이 160342530323121452618162515171583422578210506
깊이 21068134453160453633442333352020202128625713757
깊이 31719856546166404654582567452328322020101110671,008
깊이 422696886559776161604652564536403214119913821,166
깊이 52148883758560656256636457383931132410976721,158
깊이 6188766179825856696357583946373713173675831,068
깊이 71345869726437556559676325342825171011235100913
깊이 81143873574741394960394913233128106186850745
깊이 976325441483033323928421225261873163510562
깊이 104222381522162524252721818211030073330353
깊이 112921171318131211151520188711010150217
깊이 1217361562106111114493601011110128
깊이 1382286112342012351002001063
깊이 142232222210202020100102028
깊이 152103205010301110000000020
깊이 16102001110000010000000007
깊이 17001000000000000000000001
분기 합1,40565562659958552752352151948445736235130128217016210391918062449,000
손실 감소(gain) 몫11.5%6.0%2.9%9.8%3.0%8.3%27.3%5.9%2.3%2.2%1.9%3.1%2.5%1.2%1.3%1.2%6.4%1.1%0.2%1.1%0.2%0.4%0.2%100%

300그루 전체에서 깊이마다 어떤 특징으로 갈랐는지 센 표다.

모델 설정(정본 런 metrics.json 의 meta)
모델목표학습 행설정
LightGBM 분류기(확증)F60, 따로 F10205,790트리 300, 학습률 0.05, 잎 31, 잎 최소 200행, 행 표본 0.8, 특징 표본 0.8, seed 241
LightGBM 회귀기cU (못 채운 주문)학습 구간 F60 = 0 인 행같은 설정
로지스틱(기준)F60, F10205,790입력 log(1+Q0) 하나, L2, C = 1
로지스틱(전체)F60, F10205,79023개 특징 표준화, L2, C = 1
체결 확률 분류기와 대체 비용 회귀기의 특징 중요도 막대
그림 2. 특징 중요도(분기 이득 비중, 상위 12개). 체결 확률은 큐의 상대 길이와 절대 길이, 시각, 1호가 불균형이 이끈다. 대체 비용은 1호가 불균형과 변동성이 이끈다.

분류기에서 분기 이득이 가장 큰 특징은 지금의 큐 길이를 직전 5분 평균으로 나눈 상대 길이이고, 그다음이 장 시작 뒤 경과 분, 큐 길이의 로그, 1호가 불균형이다. 큐 상대 길이, 큐 길이, 1호가 불균형 셋이 분기 이득의 45% 를 차지한다. 대체 비용 회귀기는 1호가 불균형을 가장 많이 쓴다. 반대쪽 잔량이 얇으면 그쪽 가격이 곧 사라져 60초 뒤 시장가가 비싸질 가능성이 높기 때문이다.

결과

확증 결과

확인 구간 105,856건의 가상 주문 가운데 60초 안에 채워진 것은 13.2%, 10초 안은 2.0%였다. 3선 1호가에는 보통 수백 계약이 서 있고 1분 거래량도 수백 계약이라, 큐 맨 뒤 주문은 가격이 우리 쪽으로 넘어오지 않는 한 1분 안에 잘 채워지지 않는다. 시장가의 평균 비용은 0.504틱(스프레드가 2틱인 0.8% 표본 때문에 0.5 보다 조금 크다), 모든 주문을 지정가로 냈을 때의 평균 비용은 0.465틱, 정책의 평균 비용은 0.406틱이었다. 정책은 주문의 53%를 지정가로 냈다.

확증 통계량과 부트스트랩 구간(확인 구간, 거래일 블록 5,000회)
가설통계량추정90% 구간한쪽 p문턱
H8221 − BrierLGBM / Brier기준7.4%6.3 ~ 8.4%1.0010%
H823평균 절감 cM − c정책+0.098틱0.093 ~ 0.1021.00 (0 대비 0.0002)0.25틱
H824mk60(정책 체결) − mk60(전체 체결)−0.154 − (−0.174) = +0.020틱0.011 ~ 0.0291.000.2틱

세 통계량 모두 부호는 예측대로 양이고 구간도 좁다. 문제는 크기다. 정책 절감 90% 구간의 위 끝 0.102틱은 문턱 0.25틱의 절반에도 못 미친다. 체결분 마크아웃은 정책이 고른 주문이 −0.154틱, 전체가 −0.174틱이다. 지정가가 채워지면 60초 뒤 중간가가 이미 체결가보다 불리한 쪽에 있고, 모델은 그 역선택을 0.02틱만 덜어 낸다.

체결 확률은 얼마나 맞나

세 모델의 신뢰도 곡선과 큐 길이 20분위별 실제와 예측 체결률
그림 3. 왼쪽: 확인 구간 신뢰도 곡선(표본 50건 이상 구간만). 오른쪽: 큐 앞 잔량 20분위별 실제 60초 체결률(검정 점)과 두 모델의 평균 예측.

60초 체결 확률의 Brier 점수는 큐 길이만 쓴 로지스틱이 0.1041, 전체 특징 로지스틱이 0.0982, LightGBM 이 0.0965다. AUC 는 각각 0.715, 0.773, 0.784 다. 10초 체결은 기준 0.01849, LightGBM 0.01719(7.0% 개선)이고 AUC 는 0.816 에서 0.868 로 올랐다. 그림 3 왼쪽에서 LightGBM 의 점은 대각선에 붙어 있어, 예측이 0.4 라고 하면 실제로 40% 안팎이 채워진다. 오른쪽 그림은 체결률이 큐 길이에 얼마나 묶여 있는지 보여 준다. 큐가 200계약 아래면 60초 체결률이 50% 에 가깝고 300계약 아래면 30% 를 넘지만, 1,300계약을 넘으면 5% 안팎으로 떨어진다. 큐 길이 하나가 이미 이 곡선의 대부분을 설명하므로, 나머지 22개 특징이 더할 수 있는 몫이 처음부터 작았다.

정책과 기준선

정책별 비용과 절감(확인 구간 105,856건, 주문당 틱)
정책비용절감90% 구간지정가 비율
항상 시장가0.50400%
항상 지정가 + 60초 대체0.465+0.0390.036 ~ 0.043100%
큐 < 678계약이면 지정가0.425+0.0790.075 ~ 0.08345%
큐 길이만 로지스틱 정책0.413+0.0910.086 ~ 0.09556%
전체 특징 로지스틱 정책0.408+0.0960.091 ~ 0.10054%
LightGBM 정책(확증)0.406+0.0980.093 ~ 0.10253%
오라클(상한)0.327+0.1770.164 ~ 0.19018%
무작위 귀무 1,000회평균 +0.02199% 분위 +0.02353%
정책별 시장가 대비 절감 막대와 90% 구간, 문턱 0.25 선
그림 4. 정책별 절감과 90% 구간. 회색 띠는 같은 비율로 무작위로 지정가를 고른 귀무의 99% 범위, 빨간 점선은 H823 문턱이다.

표는 이 실험의 핵심을 담고 있다. 항상 지정가를 내기만 해도 0.039틱을 아끼지만, 무작위로 절반만 지정가로 내면 0.021틱에 그친다. 큐가 학습 중앙값보다 짧을 때만 지정가를 내는 한 줄 규칙은 0.079틱, 큐 길이만 넣은 로지스틱 정책은 0.091틱을 아낀다. LightGBM 정책의 0.098틱과의 차는 0.007틱이다. 같은 날을 짝지은 부트스트랩으로 이 차가 0 보다 크다는 것은 뚜렷하지만(p 0.0002, 90% 0.005 ~ 0.008) 크기는 작다. 정책 이득의 93%가 큐 길이 하나로 설명된다. 그리고 미래를 아는 오라클도 0.177틱밖에 못 아끼므로, 보수적 체결 가정 아래에서 0.25틱이라는 문턱은 어떤 모델로도 닿을 수 없는 값이었다. 사전등록 때 이 상한을 계산하지 않은 것은 설계의 실수다.

격자, 지연, 날짜

대기 시간과 큐 가정, 주문 크기 27칸의 정책 절감 열지도
그림 5. 강건성 격자 27칸의 확인 구간 정책 절감. 칸마다 그 칸의 라벨로 다시 학습했다. 빨강 테두리가 확증 칸(60초, 큐 전부, 50계약)이다.

27칸 모두 절감이 양이다. 대기 시간이 길수록, 큐 앞 잔량을 적게 볼수록, 주문이 작을수록 절감이 커진다. 큐 앞 잔량 전부를 기다리는 확증 가정에서는 대기 10초가 0.036틱, 30초가 0.070틱, 60초가 0.098틱이다. 큐의 절반만 앞에 있다고 보면 60초에서 0.122틱으로 오른다. 0.25틱을 넘는 칸은 큐 맨 앞에 선다고 가정한 두 칸(30초 10계약 0.258틱, 60초 10계약 0.366틱)뿐이다. 즉 이 비용 문제의 손잡이는 «어떤 주문을 지정가로 낼까» 가 아니라 «큐의 어디에 서 있나» 다.

확인 구간 24거래일의 하루 평균 절감 시계열
그림 6. 확인 구간 날짜별 평균 절감. 정책(초록)은 24일 모두 양이고, 항상 지정가(회색)는 모든 날 정책보다 낮다.

날짜별로 보면 정책 절감은 가장 낮은 날(10-08)이 0.072틱, 가장 높은 날(10-23)이 0.128틱이다. 24일 가운데 음수인 날은 없고, 문턱 0.25 에 다가간 날도 없다. 금통위 날(10-22)을 빼도 절감은 0.097틱이다. 주문이 1초 늦게 닿는다고 해도 0.090틱으로 거의 줄지 않는다. 학습 구간 안에서 잰 절감은 0.120틱으로 확인 구간보다 0.02틱 높아 과적합의 흔적은 작다. 진입과 청산 둘 다에 이 정책을 쓰면 왕복 0.195틱을 아끼는데, 이는 다른 실험들이 판정에 쓰는 왕복 1틱 비용의 19.5%, 보고용 2틱의 9.8% 다.

실패 진단

큐 길이 5분위별과 시간대별 정책 및 항상 지정가 절감 막대
그림 7. 왼쪽: 큐 앞 잔량 5분위별 절감과 정책이 지정가를 고른 비율(삼각형). 오른쪽: 시간대별 절감.

절감은 큐가 짧은 주문에 몰려 있다. 큐 앞 잔량이 가장 짧은 5분위(중앙값 294계약)에서는 정책이 93%를 지정가로 내고 0.307틱을 아낀다. 가장 긴 5분위(1,351계약)에서는 지정가를 19%만 내고 0.010틱을 아낀다. 같은 5분위에서 항상 지정가는 −0.124틱으로 시장가보다 나쁘다. 정책이 하는 일은 대부분 «긴 큐에는 서지 않는다» 이다. 시간대로 보면 점심 무렵인 12시가 0.068틱으로 가장 작고, 9시와 10시, 14시가 0.11틱 안팎으로 크다. 거래가 많아 큐가 빨리 소진되는 시간에 지정가가 유리하다.

왜 0.25틱에 못 미치는지 분해하면 이렇다. 정책이 지정가로 낸 주문의 60초 체결률은 20.0% 다. 채워지면 시장가보다 1틱을 아끼고, 못 채운 80% 는 60초 뒤 평균 0.530틱에 시장가로 산다(도착 때의 0.5 보다 조금 나쁨). 이득을 키우려면 체결률을 올려야 하는데, 큐 맨 뒤라는 자리가 그것을 막는다. 공격 방향 필드 결함도 확인했다. 방향 흐름 특징 넷을 빼고 다시 적합하면 Brier 0.0965, 절감 0.097틱이고, 직전 호가로 방향을 추정해 다시 만들면 Brier 0.0964, 절감 0.098틱이다. 결함은 결론을 바꾸지 않는다.

대기 시간을 주문마다 고르게 해도 나아지지 않았다(탐색). 바로 시장가, 지정가 + 10초, 30초, 60초 대체의 넷 가운데 예상 비용이 가장 작은 것을 고르면 절감은 0.096틱(90% 0.091 ~ 0.100)으로 60초 하나만 쓰는 확증 정책과 같다. 정책은 시장가를 43%, 60초 대기를 47% 골랐고 10초와 30초 대기는 합쳐 10% 였다. 이 네 선택지에서 미래를 아는 오라클도 0.185틱이라 상한이 거의 오르지 않는다. 주문을 언제 거둘지보다 어디에 서는지가 문제라는 진단과 맞는다.

방향성 신호와 실제 사건

주문 방향 적중률 h 에 따른 정책과 항상 지정가의 절감 직선
그림 8. 60초 안 중간가가 움직인 표본에서 주문 방향이 맞은 비율 h 를 바꿨을 때의 절감(탐색). 점은 절감이 0 이 되는 손익분기 h 다.

위 결과는 방향이 무작위인 가상 주문의 평균이다. 실제 신호 주문은 방향이 있고, 신호가 맞을수록 가격이 우리 방향으로 달아나 지정가가 안 채워진다. 이를 보려고 60초 안 중간가의 움직임으로 표본을 셋으로 나눴다(탐색). 74% 는 중간가가 그대로였고 정책은 0.050틱을 아꼈다. 주문 방향으로 움직인 13% 에서는 체결률이 1.4% 로 떨어지고 정책이 −0.306틱을 잃었다. 반대로 움직인 13% 에서는 체결률 66.6%, 절감 0.771틱이다. 움직인 표본에서 방향이 맞은 비율을 h 라 하면 절감은 h 에 대해 직선이다. h = 0.6 이면 정책 절감이 0.069틱으로 줄고, 손익분기는 h = 0.84 다. 항상 지정가의 손익분기는 0.57 에 불과하다. 첫 1분 방향을 84% 넘게 맞히는 신호는 드물므로, 정책은 방향성 신호에서도 대체로 시장가보다 낫다.

앞선 두 장중 되돌림 실험(3선 고유 충격 되돌림, 고요 속 급변 되돌림)의 2026-07 ~ 10 사건 51건 가운데 47건이 표본 격자에 닿았다(탐색). 정책을 적용하면 시장가보다 0.064틱을 아꼈고(지정가 55%, 체결 19%), 항상 지정가는 0.000틱이었다. 고유 충격 사건 30건에서 정책 0.067틱 대 항상 지정가 −0.033틱, 급변 사건 17건에서 둘 다 0.059틱이다. 47건은 무작위 방향 표본의 0.098틱과 구별하기에 너무 적다. 독립성 점검은 이 실험에 맞지 않는다. 실행 덮개라 손익 흐름이 따로 없고, 기존 전략의 진입 시각에 붙여 본 것이 이 사건 분석이다.

해석

체결 확률 모형 자체는 성공적이다. AUC 0.78 로 체결될 주문을 가려내고, 예상 지정가 비용을 10분위로 나눠 보면 예측 평균과 실현 평균이 모든 분위에서 0.03틱 안으로 맞는다. 그 예측으로 고른 정책은 24일 내내 시장가보다 싸다. 그러나 이 성공의 대부분은 큐 길이라는 한 숫자가 이미 갖고 있던 정보다. 3선 근월물은 1호가에 수백 계약이 서 있는 두꺼운 시장이라, 큐 맨 뒤에 선 주문은 가격이 우리 쪽으로 넘어올 때 주로 채워지고, 그렇게 채워진 주문은 곧바로 불리한 마크아웃을 안는다. 모델이 더 영리해져도 «큐 맨 뒤» 라는 출발점이 바뀌지 않는 한 오라클 상한 0.177틱 아래에 갇힌다.

남은 길은 정책을 정교하게 하는 것이 아니라 큐 앞자리를 미리 확보하는 것이다. 격자에서 큐 맨 앞, 10계약, 60초 칸은 0.366틱을 아꼈다. 신호와 무관하게 양쪽 1호가에 작은 주문을 미리 걸어 두는 운용은 원치 않는 체결이라는 새 비용을 낳으므로 그 비용까지 재야 한다. 지금 당장 장중 봇에 쓸 수 있는 것은 큐 길이 한 줄 규칙이다. 1호가 잔량이 학습 중앙값(약 680계약)보다 짧으면 지정가를 내고 60초 뒤 못 채우면 시장가로 넘긴다. 이것만으로 시장가 대비 0.079틱, 모델 정책 이득의 80% 를 얻는다.

한계

확인 구간이 24거래일, 한 달 남짓이다. 24일 모두 절감이 양이라 부호는 안정적이지만, 금리가 크게 움직이는 국면이나 유동성이 마른 국면은 이 표본에 거의 없다. 마이크로초 호가가 2026-07 부터라 공통 규칙인 2024년 이후 확인 구간을 지킬 수 없었다. 체결 재생은 큐 앞 취소를 세지 않는 보수적 가정이라 실제 체결률은 더 높을 수 있다. 반대로 숨은 주문, 같은 마이크로초 안의 순서, 우리 50계약이 큐에 서서 다른 참가자의 행동을 바꾸는 효과는 모른다. 격자의 «절반», «맨 앞» 칸이 그 불확실성의 폭을 보여 준다.

표본은 10초마다 방향이 무작위인 가상 주문이다. 실제 신호 주문은 방향성이 있어 절감이 줄어들며(손익분기 h 0.84), 실제 사건 47건은 탐색으로만 봤다. 결과를 본 뒤 두 가지를 알았다. 하나는 체결 표의 공격 방향 필드가 상수라 방향 흐름 특징 넷이 쓸모없었다는 것이고, 다시 적합해도 수치가 0.001틱 안에서 같았지만 체결 흐름의 방향 정보가 체결 예측을 돕는지는 제대로 묻지 못했다. 다른 하나는 H823 문턱 0.25틱이 오라클 상한 0.177틱보다 높아 처음부터 닿을 수 없었다는 것이다. 문턱은 결과를 본 뒤 바꾸지 않았다. 비용은 도착 중간가 대비 실행 가격만 쟀고 거래소 수수료와 주문 취소 비용은 넣지 않았다. 10선과 30선은 스프레드와 큐가 달라 이 수치를 그대로 옮길 수 없다.

다음에 해 볼 것

첫째, 큐 앞자리 상시 유지를 재생한다. 신호와 무관하게 양쪽 1호가에 10계약씩 걸어 두고, 신호가 나면 이미 큐 앞에 있는 쪽을 쓰며 반대쪽은 취소한다. 가격이 바뀌면 새 가격 큐 맨 뒤로 다시 선다. 같은 코스콤 자료로 우리 주문의 큐 위치를 체결로 차감해 추적하고, 신호 없이 채워진 원치 않는 체결의 마크아웃 비용과 신호 진입 절감을 함께 센다. 격자의 0.366틱이 상한이다. 둘째, 동적 재판정이다. 지정가를 낸 뒤 10초마다 남은 체결 확률과 대체 비용을 다시 예측해 일찍 시장가로 넘긴다. 방향성 신호(h 0.6 이상)에서 손실 꼬리를 줄이는지 본다.

산출물

코드는 실험 폴더의 code/, 정본 런은 results/20261108T055011_main/ 이고 탐색 결과는 그 아래 explore/ 다. 하루 단위 호가와 체결 캐시와 가상 주문 표는 크기 때문에 저장소 밖 캐시 폴더에 두며 아래 첫 두 명령이 다시 만든다. 그림은 모두 정본 런의 표와 학습된 모델 파일에서 다시 그린다.

파일과 재현 명령(저장소 뿌리에서 실험 폴더 경로를 앞에 붙여 실행)
경로 또는 명령내용
uv run python code/data.py근월물 호가와 체결 하루 캐시, 점검표
uv run python code/s1_samples.py10초 격자 가상 주문, 특징, 체결 재생 라벨
uv run python code/s2_main.py확증 런: 모델, 정책, 검정, 기준선, 격자, 지연, 실제 사건
uv run python code/d1_explore.py results/20261108T055011_main재현 확인, 짝지은 비교, 방향 적중률 곡선
SIDE_MODE=inferred uv run python code/s1_samples.py → code/d2_side.py공격 방향 필드 결함 탐색
uv run python code/d3_multiwait.py results/20261108T055011_main대기 시간까지 고르는 정책(탐색)
uv run python code/render_figures.py이 페이지의 그림과 모델 구조도
results/20261108T055011_main/metrics.json확증 통계량, 기준선, 분해, 지연, 금통위 제외
grid.csv, daily_saving.csv, by_queue.csv, by_hour.csv격자 27칸, 날짜별, 큐 분위별, 시간대별 절감
model_f60_lgbm.txt, model_cu60_lgbm.txt학습된 체결 확률 분류기와 대체 비용 회귀기
protocol.md, analysis.md사전등록(수정 절 포함)과 결과 기록

Appendix

A. 데이터셋 실물

확인 구간 가상 주문 하나(2026-10-14 09:00:40, 매도)의 원자료다. 값은 하루 캐시와 가상 주문 표에서 그대로 옮겼다. 가격은 원 단위 지수, 잔량과 수량은 계약이다.

t0 직전 호가 두 행(1~2단)
거래소 시각b1bq1a1aq1b2bq2a2aq2
09:00:39.580320102.92351102.93203102.91444102.94635
09:00:39.733417102.92360102.93203102.91444102.94626
t0 뒤 가격 102.93 체결(19건 중 일부)과 누적 수량
거래소 시각가격수량누적
09:00:42.319078102.9311
09:00:48.283085102.935056
09:00:59.711968102.933095
09:01:00.955551102.9350171
09:01:02.153801102.933215
09:01:02.894203102.93161376

매도 주문이므로 자기 쪽은 매도 1호가 102.93, 큐 앞 잔량 Q0 는 203계약이다. 우리 50계약까지 채우려면 이 가격에서 253계약이 체결돼야 하고, 누적이 215 에서 376 으로 넘어간 09:01:02.894 에 채워진 것으로 본다(t0 뒤 22.9초). 가상 주문 표의 같은 행에는 특징 23개(예: log(1+Q0) 5.318, 1호가 불균형 −0.279, 직전 60초 체결 52건, 큐 상대 길이 0.909, 5분 변동성 4틱)와 cM 0.5, cF −0.5, 60초 뒤 매수 1호가 102.94 가 함께 있다.

B. 모델 입출력 실물

같은 주문이 모델과 정책을 지나간 기록이다. 수치는 탐색 스크립트가 남긴 표본별 예측 표에서 옮겼다.

Request meta
LightGBM 분류기(F60, 트리 300) + LightGBM 회귀기(ĉU), 대기 60초, 큐 앞 잔량 전부, 50계약, 비용 기준 도착 중간가 102.925
Input
s = −1, P = 102.93, Q0 = 203, 반대 잔량 360, 스프레드 1틱, 직전 10초 체결 5건, 직전 60초 중간가 변화 −1틱(주문 방향 부호), 마지막 가격 변경 뒤 17.9초, 장 시작 뒤 0.7분
LightGBM response
p̂60 = 0.442(큐 길이만 로지스틱은 0.276), ĉU = 0.902틱. Ê = 0.442 × (−0.5) + 0.558 × 0.902 = 0.282틱 < cM 0.5 이므로 지정가로 102.93 에 50계약 매도
Ground truth check
22.9초 뒤 체결, 비용 −0.5틱, 시장가 대비 절감 +1.0틱. 그러나 체결 60초 뒤 중간가는 102.955 로 올라 마크아웃은 −2.5틱이다. 가격이 우리 매도 가격을 밀고 올라가면서 채워진 역선택의 전형이다. 못 채웠다면 60초 뒤 매수 1호가 102.94 에 팔아 비용 −1.5틱이었을 것이다

C. 실험 설정

  • 종목3년 국채선물 근월물(그날 체결량 최대 월물)
  • 기간2026-07-08 ~ 11-05, 72거래일(07-29, 07-31 제외), 학습 ~ 09-30(48일), 확인 10-01 ~(24일)
  • 표본09:00:00 ~ 15:15:00 10초 격자 x 매수와 매도, 호가 공백 90초 초과 구간 주변 [−300, +180]초 제외, 311,646건
  • 체결 재생P 에서의 누적 체결 ≥ 큐 가정 x Q0 + 크기, 또는 P 관통 체결, 지평 120초
  • 비용도착 중간가 대비 실행 가격(틱), 미체결은 대기 끝 반대 1호가로 시장가
  • 특징23개(큐와 불균형 7, 체결 흐름 10, 가격과 변동성 5, 시각 1), t0 이하 정보만
  • 모델LightGBM 300그루, 학습률 0.05, 잎 31, 잎 최소 200, 표본 0.8, 특징 0.8, seed 241, 튜닝 없음
  • 정책Ê = p̂60 cF + (1 − p̂60) ĉU < cM 이면 지정가
  • 검정확인 구간 거래일 블록 부트스트랩 5,000회 한쪽 p, Holm(H822, H823, H824), 무작위 귀무 1,000회
  • 격자대기 10, 30, 60초 x 큐 가정 1, 0.5, 0 x 크기 10, 50, 100계약, 칸마다 재학습
  • 현실화지연 1초, 금통위 10-22 제외, 실제 신호 사건 47건(탐색)
  • Kaggle쓰지 않음(CPU 로 충분, 원자료 반출 없음)