트레이딩 룰을 만들고, 틀린 걸 찾아내는 기록

← 목록

6개월 굴린 백테 엔진의 RS 공식이 틀렸다

2026-09-16 · 코타킴 · 백테 연구 · AI 백테 검증

백테 엔진을 몇 달 굴렸다. 그 숫자를 근거로 룰을 몇 번 고쳤고, 몇 번은 고치지 않기로 했다. 어제 그 엔진의 RS 공식이 처음부터 틀렸다는 걸 찾았다.

무엇이 틀렸나

상대강도(RS)는 IBD 방식으로 최근 4개 분기의 비중첩 수익률에 가중치를 다르게 줘서 더한다. 최근 분기에 가장 큰 가중치(0.4)가 붙는다.

내 코드는 두 군데가 틀렸다.

첫째, 최근 분기를 뽑는 식이 q(0, 63) 이었다. 시작과 끝을 같은 지점에서 잡는 바람에 이 값이 항상 0 이 나왔다. 가중치 0.4짜리 항이 통째로 빠진 채로 6개월을 돌린 것이다.

둘째, 나머지 세 항도 비중첩 분기 수익률이 아니라 누적 수익률을 쓰고 있었다. 1분기 전과 2분기 전이 구간을 공유하니, 같은 기간을 두 번 세고 있었던 셈이다.

얼마나 달라졌나

고쳐서 48개 경로를 다시 돌렸다.

항목 수정 전 수정 후
연복리(중앙값) 기준 기준의 약 2/3
최대낙폭(중앙값) 24.9% 27.4%
워치리스트 겹침 27%가 다른 종목

수익률은 내려갔고 낙폭은 깊어졌다. 같은 기간 지수와 비교하면 수익률은 지수보다 낮고 낙폭은 얕다. 전에 몇 번 "지수를 이긴다"고 적었는데, 그 근거는 사라졌다.

다행이었던 것

실전 신호를 만드는 코드는 별개 파일이었고, 그쪽 RS 구현은 맞았다. 200개 종목을 손으로 검산해서 200/200 일치를 확인했다. 그래서 이 버그 때문에 바뀐 실제 매매는 없다. 잘못된 건 "연구용 숫자"뿐이었다.

그리고 이 버그를 근거로 룰을 바꾼 적이 0건이었다. 바꿀 만한 결과가 나올 때마다 표본이 작거나 신뢰구간이 0을 포함해서 기각했었는데, 그 보수적인 습관이 이번에 사고를 막았다.

남은 것

수정 후에도 내 엔진과 대조군 엔진 사이에 연복리 2.5%p 차이가 남아 있다. 후보 종목은 99.5%가 같은데 성과가 다르다. 원인은 시뮬레이션 단계 어딘가다. 그래서 지금은 하나의 숫자가 아니라 범위로 말하기로 했다.

백테가 좋아지는 글은 많은데 나빠지는 글은 없다. 그게 이상해서, 여기에는 나빠지는 쪽도 적는다.

이 사이트의 글은 필자 개인의 연구 기록이며 소속 기관의 견해가 아닙니다. 특정 종목의 매매를 권유하지 않으며, 게시된 수치는 과거 데이터를 이용한 백테스트 결과로 미래 성과를 보장하지 않습니다.