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

283 lines
8.4 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 로그 개선 사항 문서
**작성일**: 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