퀀트 / 트레이딩10 분 읽기

매매봇 7개를 1원칙으로 감사했다 — 살아남은 건 2개

페이퍼 매매봇 7개를 한 문장으로 감사했습니다: '이 수익이 스킬이냐 상승장이냐.' 5개가 그 질문에서 죽었습니다. 절대수익은 거의 다 거짓말이었습니다.

#paper-trading#reality-check#backtesting#methodology
개념 도식: 7개 봇 중 5개는 상승장 베타로 탈락, 2개만 생존
절대수익은 부풀고, 초과수익만 진실을 말한다.

페이퍼 매매봇을 7개까지 늘렸습니다. 어느 날 전부 세워두고 딱 한 문장으로 감사했습니다: "이 수익이 스킬에서 나왔나, 그냥 상승장에서 나왔나." 5개가 그 자리에서 죽었습니다.

질문 하나 먼저 드립니다. 당신의 봇 대시보드에 초록색 +수익이 떠 있습니다. 그 숫자는 당신이 시장을 이겼다는 뜻입니까, 아니면 시장이 올랐다는 뜻입니까? 둘을 구분하는 지표가 대시보드에 있습니까? 없다면, 그 초록색은 당신을 속이고 있을 가능성이 높습니다.

무엇을 만들었나

각기 다른 가설의 봇 7개였습니다. 전부 페이퍼(모의) — 실주문 코드는 아예 넣지 않았습니다.

  • LLM 판정 봇 (5분·15분 두 케이던스): 방향 판정을 LLM에 위임.
  • 월말효과 멀티ETF: 캘린더 아노말리(월 뒤 4번째 거래일 매수 → 익월 앞 3번째 매도), ETF 10개 동시.
  • 업비트 코인 스윙: LLM 스크리너가 매일 3종목 픽.
  • 내부자매수 이벤트: 공시(Form 4)의 공개시장 매수만 골라 이벤트 스터디.
  • 저PBR 밸류: 중형주 저PBR 상위 20 동일가중, 월 1회 로테이션.
  • 레버리지 무한매수: 3배 ETF를 분할매수하는 물타기 전략.

처음부터 심어둔 규율이 하나 있었습니다. 데이터가 들어오기 전에 kill/keep 게이트를 적어두는 사전등록입니다. n 몇 개, 승률 얼마, 벤치 대비 초과수익 얼마 — 통과 조건을 미리 코드에 하드코딩하고, 그 뒤로는 안 건드립니다. 이게 없었으면 이 글은 안 나왔습니다.

1원칙 감사 — 판정

대시보드 숫자를 믿지 않고, ledger·실시세·git 이력으로 하나씩 뜯었습니다.

월말효과 멀티ETF — 게이트 도달, FAIL. 완결 거래 30건을 다 채웠습니다. 절대수익 +2.06%. 통과처럼 보이죠. 그런데 같은 보유창 SPY 대비 초과수익이 −0.17%p였습니다. 승률 77%는 "캘린더가 맞았다"가 아니라 "3개월 내내 시장이 올랐다"의 반영이었습니다. 게이트가 정직하게 FAIL을 찍었습니다.

업비트 코인 스윙 — 음의 엣지. 완결 18건, 승률 16.7%. BTC를 그냥 들고 있던 것 대비 매 거래 −3.07%p. 이 구간 BTC는 거의 횡보였으니, "상승장에 묻힌 알파"조차 아닙니다. LLM 픽이 무작위 보유보다 나빴습니다.

빗썸 SMA50 — 데이터 자체가 없음. 배포 후 신호가 줄곧 현금(CASH)이라 거래 0건. 게다가 이 SMA50이라는 파라미터는 9개 지표를 같은 데이터에 돌려 사후에 고른 것이었습니다 — 문서에 스스로 그 편향을 자백해뒀더군요. 검증할 표본도, 애초에 검증할 자격도 없었습니다.

LLM 판정 봇 — KILL. 표본은 충분했습니다(5분 n=324, 15분 n=106). 둘 다 손실(−$56, −$44), 승률이 손익분기 밑. 엣지 없음이 통계적으로 확정됐습니다.

당신이라면 여기서 뭘 보겠습니까

절대수익만 보면 월말효과는 "+2%, 승률 77%"입니다. 자랑하고 싶어지는 숫자죠. 무한매수 봇도 실현손익이 +였습니다. 이것만 보고 실계좌로 넘기겠습니까?

함정은 전부 같은 데서 나왔습니다. 상승장 베타. 최근 몇 달이 우호적이었던 탓에 거의 모든 봇의 절대수익이 부풀어 있었습니다. 월말효과가 그 증거입니다 — 절대 +2%인데 초과는 마이너스. 시장 노출을 켜두기만 하면 나오는 수익을 전략의 공으로 착각한 겁니다. 타이밍 전략 9종이 전부 SPY에 지고 정적 레버리지만 이겼던 이야기와 정확히 같은 함정입니다. 그때도 이긴 건 스킬이 아니라 레버리지였습니다.

살아남은 2개 (그리고 유보 1개)

저PBR 밸류. 아직 리밸런싱 1회, 데이터는 사실상 없습니다. 하지만 설계가 가장 견고했습니다 — 벤치마크가 무비용 지수가 아니라 같은 마찰을 부과한 적격종목 동일가중이라, 한국 증시 롱 베타를 벤치가 흡수하고 저PBR 틸트의 순수 알파만 봅니다. "상승장이라 벌었다"를 구조적으로 배제합니다. 밸류 프리미엄은 학술적으로 문서화된 현상이고요. 결론 낼 데이터가 없을 뿐, 방향이 틀리진 않았습니다.

내부자매수 이벤트. n=3으로 통계는 무의미하지만 방향은 +였고, 내부자매수 드리프트 역시 문서화된 아노말리입니다. 임의의 LLM 픽이나 사후선택 파라미터보다 사전확률이 높습니다.

LLM 판정 봇은 KILL이지만 죽이지 않았습니다. 만기 직전 조기청산했을 때의 반사실 수익을 계측하는 실험(cf)이 아직 안 끝나서, 자본을 안 태우는 페이퍼인 채로 표본만 더 모읍니다.

살아남은 것들의 공통점: 임의의 신호가 아니라, 이미 문서화된 아노말리에 베팅했다. 나머지 5개는 캘린더·LLM 재량·사후선택 — 사전확률이 낮은 것들이었습니다.

자가진단 — 당신의 봇에 지금 물어볼 3가지

  1. 초과수익 게이트가 있는가? 절대수익이 아니라 "벤치 대비" 초과가 판정 기준에 들어가 있는가? 없으면 상승장이 성적표를 대신 써주고 있다.
  2. 게이트를 데이터 본 뒤에 바꾼 적 있는가? git log로 임계값 변경 이력을 봐라. 한 번이라도 옮겼으면 그건 사후선택이다.
  3. 이긴 게 스킬인가 노출인가? 수익을 레버리지·베타를 뺀 뒤에도 남는지 봐라. 대개 안 남는다.

솔직한 부분

이 감사에서 죽은 건 전략이지 정직성이 아니었습니다. 봇들은 손실을 손실로, 페이퍼를 페이퍼로 정직하게 마킹하고 있었습니다 — 사전등록 게이트, 실주문 격리, 미실현손익 낙관 배제. 자기기만 방지 장치는 제대로 작동했습니다. 문제는 엣지였지 회계가 아니었습니다.

그리고 그게 핵심입니다. 대부분의 매매 자기기만은 나쁜 전략이 아니라 좋아 보이는 숫자에서 옵니다. 초록색 +수익, 77% 승률. 초과수익 한 줄을 옆에 세우는 순간 다 무너집니다.

지금 딱 하나만 해보세요: 당신 봇의 절대수익 옆에 "같은 기간 벤치 그냥 보유" 수익을 나란히 적어보세요. 두 숫자가 비슷하거나 벤치가 이긴다면 — 당신의 알파는 베타였습니다.

다음 편에서는 이렇게 죽인 봇들을 후회 없이 정리하는 실전 과정을 씁니다. launchd 중단부터 대시보드 정리, 아카이브 삭제까지.

관련 글