120 lines
4.5 KiB
Markdown
120 lines
4.5 KiB
Markdown
|
|
# 전략 개선 제안서 — 2026-06-05
|
||
|
|
|
||
|
|
> 상태: 수동 승인 대기
|
||
|
|
> 근거: 12거래일 / 168회 거래
|
||
|
|
> 증거 충분도: **부족 (30거래일 미만)** — 참고용, 적용 전 신중 검토 필요
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 제안: SL cascade 진입 차단 룰
|
||
|
|
|
||
|
|
### 현상
|
||
|
|
|
||
|
|
오늘(06-05) 09:20~09:49 사이 **8연속 손절**이 발생한 후에도 봇이 신규 진입을 계속했다.
|
||
|
|
|
||
|
|
- 10:19:50 로그: `ENTRY warning: 11 stop losses in last 60 minutes`
|
||
|
|
- 경고 직후(10:19:54) 한화생명 진입 → SL(-7,844원) 추가
|
||
|
|
|
||
|
|
현재 경고는 로그 출력만 하고 진입을 막지 않는다.
|
||
|
|
AI 모델이 stop_loss=0.767을 예측했음에도 진입이 허용되어 추가 손실이 발생했다.
|
||
|
|
|
||
|
|
오늘 손실 구조:
|
||
|
|
| 구간 | 손절 횟수 | 누적 손실 |
|
||
|
|
|------|-----------|-----------|
|
||
|
|
| 09:20~09:49 | 8회 | ~-92,845원 |
|
||
|
|
| 09:52~11:25 | 4회 추가 | ~+~7,900원 추가 |
|
||
|
|
|
||
|
|
### 과거 데이터에서의 패턴
|
||
|
|
|
||
|
|
| 날짜 | SL 비율 | 특이사항 |
|
||
|
|
|------|---------|----------|
|
||
|
|
| 06-05 | 12/15 (80%) | 오전 8연속 SL |
|
||
|
|
| 05-27 | 13/18 (72%) | 가장 큰 손실일 -247,022원 |
|
||
|
|
| 05-21 | 9/17 (53%) | 수량 과다 초기 손실 |
|
||
|
|
| 05-28 | 8/12 (67%) | SL 집중 |
|
||
|
|
|
||
|
|
SL 비율 높은 날은 시장 자체가 하방 바이어스를 가진 날이었을 가능성이 높다.
|
||
|
|
|
||
|
|
### 제안 수정
|
||
|
|
|
||
|
|
`app/main.py`의 진입 체크 로직에 cascade halt 조건 추가:
|
||
|
|
|
||
|
|
**제안 파라미터:**
|
||
|
|
```python
|
||
|
|
# app/config.py 추가
|
||
|
|
CONSEC_SL_HALT_THRESHOLD = 5 # 60분 내 이 횟수 이상 SL 발생 시 신규 진입 중단
|
||
|
|
```
|
||
|
|
|
||
|
|
**로직 변경 위치:** `app/main.py` — 진입 허가 체크 직전
|
||
|
|
|
||
|
|
```python
|
||
|
|
# 현재 (경고만)
|
||
|
|
if recent_sl_count >= 11:
|
||
|
|
logger.warning("ENTRY warning: %d stop losses in last 60 minutes", recent_sl_count)
|
||
|
|
|
||
|
|
# 제안 (차단 추가)
|
||
|
|
if recent_sl_count >= CONSEC_SL_HALT_THRESHOLD:
|
||
|
|
logger.warning(
|
||
|
|
"ENTRY blocked (cascade halt): %d SL in last 60 min — skip %s",
|
||
|
|
recent_sl_count, ticker,
|
||
|
|
)
|
||
|
|
continue # 진입 차단
|
||
|
|
```
|
||
|
|
|
||
|
|
### 임계값 선택 근거
|
||
|
|
|
||
|
|
- 5회: 12거래일 중 오늘과 05-27에서 명확히 초과됨. 정상 변동성 날에는 5회 초과가 드물었음 (미검증).
|
||
|
|
- 11회 (현재 경고): 너무 늦음. 이미 대부분의 손실이 발생한 후.
|
||
|
|
- 보수적 시작: 5회 threshold로 시작하여 false positive(정상 날 차단) 빈도 확인 후 조정.
|
||
|
|
|
||
|
|
### 예상 효과
|
||
|
|
|
||
|
|
오늘 기준: threshold=5 적용 시 09:34 이후 신규 진입 중단 가능
|
||
|
|
→ 차단 가능 손실: SK증권(-6,312) + 아리바이오랩(-6,303) + 디앤디파마텍(-5,947) + 이후 4건
|
||
|
|
→ **약 +30,000~40,000원 손실 감소** (아주IB투자 TP1 기회 차단은 감수)
|
||
|
|
|
||
|
|
### 리스크
|
||
|
|
|
||
|
|
- **False positive**: SL이 5회 이상 발생했지만 이후 시장이 회복되는 케이스에서 수익 기회 차단.
|
||
|
|
- **임계값 민감도**: 너무 낮으면 정상 날에도 차단됨. 너무 높으면 효과 없음.
|
||
|
|
- **샘플 부족**: 12거래일 데이터로 임계값 calibration이 어려움.
|
||
|
|
- **단방향 차단**: cascade halt는 진입만 막고 기존 포지션에는 영향 없음.
|
||
|
|
|
||
|
|
### 검증 방법
|
||
|
|
|
||
|
|
적용 전 백테스트가 필요하나 현재 minute bar 데이터가 충분하지 않다.
|
||
|
|
대안: 로그 출력만 먼저 강화하고 (`ENTRY cascade-halt SKIP` 레벨로 기록), 1주일 관찰 후 실제 차단 적용.
|
||
|
|
|
||
|
|
### 적용 전 선행 조건
|
||
|
|
|
||
|
|
1. 30거래일 이상 운영 데이터 확보 후 threshold 재검토
|
||
|
|
2. 임계값=5 적용 시 과거 12거래일에서 정상 날에 몇 번 trigger되었을지 수동 확인
|
||
|
|
3. 사용자 수동 승인
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 이전 미적용 제안 진행 상황
|
||
|
|
|
||
|
|
| 제안 | 날짜 | 상태 |
|
||
|
|
|------|------|------|
|
||
|
|
| TP2_PCT 2.5%→3.5% | 2026-06-02 | **미적용** — 오늘 TP2 도달 건 없어 영향 미측정 |
|
||
|
|
| MAX_HOLD_MIN 90분 | 2026-06-02 | **적용됨** (config 확인: MAX_HOLD_MIN=90) |
|
||
|
|
|
||
|
|
### TP2_PCT 제안 재검토
|
||
|
|
|
||
|
|
오늘 TP1 도달 2건 중 TP2 도달은 없었다. 아주IB투자는 TIME으로 청산 — TP2 미도달.
|
||
|
|
TP2 상향은 TP2 도달 빈도가 낮은 현재 시장 조건에서 효과 미미할 가능성.
|
||
|
|
우선순위: **SL cascade 차단 룰** > TP2_PCT 상향
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 우선순위 정리
|
||
|
|
|
||
|
|
| 우선순위 | 제안 | 유형 | 긴급도 |
|
||
|
|
|----------|------|------|--------|
|
||
|
|
| 1 | SL cascade 진입 차단 (threshold=5) | 리스크 통제 | 높음 (오늘 피해 직접 대응) |
|
||
|
|
| 2 | TP2_PCT 2.5%→3.5% | 수익 구조 | 보통 |
|
||
|
|
|
||
|
|
두 제안 모두 30거래일 미만 데이터이므로 1가지씩 단계적 적용 권장.
|
||
|
|
제안 1은 먼저 **observe 모드** (차단 없이 로그만) 1주일 운영 후 실제 차단 적용 검토.
|