세 줄 요약
- 30년 금리의 고유 몫(10년과 3년 금리로 설명되지 않는 하루 변화) 5일 합이 2 표준편차를 넘으면 30선을 반대로 잡고 10선으로 헤지해 다음 날 시가부터 5 세션 들었다. 확인 구간(2024-02 ~ 2026-10) 실제 선물 거래는 19건, 비용 뒤 건당 +1.7틱, 중앙값 −40.1틱, 승률 37%, 한쪽 p 0.49 다. 같은 거래를 민평 금리로 s+1 종가부터 재면 −20.1틱이다.
- 발견 구간(2014 ~ 2023) 민평 금리 대리 손익은 63건 +17.0틱(p 0.009)이었지만, 이익이 2021 ~ 2023 에 몰려 있었고 2014 ~ 2020 은 0 근처, 2022 를 빼면 p 0.13 이다. 국고 30년, 50년 입찰이 보유 창에 낀 거래가 더 크다는 가설도 차이 +13.2틱, p 0.24 로 지지되지 않았다.
- 판정은 폐기다. 초장기 고유 몫의 되돌림은 금리 급등기의 현상이었고 2024 년 이후 실제 손익은 0 과 구별되지 않는다. 빈도도 연 7.0건으로 낮다. 독립 감사가 찾은 누설(미래 결측으로 신호를 거름)을 고쳐 다시 돌린 결과이며 판정은 고치기 전과 같다.
가설과 결론
주식 퀀트에서 흔한 생각 하나는 종목 수익에서 시장과 업종 같은 공통 요인 몫을 걷어 내면 남는 고유 몫이 더 깨끗한 신호라는 것이다. 이 실험은 그 생각을 국고채 커브의 장기 끝에 옮겼다. 30년 금리는 대부분 10년과 3년 금리를 따라 움직이지만, 초장기물 수급(보험사 수요, 입찰 물량)에 따라 혼자 움직이는 날이 있다. 그렇게 혼자 벌어진 몫이 5일 안에 되돌아온다면, 30선을 반대로 잡고 10선으로 공통 요인을 지운 포지션이 이익을 낼 것이다.
- 가설 H384(확증 주)
- 고유 몫 z 의 절댓값이 2 이상인 날 30선을 되돌림 방향으로 잡고 10선으로 헤지해 다음 날 시가부터 5 세션 뒤 종가까지 들면, 확인 구간(2024-02-19 ~ 2026-10-30) 실제 선물 손익의 건당 평균이 판정 비용 뒤 0 보다 크다. 월 블록 부트스트랩 한쪽 p < 0.05(Holm).
- 가설 H385(확증)
- 보유 창에 국고 30년 또는 50년 경쟁입찰일이 낀 거래의 대리 손익이 그 밖 거래보다 크다(2014 ~ 2026). 한쪽 p < 0.10(Holm).
- 결론
- H384 는 건당 +1.7틱, p 0.492, Holm p 0.492. H385 는 차이 +13.2틱, p 0.237, Holm p 0.474. 둘 다 지지되지 않았다. 판정은 폐기다.
| 가설 | 표본 | 값 | 한쪽 p | Holm p | 문턱 | 판정 |
|---|---|---|---|---|---|---|
| H384 실제 손익, 판정 비용 뒤 | 확인 19건(연 7.0건) | +1.7틱 | 0.492 | 0.492 | < 0.05 | 미지지 |
| H385 입찰 창 − 그 밖(대리) | 34건 대 48건 | +13.2틱 | 0.237 | 0.474 | < 0.10 | 미지지 |
사전등록 때 예측은 «건당 +5틱 안팎» 이었다. 확인 구간의 평균은 0 과 구별되지 않고 중앙값은 −40틱이다. 몇 건의 큰 이익이 평균을 끌어올렸고, 같은 거래를 민평 금리로 재면 −20.1틱이다.
용어와 기호
- 3선, 10선, 30선
- 한국거래소 3년, 10년, 30년 국채선물. 가격으로 거래하며 금리가 오르면 가격이 내린다. 이 페이지는 벤더의 연결 일봉(만기 다음 날 다음 월물로 넘어가며 이어 붙인 계열)을 쓴다
- 틱
- 선물 가격의 최소 단위 0.01. 세 선물 모두 1계약 1틱이 1만원이다. 손익은 모두 30선 1계약 기준 틱이다
- 민평 금리
- 민간 채권평가사들이 매일 장 마감 뒤 매기는 국고채 잔존 만기 구간별 평가 금리(%). 3년, 10년, 30년 구간을 쓴다
- Δyk(s)
- s 일 민평 k년 금리의 전일 대비 변화(bp, 1bp = 0.01%p)
- b10, b3
- 직전 250 영업일에서 Δy30 = a + b10·Δy10 + b3·Δy3 를 최소제곱으로 맞춘 기울기. s 일 값은 s−250 ~ s−1 로만 추정한다
- e(s), 고유 몫
- e(s) = Δy30(s) − b10·Δy10(s) − b3·Δy3(s). 10년과 3년 금리로 설명되지 않는 30년 금리 변화(bp)
- E5, z
- E5(s) = e(s−4) + … + e(s). z(s) = E5(s) ÷ (직전 250일 E5 의 표준편차, s−1 까지). z > 0 이면 30년 금리가 요인 대비 올랐다(30선이 요인 대비 쌌다)
- b1
- 직전 250일 Δy30 를 Δy10 하나에 회귀한 기울기. 10선 하나로 헤지할 때 분산을 가장 줄이는 비율
- DV01
- 금리 1bp 변화에 대한 가격 변화. 여기서는 종가 × 수정듀레이션(벤더 일봉 값)에 비례하는 값을 쓰고 30선과 10선의 비만 쓴다
- h, 헤지 비율
- h = b1 × DV0130 ÷ DV0110. 30선 1계약당 반대로 잡는 10선 계약 수. 확인 구간 평균 1.88
- gross, 판정 비용
- gross = 방향 × [(30선 청산가 − 진입가) − h × (10선 청산가 − 진입가)] ÷ 0.01. 판정 비용 = 30선 왕복 2틱 + 10선 왕복 1틱 × h. 보고 비용 = 3틱 + 1.4틱 × h
- 대리 손익
- 민평 금리로 잰 같은 헤지 포지션 손익. −방향 × [(y30 변화) − b1 × (y10 변화)] × K, s+1 종가부터 s+5 종가까지. K = 30선 1bp 당 틱 = 24.0(확인 구간 중앙값으로 고정)
- 입찰 창
- 보유 창 s+1 ~ s+5 안에 국고 30년 또는 50년 경쟁입찰일이 하루라도 있는 거래
- 월 블록 부트스트랩, 한쪽 p
- 진입 월을 덩어리로 5,000번 복원 추출해 평균을 다시 계산하고, 평균이 0 이하인 비율을 한쪽 p 로 쓴다
- Holm
- 확증 가설 두 개의 p 를 작은 것부터 2배, 1배 해 다중검정을 보정하는 절차
- 승률
- 비용 뒤 손익이 0 보다 큰 거래의 비율
- 칼만 필터
- b10, b3, 상수항이 매일 조금씩 무작위로 움직인다고 보고(랜덤워크) 새 관측마다 갱신하는 상태공간 추정. q 는 상태 잡음 분산, r 은 관측 잡음 분산
자료
데이터셋
| 자료 | 기간 | 해상도 | 행 수 | 결측과 특이 | 쓰임 |
|---|---|---|---|---|---|
| 국고채 민평 금리 3년, 10년, 30년 | 2012-09-10 ~ 2026-10-30 (30년 기준) | 일별 장 마감 뒤 | 3,478일 | 결측 0, 30년 무변화일 134일 | 고유 몫, 신호, 대리 손익 |
| 30선 연결 일봉 | 2024-02-19 ~ 2026-10-30 | 일봉 시가, 종가, 수정듀레이션 | 644일 | 거래량 0 인 날 15일, 2026-08-20 ~ 28 중 6일 없음 | 확인 구간 실제 손익 |
| 10선, 3선 연결 일봉 | 2012-01-02 ~ 2026-10-30 | 일봉 | 3,628일 | 결측 0 | 헤지 다리, DV01 |
| 선물 만기일 | 2013 ~ 2026-12 | 분기 | 41회 | 없음 | 롤 주간 거르기 |
| 국고 30년, 50년 경쟁입찰 | 2012-09 ~ 2026-10 | 입찰일 | 257회(경쟁) | 비경쟁 행 제외 | H385 입찰 창 |
표본과 거르기
- 보유 창(s+1 ~ s+5)에 선물 만기 롤 주간(만기 전 3 영업일 ~ 만기일)이 걸리면 그 신호는 건너뛴다. 30선과 10선 연결 일봉은 만기 다음 날 새 월물로 넘어가며 이음매에서 값이 뛴다. 그날의 시가와 종가는 거래량 최다 월물의 값과 같았다(30선 11회, 10선 40회 전부). 그래서 롤 주간을 빼면 이음매 점프가 손익에 들어가지 않는다.
- 신호는 s 일에 아는 것(z, 겹침 금지, 미리 공표된 만기 달력)으로만 고른다. 30선 일봉이 비는 날(연말 휴장, 2026-08-20 ~ 28 수집 구멍)이 보유 창에 있어도 신호를 버리지 않는다. 가격은 s+1 이후 첫 30선 일봉의 시가와 s+5 이후 첫 30선 일봉의 종가로 매기고, 헤지 비율은 s 이전 마지막 일봉의 DV01 로 정한다. 확인 구간 신호 19건 모두 가격이 있고, 그중 1건(2026-08-26 신호)은 결측 때문에 진입이 08-31 시가로 밀렸다.
- 한 포지션을 드는 동안 새 신호는 무시한다. 다음 진입은 이전 청산 다음 날 시가부터다.
언제 무엇을 아는가
민평 금리 s 일 값은 s 일 장 마감 뒤 평가값이라 s 일 저녁에야 안다. 그래서 진입은 s+1 시가다. 베타와 표준편차는 s−1 까지의 자료로만 추정한다. 대리 손익은 민평이 장 마감 값뿐이라 s+1 종가에 들어간 것으로 계산했고, 이 때문에 s+1 하루의 움직임은 대리 손익에 들어가지 않는다.
방법
매일 저녁 30년 금리 변화를 10년과 3년 금리 변화로 설명하고 남은 몫 e 를 구한다. e 를 5일 더한 E5 를 그 흔들림으로 나눈 z 가 ±2 를 넘으면 신호다. 30년 금리가 요인 대비 크게 올랐으면(z ≥ 2) 30선이 상대적으로 싸다고 보고 30선을 사고 10선을 h 계약 판다. 반대면 반대다. 다음 날 시가에 들어가 5 세션 뒤 종가에 나온다. 문턱 2, 보유 5일, 추정 창 250일은 미리 정했고 실험 안에서 고르지 않았다.
검정은 월 블록 부트스트랩 한쪽 p 와 Holm 이다. 참고로 확인 구간 안에서 같은 개수의 날짜를 무작위로 골라 같은 방향 분포로 거래한 귀무 1,000회도 함께 냈다.
모델
고유 몫 회귀
모델은 매일 다시 맞추는 선형 회귀 둘이다. 2요인 회귀(Δy30 를 Δy10, Δy3 에)가 고유 몫을 정하고, 1요인 회귀(Δy30 를 Δy10 에)가 10선 헤지 비율을 정한다. 둘 다 상수항을 넣고, 직전 250 영업일(최소 200일)로 맞춘다. 학습된 기울기의 실제 경로가 아래 그림이다.
betas.csv). 그리기 전에 원자료에서 세 날짜의 롤링 회귀와 칼만 필터 마지막 상태를 다시 계산해 저장값과 같은지 확인했다. 30년 금리는 10년 금리에 0.7 ~ 1.0 으로 붙어 있고, 10년을 넣은 뒤의 3년 기울기 b3 는 0 근처다. 그래서 10선 하나의 헤지(b1, 파랑)와 2요인 헤지가 거의 같다. 점선 오른쪽이 확인 구간이다.매매 규칙
- 신호
- |z(s)| ≥ 2
- 방향
- z ≥ 2 면 30선 매수, 10선 h 계약 매도. z ≤ −2 면 그 반대
- 진입, 청산
- s+1 시가 진입, s+5 종가 청산(5 세션 보유). 손절과 조기 청산 없음
- 비용
- 판정 30선 2틱 + 10선 1틱 × h, 보고 3틱 + 1.4틱 × h
칼만 필터(탐색)
H386 은 고정 창 대신 칼만 필터로 기울기를 매일 갱신하면 헤지 오차가 줄어드는지 본다. 상태는 상수항, b10, b3 셋이고 각각 분산 q 의 랜덤워크로 움직인다. q 와 r 은 2013 ~ 2023 에서 최대우도로 격자(q 10−7 ~ 10−3 다섯 값, r 10−1 ~ 101 네 값) 중 하나를 골랐고 q = 10−5, r = 100.5 가 뽑혔다. 평가는 한 걸음 앞 예측 오차의 제곱 평균이다. 그림의 점선이 학습된 칼만 기울기다.
결과
확증 결과
| 항목 | 값 |
|---|---|
| 판정 비용 뒤 건당 평균, 중앙값, 승률 | +1.7틱, −40.1틱, 37% |
| 월 블록 부트스트랩 한쪽 p | 0.492 |
| 비용 전 gross | +5.6틱 (p 0.43) |
| 보고 비용 뒤 | −0.04틱 |
| 충격 구간(2024-12-03 ~ 13, 2025-04-02 ~ 15) 제외 | 18건, +7.3틱 (p 0.42) |
| 매수 14건 / 매도 5건 | −5.9틱 / +23.1틱 |
| 연도별(2024 / 2025 / 2026) | 3건 +103.1 / 5건 +8.0 / 11건 −28.8 |
| 다리 분해: 30선 다리 / 10선 헤지 다리 | +21.6틱 / −16.0틱 |
| 같은 거래의 민평 대리 손익(s+1 종가부터) | −20.1틱 (p 0.92) |
| 거래 하나의 표준편차 | 119틱 |
| 무작위 날짜 귀무 평균, 95% 분위 | −7.1틱, +29.4틱 |
평균 +1.7틱은 거래 하나의 흔들림(119틱)에 비해 0 과 구별되지 않는다. 다리로 나누면 30선 다리가 +21.6틱, 10선 헤지 다리가 −16.0틱이다. 헤지가 공통 요인을 지우면서 이익의 대부분도 지웠다. 무작위 날짜 귀무의 95% 분위(+29.4틱)에도 한참 못 미친다.
발견 구간 대리 손익
| 연도 | 거래 | 건당 대리 gross(틱) |
|---|---|---|
| 2014 ~ 2020 | 41 | 연도별 −29.7 ~ +17.2 |
| 2021 | 6 | +47.8 |
| 2022 | 10 | +64.6 |
| 2023 | 6 | +44.5 |
| 전체 | 63 | +17.0 (p 0.009), 비용 3틱 뒤 +14.0 (p 0.027) |
| 2022 제외 | 53 | +8.0 (p 0.13) |
입찰 창
H385 는 2014 ~ 2026 전체에서 입찰 창 34건 +16.1틱, 그 밖 48건 +2.9틱, 차이 +13.2틱, 집단 안 복원 추출 5,000회 한쪽 p 0.237(Holm 0.474)이다. 방향은 예측대로지만 문턱 0.10 에 닿지 않았고, 확인 구간에서는 입찰 창 거래도 −14.5틱이다.
탐색 결과
| 번호 | 내용 | 거래 | 비용 뒤 건당 | 한쪽 p |
|---|---|---|---|---|
| H386 | 칼만 대 롤링 250일 한 걸음 앞 제곱오차 비 | 확인 0.988, 발견 0.979 | 해당 없음 | 해당 없음 |
| H387 | 문턱 1.5 | 34 (연 12.6) | +14.9틱 | 0.17 |
| H387 | 문턱 2.5 | 10 | −16.8틱 | 0.71 |
| H388 | 10선과 3선 두 다리 헤지 | 19 | −0.8틱 | 0.52 |
| H389 | 헤지 없는 30선 단독 | 19 | +19.6틱 | 0.31 |
칼만 필터는 헤지 오차를 1 ~ 2% 줄인다. 매매 손익을 바꿀 크기가 아니다. 문턱 1.5 와 헤지 없는 30선 단독은 평균이 양이지만 p 0.17, 0.31 이고 결과를 본 뒤의 비교라 판정에 쓰지 않는다.
해석
초장기 고유 몫이 크게 벌어진 뒤의 되돌림은 발견 구간에서도 2021 ~ 2023 년에만 나타났다. 그 3년은 금리 급등과 큰 변동성이 이어진 시기이고, 2014 ~ 2020 은 0 근처였다. 확인 구간 실제 손익은 평균 +1.7틱, 중앙값 −40틱이고 2026 년 11건은 −28.8틱이다. 같은 거래를 s+1 종가부터 잰 대리 손익은 −20.1틱이라, 남은 양의 평균은 진입 첫날의 움직임이나 선물과 현물의 차이에서 왔을 가능성이 크다. 5일에 걸친 고유 몫 되돌림은 확인 구간에서 보이지 않는다. 평균은 2024-12 두 건과 2026-05-29 한 건의 큰 이익에 크게 기대고 있어 몇 건만 바뀌어도 부호가 바뀐다.
한계
- 30선 실제 일봉이 2024-02-19 부터만 있다. 30선 상장은 2021-02 이지만 그 앞 일봉을 이번 실행에서 받지 못했다. 그래서 발견 구간은 민평 대리 손익만 쓰고 판정은 2024 년 이후 실제 거래 19건으로만 했다. 표본이 작다.
- 독립 감사 반영(결과 뒤 수정). 첫 런은 보유 창에 30선 일봉 결측이 있으면 신호를 버렸다. 2026-08 수집 구멍은 신호일에 알 수 없는 정보라 누설이 맞다. 신호 집합을 s 일 정보로만 정하고 다시 돌렸다. 신호 세 건이 바뀌었고 판정은 그대로다. 정본 런은 수정 커밋 뒤에 돌렸다.
- 2026-08-26 신호는 결측 때문에 진입이 08-31 시가로 밀렸다. 실제로는 08-27 시가에 들어갔을 거래다.
- 대리 손익은 s+1 종가 진입이라 실제 규칙(s+1 시가 진입)과 하루 어긋나고, 1bp 당 틱 K = 24.0 을 확인 구간 중앙값 하나로 고정했다. K 는 상수 배라 대리 손익의 부호와 p 는 바꾸지 않고 틱 크기만 바꾼다.
- 30선은 거래가 얇다. 확인 구간 하루 거래량 중앙값이 98계약이다. 왕복 2틱과 3틱은 작은 주문 기준이고 큰 주문의 실제 비용은 더 크다. 10선 1틱도 실측 스프레드보다 낮을 수 있다. 보고 비용만으로도 평균이 0 아래(−0.04틱)다.
- 연 7.0건으로 빈도가 낮다. 문턱 1.5 에서도 연 12.6건이다. 유의했더라도 «드문 전략» 이라 보류였을 것이다.
- 민평 30년 구간은 2013 년 이후 무변화일이 134일 있어 초기 고유 몫에 평가 지연이 섞였을 수 있다.
- 칼만 잡음 분산은 발견 구간 격자 20개 중 최대우도로 골랐다(탐색). 3선 연결 일봉은 만기 다음 날 값이 거래량 최다 월물과 자주 어긋나(40회 중 35회) 3선 다리를 쓰는 H388 은 탐색으로만 둔다.
산출물
- 계획
protocol.md(사전등록 eb6c8e6, 수정 3038a75 는 독립 감사 반영) - 분석, 판정
analysis.md - 코드
code/data.py(자료 층과 점검),code/run.py(확증과 탐색),code/render_figures.py(그림, 재현 검사 포함),code/collect_cont.py(30선 앞 구간 수집 시도) - 정본 런
results/20261102T221521_main/(metrics.json, trades_conf.csv, trades_disc_proxy.csv, trades_all_proxy.csv, signal.csv, betas.csv) - 무효 런
results/20261102T215735_main_void_/(미래 결측으로 신호를 거른 첫 런, 비교용으로만 남김)
Appendix
A. 데이터셋 실물
입력: 민평 금리(%) 몇 행과 정본 런의 신호 계열(signal.csv). e 와 E5 는 bp 다.
| 날짜 | y3 | y10 | y30 | e | E5 | z |
|---|---|---|---|---|---|---|
| 2026-05-27 | 3.717 | 4.107 | 4.106 | −2.50 | −1.22 | −0.35 |
| 2026-05-28 | 3.767 | 4.145 | 4.114 | −2.26 | −3.09 | −0.88 |
| 2026-05-29 | 3.723 | 4.065 | 3.996 | −5.35 | −9.38 | −2.66 |
| 2026-06-01 | 3.790 | 4.179 | 4.132 | 해당 없음 | 해당 없음 | 보유 중 |
출력: 확인 구간 거래 원장(trades_conf.csv)의 실제 행. g30, g10 은 각 선물의 진입부터 청산까지 가격 변화(틱)다.
| signal | side | z | h | g30 | g10 | gross | cost | net |
|---|---|---|---|---|---|---|---|---|
| 2024-11-29 | 매도 | −2.72 | 2.16 | +92 | −1 | −94.2 | 4.2 | −98.3 |
| 2025-10-31 | 매수 | +2.45 | 2.00 | −390 | −151 | −88.3 | 4.0 | −92.3 |
| 2026-05-29 | 매도 | −2.66 | 1.82 | −594 | −192 | +243.7 | 3.8 | +239.9 |
| 2026-08-05 | 매수 | +2.02 | 1.65 | −320 | −120 | −121.7 | 3.7 | −125.3 |
B. 모델 입출력 실물
2026-05-29 신호 하나가 실제로 받은 입력과 낸 출력이다.
- Request meta
- 2026-05-29 장 마감 뒤 민평 금리로 신호 계산, 규칙 R(|z| ≥ 2, s+1 시가 진입, s+5 종가 청산, 10선 헤지)
- Input
- 그날 변화 Δy30 = −11.8bp, Δy10 = −8.0bp, Δy3 = −4.4bp. 직전 250일 기울기 b10 = 0.810, b3 = −0.007, b1 = 0.804. 30선 종가 116.60, 수정듀레이션 16.55, 10선 종가 107.50, 수정듀레이션 7.91
- Model response
- e = −11.8 − 0.810 × (−8.0) − (−0.007) × (−4.4) = −5.35bp, E5 = −9.38bp, z = −2.66. 30년 금리가 요인 대비 크게 내렸으므로 30선 매도. h = 0.804 × (116.60 × 16.55) ÷ (107.50 × 7.91) = 1.82, 10선 1.82계약 매수. 06-01 시가 30선 116.58, 10선 107.37 에 진입
- Ground truth check
- 06-08 종가 30선 110.64, 10선 105.45. g30 = −594틱, g10 = −192틱. gross = −1 × (−594 − 1.82 × (−192)) = +243.7틱, 비용 3.8틱 뒤 +239.9틱. 보유 기간(06-01 ~ 06-08) 민평 30년 금리는 +19.8bp, 10년은 +16.6bp 올라 30년이 b1 × 10년(+13.3bp)보다 더 올랐다. 이 거래에서는 고유 몫이 실제로 되돌아갔다
C. 실험 설정
| 항목 | 값 |
|---|---|
| 회귀 창, 최소 관측 | 250 영업일, 200일 (s−250 ~ s−1) |
| z 표준편차 창 | 직전 250일 E5 (s−1 까지), 최소 200일 |
| 문턱, 보유 | |z| ≥ 2, s+1 시가 ~ s+5 종가 |
| 헤지 | h = b1 × DV01 비, 10선 하나 |
| 비용 | 판정 30선 2틱 + 10선 1틱 × h, 보고 3틱 + 1.4틱 × h, 대리 손익은 3틱 |
| 거르기 | 보유 창에 롤 주간(만기 전 3 영업일 ~ 만기일) 또는 30선 결측일이 있으면 제외 |
| 분할 | 발견 2014-01 ~ 2023-12(대리), 확인 2024-02-19 ~ 2026-10-30(실제) |
| 검정 | 월 블록 부트스트랩 5,000회 한쪽 p, Holm(H384, H385), H385 는 집단 안 복원 추출 5,000회 |
| 칼만 | 상태 상수항, b10, b3 랜덤워크, 초기 분산 1, q 와 r 은 2013 ~ 2023 최대우도 격자 20개(q = 10−5, r = 100.5) |
| 난수 seed | 20261102 |