Files
Stock-trading-programming/reports/proposals/2026-06-01_strategy_proposal.md
T

134 lines
4.5 KiB
Markdown
Raw Normal View History

# 전략 개선 제안서 — 2026-06-01
> 상태: 수동 승인 대기
> 근거: 9거래일 / 137회 거래
> 증거 충분도: 부족 (30거래일 미만) — 참고용, 적용 전 신중 검토 필요
---
## 제안 1: 동일 종목 활성 포지션 존재 시 신규 진입 차단 [긴급 버그 수정]
### 현상
- 티이엠씨(425040): 09:20:21 진입 후 **8초** 뒤 09:20:29에 동일 종목 재진입
- SK네트웍스(001740): 09:27:19와 09:27:20에 **1초 차이** 중복 진입
- 이전 보고서 패턴: 대한해운(005880) 9초 후 재진입 (2026-05-29)
### 원인
`TICKER_REENTRY_COOLDOWN_MIN`은 이전 **청산 시각**을 기준으로 계산되므로, 포지션이 아직 열려있는 상태에서 같은 종목의 신호가 다시 발생하면 차단되지 않음.
### 제안 수정
`app/main.py` 또는 진입 조건 체크 로직에서:
```python
# 현재 열려있는 포지션에 해당 종목이 있으면 진입 차단
if ticker in active_positions:
continue
```
이미 활성 포지션이 있는 종목은 신규 매수 신호를 무시.
### 예상 효과
- 티이엠씨 재진입 손실 -44,312원 방어
- 중복 포지션으로 인한 2× 손실 리스크 제거
### 리스크
- 없음 (명백한 버그 수정)
---
## 제안 2: 당일 TP 청산 종목 재진입 차단
### 현상 (반복 패턴)
| 날짜 | 종목 | 오전 결과 | 재진입 결과 |
|------|------|-----------|-------------|
| 2026-06-01 | PS일렉트로닉스(332570) | TP1+TP2 (+49,383) | SL (-41,412) |
| 2026-06-01 | 대한광통신(010170) | TP1+TP2 (+23,858) | SL (-38,864) |
| 2026-05-29 | 피델릭스(032580) | TP1+TP2 (+29,772) | SL (-24,088) |
| 2026-05-29 | KBI메탈(024840) | TP1+TP2 (+30,219) | SL (-23,888) |
총 4건 반복 확인. 매 발생 시 오전 수익의 60~85%를 반납.
### 제안 수정
TP2 청산 종목을 `today_tp_tickers` 집합에 추가하여 당일 재진입 차단.
```python
# TP2 청산 시
if exit_reason == "TP2":
today_tp_tickers.add(ticker)
# 진입 조건 체크 시
if ticker in today_tp_tickers:
continue # 당일 TP 청산 종목 재진입 차단
```
### 예상 효과
- 6월 1일 기준: -80,276원 손실 방어
- 5월 29일 기준: -47,976원 손실 방어
### 리스크
- 오전 TP 후 오후에도 추가 모멘텀이 있는 케이스를 놓칠 수 있음
- 증거 부족(4건): 장기 데이터 확보 후 통계적 검증 필요
---
## 제안 3: KIS API 청산 체크 루프 스로틀링
### 현상
12:18~12:22 `초당 거래건수를 초과하였습니다` 오류 반복:
- 포지션 2~3개 동시 청산 체크 시 API 호출이 초당 한도 초과
- SFA반도체: 12:18 오류 → 12:58 청산 (40분 지연)
- 실전에서는 손절가 아래로 더 내려가는 동안 청산 못하는 리스크
### 제안 수정
```python
# 청산 체크 루프 내 포지션 간 딜레이
for ticker in list(open_positions.keys()):
check_exit(ticker)
time.sleep(0.3) # 포지션당 300ms 딜레이 → 초당 최대 3건
```
또는 호출 실패 시 exponential backoff 재시도 로직 추가.
### 예상 효과
- API 속도 제한 오류 제거
- 청산 체크 지연 방지 → 손절 정확도 향상
### 리스크
- 체크 루프 주기가 약간 길어지나 (포지션 2개 기준 +600ms/사이클) 실질적 영향 미미
---
## 제안 4: MAX_HOLD_MIN 120분 → 90분 단축 검토
### 현상
TIME 청산 3건 모두 손실:
- 한온시스템: -12,922원 (120분 보유)
- 흥구석유: -3,107원 (120분 보유)
- SFA반도체: -6,897원 (120분 보유)
방향성 없는 종목을 2시간 보유하며 수수료만 누적.
### 제안 수정
```python
MAX_HOLD_MIN = 90 # 120 → 90분
```
### 예상 효과
- 불필요한 TIME 청산 손실 30분 조기 차단
- 포지션 회전율 향상 → 오후 더 나은 기회 탐색 가능
### 리스크
- 90~120분 사이에 TP를 달성하는 케이스도 차단될 수 있음
- 증거 부족 (3건): 더 많은 TIME 청산 데이터 필요
- 현재 증거로는 TIME 청산 90~120분 구간 TP 실적 불명확
---
## 우선순위 정리
| 우선순위 | 제안 | 유형 | 근거 강도 |
|----------|------|------|-----------|
| 1 | 활성 포지션 중복 진입 차단 | 버그 수정 | 명백한 버그 |
| 2 | KIS API 스로틀링 | 버그 수정 | 로그에서 확인 |
| 3 | 당일 TP 청산 종목 재진입 차단 | 전략 변경 | 4건 반복 패턴 |
| 4 | MAX_HOLD_MIN 단축 | 전략 변경 | 증거 부족 |
제안 1, 2는 버그 수정 성격이므로 즉시 적용 권장.
제안 3, 4는 30거래일 데이터 확보 후 통계적 검증 필요.