# 로그 개선 사항 문서 **작성일**: 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) #### 📝 개선된 로그 형식 ```log [지표값] 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) #### 📝 개선된 로그 형식 ```log [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`) ```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`) ```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