매일 밤 대시보드를 열어보는 게 습관이 됐다. 대체로 숫자는 조용히 오르내렸다. 그런데 6월 어느 날부턴가, 그 조용함이 사라졌다.
6월 1일 0%에서 시작한 누적 손익 곡선이 6월 16일까지는 -23.64%로 완만하게 내려갔다. 이 구간은 로직도 거의 그대로였다. 문제는 그 다음이었다. 6월 17일부터 26일까지 단 10일 동안 곡선이 -23.64%에서 -60.60%까지 곤두박질쳤다. 그리고 그 안에서도 6월 23일 하루가 압도적이었다 — 이 하루에만 -16.54%, 22건 매도에 승률 9.1%. 월말엔 6/29~30 이틀간 반등(+4.90%, +0.87%)으로 -53.59%까지 일부 회복했지만, 6월은 결국 -53% 근처에서 마감됐다.
| 구간 | 누적% | 비고 |
| 6/1 시작 | 0% | - |
| 6/16 | -23.64% | 로직 거의 무변경 |
| 6/23 | -51.85% | 단일 최악의 날: -16.54% |
| 6/26 | -60.60% | 6월 최저점 |
| 6/30 | -53.59% | 말일 이틀 반등 |
참고로 이 %는 복리(포지션 크기를 반영한 자본곡선)가 아니라, 거래당 손익률을 단순 합산한 값이다. 실제 계좌 잔고 감소율과는 다를 수 있지만, 어느 구간에서 무너졌는지를 보는 데는 충분했다.
이 시리즈를 쓰면서 배운 게 하나 있다면, 숫자가 나쁠 때일수록 감으로 원인을 짚으면 안 된다는 것이다. 그래서 용의자를 하나씩 세워놓고, 하나씩 지워보기로 했다.
용의자 A — 특정 종목이 사고를 쳤나 CLEARED
가장 먼저 의심한 건 특정 코인의 단독 폭락이었다. 6/17~6/26 구간 종목별 손익을 뽑아보니:
| 종목 | 손익 | 건수 |
| ETH | -10.70% | 24건 |
| SOL | -11.01% | 23건 |
| BTC | -4.93% | 10건 |
| DOGE | -5.16% | 4건 |
| XRP | -2.50% | 15건 |
| NEAR | -2.08% | 12건 |
| LINK | -0.58% | 3건 |
거래량 대비 골고루 분산돼 있었다. 최악의 날인 6/23조차 ETH·NEAR·DOGE·SOL·BTC 다섯 종목에 걸쳐 동시에 손실이 났다. 한 종목의 폭락이 아니라, 거래하던 코인 전반에서 같은 패턴이 반복된 거였다. 종목 탓은 아니었다.
용의자 B — 국면 판단이 틀렸나 CLEARED
④편에서 다뤘던 시장 국면(상승·중립·하락) 분류 로직도 의심했다. 확인해보니 6월 한 달 매도 137건 전부가 neutral 또는 bear 태그였고, bull 태그는 단 한 건도 없었다. 처음엔 이것도 버그가 아닐까 싶었는데, BTC 실거래가를 직접 찍어보니 6/1 108,946,000원에서 6/23 93,972,000원까지 내내 하락 중이었다. 4~6월 전체를 봐도 BTC의 최대 상승폭은 13.9%에 그쳤다 — 애초에 상승장이랄 게 없었던 거다. 국면 판정은 정확했다. 문제는 판정 자체가 아니라, 그 판정 뒤에 물려있던 파라미터 쪽이었다.
용의자 D — 봇이 오작동했나 CLEARED (부차적)
⑥편에서 다룬 중복 프로세스 문제도 다시 들여다봤다. 실제로 6/22 09:22엔 NameError가 2회, 6/24 13:36경엔 TypeError가 8회 발생했다. 워치독 로그에도 6/20, 6/24에 "중복 프로세스 감지 → 전체 종료 후 재시작" 이벤트가 있었다. 실재하는 버그들이었다. 하지만 시간대가 안 맞았다 — 오류와 재시작이 몰린 건 6/22, 6/24였는데, 손실이 집중된 건 6/23이었다. 결정적으로 최악의 날인 6/23엔 워치독 재시작이 새벽 06:38 딱 한 번뿐이었다. 봇이 흔들렸던 날과 계좌가 무너진 날이 어긋나 있었다. D는 고쳐야 할 문제이긴 했지만, 이 사건의 범인은 아니었다.
A, B, D를 차례로 지우고 나니 남는 건 하나였다. 그리고 그게 이 시리즈에서 이미 세 번이나 이름을 올렸던 로직이라는 걸 깨달았을 때, 솔직히 좀 소름이 돋았다. ③편에서 "3층 구조"라고 자신 있게 소개했던 바로 그 손절 로직이었다.
6/17~6/26 구간 매도 사유를 다시 뜯어보면, trailing_stop 하나가 63건에 합계 -44.68%로 손실의 절대다수를 차지하고 있었다. 반면 dynamic_breakeven(+7.86%)이나 bollinger_upper(+5.24%)는 오히려 정상적으로 수익을 지켜내고 있었다. 유독 하나의 장치만 계속 피를 흘리고 있었던 셈이다. 왜 하필 그 장치만 이렇게 됐는지는, 다음 편에서.
본 게시글은 자동매매 봇의 실거래 로그를 바탕으로 한 운영 기록이며, 특정 종목이나 전략의 수익을 보장하지 않습니다. 암호화폐 투자는 원금 손실 위험이 있으며, 모든 투자 판단과 책임은 투자자 본인에게 있습니다.
지난 편: 웹에서 봇에게 명령을 보내는 기능을 만들어놓고도 넉 달 동안 쓴 적이 없었다는 이야기 — ⑦ 명령 파일은 넉 달째 빈 채로 있다
다음 편: 용의자는 좁혀졌다. 이제 그 손절 로직이 정확히 어떻게 손실을 만들어냈는지, 진범의 얼굴을 본다 — ⑨ 6월 -53% ② 진범