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

4.5 KiB

전략 개선 제안서 — 2026-06-05

상태: 적용 완료 (2026-06-06 사용자 승인) 근거: 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 조건 추가:

제안 파라미터:

# app/config.py 추가
CONSEC_SL_HALT_THRESHOLD = 5   # 60분 내 이 횟수 이상 SL 발생 시 신규 진입 중단

로직 변경 위치: app/main.py — 진입 허가 체크 직전

# 현재 (경고만)
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:36 이후 신규 진입 중단 가능 → 차단 가능 손실: 아리바이오랩(-6,303) + 디앤디파마텍(-5,947) + 이후 5건 → 약 +20,000원 손실 감소 (아주IB투자/코스모로보틱스 수익 기회 차단 포함)

리스크

  • 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주일 운영 후 실제 차단 적용 검토.