← 코타랩

클로드 백테스트를 그대로 믿는다면 속고 있는 겁니다

2026.09.16

멀쩡해 보이던 백테 코드에서 핵심 항이 통째로 빠진 버그 발견

AI 두 개로 엔진을 따로 만들어 대조, 후보 종목 99.5% 일치

백테 결과는 숫자 하나가 아니라 범위로

백테스트 수익률이 잘 나왔다.

그럼 제일 먼저 뭘 해야 할까?

기뻐할 게 아니라 계산부터 의심해야 한다.

AI한테 백테스트를 맡기면 코드도 표도 금방 나온다.

근데 코드가 돌아간다고 전략이 제대로 들어갔다는 뜻은 아니다.

이걸 내가 제대로 겪었다.

내가 겪은 버그와, 수익률보다 먼저 확인할 5가지를 끝에 정리했다.

멀쩡히 돌던 코드가 틀려 있었다

상대강도(RS)는 최근 네 분기 수익률에 가중치를 줘서 계산한다.

제일 최근 분기의 가중치가 0.4로 가장 크다.

근데 코드에서 이 값이 항상 0이었다.

제일 중요한 항이 통째로 빠져 있었던 거다.

시험 채점을 하는데 배점이 제일 큰 문제를 아예 안 매긴 꼴이다.

나머지 항도 틀렸다.

분기별 수익률을 써야 하는데 누적 수익률을 쓰고 있었다.

코드는 한 번도 안 멈췄고 결과도 그럴듯했다.

그러니 더 몰랐다.

고쳐서 다시 돌렸더니 숫자가 바뀌었다.

항목 수정 전 수정 후
연복리 중앙값 기준 기준의 약 2/3
최대낙폭 중앙값 24.9% 27.4%
선택 종목 기준 27% 변경

수익률은 3분의 2로 줄었고 낙폭은 더 깊어졌다.

“지수를 이긴다”던 결과도 사라졌다.

고친 백테스트에서는 수익률은 지수보다 낮고, 낙폭은 지수보다 얕았다.

속은 쓰리다.

그래도 틀린 숫자를 믿고 매매하는 것보다는 낫다.

AI 두 개한테 따로 만들게 했다

그 뒤로 확인 방식을 바꿨다.

서로 다른 AI 두 개한테 같은 전략으로 백테스트를 각자 만들게 했다.

마지막이 중요하다.

수익률만 보면 “조금 다르지만 비슷하네” 하고 넘어가게 되기 때문이다.

날짜별 후보, 조건별 신호 수, 체결 수처럼 수익률이 나오기 전 단계부터 맞춰 본다.

두 학생 답이 같아도 풀이 과정을 대조해봐야 어디서 실수했는지 보이는 것과 같다.

이렇게 대조해 보니 버그가 3개나 더 나왔다.

처음 찾은 RS 버그까지 합치면 이렇다.

버그무슨 일이 있었나
RS 최근 분기 항
가중치 0.4
항상 0이었다. 나머지 항은 분기별이 아니라 누적 수익률이었다
신규 상장주
거래대금 상위 3분의 1
한쪽은 미리 빼고 골랐다. 실제 매매 봇은 넣고 계산한다
백분위 기준
66.667 vs 2/3
경계에 걸린 종목이 매일 몇 개씩 바뀌었다
break 하나
신호 막는 조건
조건이 맞는 날마다 막아야 할 신호를 첫날 하루만 막고 멈췄다

넷 다 에러는 하나도 안 났다.

99.5%가 같아도 수익률은 달랐다

버그를 고친 뒤 두 엔진을 맞춰 본 결과는 이렇다.

비교한 것결과메모
두 엔진이 고른
후보 종목
99.50% 일치버그를 고친 뒤
연복리2.5%p 차이후보가 거의 같은데도 갈렸다
실제 매매 신호 코드200개 중 200개손 검산과 전부 일치

후보가 거의 같은데 수익률은 왜 달랐을까?

같은 날 신호가 여러 개 뜨면 뭘 먼저 사느냐에 따라 결과가 달라진다.

슬리피지를 얼마로 잡느냐도 영향을 준다.

내가 보기엔 이 차이는 코드 오류가 아니라 실제로 운용해도 생기는 차이다.

그래서 백테스트 결과는 숫자 하나가 아니라 범위로 본다.

수익률보다 먼저 확인할 5가지

수익률을 보기 전에 이 다섯 가지를 먼저 해 본다.

할 일잡히는 것
항을 따로 찍기
항마다 값을 뽑는다
최근 분기 수익률에서 0이 반복되는 것
손으로 계산
아무 종목 10개를
엑셀로 계산한다
자동 결과끼리 비교하면 반복되는 같은 오류
단계별 종목 수
후보·통과·체결을
단계마다 센다
고친 뒤 목록이 크게 바뀌면 전략 자체가 바뀐 것
엔진 하나 더
같은 문장으로
따로 만든다
누가 맞는지보다 어디서 갈렸는지
여러 번 돌리기
매수 순서와
슬리피지를 바꾼다
연복리 하나가 아니라 분포와 최악의 경우

실제 매매는 틀리지 않았다

천만다행으로 실제 매매 신호를 만드는 코드는 따로 있었고, 계산식도 맞았다.

위 표의 200개 손 검산이 그걸 확인한 거다.

백테스트 결과만 보고 룰을 바꾼 적도 없었다.

표본이 작거나 신뢰구간(효과가 있을 법한 범위)에 0이 들어가면 기각하던 습관이 날 살렸다.

제일 위험한 오류는 실행을 멈추는 오류가 아니다.

결과가 그럴듯해서 의심조차 안 하게 만드는 오류다.

댓글

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

링크가 복사되었습니다