자동매매 프로그램을 바로 고치지 않았다. 백테스트보다 먼저 계측판을 달았다
오늘 자동매매 프로그램을 점검했다.
처음 목적은 단순했다. 최근 손실이 나고 있어서, 매매 조건을 바꿔야 하는지 확인하려는 것이었다. 그런데 점검할수록 진짜 문제는 조건 자체가 아니었다. 조건을 바꿔도 되는지 판단할 수 있는 구조가 부족하다는 점이었다.
백테스트 코드를 뜯었더니 룩어헤드 편향이 있었다. 룩어헤드 편향은 실제 매매 시점에는 알 수 없는 미래 정보를 백테스트에 사용해 성과가 과장되는 문제다. T일 종가로 신호를 판단하면서, 같은 T일 종가로 체결 처리를 하고 있었다. 실제 장중 자동매매에서는 알 수 없는 가격이다.
체결 기준을 T+1 시가로 수정하자 성과 수치는 낮아졌다. 하지만 그게 더 정직한 숫자였다.
유니버스 편향도 확인했다. 현재 기준으로 선정된 40종목을 5년 전으로 되돌려 백테스트하면, 미래에 살아남았거나 강해진 종목이 이미 포함된다. 그래서 절대 수익률을 그대로 믿기는 어렵다고 봤다.
RS 기준과 MA20 이격 상한도 비교했다. old-15는 더 엄격한 RS 기준이고, loosen-30은 최근 시장 대응을 위해 완화한 RS 기준이다. 여기에 이격 상한 8%, 12%, 15%를 각각 대조했다.
백테스트상 상대적으로 좋아 보이는 조건은 있었다. 하지만 실거래 30건을 같이 보니 바로 바꾸기 어려웠다. old-15였다면 절반 이상의 거래가 차단됐을 가능성이 있었다. 백테스트 숫자만 보고 실거래 조건을 바꾸기에는 근거가 부족했다.
오늘 내린 결론은 하나다.
현행 조건을 유지한다. 대신 로그를 보강했다. 매수 신호마다 RS 값, 초과 RS 값, MA20 이격률이 남도록 했고, shadow_report 구조를 만들었다. shadow_report는 실제 주문은 바꾸지 않고, 후보 조건이 적용됐을 때의 결과를 나란히 비교하기 위한 관찰용 기록이다.
2주간 실거래 데이터를 쌓은 뒤 다시 판단한다.
오늘은 프로그램을 고친 날이 아니다. 함부로 고치지 않기 위한 계측판을 단 날이다.
작업 기록
| 항목 | 내용 |
|---|---|
| What I built | shadow_report 구조와 실거래 로그 보강 |
| What broke | 백테스트에 룩어헤드 편향이 있었다 |
| What I learned | 전략 변경보다 관찰 구조가 먼저다 |
→ 관련 Insight: 백테스트가 좋아 보여도 전략을 바로 바꾸면 안 되는 이유
→ 자동매매 프로젝트 전체 기록
※ 본 콘텐츠는 개인의 자동매매 운영 실험 기록이며 투자 권유가 아닙니다.
투자의 판단과 책임은 본인에게 있습니다.