Files
stonks-oracle/infra/migrations/010_risk_configuration.sql

56 lines
2.1 KiB
SQL

-- Stonks Oracle - Portfolio and account risk configuration
-- Persists risk configuration profiles and tracks risk state snapshots.
-- Requirements: 8.1, 8.2, 8.4
-- ============================================================
-- Risk Configuration Profiles
-- ============================================================
CREATE TABLE risk_configs (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
name VARCHAR(200) NOT NULL DEFAULT 'default',
trading_mode VARCHAR(20) NOT NULL DEFAULT 'paper',
config JSONB NOT NULL DEFAULT '{}',
active BOOLEAN NOT NULL DEFAULT TRUE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE UNIQUE INDEX idx_risk_configs_active_name
ON risk_configs(name) WHERE active = TRUE;
-- ============================================================
-- Symbol-level lockouts (news-shock, cooldown)
-- ============================================================
CREATE TABLE symbol_lockouts (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
ticker VARCHAR(20) NOT NULL,
lockout_type VARCHAR(50) NOT NULL,
reason TEXT DEFAULT '',
expires_at TIMESTAMPTZ NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX idx_symbol_lockouts_ticker ON symbol_lockouts(ticker, expires_at);
CREATE INDEX idx_symbol_lockouts_expiry ON symbol_lockouts(expires_at);
-- ============================================================
-- Daily risk snapshots (for daily loss tracking)
-- ============================================================
CREATE TABLE daily_risk_snapshots (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
account_id VARCHAR(200) NOT NULL,
snapshot_date DATE NOT NULL DEFAULT CURRENT_DATE,
portfolio_value NUMERIC DEFAULT 0,
daily_pnl NUMERIC DEFAULT 0,
daily_trade_count INTEGER DEFAULT 0,
positions_by_sector JSONB DEFAULT '{}',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE(account_id, snapshot_date)
);
CREATE INDEX idx_daily_risk_account ON daily_risk_snapshots(account_id, snapshot_date DESC);