fix: 전체 회의 CRITICAL 6건 수정 — 손절/리스크/성과/인프라

1. trade_executor: 손절값 -6.0 하드코딩 → -settings.STOP_LOSS_PERCENT (7%)
2. mdd_manager: MDD 강제매도 시 loss_tracker 호출 추가
3. risk_validator, day_trading: 가격필터 < → <= (5,000원 정확히 차단)
4. daytrading/entry_service: 글로벌 자본 사용률(95%) 가드 추가
5. trade_analyzer: 수익률 0%를 손실에서 제외 (< 0으로 변경)
6. db_worker: 종료 시 큐 drain + DLQ 백업으로 데이터 유실 방지

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-26 20:24:59 +09:00
parent de7921d270
commit f92479f3b0
7 changed files with 76 additions and 7 deletions

View File

@@ -238,7 +238,20 @@ class MDDManager:
)
if order_resp and order_resp.get("rt_cd") == "0":
order_id = order_resp.get("output", {}).get("ODNO", "")
profit_loss = (current_price - float(h.get("pchs_avg_pric", current_price))) * sell_qty
avg_price = float(h.get("pchs_avg_pric", current_price))
profit_loss = (current_price - avg_price) * sell_qty
profit_loss_rate = ((current_price - avg_price) / avg_price * 100) if avg_price > 0 else 0.0
# [BUG FIX] loss_tracker 기록 — MDD 강제매도도 연속 손실 추적 대상
try:
from app.services.loss_tracker import loss_tracker
is_loss = profit_loss_rate < 0
await loss_tracker.record_trade_result_safe(
stock_code, is_loss
)
await loss_tracker.save_to_db(stock_code=stock_code)
except Exception as lt_err:
logger.warning(f"[MDD] loss_tracker 기록 실패 ({stock_code}): {lt_err}")
await enqueue_trade_history({
"stock_code": stock_code,