in src/backend/domain/services/steps/risk_limit.py [0:0]
def applyRiskRules(self, trading_stats_by_symbol, strategy_stats, checkDateTime, date_to_index, callback=None):
for symbol, stats in trading_stats_by_symbol.items():
if symbol in self.symbolDetails and self.symbolDetails[symbol].TradingSuspended:
continue
for rule in self.riskRules:
if rule.scope == Scope.Symbol and not rule.triggered:
action = rule.checkRule(stats["acct_ccy_pnl"], checkDateTime, date_to_index)
if action:
self.applyAction(symbol, rule, action.value)
period_end_time = self.calculatePeriodEndTime(rule, checkDateTime)
self.triggeredRules.append(TriggeredRule(checkDateTime, period_end_time, symbol, rule))
if callback:
callback(symbol, rule)
if not self.TradingSuspended:
for rule in self.riskRules:
if rule.scope == Scope.Strategy and not rule.triggered:
action = rule.checkRule(strategy_stats["acct_ccy_pnl"], checkDateTime, date_to_index)
if action:
self.applyAction(None, rule, action.value)
period_end_time = self.calculatePeriodEndTime(rule, checkDateTime)
self.triggeredRules.append(TriggeredRule(checkDateTime, period_end_time, None, rule))
if callback:
callback(None, rule)
self.cleanTriggeredRules(checkDateTime)