Context:
To protect users from over-exposure, StellarSwipe enforces risk limits: max open positions, stop-loss requirements, and balance checks.
Problem:
Create a risk management service that validates trades against user-defined and platform limits before execution.
What Done Looks Like:
- Risk validation before trade execution
- User-configurable risk settings
- Position limit enforcement (max 10 open)
- Stop-loss validation
- Balance reservation for open positions
Folder Structure:
src/
├── risk/
│ ├── risk-manager.service.ts
│ ├── risk-manager.module.ts
│ ├── entities/
│ │ └── risk-settings.entity.ts
│ └── dto/
│ └── risk-settings.dto.ts
Implementation Guidelines:
- Check open position count before new trade
- Validate stop-loss is set and reasonable (5-20% from entry)
- Calculate total exposure across all positions
- Prevent trades if exposure > user limit
- Store risk settings per user (max positions, max exposure %)
- Default limits: 10 positions, 50% max exposure
Risk Checks:
- Open positions < user limit (default 10)
- Total exposure < max exposure %
- Stop-loss within acceptable range
- Sufficient balance for potential loss
Risk Settings Fields:
- max_open_positions (default 10)
- max_exposure_percentage (default 50)
- require_stop_loss (default true)
- min_stop_loss_percentage (default 5)
Edge Cases:
- User updates limits with existing positions
- Position opened just before new trade
- Partial fills affecting exposure
Validation:
- Trade blocked when limit reached
- Risk settings update correctly
- Exposure calculated accurately
Context:
To protect users from over-exposure, StellarSwipe enforces risk limits: max open positions, stop-loss requirements, and balance checks.
Problem:
Create a risk management service that validates trades against user-defined and platform limits before execution.
What Done Looks Like:
Folder Structure:
Implementation Guidelines:
Risk Checks:
Risk Settings Fields:
Edge Cases:
Validation: