8.4 KiB
8.4 KiB
로그 개선 사항 문서
작성일: 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시간봉)
- 업비트 차트 열기: https://upbit.com/exchange
- 원하는 코인 선택 (예: BTC)
- 4시간 타임프레임으로 변경
- 로그에서 확인:
[지표값] MACD: -0.000534 | Signal: 0.000123 | SMA5: 65420.15 | SMA200: 64230.50 | ADX: 26.45 - 차트와 비교:
- MACD 지표에서 -0.000534 값 확인
- Signal 선이 0.000123 값 확인
- 5이평선이 65420.15 값 확인
- 200이평선이 64230.50 값 확인
- ADX가 26.45 값 확인
매도 신호 검증
- 보유 코인의 1시간/4시간 차트 열기
- 로그에서 확인:
[KRW-BTC] stop_loss 검사 매수가: 50000.00 | 현재가: 47400.00 | 최고가: 51000.00 손절가(-5%): 47500.00 | 익절가(10%): 55000.00 현재수익률: -5.20% | 최고수익률: 2.00% - 차트와 비교:
- 현재 캔들의 종가가 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% 트레일링
}
🚀 적용 효과
✨ 장점
- 신뢰성 검증: 업비트 차트와 직접 비교하여 로직 검증 가능
- 디버깅 용이: 조건 미충족 이유를 명확히 파악 가능
- 성능 모니터링: 각 지표값의 변화를 추적할 수 있음
- 오류 예방: 잘못된 신호 발생 시 원인을 빠르게 파악
- 운영 투명성: 자동 매수/매도 결정 과정을 명확히 기록
📈 사용 사례
- ✅ 매수 신호 발생했는데 차트를 보니 다른 경우 → 로그 확인으로 이유 파악
- ✅ 매도됐는데 왜 매도됐는지 모르는 경우 → 로그에서 정확한 사유 확인
- ✅ 설정값 변경 후 효과 측정 → 이전/현재 로그 비교
- ✅ 거래 기록 감사 (Audit) → 모든 결정 근거 추적 가능
📝 로그 레벨
- 매수 조건 상세:
INFO레벨 (항상 표시) - 매도 조건 상세:
INFO레벨 (항상 표시) - 지표값 상세: 매수/매도 판정 시마다 기록
로그 파일 위치
c:\tae\python\AutoCoinTrader\logs\AutoCoinTrader.log
🔧 코드 변경 사항
src/signals.py 수정 내용
-
evaluate_sell_conditions()함수:resultdict에debug_info추가- 각 매도 조건에 상세한 가격 정보 포함
-
_evaluate_buy_conditions()함수:- 함수 docstring 확장
- 반환값에 지표값 명시
-
_process_symbol_core()함수:- 조건별 상세 로그 메시지 생성
- MACD, Signal, SMA, ADX 값 표시
-
_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%
✅ 모든 정보가 명확하게 표시됨!
📌 다음 단계
- 실제 운영:
python main.py로 프로그램 실행 - 로그 모니터링: 매도/매수 신호 발생 시 로그 확인
- 업비트 검증: 차트와 비교하여 정확성 확인
- 지속적 개선: 필요시 추가 정보 로깅
작성자: GitHub Copilot 마지막 업데이트: 2025-12-04