50 lines
1.8 KiB
SQL
50 lines
1.8 KiB
SQL
-- ============================================================================
|
|
-- Schema: trading
|
|
-- Table: trades
|
|
-- Description: Historial detallado de trades ejecutados
|
|
-- Dependencies: trading.orders, trading.positions
|
|
-- ============================================================================
|
|
|
|
CREATE TABLE trading.trades (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
-- Referencias
|
|
order_id UUID NOT NULL REFERENCES trading.orders(id) ON DELETE CASCADE,
|
|
position_id UUID REFERENCES trading.positions(id) ON DELETE SET NULL,
|
|
|
|
-- Identificador externo (de exchange)
|
|
external_trade_id VARCHAR(100),
|
|
|
|
-- Detalles del trade
|
|
symbol VARCHAR(20) NOT NULL,
|
|
side trading.order_side NOT NULL,
|
|
price DECIMAL(20,8) NOT NULL,
|
|
quantity DECIMAL(20,8) NOT NULL,
|
|
quote_quantity DECIMAL(20,8) NOT NULL, -- price * quantity
|
|
|
|
-- Comisión
|
|
commission DECIMAL(20,8) DEFAULT 0,
|
|
commission_asset VARCHAR(10),
|
|
|
|
-- Metadata
|
|
is_maker BOOLEAN DEFAULT false,
|
|
metadata JSONB DEFAULT '{}',
|
|
|
|
-- Timestamps
|
|
executed_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
-- Índices
|
|
CREATE INDEX idx_trades_order ON trading.trades(order_id);
|
|
CREATE INDEX idx_trades_position ON trading.trades(position_id);
|
|
CREATE INDEX idx_trades_symbol ON trading.trades(symbol);
|
|
CREATE INDEX idx_trades_executed ON trading.trades(executed_at DESC);
|
|
CREATE INDEX idx_trades_external ON trading.trades(external_trade_id);
|
|
|
|
-- Comentarios
|
|
COMMENT ON TABLE trading.trades IS 'Historial detallado de trades ejecutados (fills individuales)';
|
|
COMMENT ON COLUMN trading.trades.external_trade_id IS 'ID del trade en el exchange externo';
|
|
COMMENT ON COLUMN trading.trades.quote_quantity IS 'Valor total del trade (price * quantity)';
|
|
COMMENT ON COLUMN trading.trades.is_maker IS 'true si el trade fue maker, false si fue taker';
|