손실의 86%를 만든 버그 하나
첫 자동매매는 청산 190건에서 모의 자금 510만 원을 잃었습니다. 손실을 청산 사유별로 나누자 코드 경로 하나가 86.5%를 차지했습니다. 그리고 같은 버그가 우리를 한 번 더 속였습니다.
만든 방법: 코드, 연구 실행, 이 글의 초안은 운영자의 지시를 받은 AI 도우미(Claude)가 만들었고, 모든 결정과 숫자 확인은 운영자가 했습니다. 모든 매매는 모의(실제 시세, 실제 돈 없음)였습니다. 투자 권유가 아닙니다.
청산 사유별 손실
| 청산 사유 | 건수 | 손익(원) | 평균 | 승률 | 보유 중앙값 |
|---|---|---|---|---|---|
| 확인 없는 경보 청산 | 157 | −4,416,442 | −0.37% | 10.2% | 12초 |
| 보유 시간 만료 | 18 | −244,623 | −0.26% | 38.9% | 2시간 |
| 확인된 경보 청산 | 6 | −684,389 | −2.10% | 0% | 14분 |
| 추적 손절 | 5 | +613,519 | +2.33% | 100% | 18분 |
| 손절 | 2 | −386,990 | −3.69% | 0% | 23분 |
| 기타 | 2 | +13,194 | — | — | — |
190건 중 157건이 한 규칙에서 나왔습니다. 확인도, 최소 보유 시간도, 가격이 실제로 움직였는지 확인도 없이 즉시 파는 경보였습니다. 보유 시간 중앙값은 12초였습니다. 같은 원장으로 잰 왕복 비용 중앙값이 0.43%였으니 가격이 움직이지 않아도 손실이었습니다. 그중 97건(62%)은 가격이 진입가에서 0.35%도 안 움직였는데 손실로 끝났습니다.
진입 30초 안에 나온 청산 114건이 그것만으로 전체 손실의 63%였습니다.
코드가 한 일
같은 파일에서 다른 경보 두 가지는 이미 팔기 전에 확인 단계를 거치고 있었는데, 이 경보만 빠져 있었습니다. 자매 모듈은 몇 주 전에 같은 문제를 고쳤지만 이 모듈은 아니었습니다. 확인되지 않은 경보는 최소 보유 20초, 왕복 비용보다 큰 실제 손실, 6초 확인을 모두 만족할 때만 팔도록 바꿨고, 손절과 급락 청산 같은 안전장치는 그대로 즉시 작동하게 두었습니다.
원장에 대 보면 새 규칙은 경보 청산 157건 중 143건을 막았을 것입니다. 이것을 개선이라고 주장하지 않았습니다. 청산을 막았다는 것은 그 순간 왕복 비용을 확정하지 않았다는 뜻일 뿐, 계속 들고 있었다면 가격이 어떻게 됐을지는 이 원장으로 증명할 수 없습니다.
두 번째 실수
감사에서는 3분 신호 창의 거래가 442만 원을 잃었고 1시간 창은 돈을 벌었다는 것도 나왔고, 우리는 3분 창 거래를 줄이자고 권고했습니다. 하루 뒤 그 권고를 거뒀습니다. 3분 창 거래 158건 중 157건이 바로 그 경보 청산이었습니다. 그것을 빼면 3분 창 거래는 한 건뿐이었습니다. 코드 경로 두 개를 비교해 놓고 시간틀의 차이라고 부른 것입니다.
같은 2차 감사에서 비슷한 결함을 하나 더 찾았습니다. 확인된 경보 청산 6건이 모두 자기 손절선 안쪽(평균 −2.0%)에서 팔았고, 6종목 중 5종목이 15분 뒤 더 높았습니다. 경보가 위험 계획을 앞질러 자른 것입니다. 경보가 손절선보다 먼저 팔지 못하게 했습니다.
얻은 것
- 전략을 탓하기 전에 손실을 청산 사유별, 코드 경로별로 나누세요. 버그 하나가 나쁜 전략과 똑같아 보입니다.
- 자료에서 찾은 패턴이 변장한 버그일 수 있습니다. 비교하는 두 무리가 같은 코드를 거쳤는지 확인하세요.
- 거래 8~12건으로 정책을 바꾸지 마세요.
- 증거를 남기세요. 190건 중 청산 뒤 가격 기록이 남은 것은 32건뿐이었습니다. 50건짜리 기록이 나머지를 덮어썼기 때문입니다. 200건으로 늘렸습니다.
버그를 고친 것은 버그를 고친 것이지 근본 문제를 고친 것이 아니었습니다. 전략의 거래당 우위는 여전히 비용보다 작았습니다. 6주 전체 이야기