ST-3.1: Course tags system - education.course_tags with slug, color, featured flag - education.course_tag_assignments (M:N) with auto usage_count - Seeds: 10 initial tags (forex, crypto, ICT, etc.) ST-3.2: Drawing tools for charts - Enum: trading.drawing_tool_type (18 types including ICT) - trading.drawing_tools with JSONB points and styles - trading.drawing_templates for reusable presets ST-3.3: Complete agent_executions - Added 10 columns: execution_time_ms, slippage, risk_score, etc. - 5 new performance indexes - Trigger for updated_at ST-3.4: ML composite indexes - 8 new composite/partial indexes for predictions - Optimized for symbol+timeframe+date queries - Partial indexes for high confidence and overlay display New files: 7 DDL, 2 migrations, 1 seed Modified: 3 existing DDL files Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
173 lines
7.5 KiB
SQL
173 lines
7.5 KiB
SQL
-- =====================================================
|
|
-- INVESTMENT SCHEMA - AGENT EXECUTIONS TABLE
|
|
-- =====================================================
|
|
-- Description: Tracking de ejecuciones de trading agents
|
|
-- Schema: investment
|
|
-- Gap: GAP-DDL-005, GAP-007
|
|
-- Task: ST-3.3
|
|
-- Created: 2026-02-03
|
|
-- Updated: 2026-02-03
|
|
-- Related: OQI-004 Investment Accounts
|
|
-- =====================================================
|
|
|
|
CREATE TABLE investment.agent_executions (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
-- Relacion con cuenta PAMM
|
|
account_id UUID NOT NULL REFERENCES investment.accounts(id) ON DELETE CASCADE,
|
|
|
|
-- Tipo de agente (Atlas, Orion, Nova)
|
|
agent_type investment.trading_agent NOT NULL,
|
|
|
|
-- Tipo de ejecucion
|
|
execution_type VARCHAR(20) NOT NULL CHECK (
|
|
execution_type IN ('trade', 'rebalance', 'distribution', 'stop_loss', 'take_profit', 'hedge')
|
|
),
|
|
|
|
-- Detalles del trade
|
|
symbol VARCHAR(20),
|
|
side VARCHAR(4) CHECK (side IN ('buy', 'sell')),
|
|
quantity DECIMAL(20,8),
|
|
entry_price DECIMAL(20,8),
|
|
exit_price DECIMAL(20,8),
|
|
|
|
-- Resultado (P&L)
|
|
pnl DECIMAL(20,8),
|
|
pnl_percentage DECIMAL(8,4),
|
|
fees DECIMAL(20,8) DEFAULT 0,
|
|
|
|
-- Metricas de ejecucion
|
|
execution_time_ms INTEGER,
|
|
slippage DECIMAL(20,8),
|
|
|
|
-- Metricas de riesgo
|
|
risk_score DECIMAL(5,4) CHECK (risk_score IS NULL OR risk_score BETWEEN 0 AND 1),
|
|
position_size_percent DECIMAL(5,2),
|
|
|
|
-- Detalles adicionales (JSON)
|
|
trade_details JSONB DEFAULT '{}',
|
|
market_conditions JSONB, -- volatility, trend, liquidity, etc.
|
|
|
|
-- Estado
|
|
status VARCHAR(20) DEFAULT 'executed' CHECK (
|
|
status IN ('pending', 'executed', 'partially_filled', 'cancelled', 'failed')
|
|
),
|
|
error_code VARCHAR(50),
|
|
failure_reason TEXT,
|
|
notes TEXT,
|
|
|
|
-- Metadata ML/AI
|
|
signal_source VARCHAR(50), -- ml_model, llm, manual, scheduled, ensemble
|
|
confidence_score DECIMAL(5,4) CHECK (confidence_score IS NULL OR confidence_score BETWEEN 0 AND 1),
|
|
model_version VARCHAR(50),
|
|
model_id UUID, -- Reference to ML model
|
|
|
|
-- Referencias externas
|
|
external_order_id VARCHAR(100),
|
|
|
|
-- Timestamps
|
|
executed_at TIMESTAMPTZ DEFAULT NOW(),
|
|
closed_at TIMESTAMPTZ,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
-- =====================================================
|
|
-- INDEXES
|
|
-- =====================================================
|
|
|
|
-- Primary lookup indexes
|
|
CREATE INDEX idx_agent_exec_account ON investment.agent_executions(account_id);
|
|
CREATE INDEX idx_agent_exec_type ON investment.agent_executions(agent_type);
|
|
CREATE INDEX idx_agent_exec_status ON investment.agent_executions(status);
|
|
|
|
-- Time-based indexes
|
|
CREATE INDEX idx_agent_exec_date ON investment.agent_executions(executed_at DESC);
|
|
CREATE INDEX idx_agent_exec_account_date ON investment.agent_executions(account_id, executed_at DESC);
|
|
|
|
-- Symbol and P&L indexes (partial for efficiency)
|
|
CREATE INDEX idx_agent_exec_symbol ON investment.agent_executions(symbol)
|
|
WHERE symbol IS NOT NULL;
|
|
CREATE INDEX idx_agent_exec_pnl ON investment.agent_executions(pnl DESC NULLS LAST)
|
|
WHERE pnl IS NOT NULL;
|
|
|
|
-- Performance analysis indexes
|
|
CREATE INDEX idx_agent_exec_slippage ON investment.agent_executions(slippage)
|
|
WHERE slippage IS NOT NULL;
|
|
CREATE INDEX idx_agent_exec_risk_score ON investment.agent_executions(risk_score)
|
|
WHERE risk_score IS NOT NULL;
|
|
|
|
-- External reference indexes
|
|
CREATE INDEX idx_agent_exec_external_order ON investment.agent_executions(external_order_id)
|
|
WHERE external_order_id IS NOT NULL;
|
|
CREATE INDEX idx_agent_exec_model ON investment.agent_executions(model_id)
|
|
WHERE model_id IS NOT NULL;
|
|
|
|
-- Signal analysis index (composite)
|
|
CREATE INDEX idx_agent_exec_signal_confidence ON investment.agent_executions(signal_source, confidence_score DESC NULLS LAST)
|
|
WHERE signal_source IS NOT NULL;
|
|
|
|
-- =====================================================
|
|
-- TRIGGER
|
|
-- =====================================================
|
|
|
|
CREATE TRIGGER trg_agent_executions_updated_at
|
|
BEFORE UPDATE ON investment.agent_executions
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION public.update_updated_at();
|
|
|
|
-- =====================================================
|
|
-- COMMENTS
|
|
-- =====================================================
|
|
|
|
COMMENT ON TABLE investment.agent_executions IS 'Tracking de ejecuciones de trading agents (Atlas, Orion, Nova)';
|
|
|
|
-- Agent and execution type
|
|
COMMENT ON COLUMN investment.agent_executions.agent_type IS 'Agente que ejecuto: atlas (conservador), orion (moderado), nova (agresivo)';
|
|
COMMENT ON COLUMN investment.agent_executions.execution_type IS 'Tipo: trade, rebalance, distribution, stop_loss, take_profit, hedge';
|
|
|
|
-- Trade details
|
|
COMMENT ON COLUMN investment.agent_executions.symbol IS 'Trading pair symbol (e.g., BTCUSDT, EURUSD)';
|
|
COMMENT ON COLUMN investment.agent_executions.side IS 'Trade direction: buy or sell';
|
|
COMMENT ON COLUMN investment.agent_executions.quantity IS 'Position size in base currency';
|
|
COMMENT ON COLUMN investment.agent_executions.entry_price IS 'Entry price of the position';
|
|
COMMENT ON COLUMN investment.agent_executions.exit_price IS 'Exit price (null if position still open)';
|
|
|
|
-- P&L
|
|
COMMENT ON COLUMN investment.agent_executions.pnl IS 'Profit/Loss in quote currency';
|
|
COMMENT ON COLUMN investment.agent_executions.pnl_percentage IS 'P&L as percentage of position';
|
|
COMMENT ON COLUMN investment.agent_executions.fees IS 'Trading fees/commissions paid';
|
|
|
|
-- Execution metrics
|
|
COMMENT ON COLUMN investment.agent_executions.execution_time_ms IS 'Time taken to execute the trade in milliseconds';
|
|
COMMENT ON COLUMN investment.agent_executions.slippage IS 'Price slippage between requested and executed price';
|
|
|
|
-- Risk metrics
|
|
COMMENT ON COLUMN investment.agent_executions.risk_score IS 'Risk assessment score at time of execution (0-1)';
|
|
COMMENT ON COLUMN investment.agent_executions.position_size_percent IS 'Position size as percentage of portfolio';
|
|
|
|
-- JSON details
|
|
COMMENT ON COLUMN investment.agent_executions.trade_details IS 'JSON with additional trade details (leverage, margin, etc.)';
|
|
COMMENT ON COLUMN investment.agent_executions.market_conditions IS 'Market conditions at execution (volatility, trend, liquidity)';
|
|
|
|
-- Status and errors
|
|
COMMENT ON COLUMN investment.agent_executions.status IS 'Execution status: pending, executed, partially_filled, cancelled, failed';
|
|
COMMENT ON COLUMN investment.agent_executions.error_code IS 'Standardized error code for failures';
|
|
COMMENT ON COLUMN investment.agent_executions.failure_reason IS 'Detailed failure description';
|
|
COMMENT ON COLUMN investment.agent_executions.notes IS 'Manual annotations or additional context';
|
|
|
|
-- ML/AI metadata
|
|
COMMENT ON COLUMN investment.agent_executions.signal_source IS 'Signal origin: ml_model, llm, manual, scheduled, ensemble';
|
|
COMMENT ON COLUMN investment.agent_executions.confidence_score IS 'ML model confidence score (0-1)';
|
|
COMMENT ON COLUMN investment.agent_executions.model_version IS 'Version of the ML model used';
|
|
COMMENT ON COLUMN investment.agent_executions.model_id IS 'Reference to ML model that generated the signal';
|
|
|
|
-- External references
|
|
COMMENT ON COLUMN investment.agent_executions.external_order_id IS 'Order ID from external broker/exchange (Binance, MT4, etc.)';
|
|
|
|
-- Timestamps
|
|
COMMENT ON COLUMN investment.agent_executions.executed_at IS 'When the trade was executed';
|
|
COMMENT ON COLUMN investment.agent_executions.closed_at IS 'When the position was closed';
|
|
COMMENT ON COLUMN investment.agent_executions.created_at IS 'Record creation timestamp';
|
|
COMMENT ON COLUMN investment.agent_executions.updated_at IS 'Last modification timestamp';
|