T09 · Insecure Skill Coding Practices
- Location
lib/risk_manager.py:43- Finding
Trading risk controls are incomplete, use stale state, and reset when the process restarts
- Content
View full analysis
0 and total_exposure / state.balance > self.config.max_total_exposure: return False, f"Total exposure {total_exposure / state.balance:.1%} > {self.config.max_total_exposure:.1%}" if len(state.positions) >= self.config.max_open_positions: return False, f"Max open positions ({self.config.max_open_positions}) reached" ``` ```python # lib/risk_manager.py:109-145 def validate_signal(self, signal: Signal, state: TradingState) -> tuple: """ Validate a specific trade signal. Returns (allowed: bool, reason: str). """ if signal.amount > self.config.max_position_size: return False, f"Amount ${signal.amount:.2f} > max position ${self.config.max_position_size:.2f}" if self.daily_spent + signal.amount > self.config.max_daily_spend: return False, f"Would exceed daily limit: ${self.daily_spent:.2f} + ${signal.amount:.2f} > ${self.config.max_daily_spend:.2f}" if signal.amount > state.balance: return False, f"Amount ${signal.amount:.2f} > balance ${state.balance:.2f}" if signal.order_type == "LIMIT" and signal.price is None: return False, "LIMIT order requires price" if signal.price is not None and (signal.price < 0.01 or signal.price > ...[truncated 5131 chars]- Remediation
View remediation
