Files
AutoCoinTrader2/docs/code_review_report_v9.md

6.4 KiB

AutoCoinTrader Code Review Report (v9)

1. 개요 (Overview)

분석 일자: 2025-12-16 분석 대상: 전체 소스 코드 (src/, tests/, main.py, config/) 주요 변경점: ADX/MACD/SMA 지표 계산 시 미완성 캔들 제외 로직 추가 분석 관점: Python 전문가 + 암호화폐 트레이더


2. 최근 수정사항 검증

2.1 미완성 캔들 제외 로직 (완료)

파일: signals.py_prepare_data_and_indicators()

# ✅ 마지막 미완성 캔들 제외 (완성된 캔들만 사용)
df_complete = df.iloc[:-1].copy()
항목 상태 비고
ADX 계산 적용 df_complete["high/low/close"] 사용
MACD 계산 적용 df_complete["close"] 사용
SMA 5/200 계산 적용 df_complete["close"] 사용
로그 기록 적용 제외된 봉과 최종 봉 시간 표시

효과: 업비트 웹사이트 지표와 일치, 가짜 신호(Fakeout) 방지


3. 발견된 문제점 및 개선사항

🔴 HIGH Priority (높은 우선순위)

HIGH-001: config.json에 confirm_stop_loss 설정 누락

현황: config.pyvalidate_config() 함수는 confirm.confirm_stop_loss 필드를 검증하지만, 실제 config.json에는 이 필드가 없습니다.

// config.json (현재)
"confirm": {
  "confirm_via_file": false,
  "confirm_timeout": 300
}

// 필요한 설정 (누락됨)
"confirm": {
  "confirm_via_file": false,
  "confirm_timeout": 300,
  "confirm_stop_loss": false  // ← 손절 시 확인 스킵 여부
}

영향: 손절 시 파일 확인 로직이 의도대로 동작하지 않을 수 있음

권장: config.jsonconfirm_stop_loss 필드 추가


HIGH-002: _update_df_with_realtime_price 함수 미사용 (Dead Code)

현황: 미완성 캔들 제외 로직 적용으로 _update_df_with_realtime_price() 함수가 더 이상 호출되지 않습니다.

# signals.py:283-319 - 호출되지 않는 함수
def _update_df_with_realtime_price(df, symbol, timeframe, buffer):
    """진행 중인 마지막 캔들 데이터를 실시간 현재가로 업데이트합니다."""
    ...

권장: 함수 제거 또는 향후 실시간 모드 지원을 위해 주석으로 보존


HIGH-003: SMA 200 계산 시 데이터 부족 가능성

현황: 200봉 이평선 계산에 최소 200개의 완성된 봉이 필요하지만, 현재 검증은 len(df) < 4만 확인합니다.

# signals.py:333
if df.empty or len(df) < 4:  # 미완성 봉 제외 후 최소 3개 필요

문제: 데이터가 50개만 있으면 SMA200은 모두 NaN이 됩니다.

권장: 경고 로그 추가 또는 최소 데이터 수 검증 강화


🟡 MEDIUM Priority (중간 우선순위)

MEDIUM-001: 매수 조건 로그에서 현재가 미표시

현황: 매수 조건 로그에 지표 값만 표시되고 현재가가 표시되지 않습니다.

권장: 현재가 추가

[지표값] Close: 4409000 | MACD: ... | ADX: ...

MEDIUM-002: rebuy_cooldown_hours 설정이 config.json에 없음

현황: 코드에서 rebuy_cooldown_hours 설정을 읽지만, config.json에 정의되어 있지 않습니다.

권장: config.jsonauto_trade 섹션에 추가

"auto_trade": {
  "rebuy_cooldown_hours": 24
}

MEDIUM-003: 과도한 except Exception 사용 (3곳)

파일 위치 권장
signals.py:376 _prepare_data_and_indicators RuntimeError, ValueError 로 구체화
order.py:698 place_buy_order_upbit 모니터링 TimeoutError 등으로 구체화
holdings.py:473 fetch_holdings_from_upbit 스냅샷 json.JSONDecodeError, OSError 로 구체화

🟢 LOW Priority (낮은 우선순위)

LOW-001: 중복 import 문

일부 파일에서 함수 내부에서 import를 반복합니다. 파일 상단에 한 번만 import 권장.

LOW-002: 타입 힌트 불완전

일부 함수의 반환 타입이 명시되지 않았습니다.


4. 트레이딩 전략 관점 분석 📊

4.1 매수 전략 검토

조건 로직 평가
조건1 MACD 골든크로스 + SMA5 > SMA200 + ADX > 25 표준적인 추세 추종
조건2 SMA 골든크로스 + MACD 상향 + ADX > 25 모멘텀 확인
조건3 ADX 상향 돌파 + SMA/MACD 확인 추세 강도 확인

4.2 매도 전략 검토

조건 로직 평가
손절 매수가 대비 -5% 적절한 손절선
부분익절 10% 수익 시 50% 매도 리스크 감소
트레일링 최고점 대비 5%/15% 하락 수익 보호

5. 아키텍처 품질 평가 🏗️

5.1 강점

  1. 원자적 파일 쓰기: .tmp 파일 사용 후 os.replace() (데이터 손실 방지)
  2. Rate Limiter: 토큰 버킷 기반 다중 윈도우 제한 (초당 8회, 분당 590회)
  3. StateManager: 영구 상태 관리 분리
  4. Decimal 기반 정밀 계산: 부동소수점 오차 방지

5.2 개선 가능 영역

  1. 전략 패턴 미적용: 매수/매도 로직이 signals.py에 하드코딩
  2. 백테스팅 어려움: 전략 변경 시 코드 수정 필요

6. v9 개선 권고 요약

우선순위 ID 항목 예상 작업량
🔴 HIGH HIGH-001 config.json에 confirm_stop_loss 추가 5분
🔴 HIGH HIGH-002 미사용 함수 정리 10분
🔴 HIGH HIGH-003 SMA200 데이터 부족 경고 추가 15분
🟡 MEDIUM MEDIUM-001 매수 로그에 현재가 추가 10분
🟡 MEDIUM MEDIUM-002 rebuy_cooldown_hours 설정 추가 5분
🟡 MEDIUM MEDIUM-003 예외 처리 구체화 30분
🟢 LOW LOW-001 중복 import 정리 10분
🟢 LOW LOW-002 타입 힌트 보완 20분

7. 결론

현재 코드베이스는 전반적으로 양호한 상태입니다. v5~v7 리뷰에서 지적된 주요 문제들이 해결되었으며, 최근 미완성 캔들 제외 로직 추가로 지표 정확도가 크게 향상되었습니다.

즉시 조치 필요:

  • config.json에 누락된 설정 필드 추가 (confirm_stop_loss, rebuy_cooldown_hours)

중기 개선 과제:

  • 전략 패턴 도입으로 유연성 확보
  • 백테스팅 프레임워크 구축

Report generated by AutoCoinTrader Code Review System v9