업데이트

This commit is contained in:
2025-12-09 21:39:23 +09:00
parent dd9acf62a3
commit 37a150bd0d
35 changed files with 5587 additions and 493 deletions

282
docs/log_improvements.md Normal file
View File

@@ -0,0 +1,282 @@
# 로그 개선 사항 문서
**작성일**: 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