세 줄 요약
- 15:33 까지의 모멘텀으로 종가 단일가 방향을 예측해 불리한 날만 연속 거래로 미리 체결하면, 확인 구간(2024 ~) 건당 개선은 3선 −0.08틱(575건, p 0.89), 10선 +0.01틱(478건, p 0.47)이었다. 주문 결정을 바꿔도 체결가는 나아지지 않았다.
- 원인은 크기다. 모멘텀 예측이 단일가에서 맞히는 몫은 3선 하루 평균 0.27틱인데 연속 거래로 바꿀 때 내는 반 스프레드는 0.5틱이다. LightGBM 은 규칙보다 더 나빴다.
- 되돌림 진입에서 단일가가 우리 쪽으로 오는 비율은 55.4%(보정 전 p 0.020, Holm 0.12)였고 그 이득은 10선에서만 나왔다. 판정은 폐기, 종가 단일가 체결을 그대로 둔다.
가설과 결론
- 가설
- 우리 전략이 종가 단일가에서 체결하는 거래마다 15:33 까지의 1분봉으로 단일가가 15:35 직전 체결가에서 오를지 내릴지 예측하고, 단일가가 우리에게 불리하게 갈 것으로 보이는 날만 15:34 대 연속 거래에서 시장가로 미리 체결하면(반 스프레드 0.5틱 부담), 항상 단일가에서 체결할 때보다 건당 체결가가 낫다. 3선(H858), 10선(H859)을 학습 없는 20분 모멘텀 규칙으로, 3선(H861), 10선(H862)을 LightGBM 으로 본다. 덧붙여 되돌림 진입에서 단일가가 우리 쪽으로 오는 날이 절반을 넘는지(H860), 모멘텀 규칙이 맞히는 몫이 반 스프레드를 넘는지(H863)를 본다. 여섯 가설을 한 묶음으로 Holm 보정한다.
- 결론
- 확인 구간에서 건당 개선은 3선 −0.08틱, 10선 +0.01틱, LightGBM 3선 −0.22틱, 10선 −0.30틱이다. H860 의 비율은 55.4% 로 보정 전 p 0.020 이었지만 Holm 보정 p 0.12 이고, 모멘텀 규칙이 맞히는 몫은 0.27틱으로 반 스프레드에 못 미친다. 여섯 가설 모두 지지되지 않았고 판정은 폐기다.
이 실험은 «가격 예측과 주문 결정은 목표가 다르다» 는 생각에서 나왔다. 어느 방향으로 거래할지는 이미 다른 전략이 정해 두었다. 남은 질문은 그 방향의 주문을 언제, 어떤 방식으로 낼지다. 우리 일간 전략의 체결은 대부분 종가 단일가를 지난다. 고유 몫 되돌림은 종가 단일가에 들어가 다음 날 종가 단일가에 나오고, 미국 야간 되돌림 카드는 종가 단일가에 청산하며, 금통위 전날 10선 매수는 종가 단일가에 들어간다. 그래서 종가 단일가를 피해 연속 거래로 옮길지 고르는 규칙이 조금이라도 맞으면 매년 수백 번의 체결에 그대로 붙는 이득이 된다.
기대의 근거는 둘이었다. 앞선 동시호가 대회 실험에서 20분 모멘텀 규칙이 단일가 방향을 58% 쯤 맞혔고, 같은 거래를 짝지어 비교하므로 작은 개선도 잡을 수 있었다. 3선 표본으로 잡을 수 있는 가장 작은 개선(MDE)은 0.12틱 이었고 아이디어가 기대한 크기는 +0.15 ~ +0.3틱이었다. 그런데 3선 개선은 부호부터 음이었고, 10선은 0 주변에서 크게 흔들렸다. 맞히는 비율이 절반을 넘어도 맞힌 날 아끼는 크기가 반 스프레드보다 작아서, 고를수록 손해가 쌓인다는 것이 이 실험의 답이다.
용어와 기호
- 3선, 10선
- 한국거래소 3년, 10년 국채선물. 가격으로 거래하며 금리가 오르면 가격이 내린다. 그때그때 거래가 많은 월물을 이어 붙인 연결 시세를 쓴다
- 틱
- 가격의 최소 단위 0.01. 이 페이지의 모든 손익과 개선은 1계약당 틱이다
- 종가 단일가
- 15:35 ~ 15:45 에 주문을 모아 15:45 에 한 가격으로 체결하는 마감 동시호가. 이 가격을 P45 라 쓴다
- 연속 거래
- 15:35 이전의 일반 장중 매매. 시장가 주문은 반대편 최우선 호가에서 바로 체결된다
- Pref
- 15:35 봉 종가, 즉 15:35:00 직전 마지막 연속 거래 체결가. 연속 거래 쪽 기준 가격이다
- P33
- 15:33 봉 종가, 즉 15:33:00 직전 마지막 체결가. 결정 시각의 가격이다
- y
- 단일가 움직임 (P45 − Pref) / 0.01. 단일가가 직전 체결가보다 몇 틱 올랐나
- s
- 우리 거래 방향. 매수 +1, 매도 −1. 방향은 각 전략이 정하고 이 실험은 바꾸지 않는다
- h
- 연속 거래로 체결할 때 내는 반 스프레드 비용(틱). 주 값 0.5틱, 민감도 0, 0.25, 1.0틱
- g
- 단일가 대신 연속 거래로 체결했을 때 이득 g = s × y − h. 매수인데 단일가가 오르면 미리 산 만큼 이득이다
- q
- 단일가 방향 예측. +1 은 오른다, −1 은 내린다, 0 은 모른다
- Δ
- 선택 정책의 건당 개선. q = s 이면(단일가가 우리에게 불리하게 갈 것으로 예측) 연속 거래를 골라 Δ = g, 아니면 단일가에 남아 Δ = 0
- R20
- 20분 모멘텀 규칙. q = sign(P33 − P13), P13 은 15:13 봉 종가. 학습하지 않는다
- LGB
- LightGBM 이진 분류기로 낸 예측. P(y > 0) 가 0.5 를 넘으면 q = +1
- 통과
- 우리 전략의 주문 하나가 종가 단일가를 지나는 일. 되돌림 거래 하나는 진입과 청산 두 번 통과한다
- 월 블록 부트스트랩
- 같은 달의 통과를 한 덩어리로 묶어 달 단위로 복원추출해 평균의 분포를 만든다. 한쪽 p 는 평균이 0 이하로 나온 비율이다
- MDE
- 한쪽 5%, 검정력 80% 로 잡을 수 있는 가장 작은 평균. 2.49 × 표준편차 / √n
- Holm 보정
- 여러 가설을 함께 검정할 때 p 를 작은 것부터 남은 가설 수만큼 곱해 올리는 보정
자료
데이터셋
가격은 자체 수집한 3선, 10선 연결 1분봉이다. 봉 시각은 끝 시각이라 15:35 봉에는 15:34:00 ~ 15:34:59 체결이 들어 있고, 15:45 봉에는 종가 단일가 한 번의 체결이 들어 있다. 2016-08 부터 마감이 15:45 로 바뀌었으므로 2017-01 부터 쓴다. 2017 ~ 2026 에서 15:33 봉과 15:35 봉이 빠진 날은 없었다. 15:45 봉이 빠진 날은 3선 18일(2017 ~ 2019), 10선 1일이고 이 날은 뺐다. 수능일은 장이 한 시간 늦게 끝나므로 뺐다. 15:45 봉 거래량 중앙값은 3선이 해마다 4,600 ~ 9,066계약, 10선이 1,850 ~ 3,526계약으로 단일가가 얇지 않다.
| 시장 | 기간 | 세션 | 발견 통과 | 확인 통과 | 확인 빈도 | y = 0 (확인) | |y| 평균 (확인) |
|---|---|---|---|---|---|---|---|
| 3선 | 2017-01 ~ 2026-11-05 | 2,323 | 1,393 | 575 | 연 204회 | 16.3% | 1.67틱 |
| 10선 | 2017-01 ~ 2026-11-05 | 2,350 | 1,229 | 478 | 연 168회 | 7.3% | 5.04틱 |
대상 거래
대상 거래는 네 묶음이다. A 는 3선 고유 몫 되돌림의 대리판으로, 15:30 장중 변화 x(첫 봉 시가에서 15:30 까지, 틱)의 절댓값이 직전 250세션 80 백분위 이상인 날 종가 단일가에 x 반대 방향으로 들어가 다음 세션 종가 단일가에 나온다. B 는 같은 규칙을 10선에 67 백분위로 쓴 것이다. 원래 전략은 코스피200 선물과 달러선물을 뺀 잔차를 쓰지만 그 통제 변수는 2022 년부터라, 발견 구간을 채우려고 원 변화로 대신했다. C 는 미국 야간 되돌림 카드의 종가 청산이고 앞선 카드 실험의 최종 거래표에서 날짜와 방향만 가져왔다. D 는 금통위 전날 10선 종가 단일가 매수다. 손익은 가져오지 않고 방향 s 만 쓴다.
언제 무엇을 아는가
예측은 15:33 봉까지만 쓴다. 15:33 봉은 15:33:00 에 확정되므로 15:33 에 결정하고 15:34 대에 주문을 내면 미래 정보가 들어가지 않는다. 대회 실험은 15:34 봉을 썼지만 이 실험은 체결 여유를 두려고 1분 당겼다. 되돌림 진입 방향은 15:30 봉으로 정해지므로 15:33 에 이미 안다. 카드 청산과 금통위 전날 매수는 아침에 이미 정해져 있다. LightGBM 의 일별 특징(전날 y, 직전 120일 상승 비율)은 하루 전까지만 쓴다.
방법
통과 하나마다 두 체결가를 비교한다. 단일가 체결가는 P45 다. 연속 거래 체결가는 Pref 에 반 스프레드 h 를 불리하게 더한 값, 즉 매수면 Pref + h, 매도면 Pref − h 로 둔다. 15:34:5x 에 시장가를 내면 반대편 최우선 호가에서 체결되는데, 3선의 마감 전 호가 스프레드는 거의 언제나 1틱이므로 마지막 체결가에서 평균 반 틱 불리하다. 그러면 연속 거래로 바꾸는 이득은 g = s × y − h 다. 매수(s = +1)인데 단일가가 3틱 오르면 미리 사서 3 − 0.5 = 2.5틱을 아끼고, 단일가가 움직이지 않으면 0.5틱을 그냥 낸다.
선택 정책은 단순하다. 예측 q 가 우리 방향 s 와 같으면, 즉 매수인데 단일가가 오를 것 같으면 연속 거래로 미리 체결하고, 그 밖에는 단일가를 기다린다. 정책의 개선 Δ 는 고른 날의 g 이고 고르지 않은 날은 0 이다. 기준선 «항상 단일가» 는 Δ = 0 이라, 확증 검정은 Δ 의 평균이 0 보다 큰가다. 같은 통과를 짝지어 보므로 시장 방향의 잡음은 빠지고 단일가 움직임 하나만 남는다.
표본은 발견 2017 ~ 2023 과 확인 2024-01 ~ 2026-11-05 로 나눴고 판정은 확인 구간으로만 했다. 검정은 같은 달의 통과를 한 덩어리로 묶은 월 블록 부트스트랩 10,000회로 평균의 분포를 만들고, 평균이 0 이하로 나온 비율을 한쪽 p 로 썼다. 여섯 가설을 한 묶음으로 Holm 보정했다. 채택 문턱은 H858 이나 H859 가 Holm p < 0.05 이고 확인 평균 Δ ≥ +0.1틱이며 발견 평균도 양수인 경우였다. 보정 전에만 유의하면 보류, 그 밖은 폐기로 미리 정했다.
깊이를 위해 사전에 격자도 정했다. 결정 시각 네 개(15:31 ~ 15:34)와 모멘텀 창 다섯 개(5 ~ 60분)를 곱한 20칸, 반 스프레드 h 네 값, 결정 즉시 P33 에 체결하는 실행 지연판, 연도별과 충격 달 제외판이다. 기준선은 항상 연속 거래, 무작위 선택, 직전 120일 다수 방향 상수, 그리고 정답을 아는 오라클 다섯이다. LightGBM 확신 문턱을 고르는 탐색은 발견 구간에서 고르고 귀무(연도 안 순열)에서 같은 절차를 다시 돌려 비교했다.
모델
R20 규칙
확증의 주 예측기는 학습하지 않는 R20 이다. 15:13 봉 종가에서 15:33 봉 종가까지 오르면 단일가도 오른다고(q = +1), 내리면 내린다고(q = −1) 본다. 변화가 0 이면 q = 0 이라 단일가에 남는다. 앞선 대회 실험의 20분 모멘텀 기준선을 결정 시각만 1분 당겨 그대로 옮긴 것이다. 고를 모수가 없어서 발견 구간 성적이 그대로 표본 밖 성적이 된다. 3선과 10선 모두 자기 가격으로 계산한다.
LightGBM 분류기
비교 예측기는 LightGBM 이진 분류기다. 정답은 y > 0 대 y < 0 이고 y = 0 인 날은 학습에서 뺐다. 특징은 23개로, 자기 계약과 다른 계약(3선 모델이면 10선)의 15:33 까지 수익률 5, 10, 20, 30, 60, 120분과 시가 대비 변화, 최근 20분 고저 범위와 그 안의 위치, 최근 20분 거래량 대 그 전 60분 비, 전날 y, 직전 120일 상승 비율, 요일이다. 설정은 미리 고정했고 seed 다섯 개의 확률을 평균했다. 확인 구간 예측은 2017 ~ 2023 으로 한 번 학습한 모델로, 발견 구간 성적은 해마다 그 이전만으로 학습한 확장창으로 냈다. 아래 구조도는 확인 구간 3선 모델을 같은 코드로 다시 학습해 커밋된 확률 415일을 소수 아홉째 자리까지 재현한 뒤 seed 0 모델에서 그렸다.
oth_day ≤ 5.5 로 갈린다. 각 상자의 n 은 그 노드에 떨어진 학습일 수다.| 분기 위치 \ 피처 | vratio | base120 | oth_day | oth_r20 | oth_r120 | oth_r60 | oth_r30 | oth_r10 | own_day | oth_r5 | own_r120 | pos20 | own_r60 | own_r30 | own_r20 | y_prev | rng20 | dow | own_r10 | own_r5 | 합 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 깊이 0 (뿌리) | 14 | 17 | 39 | 30 | 32 | 18 | 8 | 13 | 6 | 7 | 9 | 10 | 15 | 18 | 31 | 8 | 11 | 1 | 6 | 7 | 300 |
| 깊이 1 | 36 | 40 | 55 | 42 | 22 | 42 | 30 | 29 | 28 | 18 | 11 | 7 | 10 | 12 | 15 | 17 | 6 | 9 | 11 | 5 | 445 |
| 깊이 2 | 63 | 54 | 54 | 43 | 29 | 36 | 23 | 32 | 30 | 37 | 24 | 17 | 20 | 18 | 11 | 20 | 17 | 14 | 13 | 11 | 566 |
| 깊이 3 | 74 | 70 | 47 | 47 | 48 | 42 | 35 | 34 | 30 | 44 | 16 | 25 | 30 | 20 | 19 | 21 | 17 | 16 | 12 | 12 | 659 |
| 깊이 4 | 62 | 64 | 45 | 40 | 48 | 33 | 47 | 33 | 27 | 35 | 27 | 18 | 19 | 22 | 17 | 16 | 15 | 17 | 14 | 19 | 618 |
| 깊이 5 | 56 | 51 | 38 | 53 | 41 | 27 | 30 | 28 | 43 | 22 | 17 | 21 | 13 | 18 | 13 | 16 | 11 | 13 | 8 | 14 | 533 |
| 깊이 6 | 42 | 33 | 35 | 35 | 31 | 19 | 25 | 25 | 30 | 15 | 18 | 19 | 14 | 11 | 10 | 7 | 9 | 9 | 10 | 4 | 401 |
| 깊이 7 | 27 | 37 | 24 | 15 | 14 | 20 | 21 | 19 | 13 | 15 | 12 | 15 | 7 | 14 | 5 | 8 | 9 | 5 | 4 | 3 | 287 |
| 깊이 8 | 26 | 19 | 10 | 9 | 16 | 6 | 10 | 9 | 12 | 10 | 9 | 11 | 9 | 4 | 7 | 3 | 6 | 8 | 4 | 1 | 189 |
| 깊이 9 | 9 | 11 | 14 | 5 | 7 | 7 | 9 | 3 | 4 | 8 | 5 | 6 | 7 | 4 | 2 | 2 | 3 | 2 | 2 | 3 | 113 |
| 깊이 10 | 4 | 5 | 2 | 3 | 6 | 2 | 3 | 2 | 1 | 2 | 5 | 4 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 46 |
| 깊이 11 | 3 | 2 | 1 | 1 | 4 | 0 | 1 | 0 | 0 | 1 | 2 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 19 |
| 깊이 12 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3 |
| 깊이 13 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 분기 합 | 416 | 404 | 364 | 323 | 299 | 252 | 242 | 227 | 225 | 215 | 155 | 153 | 145 | 143 | 131 | 118 | 105 | 96 | 86 | 81 | 4,180 |
| 손실 감소(gain) 몫 | 9.3% | 9.8% | 9.7% | 7.9% | 6.8% | 5.4% | 6.2% | 5.6% | 5.5% | 5.2% | 3.5% | 3.7% | 3.0% | 3.4% | 3.4% | 2.7% | 2.4% | 2.3% | 2.1% | 2.1% | 100% |
뿌리(깊이 0) 행이 각 트리가 가장 먼저 보는 특징이다.
결과
확증 결과
표 2 가 잠근 계획대로의 결과다. 3선 R20(H858)은 확인 575건에서 건당 −0.083틱, 90% 구간 −0.19 ~ +0.03, 한쪽 p 0.89 다. 발견 1,393건에서도 −0.18틱이라 두 구간이 같은 쪽을 가리킨다. 10선 R20(H859)은 확인 478건에서 +0.015틱, 구간 −0.33 ~ +0.37, p 0.47 로 0 과 구분되지 않는다. 10선은 y 의 크기가 커서 Δ 의 표준편차가 3.9틱이고, 잡을 수 있는 가장 작은 개선이 0.45틱이라 작은 개선이 있어도 이 표본으로는 보이지 않는다. LightGBM 은 두 시장 모두 규칙보다 나빠서 3선 −0.22틱, 10선 −0.30틱이다.
H860 은 되돌림 진입(A 와 B 를 합쳐 y ≠ 0 인 350건)에서 단일가가 우리 쪽으로 움직인 비율이다. 55.4% 로 절반을 넘었고 보정 전 p 는 0.020 이지만, 여섯 가설 Holm 보정 뒤 p 는 0.118 이다. 발견 구간에서는 52.7%(p 0.094)로 약했다. H863 은 거래와 상관없이 3선 모든 세션에서 R20 의 q × y 평균이 0.5틱을 넘는지 본 것이다. q × y 평균은 0.27틱으로 0.5 보다 0.23틱 모자라 p 1.00 이다. 여섯 가설 가운데 Holm 보정을 통과한 것은 없다.
| 가설 | 표본 | 확인 평균 | 90% 구간 | 한쪽 p | Holm p | 발견 평균 |
|---|---|---|---|---|---|---|
| H858 3선 R20 Δ | 575 | −0.083 | −0.19 ~ +0.03 | 0.890 | 1.00 | −0.180 |
| H859 10선 R20 Δ | 478 | +0.015 | −0.33 ~ +0.37 | 0.473 | 1.00 | −0.046 |
| H860 단일가가 진입 쪽 비율 | 350 | 55.4% | 51.2 ~ 59.5% | 0.020 | 0.118 | 52.7% |
| H861 3선 LGB Δ | 575 | −0.224 | −0.36 ~ −0.09 | 0.996 | 1.00 | −0.227 |
| H862 10선 LGB Δ | 478 | −0.301 | −0.60 ~ −0.01 | 0.956 | 1.00 | −0.097 |
| H863 3선 전 세션 q × y − 0.5 | 529 | −0.226 | −0.33 ~ −0.12 | 1.000 | 1.00 | −0.272 |
기준선과 분해
그림 3 은 같은 통과에 여러 정책을 걸었을 때의 평균 Δ 다. 항상 연속 거래로 체결하면 3선 확인 −0.51틱, 10선 −0.35틱을 잃는다. 반 스프레드를 매번 내는데 단일가는 평균적으로 우리에게 거의 불리하지 않기 때문이다. 무작위로 고르면 그 절반쯤인 −0.29, −0.24틱이다. R20 은 3선 −0.08틱으로 무작위보다는 낫지만 0 에 닿지 못했고, 10선은 +0.01틱으로 0 이다. 정답을 아는 오라클은 3선 +0.63틱, 10선 +2.37틱이라 이 결정에 걸린 몫 자체는 작지 않다. 문제는 예측이 그 몫을 가져오지 못한다는 것이다.
표 3 은 R20 의 Δ 를 «고르는 비율» 과 «고른 날 단일가가 실제로 불리하게 간 크기» 로 나눈 것이다. 3선에서 R20 은 통과의 34.4% 에서 연속 거래를 골랐고, 그날 단일가는 평균 +0.26틱 우리에게 불리하게 움직였다. 방향은 맞는 편이지만 0.26틱을 피하려고 0.5틱을 냈으니 고를 때마다 평균 0.24틱을 잃은 셈이다. 10선은 35.1% 를 골랐고 그날 단일가가 +0.54틱 불리하게 움직여 비용과 거의 같다. 정책이 이기려면 고른 날의 단일가 움직임이 반 스프레드를 넘어야 하는데, 3선에서는 그 절반에 그쳤다.
| 항목 | 3선 | 10선 |
|---|---|---|
| 연속 거래를 고른 비율 | 34.4% | 35.1% |
| 고른 날 단일가가 불리하게 간 평균 (s × y) | +0.26틱 | +0.54틱 |
| 고르지 않은 날 s × y 평균 | −0.16틱 | −0.06틱 |
| 전체 통과 s × y 평균 | −0.01틱 | +0.15틱 |
| y ≠ 0 인 날 방향 적중률 | 57.3% | 52.9% |
| y = 0 비율 | 16.3% | 7.3% |
| |y| 평균 | 1.67틱 | 5.04틱 |
격자와 비용 민감도
그림 4 는 결정 시각과 모멘텀 창을 바꾼 20칸이다. 3선은 20칸이 모두 음(−0.06 ~ −0.20틱)이라 창이나 시각을 잘못 골라서 생긴 실패가 아니다. 결정을 15:34 로 늦춰 거의 누설에 가까운 정보를 써도 −0.06 ~ −0.18틱이다. 10선은 −0.33 ~ +0.39틱으로 칸마다 부호가 바뀌고, 가장 큰 +0.39틱은 15:34 결정 5분 창이다. 이 칸은 체결 직전 1분의 움직임을 보고 고른 셈이라 실제 운용에서 얻기 어렵다. 10선 칸들이 0 을 사이에 두고 흩어진 모양은 MDE 0.45틱의 잡음 폭과 맞는다.
그림 5 는 반 스프레드 h 와 실행 시점을 바꾼 결과다. h 를 0 으로 두면(스프레드 없이 마지막 체결가에 체결된다는 비현실적 가정) 3선 R20 은 +0.09틱(p 0.09), 10선은 +0.19틱(p 0.18)으로 양이 된다. h = 0.25 에서 3선은 0 이 되고, h = 1.0(왕복 2틱, 또는 10선 100계약이 2호가까지 걷는 경우)에서는 3선 −0.26틱, 10선 −0.16틱이다. 결정 즉시 P33 에 체결하는 판은 3선 −0.13틱, 10선 −0.22틱으로 더 나쁜데, 15:33 이후 2분의 움직임도 단일가와 같은 쪽으로 이어지기 때문이다. 즉 R20 이 맞히는 것은 마감 무렵의 흐름이고 그 흐름은 연속 거래에서도 같이 치른다.
연도와 충격 구간
3선 R20 의 연도별 Δ 는 발견 일곱 해가 모두 음(−0.05 ~ −0.28틱)이고, 확인 세 해는 2024 +0.03, 2025 −0.26, 2026 +0.03틱이다. 특정 해의 사건이 만든 손실이 아니라 해마다 조금씩 진다. 10선은 해마다 −0.57 ~ +0.65틱으로 크게 흔들려 방향이 없다. 충격 달(2020-03, 2022-09 ~ 10, 2024-08, 2024-12, 2025-04)을 빼도 3선 −0.09틱(p 0.89), 10선 +0.01틱(p 0.49)으로 같다. 앞선 실험의 정확한 잔차 규칙 거래 목록으로 확인 구간을 다시 돌려도 3선 244건 −0.07틱(p 0.80), 10선 388건 +0.02틱(p 0.45)이었다.
실패 진단과 변형
왜 지는지를 크기로 보자. 3선 확인 구간 전 세션에서 R20 이 맞히는 몫 q × y 의 평균은 0.27틱이다. 단일가가 움직인 날 적중률이 59.7% 인데, 움직이지 않는 날이 19% 이고 움직인 크기도 대개 1 ~ 2틱이라, 이득이 나려면 적중률이 약 66.5% 는 돼야 한다. 그림 7 은 모멘텀 크기별로 나눈 것이다. 3선은 20분 변화가 클수록 q × y 가 커지지만 5틱 이상에서도 0.49틱으로 반 스프레드에 닿지 못하고, 그런 날은 연 20일 남짓이다. 10선은 1 ~ 2틱의 작은 움직임은 오히려 단일가에서 되돌아가고(q × y −0.2), 5틱 이상에서는 +0.88틱으로 반 스프레드를 넘는다.
그래서 10선에서 큰 움직임만 고르는 변형을 탐색했다. |20분 변화| ≥ k 일 때만 연속 거래를 고르고, k 를 발견 구간에서 고른 뒤 확인 구간에 적용했다. 같은 절차를 모멘텀 열을 연도 안에서 섞은 귀무 500회에 다시 돌려 비교했다. 표 4 처럼 10선은 k = 3 이 골라져(발견에서 가장 높은 칸) 확인 +0.09틱이었고 귀무 대비 p 는 0.076 이다. 3선은 k = 4 가 골라져 −0.02틱(p 0.67)이었다. LightGBM 확신 문턱도 같은 방식으로 골랐는데 3선 −0.03틱(p 0.15), 10선 −0.26틱(p 0.97)이었다. 10선 크기 문턱만 약하게 살아 있고, 이것은 결과를 본 뒤 고른 탐색이다.
| k (틱) | 3선 발견 | 3선 확인 | 10선 발견 | 10선 확인 |
|---|---|---|---|---|
| 1 | −0.180 | −0.083 | −0.046 | +0.015 |
| 2 | −0.075 | −0.005 | +0.012 | +0.097 |
| 3 | −0.053 | +0.001 | +0.082 | +0.093 |
| 4 | −0.011 | −0.017 | +0.068 | +0.146 |
| 6 | −0.033 | −0.022 | −0.008 | +0.100 |
10선의 약한 신호가 실제 비용을 견디는지 보려고 코스콤 5단계 호가 스냅샷(2026-07-09 ~ 08-14, 25일)에서 15:34 대 100계약 시장가의 비용을 쟀다. 15:34:30 마지막 호가로 100계약을 걸어 낸 평균 체결가와 중간가의 차이를 틱으로 잰 것이 표 5 다. 3선은 스프레드가 매일 1틱이고 1호가 잔량이 수백 계약이라 비용이 0.50틱으로 판정 가정과 같았다. 10선은 스프레드는 대개 1틱이지만 1호가 잔량 중앙값이 40계약이라 100계약이 1호가에 들어가는 날이 8% 뿐이었고, 비용이 1.22틱이었다. 마감 직전 15:34:55 에는 1.50틱으로 더 넓었다. 10선을 h = 1.22 로 다시 매기면 R20 −0.24틱, 크기 문턱 k = 3 은 −0.10틱, k = 5 는 −0.03틱이다. 10선의 약한 양의 신호도 실제 100계약 비용에서는 사라진다.
| 시장, 시각 | 스프레드 중앙값 | 1틱인 날 | 1호가 잔량 중앙값 | 1호가 ≥ 100계약 | 100계약 비용 |
|---|---|---|---|---|---|
| 3선 15:34:30 | 1.0틱 | 100% | 684 | 96% | 0.50틱 |
| 3선 15:34:55 | 1.0틱 | 96% | 561 | 92% | 0.55틱 |
| 10선 15:34:30 | 1.0틱 | 88% | 40 | 8% | 1.22틱 |
| 10선 15:34:55 | 1.0틱 | 76% | 34 | 10% | 1.50틱 |
마지막으로 H860 을 풀어 보았다. 되돌림 진입에서 단일가가 우리 쪽으로 온 평균 크기는 0.52틱(우리에게 유리)이었다. 그런데 이 유리함은 10선 진입에서 0.87틱(58%)으로 나왔고, 3선 진입은 0.01틱(51%)으로 거의 없다. 10선 되돌림 청산에서는 거꾸로 단일가가 1.24틱 불리하게 움직였다. R20 이 진입 방향과 반대를 가리킨 날은 62% 였는데, 그날 단일가 이득은 0.66틱, 같은 방향을 가리킨 날도 0.34틱이었다. 단일가가 진입 쪽으로 오는 현상은 예측이 반대를 가리키는 날에만 몰려 있지 않다는 뜻이다.
실행 현실화
여기부터는 판정 뒤에 덧붙인 탐색이다. 먼저 결정과 체결 사이의 시차를 바꿨다. 15:33 에 결정하고 곧바로(P33) 체결하면 3선 −0.13틱, 1분 뒤(15:34 봉 종가) −0.09틱, 주 분석처럼 15:35 직전에 체결하면 −0.08틱이다. 정보를 5분 앞당겨 15:28 에 결정하고 15:33 에 체결하면 −0.14틱, 15:35 직전에 체결하면 −0.10틱이다. 10선은 같은 순서로 −0.22, −0.05, +0.02, −0.06, −0.04틱이다. 어느 시차도 0 을 분명히 넘지 않는다. 3선은 일찍 체결할수록 조금 더 나쁜데, 15:33 이후의 흐름이 단일가 쪽으로 이어지므로 일찍 사면 그 흐름을 연속 거래에서 그대로 치르기 때문이다.
다음은 시장가 대신 최우선 지정가다. R20 이 연속 거래를 고른 날 15:33 에 매수면 매수 호가, 매도면 매도 호가에 지정가를 내고 15:34:59 까지 기다린다. 1분봉으로는 가격이 지정가를 관통한 날을 체결로 봤다. 3선 확인 구간에서 고른 날의 체결률은 36% 였고, 체결된 날 단일가 대비 이득은 −0.25틱이었다. 지정가가 체결되는 날은 가격이 우리 반대쪽으로 지나간 날이고, 그런 날은 단일가가 더 유리했다는 뜻이다(역선택). 못 채운 주문을 단일가로 돌리면 Δ −0.03틱(p 0.77), 시장가로 돌리면 −0.05틱(p 0.75)이다. 10선은 체결률 67%, 체결된 날 이득 −0.43틱, Δ −0.10틱과 −0.18틱이다. 예측 없이 모든 통과에 지정가를 내면 3선 −0.26틱, 10선 −0.69틱으로 더 나쁘다.
1분봉 체결 판정이 거친지 보려고 3선 체결 틱(2024-01 ~ 2026-11-02, 571건)으로 같은 주문을 다시 매겼다. 1분봉 판정과 틱 관통 판정은 89% 일치했다. 우리 주문이 호가 대기열 맨 앞에 선다고 가정하면 체결률 75%, Δ +0.10틱(p 0.047)이지만 이는 닿을 수 없는 상한이다. 마감 전 1호가 잔량(중앙값 821계약) 뒤에 우리 100계약이 선다고 두면 체결률 45%, 체결된 날 이득 −0.01틱, Δ −0.00틱(p 0.53)이다. 지정가로 반 스프레드를 아끼려 해도 체결되는 날의 역선택이 그 몫을 다 먹는다. 개선 효과가 없으므로 기존 전략과의 손익 상관이나 같은 날 겹침 같은 독립성 분석은 해당하지 않는다.
해석
종가 단일가의 방향은 마감 무렵 흐름으로 어느 정도 예측된다. 3선 R20 이 움직인 날의 60% 를 맞힌다는 것은 대회 실험의 결과와 같다. 그러나 방향을 맞히는 것과 그 방향으로 돈을 버는 것은 다른 문제다. 단일가가 직전 체결가에서 움직이는 크기는 3선에서 대개 1 ~ 2틱이고 움직이지 않는 날도 다섯에 하루꼴이라, 맞힌 날 아끼는 몫이 연속 거래로 옮길 때 내는 반 틱을 넘지 못한다. 방향 정확도 58% 는 주문 결정에서 쓸 수 있는 정보량이 아니었다.
또 하나는 예측과 실행이 같은 흐름을 탄다는 점이다. 15:33 에 모멘텀을 보고 결정하면 그 모멘텀은 15:35 까지도 이어져, 연속 거래에서 사는 가격이 이미 그만큼 움직여 있다. 결정 즉시 체결하면 더 나빠지는 결과(그림 5 점선)가 이것을 보여 준다. 단일가 쪽 기다림은 그 흐름의 마지막 몇 틱을 더 치르는 대신 반 스프레드를 아끼는 거래이고, 3선에서는 그 거래가 대체로 이득이었다.
10선은 다르다. 움직임이 크고, 큰 모멘텀 날에는 예측 몫이 반 스프레드를 넘는다. 다만 표준편차가 커서 표본 3년으로는 0.45틱보다 작은 개선을 구분하지 못하고, 10선 호가는 3선보다 얇아 실제 반 스프레드가 0.5틱보다 클 가능성이 높다. 10선의 약한 양의 신호는 실측 비용과 표본 밖 기록 없이는 쓸 수 없다. 운용 측면의 결론은 간단하다. 종가 단일가 체결을 그대로 두고, 단일가 방향 모형을 주문 결정에 쓰지 않는다.
한계
연속 거래 체결가를 15:35 직전 마지막 체결가에 반 스프레드 0.5틱을 더한 값으로 놓았다. 마지막 체결이 매수 호가였는지 매도 호가였는지는 1분봉에서 알 수 없으므로 평균으로는 맞지만 날마다 ±0.5틱의 오차가 있다. 10선은 1호가 잔량이 작아 100계약 시장가가 2호가 이상까지 걷는다. 그 실측 비용(표 5)은 25일 스냅샷 하나에서 잰 값이라 판정에는 쓰지 않았고, 판정은 사전등록대로 h = 0.5 로 했다. 비용이 클수록 결론은 더 나빠질 뿐이다. 반대로 실제 스프레드가 0.5틱보다 좁다면(h = 0.25) 3선도 0 근처까지 올라온다.
대상 거래 가운데 되돌림은 원 변화 문턱을 쓴 대리판이다. 확인 구간에서는 정확한 잔차 규칙 목록으로도 같은 결론을 얻었지만 발견 구간은 대리판뿐이다. 카드 거래표는 2026-08 에서 끝나고, 금통위 전날은 확인 구간 22건뿐이다. 같은 날 되돌림 진입과 카드 청산이 반대로 겹치는 경우가 많아(3선 378일) 실무 주문 수는 통과 수보다 적다.
결정 시각을 15:33 으로 당겼고 대상이 우리 거래가 있는 날로 치우쳐 있어, 대회 실험보다 적중률이 낮게 나올 수 있다. 15:34 결정 격자에서도 3선은 음이었으므로 결론을 바꿀 정도는 아니다. 10선은 Δ 의 표준편차가 3.9틱이라 MDE 가 0.45틱이고, +0.1 ~ +0.3틱의 진짜 개선이 있어도 이 표본으로는 잡지 못한다. 10선 크기 문턱 변형(+0.09틱, p 0.076)과 모멘텀 크기별 분해는 확증 결과를 본 뒤 고른 탐색이다. 우리 주문이 단일가 자체를 움직이는 충격은 재지 않았다. 지정가 변형은 1분봉 관통 판정(3선은 틱으로 확인)이라 대기열 위치와 취소 지연을 단순화했고, 시차와 지정가 분석 모두 결과를 본 뒤 덧붙인 탐색이다.
다음에 해 볼 것
첫째, 10선 큰 모멘텀 날에 1호가 잔량 안의 크기만 연속 거래로 옮기는 분할 규칙을 사전등록해 표본 밖에서 기록한다. 100계약 전부는 실측 비용 1.22틱이라 안 되므로, |15:13 → 15:33 변화| ≥ 5틱이고 방향이 우리 거래와 같은 날 1호가 안의 일부(약 40계약)만 15:34 에 내고 나머지는 단일가에 둔다. 비용은 그날 15:34 호가로 잰 실측값을 쓴다. 둘째, 10선 되돌림 청산에서 단일가가 불리하게 움직인 현상(확인 +1.24틱, 발견 −0.52틱으로 부호가 반대)이 진입일 고유 몫의 크기와 관계가 있는지 2017 ~ 로 늘려 검정한다. 기대는 낮다.
산출물
- 분석과 판정
analysis.md - 사전등록
protocol.md - 정본 런
results/20261108T192250_main/(metrics.json, passes.csv, baselines.csv, grid.csv, sens_h.csv, yearly.csv, per_list.csv, lgb_threshold.csv, explore.json, explore_*.csv, koscom_close_cost.json, deep.json, deep_*.csv) - 코드
code/s0_data.py,code/s1_main.py,code/s2_explore.py,code/s3_koscom.py,code/s4_deep.py,code/render_figures.py
재현은 저장소 뿌리에서 uv run python experiments/0247_close_entry_auction_or_continuous/code/s0_data.py 로 1분봉을 모으고, uv run python experiments/0247_close_entry_auction_or_continuous/code/s1_main.py <출력 폴더> 로 확증과 격자를, 같은 폴더를 인자로 s2_explore.py 와 s3_koscom.py(코스콤 호가 실측 비용), s4_deep.py(시차와 지정가 변형)를 돌린 뒤 render_figures.py 로 그림과 모델 구조도를 만든다. 부트스트랩 seed 는 247 이고 LightGBM seed 는 0 ~ 4 다.
Appendix
A. 데이터셋 실물
정본 런 passes.csv 의 확인 구간 끝 무렵 몇 행이다. 한 행이 통과 하나이고, c1533 은 P33, c1535 는 Pref, P45 는 종가 단일가다. 2026-10-27 3선 A 진입은 매도(s = −1)인데 R20 이 하락(q = −1)을 예측해 연속 거래를 골랐고, 단일가가 2틱 내려 g = 2 − 0.5 = 1.5틱을 아꼈다. 2026-10-28 10선 B 진입은 매수인데 R20 이 하락을 예측해 단일가에 남았고 단일가가 5틱 내려 남은 것이 옳았다.
| 일자 | 시장 | 목록 | s | P33 | Pref | P45 | y | q R20 | p LGB | g | Δ R20 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2026-10-26 | 3선 | A 진입 | −1 | 103.27 | 103.26 | 103.25 | −1 | +1 | 0.410 | +0.5 | 0.0 |
| 2026-10-27 | 3선 | A 청산 | +1 | 103.36 | 103.36 | 103.34 | −2 | −1 | 0.563 | −2.5 | 0.0 |
| 2026-10-27 | 3선 | A 진입 | −1 | 103.36 | 103.36 | 103.34 | −2 | −1 | 0.563 | +1.5 | +1.5 |
| 2026-10-28 | 10선 | B 진입 | +1 | 107.11 | 107.10 | 107.05 | −5 | −1 | 0.338 | −5.5 | 0.0 |
| 2026-11-04 | 10선 | B 청산 | +1 | 108.39 | 108.41 | 108.50 | +9 | +1 | 0.570 | +8.5 | +8.5 |
| 2026-11-05 | 10선 | B 청산 | +1 | 109.08 | 109.08 | 109.19 | +11 | +1 | 0.693 | +10.5 | +10.5 |
하루치 원천 행의 구조는 이렇다. 2026-10-29 3선은 첫 봉 시가 103.30, 15:13 봉 103.30, 15:30 봉 103.31, 15:33 봉 103.31, 15:35 봉 103.32, 15:45 단일가 103.33(거래량 6,922계약)이었고, 같은 날 10선은 107.31, 107.30, 107.37, 107.38, 107.43, 107.45(2,291계약)였다. 캐시 표는 세션 하나가 한 행이고 13:00 ~ 15:35 분마다 종가와 거래량 열, 첫 봉 시가, 마지막 봉 시각, 15:45 단일가와 거래량을 담는다.
B. 모델 입출력 실물
R20 규칙 입력은 두 가격뿐이다. 2026-11-04 10선은 P13 이 15:13 봉 종가, P33 이 108.39 였고 P33 − P13 이 양이라 q = +1 이 나왔다. 그 통과는 매수 청산(s = +1)이라 q = s 가 되어 15:34 에 연속 거래로 사도록 결정했다. 단일가가 108.41 에서 108.50 으로 9틱 올라 Δ = 9 − 0.5 = 8.5틱이었다. LightGBM 은 같은 날 23개 특징을 받아 P(y > 0) = 0.570 을 냈고 같은 결정을 내렸다. 반대로 2026-10-26 3선 A 진입(매도)에서는 R20 이 상승(q = +1)을 예측해 단일가에 남았고, LightGBM 은 0.410 으로 하락을 예측해 연속 거래를 골랐다. 단일가가 1틱 내려 LightGBM 쪽이 0.5틱을 아꼈다.
| 항목 | 2026-11-04 10선 B 청산 | 2026-10-26 3선 A 진입 |
|---|---|---|
| 거래 방향 s | +1 (매수) | −1 (매도) |
| R20 입력 P33 − P13 부호 | + | + |
| R20 출력 q | +1, 연속 거래 | +1, 단일가 |
| LGB 출력 P(y > 0) | 0.570, 연속 거래 | 0.410, 연속 거래 |
| 실제 y | +9 | −1 |
| R20 Δ, LGB Δ | +8.5, +8.5 | 0.0, +0.5 |
C. 실험 설정
| 항목 | 값 |
|---|---|
| 결정 시각 | 15:33:00 (15:33 봉까지 사용) |
| 연속 거래 체결가 | Pref ± h, 주 h = 0.5틱 (민감도 0, 0.25, 1.0) |
| 단일가 체결가 | P45 (15:45 봉 종가) |
| R20 | sign(P33 − P13), 0 이면 단일가 |
| LightGBM | n_estimators 300, learning_rate 0.03, num_leaves 15, min_child_samples 50, subsample 0.8 (freq 1), colsample_bytree 0.8, seed 0 ~ 4 평균 |
| LightGBM 학습 | 확인: 2017 ~ 2023 한 번. 발견: 2019 ~ 2023 연 확장창. y = 0 제외 |
| 되돌림 대리 문턱 | |x| 직전 250세션 분위수, 3선 0.8, 10선 0.67, 최소 120세션 |
| 분할 | 발견 2017-01 ~ 2023-12, 확인 2024-01 ~ 2026-11-05 |
| 검정 | 월 블록 부트스트랩 10,000회(seed 247) 한쪽 p, 여섯 가설 Holm |
| 충격 달 | 2020-03, 2022-09, 2022-10, 2024-08, 2024-12, 2025-04 |
| 격자 | 결정 시각 15:31 ~ 15:34 × 창 5, 10, 20, 30, 60분 |
| 귀무 | 크기 문턱 500회, LGB 확신 문턱 300회, 연도 안 순열 |