deploy: 2026-03-20 07:49
This commit is contained in:
70
tests/test_risk_manager.py
Normal file
70
tests/test_risk_manager.py
Normal file
@@ -0,0 +1,70 @@
|
||||
"""Tests for the risk management engine."""
|
||||
|
||||
import pytest
|
||||
from risk.risk_manager import RiskManager
|
||||
|
||||
|
||||
class TestRiskManager:
|
||||
"""Tests for RiskManager."""
|
||||
|
||||
def setup_method(self):
|
||||
self.rm = RiskManager(
|
||||
max_risk_per_trade=0.02,
|
||||
max_daily_loss=0.05,
|
||||
max_concurrent_positions=3,
|
||||
max_leverage=3,
|
||||
max_drawdown=0.15,
|
||||
)
|
||||
|
||||
def test_calculate_position_size(self):
|
||||
size = self.rm.calculate_position_size(
|
||||
balance=1000, entry_price=50000, stop_loss=49000, risk_pct=0.02
|
||||
)
|
||||
# risk = 1000 * 0.02 = 20, price_risk = 1000
|
||||
# size = 20 / 1000 = 0.02
|
||||
assert size == 0.02
|
||||
|
||||
def test_position_size_zero_risk(self):
|
||||
size = self.rm.calculate_position_size(
|
||||
balance=1000, entry_price=50000, stop_loss=50000
|
||||
)
|
||||
assert size == 0.0
|
||||
|
||||
def test_approve_trade_success(self):
|
||||
approval = self.rm.approve_trade(
|
||||
entry_price=50000, stop_loss=49000, balance=1000
|
||||
)
|
||||
assert approval.approved
|
||||
assert approval.position_size > 0
|
||||
|
||||
def test_approve_trade_max_positions(self):
|
||||
for _ in range(3):
|
||||
self.rm.on_position_opened()
|
||||
approval = self.rm.approve_trade(
|
||||
entry_price=50000, stop_loss=49000, balance=1000
|
||||
)
|
||||
assert not approval.approved
|
||||
assert "concurrent" in approval.reason.lower()
|
||||
|
||||
def test_emergency_stop(self):
|
||||
self.rm.emergency_stop()
|
||||
assert self.rm.is_stopped
|
||||
approval = self.rm.approve_trade(
|
||||
entry_price=50000, stop_loss=49000, balance=1000
|
||||
)
|
||||
assert not approval.approved
|
||||
|
||||
def test_reset_emergency(self):
|
||||
self.rm.emergency_stop()
|
||||
self.rm.reset_emergency()
|
||||
assert not self.rm.is_stopped
|
||||
|
||||
def test_daily_pnl_tracking(self):
|
||||
self.rm.update_daily_pnl(50)
|
||||
self.rm.update_daily_pnl(-30)
|
||||
assert self.rm.get_daily_pnl() == 20
|
||||
|
||||
def test_drawdown_check(self):
|
||||
self.rm._peak_equity = 1000
|
||||
assert not self.rm.check_drawdown(900) # 10% < 15%
|
||||
assert self.rm.check_drawdown(800) # 20% >= 15%
|
||||
Reference in New Issue
Block a user