Account Level:
max_daily_loss: 2.0% # Maximum daily portfolio loss
max_weekly_loss: 5.0% # Maximum weekly portfolio loss
max_monthly_loss: 10.0% # Maximum monthly portfolio loss
max_annual_loss: 20.0% # Maximum annual portfolio loss
Position Level:
max_position_size: 10.0% # Maximum single position size
max_sector_exposure: 25.0% # Maximum exposure to single sector
max_correlation_exposure: 15.0% # Maximum correlated positions
Strategy Level:
max_strategy_allocation: 30.0% # Maximum capital per strategy
min_strategy_performance: -5.0% # Strategy deactivation threshold
max_consecutive_losses: 5 # Auto-disable after N losses
RISK_ALERTS = {
'portfolio_drawdown': {
'warning': 0.03, # 3% drawdown warning
'critical': 0.05, # 5% drawdown critical alert
'emergency': 0.08 # 8% emergency stop
},
'volatility': {
'warning': 0.25, # 25% daily volatility warning
'critical': 0.40, # 40% critical alert
'emergency': 0.60 # 60% emergency stop
},
'leverage': {
'warning': 1.5, # 1.5x leverage warning
'critical': 2.0, # 2x leverage critical
'emergency': 2.5 # 2.5x emergency stop
}
}
Exchange APIs:
primary: KuCoin
backup: Binance, Coinbase Pro
rate_limit_buffer: 20% # Stay 20% below rate limits
timeout_settings: 10s # API call timeout
retry_policy: exponential_backoff
Broker APIs:
primary: Robinhood
backup: Alpaca, Interactive Brokers
order_timeout: 30s
confirmation_required: true
def emergency_stop_sequence():
"""Execute emergency stop procedures"""
logger.critical("EMERGENCY STOP ACTIVATED")
# 1. Stop all new orders
trading_engine.halt_all_strategies()
# 2. Cancel pending orders
trading_engine.cancel_all_pending_orders()
# 3. Close positions (market orders)
trading_engine.close_all_positions(order_type='market')
# 4. Disconnect APIs
api_manager.disconnect_all()
# 5. Preserve system state
system_state.save_emergency_snapshot()
# 6. Send notifications
notification_service.send_emergency_alert()
def calculate_position_size(account_value, risk_per_trade=0.01):
"""
Calculate position size based on Kelly Criterion and risk limits
Args:
account_value: Current portfolio value
risk_per_trade: Risk per trade (default 1%)
Returns:
Maximum position size in dollars
"""
max_risk_amount = account_value * risk_per_trade
# Apply additional constraints
max_position = account_value * 0.10 # Max 10% per position
daily_loss_budget = account_value * 0.02 # Max 2% daily loss
return min(max_risk_amount, max_position, daily_loss_budget)
VOLATILITY_ADJUSTMENTS = {
'low': (0, 0.15), # 0-15% volatility: Normal sizing
'medium': (0.15, 0.25), # 15-25% volatility: Reduce by 25%
'high': (0.25, 0.40), # 25-40% volatility: Reduce by 50%
'extreme': (0.40, 1.0) # >40% volatility: Halt trading
}
Market Data:
latency_threshold: 500ms # Maximum acceptable data delay
missing_data_threshold: 1% # Maximum missing data points
price_spike_detection: 10% # Flag price moves >10% as potential errors
Data Validation:
price_range_check: true # Validate prices within expected ranges
volume_sanity_check: true # Validate volume data
timestamp_validation: true # Ensure data timestamps are current
Authentication:
multi_factor_required: true
session_timeout: 30min
failed_login_lockout: 5_attempts
API Security:
api_key_rotation: quarterly
encryption_in_transit: TLS_1.3
encryption_at_rest: AES_256
Access Control:
principle_of_least_privilege: true
role_based_access: true
audit_logging: comprehensive
Required Records:
trade_confirmations: 7_years
account_statements: 7_years
order_records: 3_years
system_logs: 7_years
performance_reports: 7_years
Audit Trail:
decision_rationale: required
timestamp_precision: millisecond
user_identification: required
system_version_tracking: required
ALERT_CONFIG = {
'email': {
'portfolio_loss_5pct': 'immediate',
'system_downtime': 'immediate',
'api_errors': 'hourly_digest'
},
'sms': {
'portfolio_loss_3pct': 'immediate',
'emergency_stop': 'immediate'
},
'slack': {
'daily_summary': 'end_of_day',
'strategy_alerts': 'real_time'
}
}