diff --git a/reports/daily/2026-06-02.md b/reports/daily/2026-06-02.md new file mode 100644 index 0000000..e2457d7 --- /dev/null +++ b/reports/daily/2026-06-02.md @@ -0,0 +1,128 @@ +# 일일 결산 — 2026-06-02 + +> 모드: 모의투자 (DRY_RUN=true) + +--- + +## 오늘 요약 + +| 항목 | 값 | +|------|----| +| 총 거래 | 16회 | +| 승/패 | 8승 8패 | +| 승률 | 50.0% | +| 순손익 | **-68,451원** | +| 수수료 합계 | 34,593원 | +| 수수료 / 총손실 | 50.5% | + +**청산 분포:** SL:6 / TP1:4 / TP2:2 / TIME:3 / FORCE:1 + +--- + +## 손익 내역 + +### 수익 거래 (+116,199원, 평균 +14,525원) + +| 종목 | 진입 | 청산사유 | 손익 | +|------|------|----------|------| +| 대한광통신(010170) | 09:20 | TP1 | +31,624원 | +| 대한광통신(010170) | 09:20 | TP2 | +21,999원 | +| 고영(098460) | 09:25 | TP1 | +14,515원 | +| 포스코DX(022100) | 09:57 | TP1 | +15,061원 | +| 포스코DX(022100) | 09:57 | TP2 | +10,746원 | +| 대원전선(006340) | 10:02 | TP1 | +9,048원 | +| 대원전선(006340) | 10:02 | TIME | +2,537원 | +| TIME ETF(478150) | 12:51 | FORCE | +10,669원 | + +### 손실 거래 (-184,649원, 평균 -23,081원) + +| 종목 | 진입 | 청산사유 | 손익 | +|------|------|----------|------| +| LG디스플레이(034220) | 09:20 | SL | -44,675원 | +| 성호전자(043260) | 09:21 | SL | -47,646원 | +| SFA반도체(036540) | 09:22 | SL | -30,337원 | +| SKAI(357880) | 09:58 | SL | -13,709원 | +| 제주반도체(080220) | 10:22 | SL | -20,377원 | +| 고영(098460) 잔여 | 09:25 | SL | -6,239원 | +| HB테크놀러지(078150) | 10:51 | TIME | -3,933원 | +| 흥아해운(003280) | 12:02 | TIME | -17,734원 | + +--- + +## 손익 비대칭 분석 + +| 구분 | 건수 | 합계 | 평균 | +|------|------|------|------| +| 수익 거래 | 8 | +116,199원 | +14,525원 | +| 손실 거래 | 8 | -184,649원 | -23,081원 | +| **손익비** | — | — | **0.629** | + +**핵심 문제:** 50% 승률에서도 손익비 0.629로 기댓값이 음수. +현재 파라미터 구조 (SL_PCT=2.0%, TP1_PCT=2.0%, TP2_PCT=2.5%, 70%/30% 분할): +- 건당 유효 수익률: 0.7×2.0% + 0.3×2.5% = **2.15%** +- 건당 손실률: **2.0%** +- 왕복 수수료 추정: ~0.4% of position +- 수수료 반영 기댓값 (50% 승률): 0.5×(2.15%-0.4%) - 0.5×(2.0%+0.4%) = **-0.325%/거래** → 손실 필연 + +--- + +## 패턴 분석 + +### 장 시작 동시 다발 진입 (09:20~09:22) +- 3분 내 4종목 진입 (LG디스플레이·대한광통신·성호전자·SFA반도체) +- 이중 LG디스플레이(-44,675), 성호전자(-47,646), SFA반도체(-30,337) = SL 3연타 +- 장 시작 직후 변동성 확대 시 한 번에 다수 진입하는 구조가 연속 SL 위험 증폭 + +### TIME 청산 손실 패턴 (3거래일 연속) +| 날짜 | TIME 청산 손실 | TIME 청산 이익 | +|------|----------------|----------------| +| 2026-06-01 | -3건 손실 | 미확인 | +| 2026-06-02 | 흥아해운 -17,734, HB테크 -3,933 | 대원전선 +2,537 | +- 2시간 보유 후 결국 소폭 손실/이익 → 수수료 고려 시 손실 +- MAX_HOLD_MIN=120분이 방향성 없는 포지션을 오래 끌고 있음 + +### AI 필터 +- ai_boosted=1 거래: **0건** (관찰 모드, 정상) +- 오늘 AI 스코어: 흥아해운 win=0.439/stop_loss=0.710, TIME ETF win=0.348/stop_loss=0.808 + - stop_loss 확률이 높게 예측되었음에도 진입 (관찰 모드이므로 차단 없음) + +### 이전 제안 동작 확인 +- **제안 2 (TP 재진입 차단) 동작 중**: 대한광통신, 포스코DX 당일 TP 후 재진입 차단 로그 확인 +- 차단 덕에 추가 손실 방어 (대한광통신 재진입 시 오후 19,160원 → 차단) + +--- + +## 30일 누적 성과 (실제 10거래일) + +| 지표 | 값 | 기준 | +|------|----|------| +| 거래일 | 10일 | 30일 이상 | +| 총 거래 | 153회 | — | +| 승률 | 43.1% | 48% 이상 | +| MDD | -9.7% | -10% 미만 | +| 샤프지수 | -21.77 | 1.0 이상 | +| L3 발동 | 0회 | 2회 이하 | +| 10일 누적 손익 | 약 -970,000원 | — | + +--- + +## 실전 전환 체크 + +| 조건 | 결과 | 현황 | +|------|------|------| +| 30거래일 | FAIL | 10일 | +| 승률 >48% | FAIL | 43.1% | +| MDD <-10% | PASS | -9.7% | +| 샤프 >1.0 | FAIL | -21.77 | +| L3 ≤2회 | PASS | 0회 | + +**실전 전환 불가 (3개 FAIL)** + +--- + +## 전략 제안 + +전략 변경 제안은 별도 파일 참조: +→ `reports/proposals/2026-06-02_strategy_proposal.md` + +수동 승인 필요. diff --git a/reports/proposals/2026-06-02_strategy_proposal.md b/reports/proposals/2026-06-02_strategy_proposal.md new file mode 100644 index 0000000..85b898c --- /dev/null +++ b/reports/proposals/2026-06-02_strategy_proposal.md @@ -0,0 +1,97 @@ +# 전략 개선 제안서 — 2026-06-02 + +> 상태: 수동 승인 대기 +> 근거: 10거래일 / 153회 거래 +> 증거 충분도: 부족 (30거래일 미만) — 참고용, 적용 전 신중 검토 필요 + +--- + +## 제안 1: TP2_PCT 상향 (2.5% → 3.5%) — 손익비 구조 개선 [신규] + +### 현상 + +현재 파라미터 (SL_PCT=2.0%, TP1_PCT=2.0%, TP2_PCT=2.5%, 분할 70%/30%): +- 건당 유효 수익률: 0.7×2.0% + 0.3×2.5% = 2.15% +- 건당 유효 손실률: 2.0% +- 왕복 수수료 추정: ~0.4% +- **수수료 반영 기댓값 (50% 승률): 0.5×1.75% - 0.5×2.4% = -0.325%/거래** + +결과: 50% 승률에서도 수수료 부담으로 손실이 필연적인 구조. +오늘(06-02): 승률 50%, 순손익 -68,451원 / 09:20 이후 여러 종목에서 SL과 TP가 대칭적으로 발생했음에도 손실. + +### 제안 수정 + +```python +TP2_PCT = 0.035 # 2.5% → 3.5% +``` + +변경 후 기댓값: +- 건당 유효 수익률: 0.7×2.0% + 0.3×3.5% = **2.45%** +- 수수료 반영 기댓값 (50% 승률): 0.5×2.05% - 0.5×2.4% = **-0.175%/거래** + +기댓값 개선: -0.325% → -0.175% (+0.15%p) +손익비: 0.629 → 0.70 (개선) + +### 예상 효과 +- 현재 TP2 2건(+21,999 + +10,746 = 32,745원) 기준 약 +13,000~18,000원 추가 수익 가능 +- TP2 목표가 높아져 도달하지 못하면 TP1 청산 후 SL 리스크 존재 + +### 리스크 +- TP2 목표가 상향 시 도달 전에 반전하여 잔여 30%가 SL로 청산될 가능성 증가 +- 증거 부족(10거래일): TP2 도달 실패율 통계 미확보 +- 권장 사전 검증: 최근 거래에서 TP2 도달 시 고점이 어디까지 갔는지 post_entry_snapshots 분석 + +--- + +## 제안 2: MAX_HOLD_MIN 단축 (120분 → 90분) [이전 제안 4 반복 확인] + +### 현상 (이전 제안에서 지속 반복) + +| 날짜 | TIME 청산 건수 | 손실 | 이익 | +|------|----------------|------|------| +| 2026-06-01 | 3건 | -3건 | 0건 | +| 2026-06-02 | 3건 | -2건 | +1건 (소폭 +2,537) | + +오늘 TIME 청산 손실: +- 흥아해운(003280): 12:02 진입 → 14:02 청산 -17,734원 (2시간 정확히) +- HB테크놀러지(078150): 10:51 진입 → 12:51 청산 -3,933원 (2시간 정확히) + +두 거래 모두 진입 후 방향성 없이 2시간을 채워 TIME 청산. 수수료만 낭비. + +### 제안 수정 + +```python +MAX_HOLD_MIN = 90 # 120 → 90분 +``` + +### 예상 효과 +- 오늘 기준: 30분 조기 차단 시 흥아해운 포지션이 13:32에 청산됨 + - 13:30~14:02 구간 가격 확인 불가이나 손실 축소 가능성 있음 +- 오후 대원전선 TIME 청산(12:02, +2,537): 10:02 진입 → 90분이면 11:32 청산으로 TP1 청산(11:06)은 유지되나 TIME 부분도 조기 청산 가능 + +### 리스크 +- 90~120분 사이에 TP에 도달하는 케이스 차단 가능 +- 이전 5일간 TIME 청산 데이터에서 90~120분 구간 TP 도달 사례 확인 필요 +- 증거 부족: TIME 청산 6건 → 오늘 2건 포함 총 6+ 건 확인, 방향성 없는 패턴 지속 + +--- + +## 이전 미승인 제안 진행 상황 + +| 제안 | 날짜 | 상태 | +|------|------|------| +| 제안 1: 중복 진입 차단 | 2026-06-01 | 미확인 (오늘 중복 진입 없어 동작 여부 불명) | +| 제안 2: TP 재진입 차단 | 2026-06-01 | **동작 확인** — 대한광통신·포스코DX 재진입 차단 로그 확인 | +| 제안 3: API 스로틀링 | 2026-06-01 | 미확인 (오늘 API 오류 미발생) | +| 제안 4: MAX_HOLD_MIN 단축 | 2026-06-01 | 미적용 (반복 확인으로 재제안) | + +--- + +## 우선순위 정리 + +| 우선순위 | 제안 | 유형 | 근거 강도 | +|----------|------|------|-----------| +| 1 | MAX_HOLD_MIN 120→90 단축 | 전략 변경 | 6건 반복 패턴, 2일 연속 손실 | +| 2 | TP2_PCT 2.5%→3.5% 상향 | 전략 변경 | 구조적 분석, 10거래일 손실 누적 | + +두 제안 모두 30거래일 미만 데이터이므로 신중 검토 후 1가지씩 단계적 적용 권장. diff --git a/scripts/_discord_send.py b/scripts/_discord_send.py new file mode 100644 index 0000000..5aa34f7 --- /dev/null +++ b/scripts/_discord_send.py @@ -0,0 +1,8 @@ +import asyncio, sys, os +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) +from dotenv import load_dotenv +load_dotenv() +from app.monitor.notifier import send + +msg = sys.argv[1] +asyncio.run(send(msg))