헤리티지 알람봇 백테스트 — ATR 밴드 최적화로 수익 5배 만든 과정
승률 83.6%인데 수익은 고작 +2.1%였습니다.
처음 백테스트 결과를 본 순간, 저는 솔직히 멍해졌습니다. 100번 중 83번을 맞췄는데 왜 통장은 그대로일까요? 무언가 단단히 잘못돼 있었습니다. 그리고 그 답을 찾는 과정에서, 같은 신호로 수익을 5배까지 끌어올릴 수 있었습니다.
이 글은 그 4단계 여정의 솔직한 기록입니다. 따라 하실 수 있도록 숫자 하나하나 그대로 공개합니다.
무엇을 백테스트했나
헤리티지 알람봇은 바이비트 USDT 선물 전체를 스캔해서, 정해진 숏(매도) 조건을 충족하는 알트코인만 골라 텔레그램으로 쏘아주는 봇입니다. 자세한 조건 로직은 이전 글에서 다뤘으니, 오늘은 "그 신호가 실제로 돈이 됐는가"에만 집중하겠습니다.
검증 구간과 기준은 다음과 같습니다.
- 기간: 2026년 5월 30일 ~ 6월 2일 (최근 3일)
- 표본: 봇이 발생시킨 숏 신호 73건
- 익절/손절 기준선: ATR Bands (Period 20, Multiplier 2.5, Source 종가)
ATR Bands는 변동성을 따라 움직이는 두 개의 띠입니다. 가격이 위쪽 띠에 닿으면 과열, 아래쪽 띠에 닿으면 과매도로 보는 식이죠. 숏 진입 후 아래쪽 띠를 익절, 위쪽 띠를 손절 기준으로 삼는
📝 백테스트 처음 돌렸을 때의 충격
처음 ATR 밴드 원본 그대로 백테스트를 돌렸을 때 결과가 나왔다. 승률 72%, 수익률 +2.03%. 나쁘지 않아 보였지만 기대와 달랐다. 당시 이 봇으로 월 10% 이상을 기대했는데, 연 2%는 은행 적금보다 낫지 않은 수준이었다. 뭔가 반드시 바꿔야 한다는 확신이 왔다. 그게 최적화 작업의 시작이었다.
4단계 최적화 — 숫자로 따라가기
1단계 · 원본 그대로 (밴드 익절 / 밴드 손절)
처음엔 ATR 밴드를 그대로 익절·손절선으로 썼습니다.
- 승률: 83.6%
- 누적 손익(P&L): +2.10%
- 손익비(RR): 0.37 (평균 익절 +0.41% vs 평균 손절 −1.10%)
문제가 보이시나요? 자주 맞지만, 한 번 맞을 때 버는 돈(+0.41%)보다 한 번 틀릴 때 잃는 돈(−1.10%)이 거의 3배입니다. 승률로 번 걸 손실 한 방이 다 깎아먹는 구조였습니다.
2단계 · 손절 조이기 (SL 축소)
"손실을 줄이면 되겠지." 손절선을 더 타이트하게 당겨봤습니다.
결과는 배신이었습니다. 손절폭은 줄었지만, 정상적인 변동성에 미리 튕겨 나가는 횟수가 늘면서 승률이 급락했습니다. 줄인 손실폭보다 잃은 승률이 더 컸습니다.
3단계 · 익절 늘리기 (TP 확장)
이번엔 반대로 익절 목표를 멀리 잡아 RR을 억지로 높여봤습니다.
겉보기 RR은 좋아졌지만, 가격이 목표까지 도달하기 전에 되돌아오는 경우가 속출했습니다. 따먹을 수 있던 +0.4%를 욕심내다 0%로 끝나는 거래가 늘었고, 누적 P&L은 오히려 떨어졌습니다.
여기서 깨달았습니다. 이 봇의 본질은 "고승률 + 저손익비" 구조라는 것을요. 이 성격을 억지로 비트는 순간 전부 무너졌습니다.
4단계 · 트레일링 스탑 (최종 채택) ✅
발상을 바꿨습니다. 고정 익절선을 버리고, 수익이 나면 손절선이 따라 올라오는 트레일링 스탑을 적용했습니다.
- 활성화 조건: 수익 0.5% 도달 시
- 추적 폭: 0.75 × ATR
수익이 났을 때 바로 익절하지 않고, 추세가 살아있는 한 더 끌고 가되, 꺾이는 순간 그동안 번 걸 지키며 빠지는 방식입니다.
- 승률: 78.1% (소폭 하락)
- 누적 손익(P&L): +10.25% ← 1단계 대비 약 5배
- 단일 최대 익절: +2.62%
승률은 5%p 정도 내려갔지만, "맞을 때 크게 먹는" 구조가 더해지면서 누적 수익이 폭발했습니다. 핵심은 승률을 지키면서
📝 트레일링 스탑이 답이라는 걸 알게 된 순간
3단계에서 TP를 늘렸을 때 오히려 수익이 줄었다. 가격이 반전하기 전에 이미 나와 있어야 했는데 고정 익절은 시장 흐름에 반응을 못 했다. 트레일링 스탑은 단순히 손절을 올리는 게 아니라, 수익이 날 때까지 포지션을 유지하면서 동시에 지키는 장치다. 4단계 결과를 보고서야 그 구조적 차이를 실감했다.
4단계 요약
| 단계 | 방식 | 승률 | 누적 P&L |
|---|---|---|---|
| 1 | 원본 (밴드 익절/손절) | 83.6% | +2.10% |
| 2 | 손절 축소 | 급락 ↓ | 악화 ↓ |
| 3 | 익절 확장 | 유지 | 하락 ↓ |
| 4 | 트레일링 스탑 ✅ | 78.1% | +10.25% |
같은 신호, 같은 기간입니다. 바뀐 건
📝 비트코인에 똑같이 적용했다가 배운 것
ATR Bands Period=20, Multiplier=2.5 — 알트에서 최적화된 파라미터를 비트코인에 그대로 넣었다. 결과는 달랐다. 비트코인과 알트코인은 변동성 구조 자체가 다르다. 파라미터를 그대로 옮기면 결과도 달라진다. 코인마다 백테스트를 직접 돌려보고 숫자를 맞춰야 한다는 걸 실수를 통해 배웠다.
비트코인 · 이더리움에도 쓸 수 있나요
가장 많이 받는 질문입니다. 결론부터 말씀드리면 적용은 가능하되, 약간의 조정이 필요합니다.
원래 이 봇은 BTC·ETH를 제외하고 알트코인만 스캔하도록 설계돼 있습니다. 알트는 유동성이 낮아 지표 패턴이 선명하게 찍히기 때문입니다. 반대로 BTC·ETH는 덩치가 크고 움직임이 묵직해서, 같은 파라미터를 그대로 쓰면 신호가 거의 안 나옵니다.
BTC·ETH에 적용하시려면 대략 이런 방향으로 손보시면 됩니다.
- 스캔 대상에 BTC·ETH 포함 — 제외 필터에서 두 종목을 빼줍니다.
- 거래량 필터 상향 — 알트 기준(50만 USDT)으론 의미가 없습니다. 두 종목은 거래량이 압도적이라 필터를 훨씬 높게 잡아도 됩니다.
- 트레일링 폭 미세조정 — BTC·ETH는 변동성이 알트보다 안정적이라, 추적 폭(0.75 × ATR)을 조금 더 좁혀도 잘 버팁니다.
다만 정확한 최적값은 BTC·ETH만 따로 백테스트를 돌려봐야 나옵니다. 알트에서 나온 +10.25%가 그대로 재현되진 않습니다. 이 부분은 제가 별도로 검증한 뒤 다시 공유드리겠습니다.
다음 편 예고 — 전체 코드 공개
다음 글에서는 드디어 헤리티지 알람봇의 전체 코드를 공개할 예정입니다.
- 바이비트 전체 심볼을 긁어오는 수집 로직
- 1H / 15M / 5M 계단식 필터 구조
- 오늘 채택한 트레일링 스탑이 실제 코드로 어떻게 들어가는지
복사해서 바로 돌려보실 수 있는 형태로 정리해서 올리겠습니다. 코드를 직접 만져보고 싶으셨던 분들은 다음 편을 놓치지 마세요.
참고로, 지금 이 봇은 이렇게 텔레그램으로 실시간 알람을 쏘고 있습니다. 오늘 정리한 트레일링 스탑 파라미터(활성화 −0.5%, trail폭 0.75 × ATR)가 알람 메시지에 그대로 찍혀 나옵니다.
▲ 실제 봇이 보내는 숏 신호 알람. 진입가·초기 손절·트레일 활성가·trail폭이 자동으로 계산되어 표시됩니다.
구독하고 다음 편 받아보세요
이 봇은 하루아침에 나온 게 아니라, V1부터 지금까지 수십 번의 시행착오를 거쳐 다듬어진 기록의 결과물입니다. 그 과정을 전부 이 블로그에 남기고 있습니다.
다음 편 전체 코드 공개를 가장 먼저 받아보고 싶으시다면, 지금 구독 버튼을 눌러주세요. 백테스트 원본 데이터나 트레일링 파라미터에 대해 궁금한 점이 있으시면 댓글로 남겨주세요. 하나하나 답을 드리겠습니다.
매매는 늘 본인 책임이며, 이 글은 투자 권유가 아닌 개발·검증 기록임을 밝힙니다.
아들에게.
아빠는 오늘도 틀린 길을 세 번 걷고 나서야 맞는 길을 찾았다.
빨리 가는 것보다, 어디서 틀렸는지 적어두는 사람이 결국 멀리 간다.
이 기록이 언젠가 너의 출발선이 되길.


댓글
댓글 쓰기