diff --git a/data/midday_context.json b/data/midday_context.json index 1159e2a..7b8505e 100644 --- a/data/midday_context.json +++ b/data/midday_context.json @@ -1,10 +1,10 @@ { - "date": "2026-05-27", - "generated_at": "11:20:14", - "lunch_trade_allowed": true, - "position_size_multiplier": 0.7, - "hot_sectors": ["금융업", "반도체", "유통업"], - "avoid_sectors": ["전기전자", "화학", "의약품"], - "strategy_note": "시초가 갭업 오버슈팅 주의 — 점심 진입 시 추세 안정 확인 후 진입", - "reason": "KOSPI +4.43% 강세이나 중소형 돌파 실패 연속, 연손절1회 배율0.7×" + "date": "2026-05-28", + "generated_at": "11:20:18", + "lunch_trade_allowed": false, + "position_size_multiplier": 0.3, + "hot_sectors": [], + "avoid_sectors": ["전기전자", "반도체", "전기가스업", "기계", "의약품"], + "strategy_note": "인버스ETF 거래량 1~3위, 전업종 하락. 오전 강세 예측 완전 빗나감. 현재 보유 2종목(흥아해운·SFA반도체)만 관리, 신규 진입 없음.", + "reason": "연속손절6회·전업종약세·인버스거래량1위→점심진입중단" } diff --git a/reports/daily/2026-05-28.md b/reports/daily/2026-05-28.md new file mode 100644 index 0000000..97fdf2f --- /dev/null +++ b/reports/daily/2026-05-28.md @@ -0,0 +1,105 @@ +# 일일 매매 리포트 — 2026-05-28 + +## 요약 + +| 항목 | 값 | +|------|-----| +| 거래 수 | 12 | +| 승 / 패 | 4 / 8 | +| 승률 | 33.3% | +| 순손익 | -164,936원 | +| 수수료 | 32,826원 | +| SL 비율 | 58.3% (7/12) | + +## 청산 사유 분포 + +| 사유 | 건수 | 비율 | +|------|------|------| +| SL (손절) | 7 | 58.3% | +| TP1 (1차 익절) | 2 | 16.7% | +| TP2 (2차 익절) | 1 | 8.3% | +| TIME (시간 종료) | 2 | 16.7% | +| FORCE (강제 청산) | 0 | 0.0% | + +## 거래 내역 + +| 종목 | 진입 | 청산 | 진입가 | 청산가 | 수량 | 사유 | 손익 | +|------|------|------|--------|--------|------|------|------| +| 세미파이브(490470) | 09:15:21 | 09:39:16 | 41,300 | 40,700 | 62 | SL | -42,504 | +| LG디스플레이(034220) | 09:15:30 | 09:18:16 | 15,990 | 15,740 | 162 | SL | -45,860 | +| 한성크린텍(066980) | 09:18:21 | 09:23:50 | 2,170 | 2,220 | 586 | TP1 | +26,572 | +| 한성크린텍(066980) | 09:18:21 | 09:23:55 | 2,170 | 2,235 | 252 | TP2 | +15,199 | +| SK네트웍스(001740) | 09:24:06 | 09:29:18 | 11,040 | 10,870 | 235 | SL | -45,320 | +| 대우건설(047040) | 09:29:24 | 09:50:12 | 25,900 | 25,500 | 70 | SL | -31,752 | +| 차백신연구소(261780) | 09:39:31 | 09:57:17 | 3,850 | 3,785 | 334 | SL | -24,368 | +| 녹십자엠에스(142280) | 09:50:24 | 10:16:56 | 4,890 | 4,815 | 159 | SL | -13,534 | +| 라온로보틱스(232680) | 09:57:26 | 10:03:27 | 21,700 | 21,350 | 35 | SL | -13,821 | +| 흥아해운(003280) | 10:03:35 | 11:55:20 | 2,240 | 2,295 | 243 | TP1 | +12,195 | +| 흥아해운(003280) | 10:03:35 | 12:03:39 | 2,240 | 2,260 | 105 | TIME | +1,601 | +| SFA반도체(036540) | 10:17:11 | 12:17:12 | 9,010 | 8,990 | 86 | TIME | -3,343 | + +## 핵심 분석 + +### 1. 09:15 허수 신호 — 이틀째 재현 + +ENTRY_START를 09:05 → 09:15로 변경(2026-05-27 제안 1 적용) 후 첫날, +09:15:21 세미파이브, 09:15:30 LG디스플레이 — 2건 모두 SL. +첫 5분 손실: **-88,364원 (전체의 53.6%)**. + +| 구간 | 거래 | 승률 | 손익 | +|------|------|------|------| +| 09:15~09:20 | 2 | 0% | -88,364 | +| 09:20~14:20 | 10 | 40% | -76,572 | + +변동성 돌파 전략은 09:15 개장 직후에도 여전히 허수 브레이크아웃에 취약. +→ 제안서 참조 (ENTRY_START 09:20 추가 지연). + +### 2. 섹터 필터 버그 발견 (중요) + +`daily_context.json`의 `avoid_sectors: ["건설업", ...]`에 건설업이 명시되어 있음에도 +**대우건설(047040)이 09:29에 진입**됨. 손실 -31,752원. + +**원인**: `app/main.py:736`의 `check_entry()` 호출에서 `sector=` 인수가 전달되지 않음. +`check_entry(ticker, name, current_price)` — sector 기본값 `""` → 필터 조건 `if sector and ...` 항상 False. + +→ **avoid_sectors 필터가 현재 완전히 비작동 상태**. +→ 제안서에 main.py 수정 포함 (승인 필요). + +### 3. 연속 손절 7회 → L3-B 0.3× 도달 + +10:17까지 7건 연속 SL (경고 로그: `ENTRY warning: 7 stop losses in last 60 minutes`). +L3-B 배율 0.3× 최저 도달 → midday 점심 진입 중단. +midday 이후 기존 보유 2종목(흥아해운, SFA반도체)만 정리. + +### 4. 오전 예측 완전 실패 + +`daily_context`의 강세 예측(점수 72, hot: 반도체/AI/방산)과 실제 전업종 하락 완전 불일치. +인버스 ETF 거래량 1~3위 → 기관/외인 공매도 우세 장세를 새벽 뉴스 크롤링으로 감지 못함. + +--- + +## 최근 30일 누적 (7거래일) + +| 항목 | 값 | 기준 | 통과 | +|------|-----|------|------| +| 거래일 | 7 | 30일 | ❌ | +| 승률 | 39.8% | >48% | ❌ | +| MDD | -8.0% | <10% | ✅ | +| 샤프 | -23.14 | >1.0 | ❌ | +| L3 이벤트 | 0회 | ≤2회 | ✅ | + +**누적 손익 (05/19~05/28): 약 -799,056원** + +--- + +## 실전 전환 조건 + +전환 불가 (7/5 조건 미충족, 거래일 7/30) + +--- + +## 내일 운영 참고 + +- ENTRY_START 제안(09:20) 승인 대기 → 미승인 시 현행 09:15 유지 +- 섹터 필터 버그 수정 승인 대기 → 미수정 시 avoid_sectors 비작동 지속 +- 오전 신호 신뢰 낮음 — L3-B 0.3× 상태로 출발 (전날 연속손절 미회복 시) diff --git a/reports/proposals/2026-05-28_strategy_proposal.md b/reports/proposals/2026-05-28_strategy_proposal.md new file mode 100644 index 0000000..46805ce --- /dev/null +++ b/reports/proposals/2026-05-28_strategy_proposal.md @@ -0,0 +1,127 @@ +# 전략 파라미터 변경 제안 — 2026-05-28 + +**상태: 승인 대기 (수동 검토 필요)** +**작성: Claude Evening / 2026-05-28** + +--- + +## 제안 1: ENTRY_START 추가 지연 — 09:15 → 09:20 + +### 현재값 +```python +ENTRY_START = "09:15" +``` + +### 제안값 +```python +ENTRY_START = "09:20" +``` + +### 근거 + +2026-05-27 제안을 적용해 09:05 → 09:15로 변경했으나, 오늘(05/28) 09:15:21(세미파이브), 09:15:30(LG디스플레이)에서 2건 모두 SL. + +| 날짜 | 09:05~09:10 SL | 09:15~09:20 SL | 구간 손실 | +|------|----------------|----------------|-----------| +| 05/27 | 4건 (09:05 이전 기준) | — | -183,969 | +| 05/28 | — | 2건 | -88,364 | + +이틀 연속으로 장 시작 직후 5분 내 진입 건이 전패. 변동성 돌파 신호가 개장 직후에는 +호가 스프레드 확대 + 단기 허수 갭에 의해 오염된다는 패턴이 반복 확인됨. + +09:20 이후 구간 오늘 성과: 10거래 / 승률 40% / -76,572원 +→ SL 비율이 낮아지고 TP 비율이 높아지는 경향. + +### 기대 효과 +- 장 초반 허수 브레이크아웃 추가 필터링 +- 일 손실의 50%+ 를 차지하는 09:15~09:20 구간 회피 + +### 위험 +- 09:15~09:20 진짜 모멘텀 신호 포기 가능 +- 근거: 이틀(2일) 데이터 → 여전히 통계적으로 불충분 + +### 증거 충분성 +**불충분하나 패턴 일관성 높음.** 2거래일 연속 동일 구간 전패. 즉시 적용 권장. + +### 구현 +`app/config.py` 1줄 수정 — 승인 후 즉시 반영 가능. + +--- + +## 제안 2: 섹터 필터 버그 수정 (main.py 수정 필요) + +### 현상 +`daily_context.json`에 `avoid_sectors: ["건설업", ...]` 명시에도 불구하고 +대우건설(건설업, 047040)이 09:29에 진입됨. 손실 -31,752원. + +### 근본 원인 + +**`app/main.py:736`** 의 `check_entry()` 호출: +```python +# 현재 코드 +signal = self.strategy.check_entry( + ticker=ticker, + name=name, + current_price=current, +) +``` + +`sector=` 인수가 누락되어 기본값 `""` 전달. +`app/strategy/volatility_breakout.py:173`: +```python +if sector and any(s in sector for s in avoid): # sector가 ""이면 항상 스킵 +``` +→ **avoid_sectors 필터가 현재 완전히 비작동 상태**. + +### 해결 방안 + +섹터 정보를 ticker에 매핑해야 한다. 두 가지 옵션: + +**옵션 A (권장 — 즉시 구현 가능)**: 유니버스 선정 시 KIS 종목 정보 API로 섹터를 받아 +`ticker_sectors` dict를 빌드하고 `check_entry` 호출 시 전달. + +**옵션 B (단순)**: 섹터 체크를 `check_entry` 내부가 아닌 main.py 루프에서 직접 수행. +`ticker_sectors` dict가 없는 경우 universe 필터 단계에서 종목별 섹터 정보를 저장. + +### 제안 수정 (옵션 A) + +`app/main.py` 수정 — **별도 승인 필요**. + +```python +# main.py 유니버스 빌드 시 섹터 저장 (기존 코드 확장) +# self.ticker_sectors: dict[str, str] = {} + +# check_entry 호출 변경 +signal = self.strategy.check_entry( + ticker=ticker, + name=name, + current_price=current, + sector=self.ticker_sectors.get(ticker, ""), +) +``` + +### 증거 충분성 +**버그 확인됨.** 코드 레벨 확증. 수정 즉시 효과 발휘. + +### 리스크 +- main.py 수정이 필요하므로 별도 승인 필요 +- 섹터 데이터 미확보 시 여전히 공백 — ticker_sectors 빌드 로직 추가 필요 + +--- + +## 우선순위 권고 + +| 순위 | 제안 | 난이도 | 즉시 적용 | +|------|------|--------|-----------| +| 1 | 섹터 필터 버그 수정 | 중간 (main.py) | X (승인 필요) | +| 2 | ENTRY_START → 09:20 | 낮음 (config.py) | O | + +버그 수정이 더 중요하나 승인 필요. ENTRY_START는 바로 반영 가능. + +--- + +## 검토 항목 (승인 전) + +- [ ] `ticker_sectors` 데이터를 어디서 채울지 확인 (KIS 종목 마스터 API 또는 universe fetch 시) +- [ ] 옵션 A vs B 선택 +- [ ] ENTRY_START 09:20 적용 후 최소 3거래일 관찰