Files
Stock-trading-programming/.claude/commands/midday.md
T
whdwo798 edafeb7c79 [2026-05-19] 세션 분리 + L3→B안 전환 + /midday 장중 분석 추가
- L3 하드 중단 제거 → B안(연속 손절별 포지션 축소) 적용
  0회×1.0 / 1회×0.7 / 2회×0.5 / 3+회×0.3, 익절 시 한 단계 회복
- 아침·점심 세션 분리: 11:00 이후 midday_context.json 감지 시 점심 세션 자동 시작
  (12:00 고정 시작 제거 → 이벤트 기반)
- app/ai/midday.py: 장중 데이터 수집 스크립트 신규 작성
- .claude/commands/midday.md: /midday 슬래시 커맨드 신규 작성
- scripts/run_midday.ps1: 11:20 스케줄러 스크립트 신규 작성
- setup_scheduler.ps1: StockBot_Midday 태스크 추가
- CLAUDE.md: 전체 문서 업데이트

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 14:07:27 +09:00

2.8 KiB

claude_midday — 장중 분석

11:20 스케줄러가 자동 실행. 오전 결과 분석 후 점심 세션 파라미터 결정 → midday_context.json 저장.

실행 순서

1. 데이터 수집

python app/ai/midday.py --print

수집 항목:

  • 오전 거래 결과: 체결 내역, 승/패, 연속 손절 수, 순손익
  • 현재 포지션: 보유 중인 종목 및 현재 손익
  • 시장 스냅샷: 거래량 순위(현재), 업종별 등락률
  • 아침 컨텍스트: daily_context.json (오전 예측 비교용)

2. 분석

오전 daily_context 예측과 실제 결과를 비교해 점심 세션 파라미터를 결정한다.

비교 포인트:

  • 오전 예측 hot_sectors ↔ 실제 업종 등락률 — 예측이 맞았는가?
  • 거래량 순위 변화 — 새로 뜨는 종목 / 사라진 종목
  • 오전 거래 결과 — 전략이 작동했는가, 연속 손절 상태인가?

판단 항목:

  • lunch_trade_allowed: false이면 점심 세션 진입 없음
    • sentiment_score < 40이거나, 연속 손절 3회 이상이면 false 권장
  • position_size_multiplier: B안 연속 손절 배율 × 시장 판단
    • 연속 손절 0회: 1.0 / 1회: 0.7 / 2회: 0.5 / 3회+: 0.3
    • 시장이 오전 예측보다 좋으면 상향, 나쁘면 하향
  • hot_sectors: 오전 대비 업데이트 (실제 강한 업종)
  • avoid_sectors: 오전 대비 업데이트 (실제 약한 업종)
  • strategy_note: 전략 조정이 필요하면 메모 (없으면 빈 문자열)
  • reason: 50자 이내 장중 요약

3. midday_context.json 저장

분석 결과를 data/midday_context.json에 저장한다. 형식:

{
  "date": "YYYY-MM-DD",
  "generated_at": "HH:MM:SS",
  "lunch_trade_allowed": true,
  "position_size_multiplier": 0.8,
  "hot_sectors": ["반도체"],
  "avoid_sectors": ["건설업"],
  "strategy_note": "",
  "reason": "50자 이내 요약"
}

파일이 저장되는 즉시 봇이 감지해 점심 세션을 시작한다.

4. Discord 알림 전송

python -c "
import asyncio, json, os, sys
sys.path.insert(0, '.')
from app.main import load_env; load_env()
from app.monitor.notifier import send
ctx = json.load(open('data/midday_context.json', encoding='utf-8'))
hot = ', '.join(ctx.get('hot_sectors', [])) or '없음'
avoid = ', '.join(ctx.get('avoid_sectors', [])) or '없음'
flag = '✅ 점심진입허용' if ctx.get('lunch_trade_allowed', True) else '🚫 점심진입중단'
msg = f'[장중분석] {ctx[\"date\"]} {ctx.get(\"generated_at\",\"\")}\n{flag} | 포지션배율: x{ctx.get(\"position_size_multiplier\",1.0)}\n주목: {hot} | 회피: {avoid}\n📝 {ctx.get(\"reason\",\"\")}'
asyncio.run(send(msg))
print('Discord 전송 완료')
"

5. 완료

분석 요약을 한 줄로 출력하고 종료한다.