Sun 08-16 · 오늘 4건 · 통산 1,461호
falette
스크랩 쪽지 로그인
업비트 자동매매 봇 만들기
 

⑧ 6월 −53% ① 용의자 지우기

매일 밤 대시보드를 열어보는 게 습관이 됐다. 대체로 숫자는 조용히 오르내렸다. 그런데 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% ② 진범

댓글 0
첫 번째 댓글을 남겨보세요
댓글 작성
LOGIN