업데이트
This commit is contained in:
282
docs/log_improvements.md
Normal file
282
docs/log_improvements.md
Normal 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
|
||||
Reference in New Issue
Block a user