MCP 수정중
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
import asyncio
|
||||
import logging
|
||||
import httpx
|
||||
from decimal import Decimal
|
||||
from datetime import timedelta
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
@@ -25,58 +24,9 @@ _order_semaphore = asyncio.Semaphore(1)
|
||||
|
||||
|
||||
async def _mcp_validate_buy(stock: dict) -> tuple:
|
||||
if not settings.MCP_VALIDATION_ENABLED:
|
||||
return True, "mcp_disabled"
|
||||
|
||||
try:
|
||||
payload = {
|
||||
"analysis_type": "RULE_VALIDATION",
|
||||
"data": {
|
||||
"rule": {
|
||||
"id": stock.get("rule_id"),
|
||||
"name": stock.get("rule_name", "auto_trade"),
|
||||
},
|
||||
"market_data": {
|
||||
"stock_code": stock.get("stock_code"),
|
||||
"stock_name": stock.get("stock_name"),
|
||||
"current_price": stock.get("current_price"),
|
||||
"signals": stock.get("signals", []),
|
||||
"score": stock.get("score"),
|
||||
"ml_signal": stock.get("ml_signal"),
|
||||
"ml_confidence": stock.get("ml_confidence"),
|
||||
"ma20": stock.get("ma20"),
|
||||
"ma60": stock.get("ma60"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async with httpx.AsyncClient(timeout=10.0) as client:
|
||||
resp = await client.post(
|
||||
f"{settings.MCP_SERVER_URL}/analyze",
|
||||
json=payload
|
||||
)
|
||||
resp.raise_for_status()
|
||||
data = resp.json()
|
||||
|
||||
result = data.get("result", {})
|
||||
decision = result.get("decision", "HOLD")
|
||||
confidence = float(result.get("confidence", 0.0))
|
||||
|
||||
if decision == "BUY" and confidence >= settings.MCP_CONFIDENCE_THRESHOLD:
|
||||
return True, f"mcp_approved(conf={confidence:.2f})"
|
||||
else:
|
||||
return False, f"mcp_rejected(decision={decision}, conf={confidence:.2f})"
|
||||
|
||||
except httpx.HTTPStatusError as e:
|
||||
if e.response.status_code == 500:
|
||||
logger.warning(f"⚠️ MCP 서버 500 에러 — 룰 기반으로 우회: {e}")
|
||||
return True, "mcp_500_fallback_to_rules"
|
||||
logger.warning(f"⚠️ MCP 검증 실패 — 매매 차단: {e}")
|
||||
return False, "mcp_unavailable"
|
||||
|
||||
except Exception as e:
|
||||
logger.warning(f"⚠️ MCP 검증 실패 — 매매 차단: {e}")
|
||||
return False, "mcp_unavailable"
|
||||
# 전략 엔진(RSI/BB/MA/ATR 등)이 이미 신호를 검증하므로 AI 호출 불필요.
|
||||
# RISK_ASSESSMENT는 매매 직전 mcp.py에서 별도 수행.
|
||||
return True, "strategy_validated"
|
||||
|
||||
|
||||
async def _execute_buy(
|
||||
|
||||
Reference in New Issue
Block a user