- trade_analyzer.py: 거래 성과 분석(승률/손익비/전략별 패턴), 템플릿 기반 일지 자동 생성
- strategy_optimizer.py: 그리드 서치 기반 파라미터 최적화, Sharpe 10% 개선 시 자동 적용
- analysis.py: /performance /insights /generate-journals /optimize-strategy /optimization-history 엔드포인트
- journals.py: POST /generate/{trade_id}, GET /stats 엔드포인트 추가
- models.py: StrategyOptimizationLog 테이블 추가
- main.py: post_market_analyzer_scheduler (16:00 KST 자동 실행)
- frontend: Analysis 페이지 추가 (성과 요약/인사이트/일지 생성/최적화 이력)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
[문제]
- rsi < 30 이면 signal=None (반등 대기) 으로만 처리
- RSI가 30 이하에서 실제로 반등 시작해도 BUY 신호가 나오지 않음
- 결과적으로 check_buy_signal(rsi_prev)의 반등 확인 로직이 무의미
[수정]
- rsi < 30 AND rsi > rsi_prev (반등 확인) AND 볼린저 하단 근처: BUY 신호
- rsi < 30 AND rsi <= rsi_prev (아직 하락): signal=None 유지 (기존)
- 기존 30~45 반등 구간 로직은 그대로 유지
1. check_buy_signal: 거래량 OR 조건 제거 + RSI 반등 확인 파라미터 추가
- `vol_ok AND rsi<=50` 조건 삭제 (모멘텀 진입이 평균회귀 청산과 충돌)
- `rsi_prev` 파라미터 추가: RSI가 반등 중일 때만 진입 허용
- BULL 조건: RSI<=30 AND BB하단 AND 거래량>=100% AND (RSI 반등 중)
2. check_exit_signal: 1차 익절 RSI 상한 제거
- `55 <= rsi <= 65` → `rsi >= 55` (빠른 반등 시 익절 기회 놓치지 않음)
3. check_exit_signal: ATR 손절 기준을 entry_price 기준으로 변경
- `lowest_since_entry - 2.5*ATR` → `entry_price - 2.5*ATR`
- 기존: 저점 기준이라 매수 직후 손절이 너무 느슨함
- 개선: 진입가 기준으로 손절 즉시 발동 가능
- _execute_eod_flat에 _trade_lock 적용 (race condition 수정)
- total_assets=0일 때 신규 진입 차단 (손실한도 체크 우회 방지)
- MCP import를 모듈 최상단으로 이동
- API_CALL_DELAY 상수화 (settings.API_MIN_REQUEST_INTERVAL 사용)
- _execute_entry의 불필요한 global _trade_lock 제거
- candles_1m 빈 리스트일 때 execute 엔드포인트 early return 추가