요약
코인 선물과 국내 주식 단타 전략의 파라미터를 체계적으로 최적화했다. 핵심은 “365일 전체 Sharpe가 높아도 Walk-Forward에서 검증 안 되면 과적합”이라는 원칙이다.
결과:
- 코인 선물: WF 33% → 78%, Sharpe +2.01
- 국내 단타: WF 50% → 75%, Sharpe +2.49
1. 전략 개요: Donchian vs bb_macd
코인 선물 시스템은 두 가지 전략을 병행 운용하고 있었다.
Donchian 채널 브레이크아웃
Richard Donchian이 만든 트렌드 팔로잉 전략이다. N일 최고가/최저가로 채널을 만들고, 채널 돌파 시 진입한다.
DonchianUp(n) = max(Close[t], ..., Close[t-n+1]) ← n일 최고 종가
DonchianDown(n) = min(Close[t], ..., Close[t-n+1]) ← n일 최저 종가
DonchianMid(n) = (DonchianUp + DonchianDown) / 2
진입: Close ≥ DonchianUp → LONG (상단 돌파)
Close ≤ DonchianDown → SHORT (하단 돌파)
청산: Close ≤ TrailingStop(= 역대 최고 DonchianMid, 절대 하향 안 함)
9개 lookback 기간([5, 10, 20, 30, 60, 90, 150, 250, 360]일)으로 시그널을 각각 계산하고, 앙상블 동일 가중 평균으로 합산한다. 변동성 타겟팅(target_vol / rolling_vol(90일))으로 포지션 사이즈를 조절하고, 리밸런싱 임계값 0.2 이상 변화 시에만 실행한다.
BB+MACD (볼린저밴드 + MACD)
1시간봉 볼린저밴드(period 20, std 2) 돌파로 방향을 잡고, 4시간봉 MACD(12/26/9)로 확인하는 전략이다.
BB 시그널:
Close > Upper Band → LONG
Close < Lower Band → SHORT
신호 강도 (0~1.0):
MACD 히스토그램 크기 vs 200봉 평균 → 0~0.5
%B 돌파 거리 → 0~0.3
거래량 vs 20봉 평균 → 0~0.2
2. 리스크 필터 5종
프로덕션에 5개 리스크 필터가 있다. 각각의 역할과 실제 로직이다.
BB Squeeze (볼린저 스퀴즈)
밴드폭((Upper - Lower) / Middle)이 과거 50일 대비 20 percentile 이하로 좁아지면 스퀴즈 상태로 판정한다. 스퀴즈는 큰 움직임 직전의 압축 구간이다. 스퀴즈 상태에서는 사이징을 60%로 줄이고, Donchian 비중을 80%로 올린다.
Dynamic Leverage (동적 레버리지)
ATR%(= ATR / 현재가)에 따라 레버리지를 자동 조절한다.
ATR% ≤ 1.5% (저변동) → 레버리지 5배
ATR% ≥ 4.0% (고변동) → 레버리지 1배
그 사이 → 선형 보간
+ AI 레짐의 max_leverage 상한 적용
캐시: 300초 TTL
변동성이 낮을 때 크게, 높을 때 작게 진입하는 역변동성 사이징이다.
Correlation Filter (상관관계 필터)
1시간봉 수익률 720시간 Pearson 상관계수로 포트폴리오 집중도를 관리한다.
개별: corr(신규, 기존포지션) > 0.85 → 진입 차단
포폴: 보유 전체 평균 corr ≥ 0.90 → 모든 신규 진입 차단
≥ 0.80 → 사이징 50% 축소
캐시: 1800초 TTL
Vol Target (변동성 목표)
연간 목표 변동성 25%에 맞춰 포지션 가중치를 조절한다. weight = min(target_vol / rolling_vol(90일), max_leverage). 변동성이 목표보다 높으면 축소, 낮으면 확대한다.
Daily Loss (일일 손실 한도)
당일 실현 손실이 시작 잔고의 5%를 넘으면 서킷 브레이커를 발동해 모든 신규 진입을 차단하고 기존 포지션을 청산한다. 포트폴리오 MDD가 15%를 넘어도 동일하게 작동한다. UTC 0시 리셋.
3. 프로덕션 기능 25종
5개 필터 외에 프로덕션에는 다양한 기능이 있다. 이번 최적화에서 25개를 하나씩 켜고 WF 효과를 측정했다. 주요 기능의 실제 로직이다.
Signal Reversal Flip (시그널 반전 플립)
LONG 시그널이 SHORT으로 바뀔 때, 기존 LONG을 청산하고 즉시 SHORT으로 진입하는 기능이다. 2회 연속 반전 확인 후 실행(debounce 2). 방향 전환이 빈번한 횡보장에서 불필요한 진입이 늘어나는 양날의 검이다.
Trailing Stop (트레일링 스톱)
미실현 수익이 3% 이상 도달하면 활성화된다. 이후 고점에서 8% 하락 시 청산한다. 한번 올라간 스톱 가격은 절대 내려가지 않는다.
Pyramid (피라미딩)
기존 포지션이 2% 이상 수익 중이면 70% 크기로 추가 진입한다. 최대 2회까지 허용(총 최대 2.4배). 추세가 이어지면 이득이지만 반전 시 손실이 커진다.
Rotation (포지션 교체)
보유 포지션과 진입 후보를 스코어링해서, 후보 점수가 최약 포지션 + 수수료 + 0.15 이상 높으면 교체한다. 스코어는 PnL(30%) + 시그널 강도(40%) + 보유 시간 감쇠(15%) + 센티먼트(15%) 가중합이다. 교체 후 10분 쿨다운.
TP 분할 (분할 익절)
TP를 여러 티어로 나눠서 부분 청산한다. 예: 티어0에서 TP×0.3 도달 시 50% 청산, 티어1에서 TP×1.0 도달 시 나머지 100% 청산. 수익 일부를 확보하면서 추세를 따라가는 방식이다.
VIX Scaling
VIX 지수에 따라 레버리지를 조절한다. VIX ≥ 30이면 30%로 축소, VIX ≤ 15이면 최대 유지, 그 사이는 선형 보간이다.
BTC RSI Regime
BTC 4시간봉 EMA(20/50) 배열과 RSI(14)로 시장 방향을 판단한다. EMA 정배열 + RSI > 50이면 BULLISH(사이징 130%), EMA 역배열 + RSI < 50이면 BEARISH(사이징 50%). 1시간 캐시.
Adaptive Regime (기술적 레짐 감지)
7가지 레짐(STRONG_BULL, BULL, SIDEWAYS, SQUEEZE, BEAR, STRONG_BEAR, HIGH_VOL)을 EMA 배열, RSI, CHOP 지수, BB 밴드폭으로 자동 감지하고, 레짐별로 전략 비율과 사이징을 조절한다. SIDEWAYS에서는 BB_MACD 70%/Donchian 30%, SQUEEZE에서는 사이징 60%/Donchian 80%.
4. 방법론: 3단계 검증 파이프라인
파라미터 최적화에서 가장 큰 함정은 과적합이다. 365일 데이터에서 Sharpe 5.0이 나와도, 특정 시장 구간에만 맞춰진 설정이면 실전에서 마이너스다.
Stage 1: 그리드 서치 (500건)
→ 전체 기간 성과 측정, Top 15 추출
Stage 2: Walk-Forward 검증 (8폴드)
→ train 120일 / test 30일 슬라이딩
→ OOS(Out-of-Sample) 양수 비율 + 중앙 Sharpe
Stage 3: 기능 추가 테스트 (25개)
→ 최적 설정 위에 프로덕션 기능 하나씩 켜서 효과 측정
→ WF 안정성이 기준선 이하면 과적합 판정
Walk-Forward 검증
Fold 1: [====train 120일====][test 30일]
Fold 2: [====train 120일====][test 30일]
Fold 3: [====train 120일====][test 30일]
...
각 폴드에서 train 구간의 설정으로 test 구간을 평가한다. 8개 폴드 중 양수 비율이 실전 안정성의 지표다. degradation ratio(mean(OOS_Sharpe) / mean(IS_Sharpe))가 0.5 미만이면 과적합으로 판정하고, conservative mode(사이징 50% 감소, SL 1.5배 확대)를 자동 활성화한다.
5. 코인 선물 최적화 결과
bb_macd 제거
기존 프로덕션은 bb_macd(30%) + donchian(70%) 이중 전략이었다. 비율 테스트 결과:
| bb_macd 비율 | Sharpe | MDD | 수익 |
|---|---|---|---|
| 0% (donchian only) | +3.31 | -31% | +216% |
| 12% | +2.83 | -35% | +186% |
| 29% | +2.62 | -39% | +198% |
| 38% | +2.25 | -40% | +170% |
bb_macd를 넣을수록 Sharpe와 MDD가 악화되는 명확한 패턴이다. bb_macd 단독 테스트에서도 모든 조합이 Sharpe 마이너스였다.
결론: bb_macd 완전 제거, donchian 100%.
플립(Signal Reversal Flip) 효과
시그널 반전 시 기존 청산 + 반대 포지션 즉시 진입. 효과는 설정마다 달랐다.
| 설정 | 플립 OFF | 플립 ON | 효과 |
|---|---|---|---|
| GRID_1위 (3슬롯) | Sharpe 2.01 | Sharpe 3.34 | +1.33 |
| PROD (7슬롯) | Sharpe 2.70 | Sharpe 1.69 | -1.02 |
슬롯이 적을 때(3개) 플립이 유리하고, 많을 때(7개) 해롭다. 하지만 WF에서 플립 OFF가 78%, ON이 56%로 안정성은 OFF가 우세했다.
최종 설정 도출
500건 그리드 + WF 8폴드 결과:
| 순위 | 설정 | 플립 | Sharpe | WF 양수 | 월수익 |
|---|---|---|---|---|---|
| 1 | SL5/TP10/trail8%/3슬롯 | OFF | +2.01 | 78% | +21.6% |
| 2 | SL5/TP12/lev3/5슬롯 | ON | +1.33 | 67% | +10.4% |
| 3 | SL5/TP10/trail8%/3슬롯 | ON | +3.34 | 56% | +16.8% |
| 8 | SL4/TP10/lev5/7슬롯 (기존) | OFF | +2.70 | 33% | +1.7% |
기존 프로덕션은 365일 Sharpe가 가장 높았지만(+2.70), WF에서 33%로 과적합이었다. 1위 설정은 365일 Sharpe가 낮지만 WF 78%로 가장 안정적이다.
6. 필터 효과 분석
5개 필터 각각의 기여도를 측정했다.
| 필터 | 개별 ON 효과 | 빼면 효과 | 판정 |
|---|---|---|---|
| BB Squeeze | +0.46 | 빼면 -2.07 | 필수 |
| Dynamic Leverage | +1.01 | 빼면 -2.13 | 필수 |
| Correlation | -0.62 | 빼면 +1.99 | 상황에 따라 |
| Vol Target | +0.01 | 빼면 -0.37 | 약간 도움 |
| Daily Loss | -0.25 | 빼면 -1.44 | MDD 방어 필수 |
Correlation 필터가 흥미로웠다 — 빼면 Sharpe가 +1.99 상승한다. 3슬롯에서 상관관계 필터가 진입을 과도하게 차단하기 때문이다. 하지만 WF에서는 전부 ON이 78%로 가장 안정이라 유지했다.
7. 프로덕션 기능 25개 전수 테스트
최적 설정(GRID_1위 + 필터 전부ON) 위에 앞서 설명한 기능들을 하나씩 켜서 테스트했다.
기준선: WF 78% (7/9), Sharpe +2.01
WF 78% 유지 (해도 되는 기능)
| 기능 | Sharpe 변화 | 비고 |
|---|---|---|
| VIX Scaling | -0.10 | MDD -37% → -34% 개선 |
| BTC RSI Regime | -0.08 | 거의 무해 |
| Adaptive Regime | -0.61 | WF 유지하지만 Sharpe 하락 |
WF 하락 (켜면 안 되는 기능)
| 기능 | WF | 비고 |
|---|---|---|
| Pyramid | 67% | Sharpe -1.74 |
| Rotation | 56% | Sharpe -1.54 |
| Sentiment Proxy | 67% | Sharpe -0.88 |
| AI Proxy (방향차단) | 67% | Sharpe -1.55 |
| TP 3단 분할 | 67% | Sharpe -1.27 |
| VAT + 고정Trail 병행 | 11% | MDD -85%, 완전 폭망 |
핵심 발견: 기준선이 이미 최적이다. 어떤 기능을 추가해도 WF 78%를 초과하지 못했다.
8. 국내 주식 단타: RSI 필터 병목 발견
국내 단타도 동일한 방법론을 적용했다. 놀라운 결과가 나왔다.
RSI 상한이 거래의 80%를 차단하고 있었다
| RSI 상한 | Sharpe | 거래 수 | 수익 |
|---|---|---|---|
| 100 (제한 없음) | +2.55 | 314건 | +62% |
| 80 | +2.05 | 300건 | +47% |
| 70 | +2.31 | 126건 | +25% |
| 60 (기존) | +0.35 | 78건 | +3% |
RSI 60 상한이 좋은 기회까지 차단하고 있었다. RSI 70~80인 종목에서 모멘텀이 이어지는 경우가 많은데, 이를 “과매수”로 판단해 진입을 막고 있었다.
WF 검증 (train=90일/test=45일, 8폴드)
| 설정 | WF 양수 | WF 중앙 | 수익 |
|---|---|---|---|
| RSI80 + SL1.0 + TP3.0 | 75% | +0.79 | +66% |
| RSI80 + SL1.0 + TP4.0 | 75% | +0.76 | +70% |
| RSI 제한 없음 | 63% | +1.76 | +62% |
| RSI60 (기존) | 50% | -0.43 | +3% |
기존 설정은 WF 중앙값이 마이너스(-0.43)로, 실전에서도 손실 구조였다.
9. 적용 결과 요약
코인 선물
| 항목 | 변경 전 | 변경 후 |
|---|---|---|
| 전략 | bb_macd 30% + donchian 70% | donchian 100% |
| SL | ATR x4.0 | ATR x5.0 |
| 슬롯 | 7 | 3 |
| 트레일링 | OFF | ON (8%) |
| 플립 | ON | OFF |
| WF 양수 | 33% (3/9) | 78% (7/9) |
국내 주식 단타
| 항목 | 변경 전 | 변경 후 |
|---|---|---|
| RSI 상한 | 60 | 80 |
| RSI 하한 | 40 | 0 (제거) |
| ATR SL 배수 | 0.7 | 1.0 |
| ATR TP 배수 | 2.0 | 3.0 |
| WF 양수 | 50% | 75% |
10. 수익률 비교
코인 선물 (10코인, 365일 백테스트)
| 설정 | Sharpe | 연수익률 | MDD | 거래 | WF 양수 |
|---|---|---|---|---|---|
| 변경 전 (bb_macd+donchian 7슬롯) | +2.70 | +221% | -35% | 1,099 | 33% |
| 변경 후 (donchian 3슬롯+trail) | +2.01 | +131% | -37% | 543 | 78% |
| ML 최적 (SL5/TP15/lev3) | +1.38 | +115% | -42% | 946 | 44% |
| 보수적 고수익 (SL5/TP12/lev3) | +0.89 | +76% | -39% | 836 | 78% |
변경 전이 연수익률 +221%로 더 높지만, WF 33%는 9개월 중 6개월이 마이너스라는 의미다. 변경 후는 +131%로 낮아졌지만, 78%의 구간에서 양수를 유지한다.
국내 주식 단타 (20종목, 2년 백테스트)
| 설정 | Sharpe | 연수익률 | MDD | 거래 | WF 양수 |
|---|---|---|---|---|---|
| 변경 전 (RSI 40~60) | +0.35 | +3% | -4% | 78 | 50% |
| 변경 후 (RSI 0~80, SL1.0/TP3.0) | +2.49 | +66% | -7% | 297 | 75% |
| 필터 전부 OFF | +2.29 | +82% | -8% | 763 | 75% |
| pullback + RSI80 | +2.63 | +64% | -7% | 344 | 50% |
단타는 RSI 상한 하나 바꾼 것만으로 수익률이 +3% → +66%로 22배 개선됐다. MDD가 -4%에서 -7%로 늘었지만, 수익 대비 감수할 만한 수준이다.
실전 프로덕션 현황 (2026-03-31 기준)
| 시장 | 자산 | 상태 | 비고 |
|---|---|---|---|
| 코인 선물 | $4,600 USDT | 대기 중 (AI 레짐 RISK_OFF) | donchian 숏 3건 진입 후 시그널 대기 |
| 국내 주식 | 195만원 | 단타 일시 중단 | 하락장 + 매수만 가능(공매도 불가) |
| 해외 주식 | $573 | 보유 없음 | SPY 필터 작동 중 |
코인 선물은 새 설정 적용 직후 donchian 숏 4건(APT, HBAR, TAO, KITE)이 자동 진입됐다. 시장이 RISK_OFF(극도의 공포)라 사이징 50% 축소 상태로 운영 중이다.
11. 교훈
365일 Sharpe는 거짓말한다
기존 프로덕션의 365일 Sharpe +2.70은 전체 후보 중 1위였다. 하지만 WF에서 33%라는 건, 9개월 중 6개월은 마이너스라는 뜻이다. 전체 기간 백테스트만 보면 이걸 놓친다.
단순함이 복잡함을 이긴다
25개 기능을 하나씩 테스트한 결과, 기본 설정(donchian + trail 8% + 필터 5개)이 가장 좋았다. 피라미딩, 로테이션, 감성 분석, TP 분할 — 모두 WF에서 기준선 이하였다.
필터가 병목이 될 수 있다
국내 단타의 RSI 60 상한은 “보수적인 안전장치”로 설정한 것이었지만, 실제로는 거래의 80%를 차단하면서 시스템 전체를 무력화하고 있었다. 필터를 넣을 때는 반드시 “이 필터가 얼마나 차단하는가”를 측정해야 한다.
기술 스택
- 백테스트:
FuturesSimulator(3,300줄),ShortTermSimulator(일봉 기반) - 최적화: Grid Search (순차), Bayesian Optimization (Optuna)
- 검증: Walk-Forward (8폴드), Monte Carlo (1,000회)
- 데이터: ccxt (크립토 1h), yfinance (국내 일봉), 10~20개 종목 x 365~730일
- 실행 환경: Windows 11, Python 3.12, 순차 실행 (ProcessPoolExecutor 호환 이슈)
Donchian 채널 브레이크아웃 + 5개 리스크 필터를 기본으로, 25개 기능을 전수 테스트한 결과 “기본이 최적”이라는 결론 – Walk-Forward로 과적합을 걸러내고 코인 선물 WF 33%→78%, 국내 단타 WF 50%→75%로 개선했다.
댓글