Files
AutoCoinTrader2/docs/log_improvements.md
2025-12-09 21:39:23 +09:00

8.4 KiB
Raw Blame History

로그 개선 사항 문서

작성일: 2025-12-04 대상: AutoCoinTrader 프로젝트 목표: 업비트 차트와 직접 비교하여 매수/매도 로직 검증 가능하게 개선


📋 문제점 (개선 전)

로그 파일에 다음 정보가 누락되어 있었습니다:

매수 조건

2025-12-04 22:28:04,955 - INFO - 조건 미충족: 매수조건 없음
2025-12-04 22:28:04,955 - INFO - [조건1 미충족]
2025-12-04 22:28:04,955 - INFO - [조건2 미충족]
2025-12-04 22:28:04,955 - INFO - [조건3 미충족]

문제: MACD값, Signal값, SMA5/SMA200, ADX값이 보이지 않아 실제 차트값과 비교 불가능

매도 조건

[현재 보유 정보로 매도 조건 확인하는 로그가 없음]

문제:

  • 매수가, 현재가, 손절가, 익절가 정보 부재
  • 수익률, 최고수익률, 최고점대비 하락률 계산 값 미표시
  • 왜 매도되었는지 정확한 판정 기준 불명확

해결 사항 (개선 후)

1 매수 조건 상세 로그

🔧 적용 파일

  • 파일: src/signals.py
  • 함수: _process_symbol_core() (line ~545)
  • 함수: _evaluate_buy_conditions() (line ~357)

📝 개선된 로그 형식

[지표값] MACD: -0.000534 | Signal: 0.000123 | SMA5: 65420.15 | SMA200: 64230.50 | ADX: 26.45 (기준: 25)

[조건1 충족] MACD: -0.000534->0.000215, Sig: 0.000123->0.000456 | SMA: 65420.15 > 64230.50 | ADX: 26.45 > 25

[조건2 미충족] SMA: 65100.00->65420.15 cross 64500.00->64230.50 | MACD: 0.000215 > Sig: 0.000456 | ADX: 26.45 > 25

[조건3 미충족] ADX: 24.50->26.45 cross 25 | SMA: 65420.15 > 64230.50 | MACD: 0.000215 > Sig: 0.000456

🎯 표시 정보

  • MACD 선값 (이전 → 현재)
  • Signal 선값 (이전 → 현재)
  • SMA5/SMA200 (이전 → 현재, 또는 현재값)
  • ADX값 및 기준값(25)
  • 상향 돌파 여부
  • 각 조건의 충족/미충족 이유

2 매도 조건 상세 로그

🔧 적용 파일

  • 파일: src/signals.py
  • 함수: evaluate_sell_conditions() (line ~42)
  • 함수: _check_sell_logic() (line ~800)

📝 개선된 로그 형식

[KRW-BTC] stop_loss 검사
  매수가: 50000.00 | 현재가: 47400.00 | 최고가: 51000.00
  손절가(-5%): 47500.00 | 익절가(10%): 55000.00 | 익절가(30%): 65000.00
  현재수익률: -5.20% | 최고수익률: 2.00% | 최고점대비: -7.06%
  판정: stop_loss (매도비율: 100%)

매도 사유별 상세 로그

조건1: 무조건 손절

[손절(조건1)] 매수가 50000.00 → 현재 47400.00 (수익률 -5.20% <= -5.00%)

조건2: 저수익 트레일링

[트레일링 익절(조건2)] 매수가 50000.00 → 최고 51000.00 → 현재 48100.00(최고점대비 5.39% 하락 >= 5.0% 기준)

조건3: 부분 매도

[부분 익절(조건3)] 매수가 50000.00 → 현재 55100.00 (수익률 10.20% >= 10.00%) 50% 매도

조건4-2: 수익률 보호 (중간 수익)

[수익률 보호(조건4-2)] 최고가 56000.00(최고수익 12.00%) → 현재 54800.00(현재수익 9.60% <= 10.00%)

조건4-1: 트레일링 익절 (중간 수익)

[트레일링 익절(조건4-1)] 최고가 56000.00(최고수익 12.00%) → 현재 52900.00(최고점대비 5.36% 하락 >= 5.0% 기준)

조건5-2: 수익률 보호 (고수익)

[수익률 보호(조건5-2)] 최고가 65000.00(최고수익 30.00%) → 현재 63600.00(현재수익 27.20% <= 30.00%)

조건5-1: 트레일링 익절 (고수익)

[트레일링 익절(조건5-1)] 최고가 65000.00(최고수익 30.00%) → 현재 55100.00(최고점대비 15.23% 하락 >= 15.00% 기준)

🎯 표시 정보

  • 매수가, 현재가, 최고가
  • 손절가(-5%), 익절가(10%), 익절가(30%)
  • 현재 수익률, 최고 수익률, 최고점 대비 하락률
  • 매도 조건 판정 결과
  • 매도 비율
  • 상세한 판정 기준과 이유

🔍 업비트 차트와 비교하기

이제 다음과 같이 로그를 활용하여 검증할 수 있습니다:

매수 신호 검증 (4시간봉)

  1. 업비트 차트 열기: https://upbit.com/exchange
  2. 원하는 코인 선택 (예: BTC)
  3. 4시간 타임프레임으로 변경
  4. 로그에서 확인:
    [지표값] MACD: -0.000534 | Signal: 0.000123 | SMA5: 65420.15 | SMA200: 64230.50 | ADX: 26.45
    
  5. 차트와 비교:
    • MACD 지표에서 -0.000534 값 확인
    • Signal 선이 0.000123 값 확인
    • 5이평선이 65420.15 값 확인
    • 200이평선이 64230.50 값 확인
    • ADX가 26.45 값 확인

매도 신호 검증

  1. 보유 코인의 1시간/4시간 차트 열기
  2. 로그에서 확인:
    [KRW-BTC] stop_loss 검사
      매수가: 50000.00 | 현재가: 47400.00 | 최고가: 51000.00
      손절가(-5%): 47500.00 | 익절가(10%): 55000.00
      현재수익률: -5.20% | 최고수익률: 2.00%
    
  3. 차트와 비교:
    • 현재 캔들의 종가가 47400.00 인지 확인
    • 매수 후 최고점이 51000.00 인지 확인
    • 손절가 47500.00이 맞는지 확인 (-5%)
    • 현재 수익률이 -5.20%인지 계산으로 확인 ((47400-50000)/50000*100 = -5.2%)

📊 설정값 확인

매수 조건 설정 (config.json)

{
  "adx_threshold": 25,      // ADX > 25
  "sma_short": 5,           // 5이평선
  "sma_long": 200,          // 200이평선
  "macd_fast": 12,          // MACD 단기
  "macd_slow": 26,          // MACD 장기
  "macd_signal": 9          // MACD 신호선
}

매도 조건 설정 (config.json)

{
  "loss_threshold": -5.0,        // 조건1: -5% 손절
  "profit_threshold_1": 10.0,    // 조건3,4,5: 10% 기준
  "profit_threshold_2": 30.0,    // 조건5: 30% 기준
  "drawdown_1": 5.0,             // 조건2,4: 5% 트레일링
  "drawdown_2": 15.0             // 조건5: 15% 트레일링
}

🚀 적용 효과

장점

  1. 신뢰성 검증: 업비트 차트와 직접 비교하여 로직 검증 가능
  2. 디버깅 용이: 조건 미충족 이유를 명확히 파악 가능
  3. 성능 모니터링: 각 지표값의 변화를 추적할 수 있음
  4. 오류 예방: 잘못된 신호 발생 시 원인을 빠르게 파악
  5. 운영 투명성: 자동 매수/매도 결정 과정을 명확히 기록

📈 사용 사례

  • 매수 신호 발생했는데 차트를 보니 다른 경우 → 로그 확인으로 이유 파악
  • 매도됐는데 왜 매도됐는지 모르는 경우 → 로그에서 정확한 사유 확인
  • 설정값 변경 후 효과 측정 → 이전/현재 로그 비교
  • 거래 기록 감사 (Audit) → 모든 결정 근거 추적 가능

📝 로그 레벨

  • 매수 조건 상세: INFO 레벨 (항상 표시)
  • 매도 조건 상세: INFO 레벨 (항상 표시)
  • 지표값 상세: 매수/매도 판정 시마다 기록

로그 파일 위치

c:\tae\python\AutoCoinTrader\logs\AutoCoinTrader.log

🔧 코드 변경 사항

src/signals.py 수정 내용

  1. evaluate_sell_conditions() 함수:

    • result dict에 debug_info 추가
    • 각 매도 조건에 상세한 가격 정보 포함
  2. _evaluate_buy_conditions() 함수:

    • 함수 docstring 확장
    • 반환값에 지표값 명시
  3. _process_symbol_core() 함수:

    • 조건별 상세 로그 메시지 생성
    • MACD, Signal, SMA, ADX 값 표시
  4. _check_sell_logic() 함수:

    • 매도 검사 로그를 DEBUG → INFO로 변경
    • 상세한 가격 및 수익률 정보 표시

검증 완료

테스트 결과:

[매도 조건 평가 결과]
상태: profit_taking
매도비율: 100%
수익률: 4.00%
최고점대비: -5.45%
사유: 트레일링 익절(조건2): 매수가 50000.00 → 최고 55000.00 → 현재 52000.00(최고점대비 5.45% 하락 >= 5.0% 기준)

[디버그 정보]
매수가: 50000.00
현재가: 52000.00
최고가: 55000.00
손절가(-5%): 47500.00
익절가(10%): 55000.00
익절가(30%): 65000.00
최고수익률: 10.00%

모든 정보가 명확하게 표시됨!


📌 다음 단계

  1. 실제 운영: python main.py로 프로그램 실행
  2. 로그 모니터링: 매도/매수 신호 발생 시 로그 확인
  3. 업비트 검증: 차트와 비교하여 정확성 확인
  4. 지속적 개선: 필요시 추가 정보 로깅

작성자: GitHub Copilot 마지막 업데이트: 2025-12-04