7.6 KiB
7.6 KiB
현재 매수 전략 분석
날짜: 2025-12-09
파일: src/signals.py
함수: _evaluate_buy_conditions()
📊 현재 구현된 매수 전략
전략 개요
현재 시스템은 단일 지표가 아닌 복합 조건을 사용하여 신뢰도 높은 매수 신호를 생성합니다.
매수 신호 = (MACD + SMA + ADX) 복합 조건
(3가지 조건 중 1개 이상 충족 시)
🎯 3가지 매수 조건
매수조건 1: MACD 상향 돌파 + 추세 확인
if macd_cross_ok and sma_condition and adx_ok:
matches.append("매수조건1")
세부 조건:
- MACD 골든 크로스:
MACD > Signal돌파 ORMACD > 0돌파 (0선 상향 돌파)
- SMA 정배열:
SMA5 > SMA200(상승 추세) - ADX 강세:
ADX > 25(강한 추세)
트레이딩 의미:
- MACD 골든 크로스 = 단기 모멘텀 전환
- SMA 정배열 = 중장기 상승 추세
- ADX 강세 = 추세가 강함 (약한 반등 필터링)
강점: 추세 전환 초기 포착
매수조건 2: SMA 골든 크로스 + 모멘텀 확인
if cross_sma and macd_above_signal and adx_ok:
matches.append("매수조건2")
세부 조건:
- SMA 골든 크로스:
SMA5가SMA200을 상향 돌파 - MACD 강세:
MACD > Signal(상승 모멘텀 유지) - ADX 강세:
ADX > 25
트레이딩 의미:
- SMA 골든 크로스 = 장기 추세 전환 시그널
- MACD 강세 = 모멘텀 뒷받침
- ADX 강세 = 추세 지속 가능성
강점: 중장기 추세 전환 포착
매수조건 3: ADX 돌파 + 추세/모멘텀 확인
if cross_adx and sma_condition and macd_above_signal:
matches.append("매수조건3")
세부 조건:
- ADX 상향 돌파:
ADX가 25를 상향 돌파 (추세 강화) - SMA 정배열:
SMA5 > SMA200 - 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 히스토그램 확인 추가
# 현재
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 과매도 조건 추가 (선택)
# 매수조건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: 볼린저 밴드 추가 (선택)
# 매수조건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년 (다양한 시장 상황)
측정 지표
- 수익률: 누적 수익률, 연평균 수익률
- 승률: 수익 거래 / 전체 거래
- 손익비: 평균 수익 / 평균 손실
- MDD: 최대 낙폭 (Maximum Drawdown)
- 샤프 비율: 위험 대비 수익
비교 대상
- 현재 전략 (MACD + SMA + ADX)
- 개선안 1 (히스토그램 추가)
- 개선안 2 (RSI 추가)
- 개선안 3 (볼린저 밴드 추가)
- Buy & Hold (벤치마크)
🎯 결론
현재 전략 평가
| 항목 | 평가 | 설명 |
|---|---|---|
| 신뢰도 | ⭐⭐⭐⭐⭐ | 복합 조건으로 가짜 신호 최소화 |
| 수익률 | ⭐⭐⭐⭐ | 추세 추종으로 안정적 수익 |
| 진입 타이밍 | ⭐⭐⭐ | 후행 지표로 다소 늦은 진입 |
| 위험 관리 | ⭐⭐⭐⭐⭐ | ADX로 약세장 필터링 우수 |
| 코드 품질 | ⭐⭐⭐⭐⭐ | 명확하고 유지보수 용이 |
권장 사항
- 현재 전략 유지: 안정성과 신뢰도가 우수
- 백테스팅 수행: 현재 전략의 실제 성과 측정
- 선택적 개선: 백테스팅 결과에 따라 히스토그램 확인 추가 검토
- 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 분석)