fix: 최종 회의 CRITICAL 1건 + MEDIUM 2건 수정

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>
This commit is contained in:
2026-03-26 21:10:59 +09:00
parent e8ab41d164
commit c0ef58ef5e
2 changed files with 30 additions and 2 deletions

View File

@@ -230,7 +230,8 @@ class MDDManager:
sell_qty = min(sell_qty, quantity)
try:
order_resp = await korea_investment_api.place_order(
from app.services.trade_executor import safe_place_order
order_resp = await safe_place_order(
stock_code=stock_code,
order_type="SELL",
quantity=sell_qty,
@@ -269,6 +270,20 @@ class MDDManager:
"strategy_type": "mdd_reduction",
})
# [FIX] 전량 매도 시 ActiveTrade 닫기
remaining_qty = quantity - sell_qty
if remaining_qty <= 0:
from app.services.db_worker import enqueue_close_active_trade
await enqueue_close_active_trade(stock_code)
else:
# 부분 매도: remaining_pct 갱신
from app.services.db_worker import enqueue_active_trade_upsert
new_remaining = remaining_qty / quantity
await enqueue_active_trade_upsert({
"stock_code": stock_code,
"remaining_pct": new_remaining,
})
results.append({
"stock_code": stock_code,
"stock_name": stock_name,