teji

tede

AI 에이전트, 트레이딩 봇 개발 중인 남편의 일기 🤖
화장품에 진심인 간호사 아내의 코덕로그 💄

전체보기

클로드코드(Claude Code) 자동매매 봇 (4) 백테스트로 전략 고친 5단계: 워크포워드(Walk-Forward) 검증으로 손실 규칙을 플러스로 바꾼 과정과 트레일링 스탑 결과

최종 업데이트: 2026-09-21

이 글은 투자 조언이 아니에요. 제 봇의 규칙을 시뮬레이션으로 검증한 기록이고, 모든 수치는 백테스트 결과예요.

클로드코드 자동매매 봇 4편: 백테스트로 전략을 고친 5단계, 워크포워드 검증 썸네일

스퀴즈 모멘텀(Squeeze Momentum) 기본 규칙은 2024년 3월부터 2년치 4시간봉 백테스트에서 손실이었어요. 2026년 4월에 클로드코드(Claude Code)로 5단계 리서치를 돌려 규칙을 고쳤고, 학습에 쓰지 않은 검증 구간에서 BTC 는 6개월 검증 3회 평균 −12.5% 에서 +10.7%, ETH 는 −10.1% 에서 +15.1% 로 바뀌었어요. 바꾼 것은 두 가지예요. 진입에 “직전 봉 대비 변화량이 중앙값 이상” 필터를 달았고, 부분 익절 후 남은 물량에 1.5% 트레일링 스탑을 붙였어요. “4시간봉 마감 전 1시간 먼저 진입” 은 시험한 뒤 버렸어요.

이 글은 2편 스퀴즈 모멘텀 규칙의 후속이에요. 조건은 체결 다리당 수수료 7bp, 슬리피지 0, 부분 익절과 손절 포함이고, 수치는 전부 그 조건의 시뮬레이션이에요.

왜 백테스트를 다시 했나요?

봇을 한 달 돌린 뒤 거래 기록을 보니 약한 신호에서 자주 털린다는 느낌이 있었어요. 느낌으로 규칙을 바꾸면 다음 달에 또 바꾸게 돼요. 그래서 클로드코드에 “2년치 4시간봉으로 규칙을 검증하고, 개선안이 학습 안 한 구간에서도 통하는지 확인해 달라” 고 시켰어요. 결과는 리서치 폴더에 단계별 요약 문서 5개와 CSV 로 남았어요.

항목 조건
데이터 BTCUSDT · ETHUSDT 4시간봉 + 1시간봉, 2024-03 ~ 2026-03 (2년, 심볼당 4,381봉)
수수료 체결 다리당 7bp (왕복 14bp), 슬리피지 0
진입 규칙 스퀴즈 모멘텀 히스토그램 2번째 색 전환 + 1시간봉 확인
청산 규칙 +3% 에 절반 익절, 손절 7% (뒤집기 진입은 4%), 반대 신호 시 청산
도구 클로드코드가 작성한 Python 시뮬레이터, 결과는 CSV + 마크다운 요약

리서치 5단계는 무엇을 물었나요?

자동매매 백테스트 리서치 5단계: 필터 스윕, 현실 시뮬, 워크포워드, 1시간 조기진입 NO, 청산 트레일링 YES

단계마다 질문 하나만 던졌어요. 답이 YES 면 다음 단계로 가져가고 NO 면 버렸어요. 다섯 번 중 셋이 YES, 둘이 NO 예요.

1단계: 어떤 필터가 손실을 줄이나요? (필터 스윕)

봉 종가 진입, 반대 신호 종가 청산으로 2년을 통째로 돌렸어요. 기본 규칙은 BTC 에서 2년간 순수익률 −72% 였어요. 신호가 너무 자주 나오고 약한 신호까지 잡아서 수수료에 잠식된 결과예요.

히스토그램 높이 기준, 변화량 기준, 두 조건 결합 등 여러 필터를 걸어본 결과 “직전 봉 대비 변화량(Δ)이 학습 구간 중앙값 이상” 필터가 가장 크게 개선했어요. 히스토그램이 세게 꺾일 때가 실제 추세 전환이고, 살살 꺾일 때는 노이즈일 확률이 높아요.

2단계: 실제 봇처럼 돌려도 유지되나요? (현실 시뮬)

시뮬레이터에 부분 익절, 손절, 쿨다운을 전부 넣고, 같은 봉에서 손절과 익절이 둘 다 걸리면 손절을 먼저 치는 보수적 순서로 다시 돌렸어요. 필터 효과는 유지됐어요. 다만 2년 전체로 최적화한 숫자는 그 2년에만 맞을 수 있어서 3단계가 필요했어요.

3단계: 학습 안 한 구간에서도 통하나요? (워크포워드)

워크포워드 검증 구조: 6개월 학습 후 6개월 검증을 3회 굴리고 10개월 학습 후 15개월 검증 1회

워크포워드(Walk-Forward)는 데이터를 시간순으로 잘라 앞 구간에서 규칙을 정하고 뒤 구간에서만 성적을 매기는 검증이에요. 6개월 학습 → 6개월 검증을 세 번 굴리고, 10개월 학습 → 15개월 검증(Big)을 한 번 더 했어요. 임계값은 학습 구간의 중앙값으로만 정했고 검증 구간은 보지 않았어요.

구간 BTC 기본 규칙 BTC 필터 적용 ETH 기본 규칙 ETH 필터 적용
6개월 검증 ×3 평균 −12.5% +10.7% −10.1% +15.1%
15개월 검증 (Big) −26.7% +4.5% −53.2% +7.8%
승률 (Big) 48.3% 50.8% 48.8% 51.4%
최대 낙폭 (Big) −63% −33% −87% −26%

워크포워드 15개월 검증 구간 누적 수익 곡선: BTC와 ETH, 기본 규칙 대비 델타 필터 적용

위 그래프는 15개월 검증 구간의 누적 수익 곡선이에요. 회색이 기본 규칙, 주황이 필터 적용이고 같은 기간, 같은 데이터, 규칙 하나 차이예요. 두 가지를 더 확인했어요.

  • 임계값이 구간마다 크게 흔들리면 과최적화 신호예요. 세 구간의 중앙값은 최대와 최소 비율이 1.3배 이내였어요.
  • 세 구간 중 하나(2025년 4월~9월)는 BTC 가 필터를 달고도 손실이었어요. 필터는 손실을 줄이지만 없애지 않아요. 반년 정도의 손실 구간을 버틸 각오가 필요해요.

4단계: 1시간 먼저 진입하면 더 좋은가요? (조기진입, NO)

4시간봉 마감 전에 1시간봉 시점에서 미리 판단하면 진입이 평균 1.5~2시간 빨라졌지만 순수익률은 나빠졌어요. ETH 는 검증 평균이 +15% 에서 −6% 로 떨어졌어요. 마감 전 신호는 아직 확정되지 않은 신호라 저품질 진입이 섞여 들어와요. “두 시간 연속 같은 신호일 때만” 조건을 붙여도 마찬가지여서 채택하지 않았어요.

5단계: 청산은 어떻게 하는 게 좋은가요? (트레일링, YES)

진입은 3단계 규칙으로 고정하고 청산만 아홉 가지로 바꿔봤어요.

청산 방식 BTC 검증 평균 변화 ETH 검증 평균 변화 판정
부분 익절 후 1.5% 트레일링 +7.4pp +5.2pp 채택
부분 익절 후 2.0% 트레일링 +5.6pp +6.6pp 차점
1시간봉 반대 신호(필터 통과)에 청산 −0.1pp +7.6pp 심볼 편차 커서 보류
1시간봉 색 반전에 무조건 청산 −26.4pp −30.5pp 최악

결론은 “익절로 절반 챙긴 뒤, 남은 절반은 1시간 종가가 진입가 +1.5% 아래로 내려오면 정리” 예요. 4시간봉을 기다리는 것보다 이익을 덜 반납해요. 반대로 1시간봉 색이 바뀔 때마다 나가는 방식은 4시간 추세 안의 1시간 흔들림에 계속 털려 최악이었어요. 첫 번째 봉 진입과 두 번째 봉 진입도 비교했는데 첫 봉 진입이 BTC 에서 4.6pp 좋아 기존 규칙을 유지했어요.

최종 규칙: v3 에서 바뀐 5가지

스퀴즈 모멘텀 v3 규칙 5개 코드: 변화량 필터, 뒤집기 차단, 임계값 재도출, 1.5% 트레일링, 상승장 숏 차단

# v3 에서 바뀐 규칙 5개 (스펙 문서 SQZ_V3.md 요약)
# (A) 진입 조건에 '변화량 필터' 추가 : 히스토그램이 얼마나 세게 움직였나
#     BTC : |Δval| >= 198.25   (절대값, 학습 구간 중앙값)
#     ETH : |Δval| / |prev_val| >= 13.94%   (비율, 코인마다 스케일이 달라서)
if abs(delta) < threshold[symbol]:
    return None                     # 신호는 떴지만 진입 안 함

# (B) 반대 신호가 떴을 때 : 필터를 통과 못 하면 '청산만', 뒤집기(reverse) 진입은 안 함
if opposite_signal and not passes_filter(opposite):
    return Signal(exit_only=True)

# (C) 임계값은 6개월마다 학습 구간에서 다시 뽑는다 (고정값 금지)

# (D) 부분 익절(+3% 에 50%) 이후 : 1h 종가가 진입가 +1.5% 아래로 내려오면 나머지 청산
if partial_tp_done and close_1h < entry * (1 + 0.015):
    return Signal(exit="trail")

# (E) BTC 가 상승 체제(Bull)면 신규 SHORT 진입 차단 (5/05, 라이브 표본에서 추가)
if btc_regime == "Bull" and side == "SHORT":
    return Signal(exit_only=True)
  1. 변화량 필터: BTC 는 절대값 198.25 이상, ETH 는 직전 대비 13.94% 이상일 때만 진입. 히스토그램 스케일이 달라 기준 방식도 다르게 잡았어요.
  2. 뒤집기 차단: 반대 신호가 필터를 통과하지 못하면 청산만 하고 반대 방향 진입은 하지 않아요.
  3. 임계값 재도출: 6개월마다 학습 구간 중앙값으로 다시 계산해요. 고정값은 쓰지 않아요.
  4. 1.5% 트레일링: 부분 익절 후 남은 물량은 1시간 종가 기준으로 정리해요.
  5. 상승장 숏 차단: 백테스트가 아니라 라이브 한 달 기록에서 나왔어요. 롱 15건은 PF 3.05, 숏 19건은 PF 0.33 이라 BTC 가 상승 체제일 때 신규 숏을 막았어요.

이 규칙은 2026년 4월 24일 기능 플래그로 라이브에 올렸어요. 플래그 하나로 v2 로 되돌릴 수 있고, 첫 4일간 진입 3건과 필터 탈락 청산 3건이 규칙대로 기록되는 것을 로그로 확인했어요.

돈으로 환산하면 얼마인가요?

검증 구간 18개월, 예치금 1,000달러를 4트랜치(진입당 250달러)로 나눈 백테스트 조건이에요.

심볼 기본 규칙 v3 규칙 연환산
BTCUSDT −94달러 +80달러 +5.3%
ETHUSDT −76달러 +113달러 +7.5%

큰돈이 아니에요. 이 리서치의 가치는 수익 숫자가 아니라 “손실 나는 규칙을 손실 안 나는 규칙으로 바꿨고, 그것이 학습 안 한 구간에서도 유지된다” 는 확인이에요.

배운 것 4가지와 한계

  1. 임계값은 학습 구간에서만 뽑아요. 2년 통째로 최적화한 숫자는 믿지 않고 검증 구간 성적만 봐요.
  2. 직관은 시험 대상이지 근거가 아니에요. “빨리 진입” 은 당연히 좋을 줄 알았는데 틀렸어요.
  3. 청산이 진입보다 개선폭이 컸어요. 진입 필터가 손실을 플러스로 바꿨다면 청산 방식은 그 플러스를 키웠어요.
  4. NO 도 결과예요. 안 넣은 규칙 두 개를 기록해 두면 같은 실험을 반복하지 않아요.

한계는 세 가지예요. 6개월 구간 세 번은 통계적으로 표본이 작아요. 슬리피지를 넣지 않았고 자금 규모가 커지면 달라져요. 검증 구간에 상승장 비중이 커서 하락장에서 같은 결과가 나올지는 더 봐야 해요. 워크포워드와 과최적화 개념은 Walk forward optimization (Wikipedia)과 Investopedia 의 Backtesting 설명을, 스퀴즈 모멘텀 지표는 LazyBear 의 TradingView 원본 스크립트를 참고하세요.

자주 묻는 질문

Q. 워크포워드 검증이 무엇인가요?
데이터를 시간순으로 잘라 앞 구간으로 규칙을 정하고 뒤 구간으로 시험하는 검증 방식이에요. 창을 한 칸씩 밀며 반복해요. 과거 전체에 맞춘 규칙이 미래에도 통하는지 보는 기본 방법이에요.

Q. 백테스트에서 플러스면 실계좌도 플러스인가요?
아니요. 백테스트는 슬리피지, 체결 실패, 거래소 장애, 운영자의 심리를 반영하지 않아요. 2편의 실계좌 결과와 이 글의 백테스트 수치가 다른 이유예요. 백테스트는 규칙이 틀리지 않았는지 확인하는 도구예요.

Q. 클로드코드가 백테스트를 전부 작성했나요?
시뮬레이터 코드, 단계별 실행, CSV 와 요약 문서 작성까지 클로드코드가 했어요. 제가 한 것은 질문을 정하고, 결과를 보고 다음 질문을 정하고, 최종 규칙을 라이브에 올릴지 결정한 일이에요.

Q. 필터 임계값은 왜 BTC 와 ETH 가 다른가요?
히스토그램 값의 스케일이 달라요. BTC 는 절대값이 크고 ETH 는 작아서, BTC 는 절대값 기준, ETH 는 직전 대비 비율 기준이 각각 더 안정적이었어요.

Q. 이 규칙으로 지금도 봇이 돌고 있나요?
지금은 멈춰 있어요. 멈춘 이유와 재개 조건은 이 시리즈 7편에서 정리해요.

함께 보면 좋은 글

출처: 제 리서치 폴더의 단계별 요약 문서 5개(2026년 4월 작성)와 검증 구간 누적 수익 CSV. 데이터는 거래소 4시간봉·1시간봉 2024-03~2026-03. 투자 조언이 아니에요. 다음 편은 봇을 운영하며 낸 사고 4건과 그때마다 정한 운영 원칙이에요.

Comments

2 responses to “클로드코드(Claude Code) 자동매매 봇 (4) 백테스트로 전략 고친 5단계: 워크포워드(Walk-Forward) 검증으로 손실 규칙을 플러스로 바꾼 과정과 트레일링 스탑 결과”

  1. […] 규칙으로 옮길 수 있는 것만 골라 실험하겠다는 뜻이에요. 제 봇의 배경은 자동매매 봇 4편 백테스트와 6편 AI 봇 리뷰에 […]

Leave a Reply

Your email address will not be published. Required fields are marked *