DDL schemas for Trading Platform: - User management - Authentication - Payments - Education - ML predictions - Trading data Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
146 lines
5.1 KiB
SQL
146 lines
5.1 KiB
SQL
-- =====================================================
|
|
-- ML SCHEMA - RISK EVENTS TABLE
|
|
-- =====================================================
|
|
-- Description: Risk management events and circuit breaker triggers
|
|
-- Schema: ml
|
|
-- Author: Database Agent
|
|
-- Date: 2026-01-04
|
|
-- Module: OQI-010-llm-trading-integration
|
|
-- =====================================================
|
|
|
|
CREATE TABLE ml.risk_events (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
-- User context (optional, for multi-user systems)
|
|
user_id UUID,
|
|
|
|
-- Event classification
|
|
event_type VARCHAR(50) NOT NULL,
|
|
severity VARCHAR(20) NOT NULL,
|
|
|
|
-- Event details
|
|
details JSONB NOT NULL DEFAULT '{}',
|
|
|
|
-- Response
|
|
action_taken VARCHAR(100),
|
|
|
|
-- Resolution status
|
|
resolved BOOLEAN NOT NULL DEFAULT FALSE,
|
|
resolved_at TIMESTAMPTZ,
|
|
|
|
-- Timestamps
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
|
|
-- Constraints
|
|
CONSTRAINT chk_risk_events_type CHECK (
|
|
event_type IN (
|
|
'CIRCUIT_BREAKER', -- Trading halted due to losses
|
|
'DAILY_LIMIT', -- Daily loss limit reached
|
|
'WEEKLY_LIMIT', -- Weekly loss limit reached
|
|
'EXPOSURE_LIMIT', -- Maximum exposure exceeded
|
|
'POSITION_LIMIT', -- Maximum position size exceeded
|
|
'CORRELATION_LIMIT', -- Too many correlated positions
|
|
'DRAWDOWN_WARNING', -- Approaching drawdown limit
|
|
'CONSECUTIVE_LOSSES', -- Multiple consecutive losing trades
|
|
'VOLATILITY_SPIKE', -- Abnormal market volatility detected
|
|
'LIQUIDITY_WARNING', -- Low liquidity conditions
|
|
'NEWS_EVENT', -- High-impact news event
|
|
'SYSTEM_ERROR', -- System malfunction
|
|
'MANUAL_OVERRIDE', -- User manually intervened
|
|
'POSITION_TIMEOUT', -- Position held too long
|
|
'SLIPPAGE_ALERT' -- Excessive slippage detected
|
|
)
|
|
),
|
|
CONSTRAINT chk_risk_events_severity CHECK (
|
|
severity IN ('info', 'warning', 'critical', 'emergency')
|
|
),
|
|
CONSTRAINT chk_risk_events_resolution CHECK (
|
|
(resolved = TRUE AND resolved_at IS NOT NULL) OR resolved = FALSE
|
|
)
|
|
);
|
|
|
|
-- Indices
|
|
CREATE INDEX idx_risk_events_user ON ml.risk_events(user_id)
|
|
WHERE user_id IS NOT NULL;
|
|
CREATE INDEX idx_risk_events_type ON ml.risk_events(event_type);
|
|
CREATE INDEX idx_risk_events_severity ON ml.risk_events(severity);
|
|
CREATE INDEX idx_risk_events_resolved ON ml.risk_events(resolved);
|
|
CREATE INDEX idx_risk_events_created ON ml.risk_events(created_at DESC);
|
|
CREATE INDEX idx_risk_events_resolved_at ON ml.risk_events(resolved_at DESC)
|
|
WHERE resolved_at IS NOT NULL;
|
|
|
|
-- Active critical events (unresolved)
|
|
CREATE INDEX idx_risk_events_active_critical ON ml.risk_events(created_at DESC)
|
|
WHERE resolved = FALSE AND severity IN ('critical', 'emergency');
|
|
|
|
-- User active events
|
|
CREATE INDEX idx_risk_events_user_active ON ml.risk_events(user_id, created_at DESC)
|
|
WHERE resolved = FALSE;
|
|
|
|
-- Index for circuit breaker status check
|
|
CREATE INDEX idx_risk_events_circuit_breaker ON ml.risk_events(user_id, created_at DESC)
|
|
WHERE event_type = 'CIRCUIT_BREAKER' AND resolved = FALSE;
|
|
|
|
-- Comments
|
|
COMMENT ON TABLE ml.risk_events IS 'Risk management events including circuit breakers, limit violations, and system alerts';
|
|
|
|
COMMENT ON COLUMN ml.risk_events.id IS 'Unique identifier for the risk event';
|
|
COMMENT ON COLUMN ml.risk_events.user_id IS 'User ID for multi-user systems (NULL for system-wide events)';
|
|
COMMENT ON COLUMN ml.risk_events.event_type IS 'Type of risk event: CIRCUIT_BREAKER, DAILY_LIMIT, EXPOSURE_LIMIT, etc.';
|
|
COMMENT ON COLUMN ml.risk_events.severity IS 'Event severity: info, warning, critical, emergency';
|
|
COMMENT ON COLUMN ml.risk_events.details IS 'JSON object with event-specific details';
|
|
COMMENT ON COLUMN ml.risk_events.action_taken IS 'Action taken in response to the event';
|
|
COMMENT ON COLUMN ml.risk_events.resolved IS 'Whether the event has been resolved';
|
|
COMMENT ON COLUMN ml.risk_events.resolved_at IS 'Timestamp when event was resolved';
|
|
COMMENT ON COLUMN ml.risk_events.created_at IS 'Timestamp when event was detected';
|
|
|
|
-- Example of details JSONB structure
|
|
COMMENT ON COLUMN ml.risk_events.details IS
|
|
'Example structures by event type:
|
|
|
|
CIRCUIT_BREAKER:
|
|
{
|
|
"trigger_reason": "daily_drawdown_limit",
|
|
"current_drawdown_pct": 5.2,
|
|
"limit_pct": 5.0,
|
|
"trading_paused_until": "2026-01-05T00:00:00Z",
|
|
"affected_symbols": ["XAUUSD", "EURUSD"]
|
|
}
|
|
|
|
DAILY_LIMIT:
|
|
{
|
|
"current_loss_pct": 2.1,
|
|
"limit_pct": 2.0,
|
|
"trades_today": 8,
|
|
"last_trade_pnl": -45.50
|
|
}
|
|
|
|
EXPOSURE_LIMIT:
|
|
{
|
|
"current_exposure_pct": 22.5,
|
|
"limit_pct": 20.0,
|
|
"open_positions": [
|
|
{"symbol": "XAUUSD", "exposure_pct": 8.5},
|
|
{"symbol": "EURUSD", "exposure_pct": 7.0},
|
|
{"symbol": "BTCUSDT", "exposure_pct": 7.0}
|
|
]
|
|
}
|
|
|
|
VOLATILITY_SPIKE:
|
|
{
|
|
"symbol": "XAUUSD",
|
|
"current_volatility": 2.5,
|
|
"normal_volatility": 0.8,
|
|
"volatility_ratio": 3.125,
|
|
"recommendation": "reduce_position_size"
|
|
}
|
|
|
|
NEWS_EVENT:
|
|
{
|
|
"event_name": "FOMC Decision",
|
|
"impact": "high",
|
|
"scheduled_time": "2026-01-04T19:00:00Z",
|
|
"affected_pairs": ["EURUSD", "GBPUSD", "USDJPY", "XAUUSD"],
|
|
"recommendation": "close_positions_before_event"
|
|
}';
|