1. mean_reversion_strategy.py: ADX 초기값을 sum→mean으로 변경
— ADX가 252로 0-100 범위를 초과하던 버그 수정
— SIDEWAYS 국면 감지가 정상 작동하도록 복원
— _wilder_smooth() 함수는 변경하지 않음 (ATR/DM은 합산이 정상)
2. swing/exit_service.py: 고정비율 손절에 적응형 모드 손절값 반영
— Crisis 모드 전환 시 기존 포지션에도 -3% 손절이 소급 적용됨
— min(config값, adaptive값)으로 타이트한 쪽 선택
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1. swing/scheduler: mdd_manager.update() 매 사이클 호출 추가
— 새 스케줄러에서 MDD -10%/-20% 감지가 완전 무력화되어 있었음
2. mdd_manager: place_order() → safe_place_order() 변경
— 세마포어+분산락 보호로 이중 매도 방지
3. mdd_manager: 매도 후 ActiveTrade close/update 추가
— 전량 매도 시 enqueue_close_active_trade()
— 부분 매도 시 remaining_pct 갱신
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
## CRITICAL 수정 (20건)
- day_trading: global 선언 누락, loss_tracker 연동, ban 체크 추가
- trade_executor: BUY 체결가 order_price로 수정, remaining_pct 누적 계산
- risk_validator: get_current_price dict 파싱, MAX_POSITION_SIZE 동기화, DB 세션 누수
- risk_management/recommendations: date.today() → KST 변환
- mdd_manager: Lock 밖 executed_key 참조 수정
- correlation_filter: output → output2 키 수정
- portfolio: 해외 종목 USD/KRW 환율 적용 분리
- Sharpe Ratio 거래빈도 기반 연간화
- telegram_notifier: send_message() 공개 래퍼 추가
- position_manager: 앱 재시작 시 DB 포지션 복원
- swing exit_service: remaining_pct 조건 범위 수정
- run_backtest: original_qty 기반 remaining_pct 계산
- us_market_schedule: 2027년 미국 공휴일 추가
- Login.tsx: res.ok 검증 추가
- mean_reversion_strategy: RSI 로그 하드코딩 수정
## HIGH 수정 (10건)
- db_worker: DLQ 파일 백업 메커니즘 추가
- korea_investment_api: 만료 토큰 임의 연장 제거
- market_data: chart_cache 최대 100개 + TTL 만료
- main.py: rate_limit_store 1시간 미접근 IP 정리
- recommendations: fire-and-forget try/except 추가
- swing/scheduler: DB 세션 3개 분리
- Dashboard: wsMessages 전체 순회
- Layout: /health 엔드포인트 + 30초 폴링
- ml_ensemble: POST /train require_api_key 추가
- day_trading: record_trade_result_safe() 전환
## 코드 정리
- 프론트엔드: isUsStock, formatTime 공통 유틸 추출
- 백엔드: dead code 제거, 중복 import 통합
- MCP: JSON 파싱 헬퍼 추출 (~60줄 감소)
- 전체 ~100개 파일 한국어 주석 추가
- 테스트 13건 코드 기준 수정 (468 passed)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- detect_and_log_market_regime(): DB 조회 → KIS API 직접 호출 (KODEX200 069500)
- 1차 KIS API (320일), 2차 DB 폴백
- 이전: DB에 KODEX200 데이터 없으면 UNKNOWN → 레짐 필터 미작동
- naver_finance: limit + kospi_ratio 파라미터 추가
- 기본 KOSPI 60% + KOSDAQ 40% 균형 배분
- 이전: KOSPI만 500개 채워지고 KOSDAQ 0개 되는 문제 해결
- batch_daily_analysis: 네이버 파이낸스 직접 호출로 변경
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 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 추가