docs: update STRATEGY.md to 40min candle strategy
This commit is contained in:
55
STRATEGY.md
55
STRATEGY.md
@@ -8,6 +8,8 @@
|
||||
> 핵심 아이디어: 대형 매수자는 가격을 올리지 않고 조용히 매집한다.
|
||||
> 거래량이 먼저 급증하고, 가격 상승은 그 뒤에 따라온다.
|
||||
|
||||
**캔들 단위: 40분봉** (Upbit `minute10` API로 수신 후 인메모리 40분 리샘플링)
|
||||
|
||||
---
|
||||
|
||||
## 진입 조건 (2단계)
|
||||
@@ -18,12 +20,15 @@
|
||||
| 조건 | 파라미터 | 기본값 |
|
||||
|------|----------|--------|
|
||||
| 2h 가격 변동 < N% (횡보) | `PRICE_QUIET_PCT` | 2.0% |
|
||||
| 직전 1h 거래량 ≥ 로컬 5h 평균 × M배 | `VOLUME_MULTIPLIER` | 2.0x |
|
||||
| 직전 40분봉 거래량 ≥ 로컬 5h(7봉) 평균 × M배 | `VOLUME_MULTIPLIER` | 2.0x |
|
||||
|
||||
- 신호 발생 시 텔레그램 알림 발송
|
||||
- `SIGNAL_TIMEOUT_H` 내 진입 조건 미달 시 신호 초기화 (기본: 8h)
|
||||
- 신호가 이하 하락 시 즉시 초기화 (매집 실패 판단)
|
||||
|
||||
> **2h 횡보 체크**: Oracle DB에 저장된 실시간 가격 기록을 조회 (`get_price_n_hours_ago`)
|
||||
> **거래량 체크**: `minute10` → 40분봉 resample → 직전 완성봉 vs 이전 7봉 평균
|
||||
|
||||
### 2단계: 추세 확인 후 진입
|
||||
`signal_price` 대비 +`TREND_AFTER_VOL`% 이상 상승 확인 시 매수:
|
||||
|
||||
@@ -36,9 +41,11 @@
|
||||
## 청산 조건
|
||||
|
||||
### 트레일링 스탑 (ATR 기반)
|
||||
- ATR 5봉 × 1.5 계수 → 동적 손절폭 산출
|
||||
- 최소 1.0% / 최대 4.0% 범위 내 자동 조정
|
||||
- `minute10` → 40분봉 resample 후 최근 7봉(≈5h)의 평균 진폭 계산
|
||||
- ATR = 평균진폭 × 1.5 계수 → 동적 손절폭 산출
|
||||
- 최소 1.0% / **최대 2.0%** 범위 내 자동 조정
|
||||
- 최고가 대비 손절폭 이하 하락 시 즉시 청산
|
||||
- ATR 캐시: 40분마다 갱신 (캐시 TTL=2400초)
|
||||
|
||||
### 타임 스탑
|
||||
- 보유 `TIME_STOP_HOURS`h 경과 후 수익률 < `TIME_STOP_MIN_GAIN_PCT`% 이면 청산
|
||||
@@ -57,6 +64,7 @@
|
||||
|
||||
- 직전 2건 모두 손실 → 해당 종목 진입 차단
|
||||
- 차단 후 가상 추적으로 2연승 달성 시 자동 복귀
|
||||
- **WF 차단 상태는 Oracle DB(`wf_state` 테이블)에 영속 저장** → 재시작 후에도 복원
|
||||
|
||||
### 예산 관리 (복리)
|
||||
- 수익 발생 시: `운용예산 = 초기예산 + 누적수익` (복리 증가)
|
||||
@@ -89,7 +97,6 @@ SIGNAL_TIMEOUT_H=8.0 # 신호 유효 시간 (h)
|
||||
VOLUME_MULTIPLIER=2.0 # 거래량 배수 기준
|
||||
|
||||
# 청산
|
||||
STOP_LOSS_PCT=1.5 # ATR 트레일링 기본값 (동적 조정됨)
|
||||
TIME_STOP_HOURS=8 # 타임스탑 보유 시간
|
||||
TIME_STOP_MIN_GAIN_PCT=3 # 타임스탑 최소 수익률
|
||||
|
||||
@@ -107,7 +114,7 @@ WF_SHADOW_WINS=2
|
||||
|
||||
## 백테스트 결과 요약
|
||||
|
||||
### 365일 (2025-03-02 ~ 2026-03-02) — WF 적용
|
||||
### 365일 (2025-03-02 ~ 2026-03-02) — 1h봉 기준, WF 적용
|
||||
|
||||
| 항목 | 값 |
|
||||
|------|-----|
|
||||
@@ -119,14 +126,25 @@ WF_SHADOW_WINS=2
|
||||
| 승률 | 46% |
|
||||
| 월평균 수익 | 약 115만원 |
|
||||
|
||||
### 45일 Walk-Forward 검증 (2026-01-15 ~ 2026-03-02)
|
||||
### 봉 단위별 비교 (45일, 20종목) — `interval_sweep.py`
|
||||
|
||||
| 기간 | 거래수 | 승률 | 수익률 |
|
||||
|------|--------|------|--------|
|
||||
| Train (77일) | 66건 | 42% | +22.5% |
|
||||
| Test (45일) | 67건 | 61% | +49.9% |
|
||||
| 봉 단위 | 거래수 | 승률 | 누적PnL | 최대낙폭 |
|
||||
|---------|--------|------|---------|---------|
|
||||
| 10분 | 180 | 33.9% | +15.8% | -32.6% |
|
||||
| 20분 | 120 | 36.7% | +31.0% | -16.7% |
|
||||
| 30분 | 91 | 48.4% | +81.7% | -12.9% |
|
||||
| **40분** | **91** | **48.4%** | **+119.4%** | **-11.2%** ← 채택 |
|
||||
| 50분 | 83 | 50.6% | +94.7% | -17.1% |
|
||||
| 60분 | 65 | 50.8% | +88.3% | -11.9% |
|
||||
|
||||
Train/Test 모두 수익 → 오버피팅 아님.
|
||||
### ATR_MAX_STOP 스윕 — `atr_sweep.py`
|
||||
|
||||
| ATR_MAX | 승률 | 누적PnL | 최대낙폭 | 평균스탑 |
|
||||
|---------|------|---------|---------|---------|
|
||||
| 1.5% | 52.3% | +442% | -3.2% | 1.49% |
|
||||
| **2.0%** | **50.8%** | **+299%** | **-4.1%** | **1.49%** ← 채택 |
|
||||
| 2.5% | 50.8% | +256% | -5.3% | 1.77% |
|
||||
| 4.0% | 45.9% | -52% | -29.1% | 3.11% |
|
||||
|
||||
---
|
||||
|
||||
@@ -134,19 +152,28 @@ Train/Test 모두 수익 → 오버피팅 아님.
|
||||
|
||||
| 파일 | 역할 |
|
||||
|------|------|
|
||||
| `core/strategy.py` | 진입 신호 로직 |
|
||||
| `core/monitor.py` | ATR 트레일링 스탑 + 타임스탑 |
|
||||
| `core/strategy.py` | 진입 신호 로직 (40분봉 vol-lead) |
|
||||
| `core/monitor.py` | ATR 트레일링 스탑 + 타임스탑 (40분봉 ATR) |
|
||||
| `core/trader.py` | 주문 실행 + 복리 예산 관리 |
|
||||
| `core/market_regime.py` | 시장 레짐 감지 |
|
||||
| `core/price_db.py` | 가격 DB + WF 상태 영속화 |
|
||||
| `ohlcv_db.py` | OHLCV 시계열 DB 캐시 관리 |
|
||||
| `sim_365.py` | 365일 복리 시뮬레이션 |
|
||||
| `vol_lead_sim.py` | 전략 파라미터 스윕 도구 |
|
||||
| `atr_sweep.py` | ATR_MAX_STOP 파라미터 스윕 |
|
||||
| `sim10m.py` | 10분봉 vs 1h봉 전략 비교 시뮬 |
|
||||
| `interval_sweep.py` | 봉 단위별 성과 비교 (10/20/30/40/50/60분) |
|
||||
|
||||
---
|
||||
|
||||
## 시뮬레이션 실행
|
||||
|
||||
```bash
|
||||
# 봉 단위별 비교 (10m 캐시 필요)
|
||||
python interval_sweep.py
|
||||
|
||||
# ATR_MAX_STOP 스윕 (DB에서 로드)
|
||||
python atr_sweep.py
|
||||
|
||||
# 365일 복리 시뮬 (DB에서 로드)
|
||||
python sim_365.py
|
||||
|
||||
|
||||
Reference in New Issue
Block a user