3년 국채선물 · 미국 10년 금리 · 카드 날 2013 ~ 2026 · 시변 계수 칼만 필터 사이징 대 R1

칼만 필터로 추적한 되돌림 강도가 최근보다 셀 때 카드를 키우면 손익이 나아지는가

미국 10년 금리 1bp 변화에 3년 국채선물 다음 날 장중이 몇 틱 따라 움직이는지(되돌림 강도)를 칼만 필터로 매일 추적했다. 강도가 최근 60일 평균보다 크면 카드를 1.5배, 아니면 0.5배로 실은 뒤, 총 계약을 같게 맞춰 기존 사이징(R1)과 같은 날 일별 손익을 비교했다.

폐기 · 확인 −0.08틱/일, p 0.65 강도와 다음 카드 손익 상관 0.03 카드 날 1,326일

세 줄 요약

  1. 칼만 필터 강도가 최근 평균보다 클 때 카드를 1.5배, 작을 때 0.5배로 실으면, 총 계약을 R1 과 같게 맞춘 뒤 일별 손익 차이가 발견 +0.080틱/일(p 0.32), 확인 −0.082틱/일(p 0.65) 이었다.
  2. 추적한 강도와 다음 카드 손익의 상관은 발견 0.10, 확인 0.03 이다. 확인 구간에서는 «강도가 센» 상태의 카드 손익(+1.50틱)이 «약한» 상태(+1.77틱)보다 오히려 낮았다.
  3. 칼만 필터로 추적한 되돌림 강도는 다음 카드 손익을 가르지 못한다. 판정은 폐기다.

가설과 결론

이 프로그램의 기준 전략(이하 카드)은 미국 10년 금리가 밤사이 3bp 이상 움직인 다음 날, 한국 3년 국채선물을 그 반대 방향으로 시가에 사거나 팔아 종가에 청산하는 되돌림 매매다. 계약 수는 원화 충격의 방향에 따라 1 또는 0.5 로 정한다(R1).

되돌림의 세기는 시기마다 다르다. 어떤 해에는 미국 금리가 1bp 오를 때 3선이 다음 날 장중에 0.5틱 넘게 되돌아오고, 어떤 해에는 거의 되돌아오지 않는다. 최근 되돌림이 센 시기라면 카드를 크게, 약한 시기라면 작게 싣는 것이 낫지 않을까. 이 실험은 그 세기를 칼만 필터로 매일 추적하고, 최근 평균보다 셀 때만 카드를 크게 싣는 규칙이 R1 보다 나은지 물었다.

주가설
가설내용결과한쪽 p판정
H289확인 구간 일별 손익 차이(강도 사이징 − R1, 총 계약 같게) 평균 > 0−0.082틱/일(419일)0.652미지지, 폐기

확인 구간 90% 구간은 [−0.449, +0.267] 이고, 확인 4개 연도 중 2개만 양이다. 같은 프로그램 주가설 63개(H259 ~ H321)에 Holm 보정을 걸면 1.00 이다. 판정은 폐기다.

용어와 기호

3선
한국거래소 3년 국채선물(최근월 연결). 가격으로 거래하며 금리가 오르면 가격이 내린다
틱
3선 가격의 최소 단위 0.01. 계약당 1만원
세션 s, e
s 는 정보가 쌓이는 한국 거래일, e 는 다음 한국 거래일. 매매는 e 에서만 한다
g_us
미국 10년 국채금리의 하루 변화(bp, 뉴욕 날짜 s). 1bp 는 0.01%p
intra_next3
3선 e 시가 → e 종가(틱)
카드 날
|g_us| ≥ 3bp, e 가 s 의 다음 달력일, 3선 롤 날이 아닌 날. 방향 sign(g_us)(채권 매수가 +)
gross
카드 한 계약 손익 = sign(g_us) × intra_next3(틱)
R1 가중 w
원화 고유 충격 ε 의 방향이 미국 금리와 어긋나면 1계약, 같으면 0.5계약, ε 가 없으면 1계약
ε
원화 고유 충격. 밤사이 원화 변화에서 달러인덱스와 g_us 몫을 뺀 나머지
되돌림 강도 β
intra_next3 = β × g_us + 잡음 에서의 β. 미국 금리 1bp 에 3선이 다음 날 장중 몇 틱 반대로(시가 갭을 되돌리는 쪽으로) 움직이는가. 양이면 되돌림이 있다
칼만 필터
시간에 따라 천천히 변하는 숨은 값(여기서는 β)을 매일 새 관측으로 조금씩 고쳐 추정하는 방법. 새 관측을 얼마나 믿을지는 두 잡음 분산의 비율이 정한다
q, r
q 는 β 가 하루에 얼마나 움직일 수 있는가(상태 잡음 분산), r 은 하루 장중 손익의 β 로 설명되지 않는 흔들림(관측 잡음 분산, 틱²)
필터 β
행 s−1 까지의 자료로만 만든 β 추정치. 규칙은 이 값을 쓴다(행 s 의 결과를 보지 않는다)
강도 상태
필터 β 가 그 직전 60행 필터 β 평균보다 크면 «셈», 아니면 «약함». 평균을 만들 행이 40 개 미만이면 중립(1배)
로그 우도
주어진 q, r 에서 실제 관측이 나올 확률의 로그 합. 클수록 그 q, r 이 자료를 잘 설명한다
총 계약 맞추기
구간마다 새 규칙의 총 계약을 R1 총 계약과 같게 비례 조정(발견 × 0.978, 확인 × 1.109)
월 블록 부트스트랩
같은 달 날짜를 한 덩어리로 다시 뽑기를 5,000번 해 평균의 분포를 만든다. 한쪽 p 는 평균 > 0 쪽
발견 구간, 확인 구간
발견 2013-01 ~ 2022-12(q, r 을 정하는 데도 씀), 확인 2023-01 ~ 2026-10(판정)
Holm 보정
여러 가설을 함께 시험할 때 우연한 통과를 막도록 p 를 가설 수에 맞춰 단계적으로 키우는 방법

자료

데이터셋

쓴 자료
자료원천기간해상도쓰임
3선 시가, 종가인포맥스 단말 일봉(연결)2013 ~ 2026-10일intra_next3, gross
미국 10년 금리FRED DGS102013 ~ 2026-10일g_us, 카드 날
원화 NDF, 달러인덱스인포맥스 단말2013 ~ 2026-10일ε → R1 가중
표본
항목발견 2013 ~ 2022확인 2023 ~ 2026-10
필터에 넣은 날(롤 날, 결측 제외, 카드 날만이 아니라 모든 날)2,333880
카드 날907419
고정 기울기(intra_next3 ~ g_us 최소제곱, HAC t)0.360(t 4.45)0.152(t 2.52)
필터 β 평균, 표준편차0.291, 0.2490.188, 0.196
필터 β 범위−0.40 ~ 1.40−0.26 ~ 0.83

언제 무엇을 아는가

하루의 흐름(한국 시간)
시각일어나는 일
s 일 15:453선 s 종가. 행 s−1 의 intra_next3(= s 일 장중)까지 확정되어 필터 β 갱신
e 일 새벽 5 ~ 6시뉴욕 날짜 s 의 미국 10년 금리 확정. 카드 날 판단
e 일 08:20 이전필터 β 와 60행 평균 비교, 강도 상태와 크기 배수 결정. ε 와 R1 가중 계산
e 일 개장3선 시가 진입(2025-11 까지 09:00, 그 뒤 08:45)
e 일 15:45종가 청산. 이 결과는 다음 날 필터에 들어간다

방법

  1. 잡음 분산 정하기. 발견 구간 2,333행에서 q 5개 × r 5개 격자의 로그 우도를 계산해 가장 큰 쌍(q = 0.001, r = 100)으로 고정한다.
  2. 강도 추적. 2013-01 부터 모든 날에 칼만 필터를 돌려 β 를 매일 갱신하고, 행 s 에서는 행 s−1 까지의 필터 값을 쓴다.
  3. 크기 정하기. 카드 날 계약 = w × (필터 β > 직전 60행 평균 ? 1.5 : 0.5). 평균이 없으면 1배.
  4. 총 계약 맞추기와 비교. 구간별로 총 계약을 R1 과 같게 맞추고, 같은 카드 날 (새 − R1) 손익 평균을 잰다. 비용은 계약당 왕복 1틱. 확인 구간 월 블록 부트스트랩 5,000회 한쪽 p.
  5. 판정에 쓰지 않는 탐색. 카드 날 필터 β 와 카드 1계약 손익의 상관(E1).

모델

모델은 계수가 시간에 따라 변하는 회귀다. 무엇을 학습하나: 미국 금리 변화가 3선 다음 날 장중을 얼마나 끌어당기는지(β)를 매일 새로 추정한다. 왜 넣었나: 고정 회귀는 10년 평균 강도 하나만 주지만, 실제 강도는 시기마다 바뀌는 것으로 보이므로(아래 그림) 그 변화를 따라가면 카드가 잘 듣는 시기를 미리 알 수 있을지 보려 했다.

칼만 필터와 잡음 분산

모델 설정
항목값
관측식intra_next3t = βt × g_ust + 잡음(분산 r), 상수 없음
상태식βt = βt−1 + 잡음(분산 q), 랜덤워크
초기값β0 = 0, 분산 1
표본2013-01 부터 모든 거래일(롤 날, 결측 제외), 3,213행
q, r 선택발견 구간 로그 우도 격자 최대. q ∈ {10−6, 10−5, 10−4, 10−3, 10−2}, r ∈ {50, 100, 200, 400, 800}
고른 값q = 0.001, r = 100(로그 우도 −8,660.4)
규칙이 쓰는 값행 s−1 까지의 필터 β, 문턱은 직전 60행(최소 40) 필터 β 평균
크기 배수셈 1.5, 약함 0.5, 중립 1
q, r 격자의 로그 우도
학습 단계 그대로 그렸다. 발견 구간 2,333행에서 q, r 25쌍의 로그 우도(커밋된 확증 런과 같은 쌍을 고르는 것을 확인했다). 우도는 r 에 크게 기대고 q 에는 거의 기대지 않는다. r = 100 열에서 q 를 10−6 에서 10−2 로 바꿔도 우도 차이는 15 안쪽이다. 자료는 «β 가 얼마나 빨리 바뀌는가» 를 잘 가려 주지 못한다.

추적된 강도

칼만 필터 되돌림 강도의 경로
필터 β(파랑), 규칙의 문턱인 직전 60행 평균(주황), 필터 β 의 95% 띠(회색), 두 구간의 고정 기울기(점선). 강도는 2014 ~ 2015 년과 2018 년, 2022 년 말에 높고 2016 년, 2020 ~ 2021 년, 2024 년 말에 0 근처다. 그러나 95% 띠가 대부분 0 을 걸칠 만큼 넓어, 하루하루의 β 추정은 매우 불확실하다.

q = 0.001 이면 β 의 하루 표준편차가 약 0.03 이라, 60 거래일이면 약 0.25 를 움직일 수 있다. 필터는 이 정도 속도의 변화를 따라가도록 맞춰졌다. 그 결과 강도 상태(평균보다 셈 또는 약함)는 발견 구간 카드 날 사이에 100번, 확인 구간에 42번 바뀌었다.

결과

확증 결과

주가설 H289(확증 런 results/20261029T160608_main/, 비용 뒤)
항목발견 2013 ~ 2022확인 2023 ~ 2026-10
카드 날907419
R1 일평균(틱)1.4910.789
강도 사이징 일평균(총 계약 맞춘 뒤)1.5720.707
일별 차이 평균(틱/일)+0.080−0.082
블록 부트스트랩 한쪽 p, 90% 구간0.315, [−0.203, +0.370]0.652, [−0.449, +0.267]
차이가 양인 연도5 / 102 / 4
총 계약 맞추기 배율0.9781.109
Holm 보정 p(63개)1.00
E1 필터 β 와 카드 손익 상관0.0970.034

q, r 을 정한 발견 구간에서도 차이는 +0.08틱/일로 우연과 구별되지 않았고, 확인 구간에서는 음이다. 강도를 추적해 크기를 바꾸는 것은 R1 보다 나은 점이 없다.

상태와 연도로 보면

아래는 판정에 쓰지 않는 기술 통계다(results/20261030T165616_detail/, 격자 선택과 확증 수치를 먼저 다시 만들어 일치를 확인한 뒤 계산).

강도 상태별 카드 손익과 연도별 차이
왼쪽: 강도 상태별 카드 1계약 손익 평균(비용 전). 발견 구간에서 «셈» 상태가 0.22틱 높을 뿐이고, 확인 구간에서는 오히려 «약함» 상태가 0.27틱 높다. 오른쪽: 연도별 새 규칙 − R1 차이. 양과 음이 번갈아 나오고, 발견 구간 양의 합은 2013 년과 2022 년 두 해가 대부분을 만든다.
강도 상태별 카드 성적
항목발견확인
«셈» 상태 카드 날 비율52%40%
«셈» 상태 카드 손익(틱, 비용 전), 날+2.64, 473+1.50, 169
«약함» 상태 카드 손익, 날+2.42, 421+1.77, 250
중립(평균 없음) 비율1.4%0%
상태가 바뀐 횟수(카드 날 사이)10042
연도별 손익 합(틱, 비용 뒤)
연도R1강도 사이징차이연도R1강도 사이징차이
2013+171.0+234.2+63.22020−24.5−66.2−41.7
2014+45.5−0.7−46.22021+56.5+48.2−8.3
2015+80.0+33.7−46.32022+784.0+886.9+102.9
2016+51.5+14.4−37.12023+258.0+216.8−41.2
2017+52.0+81.6+29.62024−38.5−55.2−16.7
2018+10.5+42.8+32.32025+99.0+118.1+19.1
2019+126.0+150.6+24.62026(10월까지)+12.0+16.6+4.6

해석

되돌림 강도가 시기마다 다른 것은 사실이지만(고정 기울기가 발견 0.36, 확인 0.15), 하루 장중 손익의 잡음(r = 100, 표준편차 10틱)에 비해 g_us 가 주는 신호가 작아 강도의 단기 변화는 추정 오차에 묻힌다. 필터의 95% 띠가 거의 늘 0 을 걸치는 것이 그 증거다. 그래서 «최근 평균보다 셈» 이라는 판단은 대부분 잡음의 오르내림이다. 강도의 장기 평균은 쓸모가 있어도, 60일 단위의 오르내림으로는 다음 카드 날을 가르지 못한다.

한계

  • q, r 은 25쌍 격자의 최대로 정했다. 연속 최적화는 하지 않았지만 우도가 q 에 거의 둔감해 결론에 영향이 작다.
  • 관측식에 상수가 없고 g_us 하나만 쓴다. 원화 충격 같은 다른 설명 변수를 함께 넣은 시변 회귀는 시험하지 않았다.
  • 필터는 카드 날만이 아니라 모든 거래일로 갱신된다. 미국 금리가 작게 움직인 날은 β 정보가 거의 없어 그날 갱신은 작다.
  • 총 계약 맞추기 배율(0.978, 1.109)은 구간 전체를 본 뒤 정해진다. 실제 운용에서는 미리 알 수 없는 값이다.

산출물

  • 계획protocol.md(사전등록 88b2c97)
  • 코드code/s1_kalman.py(확증), code/s_detail.py(격자, 경로, 상태, 연도), code/render_figures.py(그림)
  • 런results/20261029T160608_main/, results/20261030T165616_detail/(ll_grid.csv, beta_path.csv, card_days.csv, metrics.json)

Appendix

A. 데이터셋 실물

card_days.csv 의 실제 행(일부 열, 2026 년 10월 카드 날). 열은 s, g_us(bp), 방향, R1 가중 w, gross(틱), 필터 β, 60행 평균, 크기 배수, R1 손익과 새 규칙 손익(총 계약 맞춘 뒤, 비용 뒤).

card_days.csv 일부(소수 셋째 자리 반올림)
sg_us방향wgross필터 β60행 평균배수R1새 규칙
2026-10-01−5−10.5−70.2270.2720.5−4.00−2.22
2026-10-13−3−11+40.1330.2590.5+3.00+1.66
2026-10-15−9−11−150.1430.2540.5−16.00−8.87
2026-10-19+6+11+190.0630.2440.5+18.00+9.98
2026-10-22−17−11+170.1070.2330.5+16.00+8.87

B. 모델 입출력 실물

Request meta
카드 날 s = 2026-10-22(미국 10년 −17bp), e = 2026-10-23. 필터는 q = 0.001, r = 100, 행 2026-10-21 까지 갱신. 확인 구간 총 계약 배율 1.109
Input
필터 β = 0.107, 직전 60행 필터 β 평균 = 0.233, R1 가중 w = 1(ε 가 미국 금리와 반대 방향)
Model response
0.107 ≤ 0.233 이므로 «약함» 상태, 크기 배수 0.5. 계약 = 1 × 0.5 × 1.109 ≈ 0.55계약 3선 매도(R1 은 1계약)
Ground truth check
3선 장중 −17틱 → 매도 gross +17. R1 손익 +16.00, 새 규칙 0.55 × 16 = +8.87. 강도가 «약함» 이라던 날에 되돌림은 1bp 당 1틱으로 오히려 컸다

C. 실험 설정

  • 카드|g_us| ≥ 3bp, 다음 달력일 세션, 3선 롤 날 제외, 3선 시가 → 종가, R1 가중(불일치 1, 일치 0.5)
  • 칼만 필터intra_next3 = β g_us + 잡음, β 랜덤워크, β0 = 0, P0 = 1, q 와 r 은 발견 구간 로그 우도 5 × 5 격자 최대(q 0.001, r 100)
  • 사이징필터 β(행 s−1 까지) > 직전 60행(최소 40) 평균이면 1.5배, 아니면 0.5배, 평균 없으면 1배, 구간별 총 계약을 R1 에 맞춤
  • 비용계약당 왕복 1틱
  • 분할발견 2013-01 ~ 2022-12, 확인 2023-01 ~ 2026-10
  • 문턱확인 구간 일별 차이 평균 > 0, 월 블록 부트스트랩 5,000회(seed 66) 한쪽 p < 0.05, 63개 Holm, 확인 연도 다수 양수
  • 탐색E1 카드 날 필터 β 와 카드 손익 상관