broker_integration (5 tables): - broker_accounts: Cuentas MT4/MT5/API conectadas - broker_prices: Precios en tiempo real - spread_statistics: Estadisticas historicas de spread - price_adjustment_model: Modelos de ajuste de precio - trade_execution: Ejecucion de ordenes portfolio_management (6 tables): - portfolios: Portafolios de inversion - portfolio_accounts: Cuentas vinculadas a portafolios - investment_goals: Metas de inversion - rebalance_suggestions: Sugerencias de rebalanceo - portfolio_snapshots: Snapshots historicos - monte_carlo_projections: Proyecciones Monte Carlo Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
97 lines
3.0 KiB
SQL
97 lines
3.0 KiB
SQL
-- ============================================================================
|
|
-- SCHEMA: broker_integration
|
|
-- TABLE: broker_prices
|
|
-- DESCRIPTION: Precios en tiempo real de brokers
|
|
-- VERSION: 1.0.0
|
|
-- CREATED: 2026-01-16
|
|
-- SPRINT: Sprint 6 - DDL Implementation Roadmap Q1-2026
|
|
-- ============================================================================
|
|
|
|
-- Tabla de Precios de Broker
|
|
CREATE TABLE IF NOT EXISTS broker_integration.broker_prices (
|
|
-- Identificadores
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
tenant_id UUID NOT NULL,
|
|
broker_account_id UUID NOT NULL REFERENCES broker_integration.broker_accounts(id) ON DELETE CASCADE,
|
|
|
|
-- Simbolo
|
|
symbol VARCHAR(20) NOT NULL,
|
|
|
|
-- Precios
|
|
bid DECIMAL(15, 8) NOT NULL,
|
|
ask DECIMAL(15, 8) NOT NULL,
|
|
spread DECIMAL(10, 4), -- En pips
|
|
spread_points INTEGER, -- En puntos
|
|
|
|
-- Volumen
|
|
bid_volume DECIMAL(15, 4),
|
|
ask_volume DECIMAL(15, 4),
|
|
|
|
-- Cambio
|
|
change_24h DECIMAL(15, 8),
|
|
change_percent_24h DECIMAL(10, 4),
|
|
high_24h DECIMAL(15, 8),
|
|
low_24h DECIMAL(15, 8),
|
|
|
|
-- Sesion
|
|
session_open DECIMAL(15, 8),
|
|
session_high DECIMAL(15, 8),
|
|
session_low DECIMAL(15, 8),
|
|
previous_close DECIMAL(15, 8),
|
|
|
|
-- Trading
|
|
is_trading_enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
|
trading_session VARCHAR(20), -- 'pre_market', 'regular', 'after_hours'
|
|
|
|
-- Timestamp del broker
|
|
broker_timestamp TIMESTAMPTZ,
|
|
|
|
-- Timestamps
|
|
received_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
|
|
-- Constraints
|
|
CONSTRAINT broker_prices_unique UNIQUE (broker_account_id, symbol)
|
|
);
|
|
|
|
COMMENT ON TABLE broker_integration.broker_prices IS
|
|
'Precios en tiempo real recibidos de brokers conectados';
|
|
|
|
-- Indices
|
|
CREATE INDEX IF NOT EXISTS idx_broker_prices_account
|
|
ON broker_integration.broker_prices(broker_account_id);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_broker_prices_symbol
|
|
ON broker_integration.broker_prices(symbol);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_broker_prices_received
|
|
ON broker_integration.broker_prices(received_at DESC);
|
|
|
|
-- Vista de spreads actuales
|
|
CREATE OR REPLACE VIEW broker_integration.v_current_spreads AS
|
|
SELECT
|
|
bp.symbol,
|
|
ba.broker_name,
|
|
bp.bid,
|
|
bp.ask,
|
|
bp.spread,
|
|
bp.spread_points,
|
|
bp.is_trading_enabled,
|
|
bp.received_at
|
|
FROM broker_integration.broker_prices bp
|
|
JOIN broker_integration.broker_accounts ba ON bp.broker_account_id = ba.id
|
|
WHERE ba.is_active = TRUE
|
|
ORDER BY bp.symbol, bp.spread;
|
|
|
|
-- RLS
|
|
ALTER TABLE broker_integration.broker_prices ENABLE ROW LEVEL SECURITY;
|
|
|
|
CREATE POLICY broker_prices_tenant ON broker_integration.broker_prices
|
|
FOR ALL
|
|
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
|
|
|
|
-- Grants
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON broker_integration.broker_prices TO trading_app;
|
|
GRANT SELECT ON broker_integration.broker_prices TO trading_readonly;
|
|
GRANT SELECT ON broker_integration.v_current_spreads TO trading_app;
|