56 lines
1.5 KiB
Python
56 lines
1.5 KiB
Python
"""Tests for risk manager."""
|
|
|
|
import pytest
|
|
from src.risk.manager import get_risk_manager, RiskManager
|
|
|
|
|
|
class TestRiskManager:
|
|
"""Tests for RiskManager."""
|
|
|
|
@pytest.fixture
|
|
def risk_manager(self):
|
|
"""Create risk manager instance."""
|
|
return get_risk_manager()
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_check_trade_risk(self, risk_manager):
|
|
"""Test trade risk checking."""
|
|
# Test with valid trade
|
|
result = await risk_manager.check_trade_risk(
|
|
exchange_id=1,
|
|
strategy_id=1,
|
|
symbol="BTC/USD",
|
|
side="buy",
|
|
amount=0.01,
|
|
price=50000.0,
|
|
current_portfolio_value=10000.0
|
|
)
|
|
|
|
assert isinstance(result, bool)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_check_max_drawdown(self, risk_manager):
|
|
"""Test max drawdown check."""
|
|
result = await risk_manager.check_max_drawdown(
|
|
current_portfolio_value=9000.0,
|
|
peak_portfolio_value=10000.0
|
|
)
|
|
|
|
assert isinstance(result, bool)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_add_risk_limit(self, risk_manager, mock_database):
|
|
"""Test adding risk limit."""
|
|
engine, Session = mock_database
|
|
|
|
await risk_manager.add_risk_limit(
|
|
limit_type="max_drawdown",
|
|
value=0.10, # 10%
|
|
is_active=True
|
|
)
|
|
|
|
# Verify limit was added
|
|
await risk_manager.load_risk_limits()
|
|
assert len(risk_manager.risk_limits) > 0
|
|
|