-- ================================================================================================ -- Migration 028: Create get_high_disagreement_events_24h() PostgreSQL function -- Utility function for retrieving high model disagreement events -- ================================================================================================ -- Drop existing function if it exists DROP FUNCTION IF EXISTS get_high_disagreement_events_24h(FLOAT, INT, INT); DROP FUNCTION IF EXISTS get_high_disagreement_events_24h(VARCHAR, FLOAT, INT); -- Function: Get high disagreement events in last 24 hours -- Parameters match code usage: symbol (optional), disagreement_threshold, limit CREATE OR REPLACE FUNCTION get_high_disagreement_events_24h( p_symbol VARCHAR, p_disagreement_threshold FLOAT, p_limit INT ) RETURNS TABLE ( event_timestamp TIMESTAMPTZ, event_symbol VARCHAR, ensemble_action VARCHAR, ensemble_confidence FLOAT, disagreement_rate FLOAT, dqn_vote VARCHAR, ppo_vote VARCHAR, mamba2_vote VARCHAR, tft_vote VARCHAR ) AS $$ BEGIN RETURN QUERY SELECT ep.timestamp as event_timestamp, ep.symbol::VARCHAR as event_symbol, ep.ensemble_action::VARCHAR, ep.ensemble_confidence::FLOAT, ep.disagreement_rate::FLOAT, ep.dqn_vote::VARCHAR, ep.ppo_vote::VARCHAR, ep.mamba2_vote::VARCHAR, ep.tft_vote::VARCHAR FROM ensemble_predictions ep WHERE ep.timestamp >= NOW() - INTERVAL '24 hours' AND (p_symbol IS NULL OR ep.symbol = p_symbol) AND ep.disagreement_rate >= p_disagreement_threshold ORDER BY ep.disagreement_rate DESC, ep.timestamp DESC LIMIT p_limit; END; $$ LANGUAGE plpgsql; COMMENT ON FUNCTION get_high_disagreement_events_24h IS 'Get predictions with high model disagreement (possible regime shifts or market transitions)'; -- ================================================================================================ -- END MIGRATION 028 -- ================================================================================================