# 현재 매수 전략 분석 **날짜**: 2025-12-09 **파일**: `src/signals.py` **함수**: `_evaluate_buy_conditions()` --- ## 📊 현재 구현된 매수 전략 ### 전략 개요 현재 시스템은 **단일 지표가 아닌 복합 조건**을 사용하여 신뢰도 높은 매수 신호를 생성합니다. ``` 매수 신호 = (MACD + SMA + ADX) 복합 조건 (3가지 조건 중 1개 이상 충족 시) ``` --- ## 🎯 3가지 매수 조건 ### 매수조건 1: MACD 상향 돌파 + 추세 확인 ```python if macd_cross_ok and sma_condition and adx_ok: matches.append("매수조건1") ``` **세부 조건**: 1. **MACD 골든 크로스**: - `MACD > Signal` 돌파 OR - `MACD > 0` 돌파 (0선 상향 돌파) 2. **SMA 정배열**: `SMA5 > SMA200` (상승 추세) 3. **ADX 강세**: `ADX > 25` (강한 추세) **트레이딩 의미**: - MACD 골든 크로스 = 단기 모멘텀 전환 - SMA 정배열 = 중장기 상승 추세 - ADX 강세 = 추세가 강함 (약한 반등 필터링) **강점**: 추세 전환 초기 포착 --- ### 매수조건 2: SMA 골든 크로스 + 모멘텀 확인 ```python if cross_sma and macd_above_signal and adx_ok: matches.append("매수조건2") ``` **세부 조건**: 1. **SMA 골든 크로스**: `SMA5`가 `SMA200`을 상향 돌파 2. **MACD 강세**: `MACD > Signal` (상승 모멘텀 유지) 3. **ADX 강세**: `ADX > 25` **트레이딩 의미**: - SMA 골든 크로스 = 장기 추세 전환 시그널 - MACD 강세 = 모멘텀 뒷받침 - ADX 강세 = 추세 지속 가능성 **강점**: 중장기 추세 전환 포착 --- ### 매수조건 3: ADX 돌파 + 추세/모멘텀 확인 ```python if cross_adx and sma_condition and macd_above_signal: matches.append("매수조건3") ``` **세부 조건**: 1. **ADX 상향 돌파**: `ADX`가 25를 상향 돌파 (추세 강화) 2. **SMA 정배열**: `SMA5 > SMA200` 3. **MACD 강세**: `MACD > Signal` **트레이딩 의미**: - ADX 돌파 = 약세 → 강세 전환 - SMA 정배열 + MACD 강세 = 상승 추세 확정 **강점**: 추세 강화 시점 포착 --- ## ✅ 현재 전략의 강점 ### 1. **높은 신뢰도** - 3가지 지표를 복합 사용 → 가짜 신호(False Signal) 감소 - 단일 지표의 한계 보완 (MACD만, RSI만 사용 시 오작동 위험) ### 2. **추세 확인** - SMA200 사용 → 장기 추세 확인 - ADX 사용 → 약한 반등/횡보장 필터링 - **약세장 함정 회피**: 단순 과매도 신호와 달리 추세 확인 필수 ### 3. **다양한 진입 시점** - 조건1: MACD 전환 (빠른 진입) - 조건2: SMA 전환 (중기 진입) - 조건3: ADX 전환 (추세 강화 진입) ### 4. **코드 품질** - 명확한 조건 분리 - 테스트 용이 - 유지보수 편리 --- ## ⚠️ 현재 전략의 한계 ### 1. **과매도 구간 저가 매수 불가** - **문제**: RSI < 30 같은 과매도 신호 미사용 - **영향**: 급락 후 반등 초기 진입 기회 놓칠 수 있음 - **예시**: ``` 비트코인이 60,000 → 40,000으로 급락 (RSI 20) → 현재 전략: MACD/SMA 조건 충족 시까지 대기 → 놓친 기회: 40,000 → 45,000 반등 (12.5% 수익) ``` ### 2. **MACD 히스토그램 미확인** - **문제**: `MACD > Signal` 조건만 확인, 히스토그램 증가 확인 안 함 - **영향**: 모멘텀 약화 구간에서 매수 가능 - **예시**: ``` MACD: 10 → 8 → 6 (하락 중) Signal: 5 (변동 없음) → MACD > Signal 충족하지만 모멘텀 약화 중 → 매수 신호 발생 ❌ ``` ### 3. **지연 신호 (Lagging Indicator)** - **문제**: MACD, SMA200 모두 후행 지표 - **영향**: 추세 전환 초기가 아닌 중후반에 진입 가능 - **해결책**: 선행 지표(RSI, Stochastic) 추가 검토 --- ## 💡 개선 제안 (선택사항) ### 제안 1: MACD 히스토그램 확인 추가 ```python # 현재 macd_cross_ok = (cross_macd_signal or cross_macd_zero) # 개선안 macd_hist = macd[f"MACDh_{fast}_{slow}_{signal}"] curr_hist = macd_hist.iloc[-1] prev_hist = macd_hist.iloc[-2] # 히스토그램이 증가 중일 때만 매수 (모멘텀 강화) macd_cross_ok = (cross_macd_signal or cross_macd_zero) and (curr_hist > prev_hist) ``` **효과**: 모멘텀 약화 구간 매수 방지 --- ### 제안 2: RSI 과매도 조건 추가 (선택) ```python # 매수조건4: RSI 과매도 + 반등 (급락 후 저가 매수) def check_rsi_oversold_bounce(df, period=14, threshold=30): rsi = df.ta.rsi(length=period, append=False) if len(rsi) < 3: return False curr_rsi = rsi.iloc[-1] prev_rsi = rsi.iloc[-2] # RSI 30 이하에서 반등 시작 return (curr_rsi < threshold) and (curr_rsi > prev_rsi) # _evaluate_buy_conditions()에 추가 if check_rsi_oversold_bounce(df): # 추가 확인: ADX나 SMA 정배열로 신뢰도 보강 if adx_ok or sma_condition: matches.append("매수조건4") ``` **효과**: - ✅ 급락 후 저가 매수 기회 포착 - ✅ ADX/SMA 조건으로 가짜 신호 필터링 - ⚠️ 주의: 약세장에서는 추가 하락 위험 (백테스팅 필수) --- ### 제안 3: 볼린저 밴드 추가 (선택) ```python # 매수조건5: 볼린저 밴드 하단 반등 def check_bollinger_bounce(df, period=20, std=2): bb = df.ta.bbands(length=period, std=std, append=False) if len(df) < 3: return False curr_close = df["close"].iloc[-1] prev_close = df["close"].iloc[-2] lower_band = bb[f"BBL_{period}_{std}.0"].iloc[-1] # 하단 밴드 터치 후 반등 touched = (prev_close <= lower_band) bouncing = (curr_close > prev_close) return touched and bouncing # _evaluate_buy_conditions()에 추가 if check_bollinger_bounce(df): if macd_above_signal: # MACD 강세 확인으로 신뢰도 보강 matches.append("매수조건5") ``` **효과**: - ✅ 변동성 확대 구간 저가 매수 - ✅ MACD 조건으로 추세 확인 - ⚠️ 주의: 하락 추세에서는 하단 밴드도 계속 하락 (백테스팅 필수) --- ## 📈 백테스팅 권장 사항 개선안을 적용하기 전 반드시 **과거 데이터로 백테스팅** 수행: ### 테스트 기간 - 최소 1년 (불장, 횡보장, 약세장 포함) - 권장 3년 (다양한 시장 상황) ### 측정 지표 1. **수익률**: 누적 수익률, 연평균 수익률 2. **승률**: 수익 거래 / 전체 거래 3. **손익비**: 평균 수익 / 평균 손실 4. **MDD**: 최대 낙폭 (Maximum Drawdown) 5. **샤프 비율**: 위험 대비 수익 ### 비교 대상 - 현재 전략 (MACD + SMA + ADX) - 개선안 1 (히스토그램 추가) - 개선안 2 (RSI 추가) - 개선안 3 (볼린저 밴드 추가) - Buy & Hold (벤치마크) --- ## 🎯 결론 ### 현재 전략 평가 | 항목 | 평가 | 설명 | |------|------|------| | 신뢰도 | ⭐⭐⭐⭐⭐ | 복합 조건으로 가짜 신호 최소화 | | 수익률 | ⭐⭐⭐⭐ | 추세 추종으로 안정적 수익 | | 진입 타이밍 | ⭐⭐⭐ | 후행 지표로 다소 늦은 진입 | | 위험 관리 | ⭐⭐⭐⭐⭐ | ADX로 약세장 필터링 우수 | | 코드 품질 | ⭐⭐⭐⭐⭐ | 명확하고 유지보수 용이 | ### 권장 사항 1. **현재 전략 유지**: 안정성과 신뢰도가 우수 2. **백테스팅 수행**: 현재 전략의 실제 성과 측정 3. **선택적 개선**: 백테스팅 결과에 따라 히스토그램 확인 추가 검토 4. **RSI/볼린저 밴드**: 급락 매수 전략이 필요하면 추가 고려 (리스크 높음) --- **작성자**: GitHub Copilot (Claude Sonnet 4.5) **작성일**: 2025-12-09 **참고**: - `src/signals.py:370-470` (_evaluate_buy_conditions) - `docs/code_review_report_v1.md` (CRITICAL-004, HIGH-004 분석)