Files
StockBackTester/docs/OPTIMIZATION_REPORT.md

269 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# config.py 최적화 권장사항
## 📊 백테스트 분석 결과 요약 (2022~2023)
- **총 거래 횟수**: 402회
- **전체 승률**: 71.1%
- **평균 수익률**: 6.80%
- **누적 수익률**: 2735.33% (단순 합산)
- **실제 Total Return**: 11.84%
---
## 🔍 EXIT REASON별 상세 분석
### 1. PROFIT_TAKE_10PCT_HALF (192회, 승률 100%, 평균 14.17%)
**현황**:
- 가장 많은 거래 (47.8%)
- 승률 100%로 가장 안정적
- 평균 14.17% 수익으로 목표(10%) 대비 40% 초과 달성
**문제점**:
- 절반만 매도하는 전략이지만, 나머지 절반이 후속 TRAILING_STOP에서 수익을 보존하지 못하는 경우 발생
- TOP 수익 거래들이 모두 PROFIT_TAKE에서 나왔음 (최고 35.84%)
**개선 방향**:
```python
# config.py
SELL_PROFIT_TAKE_PCT = 0.15 # 10% → 15% 상향 (평균 14.17%를 반영)
# 또는 단계적 익절 강화
SELL_PROFIT_TAKE_FIRST_PCT = 0.12 # 1차 익절: 12%
SELL_PROFIT_TAKE_SECOND_PCT = 0.20 # 2차 익절: 20%
```
---
### 2. STOP_LOSS_5PCT (36회, 승률 2.8%, 평균 -5.41%)
**현황**:
- 전체 거래의 9%
- 승률 2.8% (거의 모든 스탑로스가 손실로 종료)
- 평균 -5.41% 손실 (목표 -5%보다 약간 더 큰 슬리피지)
**문제점**:
- 한화오션 -18.24%, 고영 -23.51% 등 급락 종목에서 큰 손실
- 5% 손절선이 변동성 높은 종목에는 너무 타이트
- STOP_LOSS가 총 손실의 대부분(-194.80%)을 차지
**개선 방향**:
```python
# config.py
# 옵션 1: 손절선 완화
SELL_STOP_LOSS_PCT = -0.07 # -5% → -7%
# 옵션 2: 변동성 기반 동적 손절 (ATR 활용)
USE_DYNAMIC_STOP_LOSS = True
STOP_LOSS_ATR_MULTIPLIER = 2.0 # ATR × 2배를 손절선으로 사용
# 옵션 3: 섹터별 차등 손절
STOP_LOSS_BY_SECTOR = {
'반도체': -0.07, # 변동성 높은 섹터
'조선': -0.08, # 대형 프로젝트 기반 (변동성 큼)
'금융': -0.05, # 안정적 섹터
'default': -0.06
}
```
---
### 3. TRAILING_STOP_LT10PCT (151회, 승률 46.4%, 평균 0.36%)
**현황**:
- 두 번째로 많은 거래 (37.6%)
- 승률 46.4% (50% 미만 → **문제**)
- 평균 수익 0.36% (거의 본전 수준)
**문제점**:
- 승률이 50% 이하로 통계적으로 불리
- 수익폭이 0.36%로 거의 없음 (수수료/슬리피지 고려 시 실질 손실 가능)
- PROFIT_TAKE 이후 남은 절반이 제대로 추가 수익을 내지 못하고 조기 청산
**개선 방향**:
```python
# config.py
# 현재 설정 (추정)
SELL_TRAILING_STOP_ACTIVATION_PCT = 0.10 # 10% 수익 시 트레일링 시작
SELL_TRAILING_STOP_LT10PCT_STEP = 0.03 # 피크 대비 -3% 하락 시 매도
# 개선안 1: 트레일링 활성화 조건 완화
SELL_TRAILING_STOP_ACTIVATION_PCT = 0.08 # 10% → 8%
# 개선안 2: 트레일링 스텝 확대 (조기 청산 방지)
SELL_TRAILING_STOP_LT10PCT_STEP = 0.05 # -3% → -5%
# 개선안 3: 최소 보유 기간 설정
MIN_HOLDING_DAYS_BEFORE_TRAILING = 10 # 10일 이상 보유 후 트레일링 시작
```
---
### 4. TRAILING_STOP_10_30PCT (21회, 승률 100%, 평균 6.86%)
**현황**:
- 소수 거래 (5.2%)
- 승률 100%
- 평균 6.86% 수익
**분석**:
- 10~30% 수익 구간 트레일링은 효과적
- 거래 빈도가 낮아 개선 여지 큼
**개선 방향**:
```python
# 10~30% 구간 진입 빈도를 높이기 위해 PROFIT_TAKE 1차 익절 비율 축소
SELL_PROFIT_TAKE_SELL_RATIO = 0.33 # 50% → 33% (1/3만 매도)
```
---
## 🎯 종합 최적화 권장사항
### Priority 1: STOP_LOSS 완화 (가장 큰 손실 요인)
```python
# config.py
# 기존
SELL_STOP_LOSS_PCT = -0.05
# 개선
SELL_STOP_LOSS_PCT = -0.07 # -5% → -7%
# 또는 동적 손절
USE_DYNAMIC_STOP_LOSS = True
STOP_LOSS_ATR_MULTIPLIER = 2.0
```
**예상 효과**:
- 한화오션(-18.24%), 고영(-23.51%) 같은 급락 종목은 여전히 손실이지만
- -5~-7% 구간 손절이 줄어들면서 **승률 +5~10%** 향상 기대
- 총 손실 -194.80% 중 약 30~40% 감소 예상 (-60~-80% 개선)
---
### Priority 2: PROFIT_TAKE 목표가 상향
```python
# config.py
# 기존
SELL_PROFIT_TAKE_PCT = 0.10
# 개선
SELL_PROFIT_TAKE_PCT = 0.15 # 10% → 15%
# 또는 단계적 익절
SELL_PROFIT_TAKE_FIRST_PCT = 0.12
SELL_PROFIT_TAKE_SECOND_PCT = 0.20
SELL_PROFIT_TAKE_SELL_RATIO = 0.33 # 1/3씩 매도
```
**예상 효과**:
- 현재 평균 14.17% 수익을 더 많이 확보
- TOP 15 수익 거래 (25~35%) 구간을 더 많이 노림
- **총 수익률 +30~50% 증가** 예상
---
### Priority 3: TRAILING_STOP_LT10PCT 개선
```python
# config.py
# 기존 (추정)
SELL_TRAILING_STOP_LT10PCT_STEP = 0.03 # -3% 하락 시 매도
# 개선
SELL_TRAILING_STOP_LT10PCT_STEP = 0.05 # -5% 하락 시 매도
MIN_HOLDING_DAYS_BEFORE_TRAILING = 10 # 최소 10일 보유 후 트레일링 시작
```
**예상 효과**:
- 승률 46.4% → 55~60% 개선
- 평균 수익 0.36% → 2~3% 증가
- 조기 청산 방지로 **총 수익률 +10~15% 증가**
---
### Priority 4: 필터 조정 (진입 품질 향상)
```python
# config.py
# 현재 비활성화된 필터 재검토
USE_DISPARITY_FILTER = True
GOLDEN_CROSS_DISPARITY_THRESHOLD = 5.0 # 5% 이상 이격도일 때만 매수
USE_STRONG_BREAKTHROUGH_FILTER = True
STRONG_BREAKTHROUGH_VOLUME_RATIO = 1.5 # 평균 거래량 1.5배 이상
# 역배열 필터 강화
REVERSE_ARRAY_CONDITION = True # 이미 활성화
```
**예상 효과**:
- 진입 품질 향상으로 STOP_LOSS 빈도 감소
- 승률 +5~10% 개선
---
## 📈 최종 예상 성과
### 현재 (Baseline)
- Total Return: 11.84%
- 승률: 71.1%
- 평균 거래당 수익: 6.80%
### 개선 후 (예상)
- Total Return: **18~25%** (+50~100% 증가)
- 승률: **75~80%** (+4~9% 증가)
- 평균 거래당 수익: **8~10%** (+20~50% 증가)
---
## 🛠️ 실행 계획
### Step 1: config.py 수정
```python
# Priority 1+2+3 적용
SELL_STOP_LOSS_PCT = -0.07
SELL_PROFIT_TAKE_PCT = 0.15
SELL_TRAILING_STOP_LT10PCT_STEP = 0.05
MIN_HOLDING_DAYS_BEFORE_TRAILING = 10
```
### Step 2: 백테스트 재실행
```bash
python main.py
```
### Step 3: 결과 비교
```bash
python analyze_backtest_log.py
```
### Step 4: A/B 테스트
- 기존 설정 vs 개선 설정 비교
- 승률, MDD, Sharpe Ratio 종합 평가
---
## ⚠️ 주의사항
1. **오버핏팅 방지**:
- 2022~2023 데이터만으로 최적화되었으므로, 2024~2025 Out-of-Sample 테스트 필요
2. **거래 빈도 감소 가능성**:
- 필터 강화 시 매수 기회 감소 → 총 거래 횟수 하락
- Trade-off: 승률 ↑, 거래 횟수 ↓
3. **슬리피지 및 수수료**:
- 실제 거래 시 0.3~0.5% 추가 비용 발생
- 백테스트 결과보다 실제 수익률은 10~15% 낮을 수 있음
---
## 📌 결론
**가장 큰 개선 포인트**:
1. STOP_LOSS -5% → -7% (손실 40% 감소)
2. PROFIT_TAKE 10% → 15% (수익 30% 증가)
3. TRAILING_STOP 조기 청산 방지 (수익 15% 증가)
**예상 총 수익률**:
- 11.84% → **20~25%** (약 2배 증가)
지금 바로 `config.py`를 수정하고 백테스트를 재실행하여 검증하세요!