lucky-loster's picture
Upload folder using huggingface_hub
590a501 verified
Raw
History Blame Contribute Delete
1.69 kB
from app.core.config import settings
from app.models.schemas import OrderRequest
from app.services.order_manager import order_manager
class RiskManager:
def __init__(self):
self.max_position_size = settings.MAX_POSITION_SIZE
self.risk_limit_percent = settings.RISK_LIMIT_PERCENT
def check_order(self, req: OrderRequest) -> tuple[bool, str]:
if req.quantity > self.max_position_size:
return False, f"Order quantity {req.quantity} exceeds max position size {self.max_position_size}"
account = order_manager.account
if account.available_balance <= 0:
return False, "Insufficient available balance"
max_risk = account.total_balance * (self.risk_limit_percent / 100)
if abs(account.unrealized_pnl) > max_risk:
return False, f"Unrealized PnL ({account.unrealized_pnl}) exceeds risk limit ({max_risk})"
return True, "OK"
def get_risk_metrics(self) -> dict:
account = order_manager.account
max_risk = account.total_balance * (self.risk_limit_percent / 100)
return {
"total_balance": account.total_balance,
"available_balance": account.available_balance,
"used_margin": account.used_margin,
"unrealized_pnl": account.unrealized_pnl,
"realized_pnl": account.realized_pnl,
"risk_limit": max_risk,
"risk_usage_percent": round(
abs(account.unrealized_pnl) / max_risk * 100 if max_risk else 0, 2
),
"position_count": len(account.positions),
"max_position_size": self.max_position_size,
}
risk_manager = RiskManager()