80 lines
3 KiB
TypeScript
80 lines
3 KiB
TypeScript
/**
|
|
* 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;
|