/** * Risk management configuration using Yup */ import { cleanEnv, envValidators } from './env-utils'; const { str, num, bool, strWithChoices } = envValidators; /** * Risk configuration with validation and defaults */ export const riskConfig = cleanEnv(process.env, { // Position Sizing RISK_MAX_POSITION_SIZE: num(0.1, 'Maximum position size as percentage of portfolio'), RISK_MAX_PORTFOLIO_EXPOSURE: num(0.8, 'Maximum portfolio exposure percentage'), RISK_MAX_SINGLE_ASSET_EXPOSURE: num(0.2, 'Maximum exposure to single asset'), RISK_MAX_SECTOR_EXPOSURE: num(0.3, 'Maximum exposure to single sector'), // Stop Loss and Take Profit RISK_DEFAULT_STOP_LOSS: num(0.05, 'Default stop loss percentage'), RISK_DEFAULT_TAKE_PROFIT: num(0.15, 'Default take profit percentage'), RISK_TRAILING_STOP_ENABLED: bool(true, 'Enable trailing stop losses'), RISK_TRAILING_STOP_DISTANCE: num(0.03, 'Trailing stop distance percentage'), // Risk Limits RISK_MAX_DAILY_LOSS: num(0.05, 'Maximum daily loss percentage'), RISK_MAX_WEEKLY_LOSS: num(0.1, 'Maximum weekly loss percentage'), RISK_MAX_MONTHLY_LOSS: num(0.2, 'Maximum monthly loss percentage'), // Volatility Controls RISK_MAX_VOLATILITY_THRESHOLD: num(0.4, 'Maximum volatility threshold'), RISK_VOLATILITY_LOOKBACK_DAYS: num(20, 'Volatility calculation lookback period'), // Correlation Controls RISK_MAX_CORRELATION_THRESHOLD: num(0.7, 'Maximum correlation between positions'), RISK_CORRELATION_LOOKBACK_DAYS: num(60, 'Correlation calculation lookback period'), // Leverage Controls RISK_MAX_LEVERAGE: num(2.0, 'Maximum leverage allowed'), RISK_MARGIN_CALL_THRESHOLD: num(0.3, 'Margin call threshold'), // Circuit Breakers RISK_CIRCUIT_BREAKER_ENABLED: bool(true, 'Enable circuit breakers'), RISK_CIRCUIT_BREAKER_LOSS_THRESHOLD: num(0.1, 'Circuit breaker loss threshold'), RISK_CIRCUIT_BREAKER_COOLDOWN_MINUTES: num(60, 'Circuit breaker cooldown period'), // Risk Model RISK_MODEL_TYPE: strWithChoices(['var', 'cvar', 'expected_shortfall'], 'var', 'Risk model type'), RISK_CONFIDENCE_LEVEL: num(0.95, 'Risk model confidence level'), RISK_TIME_HORIZON_DAYS: num(1, 'Risk time horizon in days'), }); // Export typed configuration object export type RiskConfig = typeof riskConfig; // Export individual config values for convenience export const { RISK_MAX_POSITION_SIZE, RISK_MAX_PORTFOLIO_EXPOSURE, RISK_MAX_SINGLE_ASSET_EXPOSURE, RISK_MAX_SECTOR_EXPOSURE, RISK_DEFAULT_STOP_LOSS, RISK_DEFAULT_TAKE_PROFIT, RISK_TRAILING_STOP_ENABLED, RISK_TRAILING_STOP_DISTANCE, RISK_MAX_DAILY_LOSS, RISK_MAX_WEEKLY_LOSS, RISK_MAX_MONTHLY_LOSS, RISK_MAX_VOLATILITY_THRESHOLD, RISK_VOLATILITY_LOOKBACK_DAYS, RISK_MAX_CORRELATION_THRESHOLD, RISK_CORRELATION_LOOKBACK_DAYS, RISK_MAX_LEVERAGE, RISK_MARGIN_CALL_THRESHOLD, RISK_CIRCUIT_BREAKER_ENABLED, RISK_CIRCUIT_BREAKER_LOSS_THRESHOLD, RISK_CIRCUIT_BREAKER_COOLDOWN_MINUTES, RISK_MODEL_TYPE, RISK_CONFIDENCE_LEVEL, RISK_TIME_HORIZON_DAYS, } = riskConfig;