-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrisk_engine.py
More file actions
29 lines (23 loc) · 1.05 KB
/
risk_engine.py
File metadata and controls
29 lines (23 loc) · 1.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# risk_engine.py
class RiskEngine:
def __init__(self, max_order_size=1000, max_position=2000):
self.max_order_size = max_order_size
self.max_position = max_position
self.positions = {} # symbol → net qty
def check(self, order) -> bool:
"""Validate an order. Raise ValueError on failure."""
# Order size limit
if order.qty > self.max_order_size:
raise ValueError(f"Order size {order.qty} exceeds max {self.max_order_size}")
# Position limit
current_pos = self.positions.get(order.symbol, 0)
new_pos = current_pos + (order.qty if order.side == "1" else -order.qty)
if abs(new_pos) > self.max_position:
raise ValueError(
f"Position {new_pos} exceeds limit {self.max_position}"
)
return True
def update_position(self, order):
"""Update symbol position after a fill."""
delta = order.qty if order.side == "1" else -order.qty
self.positions[order.symbol] = self.positions.get(order.symbol, 0) + delta