먼저 결론
- "앞으로 5일 수익률"을 매일 계산하면 같은 5일을 다섯 번 세게 됩니다.
- 표본이 부풀려지므로 t값도 부풀려집니다. 실측에서 1.4~2.6배였습니다.
- 사전등록 기준을 통과했던 신호 하나가 제대로 계산하니 t 2.54에서 0.49로 사라졌습니다.
무엇을 하고 있었나
분 단위 시세로만 계산할 수 있는 지표 일곱 가지를 만들었습니다. 하루 종가만 봐서는 알 수 없고, 하루 안의 가격 움직임을 전부 봐야 나오는 것들입니다. 실현변동성, 실현왜도, 점프 비중 같은 것들입니다.
각 지표로 종목을 3분위로 나누고, 상위 그룹과 하위 그룹의 이후 5일 수익률 차이를 쟀습니다. 결과를 보기 전에 통과 기준 다섯 개를 미리 정해두고 기록했습니다.
일곱 개 중 두 개가 다섯 기준을 전부 통과했습니다. 그날 검증한 스물두 건 중 처음 있는 일이었습니다.
그런데 계산이 틀려 있었다
월요일에 "앞으로 5일"을 재면 월·화·수·목·금을 봅니다. 화요일에 다시 재면 화·수·목·금·월을 봅니다. 나흘이 겹칩니다.
이걸 매일 반복하면 관측 250개를 얻은 것처럼 보이지만, 실제로 독립적인 정보는 50개뿐입니다. 통계 검정은 관측이 서로 독립이라고 가정하고 계산하므로, 겹친 만큼 확신을 과장하게 됩니다.
겹침 정도를 재봤더니 결과 시계열의 자기상관이 0.40에서 0.77 사이였습니다. 상당히 심한 겹침입니다.
제대로 계산한 결과
두 가지 방법으로 다시 쟀습니다. 하나는 겹침을 흡수하는 표준오차를 쓰는 것이고, 다른 하나는 아예 5일에 한 번씩만 표본을 뽑는 것입니다.
| 원래 계산 | 겹침 보정 | 5일 간격 | |
|---|---|---|---|
| 신호 A | 2.54 | 1.78 | 0.49 |
| 신호 B | -3.28 | -2.01 | -2.33 |
신호 A는 사라졌습니다. 원래 계산에서는 통과 기준을 넘겼지만, 그건 같은 데이터를 다섯 번 센 결과였습니다.
보정하지 않았으면 채택했을 것입니다.
살아남은 신호도 결국 기각했다
신호 B는 겹침 보정 후에도 남았습니다. 그래서 더 캐물었습니다.
- 절반을 떼어 검증하니 통계적 유의성이 사라졌습니다.
- 기간을 반으로 나누니 효과 전부가 후반부에 있었습니다. 전반부는 0에 가까웠습니다.
- 249일 중 상위 10일을 빼니 효과가 절반 이하로 줄었습니다.
- 실제로 실행 가능한 형태로 바꾸니 매매비용을 빼고 연 3% 남짓이었습니다. 그마저 통과 기준 미달이었습니다.
기각했습니다. 그날 스물두 건 중 스물두 건째 기각이었습니다.
배운 것 두 가지
첫째, 겹치는 기간을 쓰는 검정은 반드시 보정해야 합니다. "앞으로 N일 수익률"을 매일 계산하는 방식은 흔합니다. 편하고 표본이 많아 보이기 때문입니다. 그런데 그 늘어난 표본은 대부분 같은 정보의 복사본입니다. 보정하는 방법은 잘 알려져 있고 어렵지도 않습니다. 문제는 보정해야 한다는 사실 자체를 잊는 것입니다.
둘째, 기준을 통과했다는 것이 채택할 이유는 아닙니다. 미리 정한 기준은 잘못된 채택을 막는 하한선입니다. 통과했다고 해서 그 신호가 진짜라는 뜻은 아닙니다. 통과한 뒤에도 기간을 나눠보고, 극단적인 며칠을 빼보고, 떼어둔 데이터로 확인하고, 실제로 실행 가능한지 따져봐야 합니다.
신호 B는 다섯 기준을 전부 통과하고도 이 네 가지 추가 검증에서 무너졌습니다. 기준만 믿었다면 실전에 넣었을 것입니다.
스스로 확인해볼 점
앞으로 N일 수익률로 신호를 검증하고 있다면:
- 관측을 매일 만들고 있습니까, N일에 한 번 만들고 있습니까?
- 매일이라면 결과 시계열의 자기상관을 재보셨습니까?
- 재보지 않았다면, 지금 보고 있는 t값은 실제보다 큽니다. 얼마나 큰지는 재봐야 압니다.