105 lines
4.2 KiB
SQL
105 lines
4.2 KiB
SQL
-- Strategy and Risk Management Tables
|
|
|
|
-- Strategies
|
|
CREATE TABLE strategy.strategies (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
name VARCHAR(255) NOT NULL,
|
|
description TEXT,
|
|
version VARCHAR(20) DEFAULT '1.0.0',
|
|
config JSONB DEFAULT '{}',
|
|
parameters JSONB DEFAULT '{}',
|
|
is_active BOOLEAN DEFAULT false,
|
|
is_enabled BOOLEAN DEFAULT true,
|
|
created_by VARCHAR(255),
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
);
|
|
|
|
-- Strategy executions/runs
|
|
CREATE TABLE strategy.executions (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
strategy_id UUID REFERENCES strategy.strategies(id),
|
|
status VARCHAR(20) DEFAULT 'running' CHECK (status IN ('running', 'stopped', 'error', 'completed')),
|
|
started_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
stopped_at TIMESTAMP WITH TIME ZONE,
|
|
error_message TEXT,
|
|
execution_stats JSONB DEFAULT '{}',
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
);
|
|
|
|
-- Strategy signals
|
|
CREATE TABLE strategy.signals (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
strategy_id UUID REFERENCES strategy.strategies(id),
|
|
symbol_id UUID REFERENCES trading.symbols(id),
|
|
signal_type VARCHAR(20) NOT NULL CHECK (signal_type IN ('buy', 'sell', 'hold')),
|
|
strength DECIMAL(3,2) CHECK (strength >= 0 AND strength <= 1), -- 0.0 to 1.0
|
|
confidence DECIMAL(3,2) CHECK (confidence >= 0 AND confidence <= 1),
|
|
target_price DECIMAL(18,8),
|
|
stop_loss DECIMAL(18,8),
|
|
take_profit DECIMAL(18,8),
|
|
metadata JSONB DEFAULT '{}',
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
);
|
|
|
|
-- Risk limits
|
|
CREATE TABLE risk.limits (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
strategy_id UUID REFERENCES strategy.strategies(id),
|
|
account_id UUID REFERENCES trading.accounts(id),
|
|
limit_type VARCHAR(50) NOT NULL, -- 'max_position_size', 'max_daily_loss', 'max_drawdown', etc.
|
|
limit_value DECIMAL(18,8) NOT NULL,
|
|
current_value DECIMAL(18,8) DEFAULT 0,
|
|
threshold_warning DECIMAL(18,8), -- Warning at X% of limit
|
|
is_active BOOLEAN DEFAULT true,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
);
|
|
|
|
-- Risk events/alerts
|
|
CREATE TABLE risk.events (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
limit_id UUID REFERENCES risk.limits(id),
|
|
strategy_id UUID,
|
|
event_type VARCHAR(50) NOT NULL, -- 'warning', 'breach', 'resolved'
|
|
severity VARCHAR(20) DEFAULT 'medium' CHECK (severity IN ('low', 'medium', 'high', 'critical')),
|
|
message TEXT NOT NULL,
|
|
current_value DECIMAL(18,8),
|
|
limit_value DECIMAL(18,8),
|
|
metadata JSONB DEFAULT '{}',
|
|
acknowledged BOOLEAN DEFAULT false,
|
|
acknowledged_by VARCHAR(255),
|
|
acknowledged_at TIMESTAMP WITH TIME ZONE,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
);
|
|
|
|
-- Performance tracking
|
|
CREATE TABLE strategy.performance (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
strategy_id UUID REFERENCES strategy.strategies(id),
|
|
date DATE NOT NULL,
|
|
total_return DECIMAL(10,4),
|
|
daily_return DECIMAL(10,4),
|
|
sharpe_ratio DECIMAL(10,4),
|
|
max_drawdown DECIMAL(10,4),
|
|
win_rate DECIMAL(5,4),
|
|
profit_factor DECIMAL(10,4),
|
|
total_trades INTEGER DEFAULT 0,
|
|
winning_trades INTEGER DEFAULT 0,
|
|
losing_trades INTEGER DEFAULT 0,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
UNIQUE(strategy_id, date)
|
|
);
|
|
|
|
-- Create indexes
|
|
CREATE INDEX idx_strategies_active ON strategy.strategies(is_active, is_enabled);
|
|
CREATE INDEX idx_executions_strategy ON strategy.executions(strategy_id);
|
|
CREATE INDEX idx_signals_strategy_time ON strategy.signals(strategy_id, created_at);
|
|
CREATE INDEX idx_signals_symbol ON strategy.signals(symbol_id);
|
|
CREATE INDEX idx_limits_strategy ON risk.limits(strategy_id);
|
|
CREATE INDEX idx_risk_events_severity ON risk.events(severity, created_at);
|
|
CREATE INDEX idx_performance_strategy_date ON strategy.performance(strategy_id, date);
|
|
|
|
-- Grant permissions
|
|
GRANT SELECT ON ALL TABLES IN SCHEMA strategy TO trading_reader;
|
|
GRANT SELECT ON ALL TABLES IN SCHEMA risk TO trading_reader;
|