-- ============================================================================ -- PAPER TRADING DIAGNOSTIC QUERIES -- Agent 131 - 2025-10-14 -- ============================================================================ -- PROBLEM VERIFICATION -- ---------------------------------------------------------------------------- -- 1. Count total predictions (Expected: 3000) SELECT COUNT(*) as total_predictions FROM ensemble_predictions; -- 2. Count executed orders (Expected: 0 - THIS IS THE BUG!) SELECT COUNT(*) as total_orders FROM orders WHERE account_id LIKE '%paper%'; -- 3. Check prediction linkage (Expected: 0 - no predictions linked to orders) SELECT COUNT(*) as linked_predictions FROM ensemble_predictions WHERE order_id IS NOT NULL; -- 4. Conversion rate calculation (Expected: 0%) SELECT COUNT(*) as total_predictions, SUM(CASE WHEN order_id IS NOT NULL THEN 1 ELSE 0 END) as executed_predictions, ROUND(100.0 * SUM(CASE WHEN order_id IS NOT NULL THEN 1 ELSE 0 END) / COUNT(*), 2) as conversion_rate_percent FROM ensemble_predictions WHERE ensemble_action IN ('BUY', 'SELL'); -- PREDICTION ANALYSIS -- ---------------------------------------------------------------------------- -- 5. Prediction breakdown by action SELECT ensemble_action, COUNT(*) as count, ROUND(100.0 * COUNT(*) / SUM(COUNT(*)) OVER (), 2) as percentage, ROUND(AVG(ensemble_confidence)::numeric, 4) as avg_confidence, ROUND(AVG(disagreement_rate)::numeric, 4) as avg_disagreement FROM ensemble_predictions GROUP BY ensemble_action ORDER BY count DESC; -- 6. Symbol distribution (Expected: Only TEST_SYM - THIS IS WRONG!) SELECT symbol, COUNT(*) as count, MIN(timestamp) as first_prediction, MAX(timestamp) as last_prediction FROM ensemble_predictions GROUP BY symbol ORDER BY count DESC; -- 7. High-confidence predictions (>60%) that SHOULD be executed SELECT COUNT(*) as high_confidence_predictions, ROUND(100.0 * COUNT(*) / (SELECT COUNT(*) FROM ensemble_predictions), 2) as percentage FROM ensemble_predictions WHERE ensemble_confidence >= 0.60 AND ensemble_action IN ('BUY', 'SELL'); -- 8. High-confidence predictions by symbol (should be real symbols!) SELECT symbol, ensemble_action, COUNT(*) as count, AVG(ensemble_confidence)::numeric(5,2) as avg_confidence FROM ensemble_predictions WHERE ensemble_confidence >= 0.60 AND ensemble_action IN ('BUY', 'SELL') GROUP BY symbol, ensemble_action ORDER BY count DESC; -- MODEL VOTE ANALYSIS -- ---------------------------------------------------------------------------- -- 9. Individual model participation (Expected: All NULL - models not trained) SELECT COUNT(*) as total_predictions, SUM(CASE WHEN dqn_signal IS NOT NULL THEN 1 ELSE 0 END) as dqn_votes, SUM(CASE WHEN ppo_signal IS NOT NULL THEN 1 ELSE 0 END) as ppo_votes, SUM(CASE WHEN mamba2_signal IS NOT NULL THEN 1 ELSE 0 END) as mamba2_votes, SUM(CASE WHEN tft_signal IS NOT NULL THEN 1 ELSE 0 END) as tft_votes FROM ensemble_predictions; -- 10. High disagreement events (>50% disagreement) SELECT COUNT(*) as high_disagreement_count, ROUND(100.0 * COUNT(*) / (SELECT COUNT(*) FROM ensemble_predictions), 2) as percentage, AVG(disagreement_rate)::numeric(5,2) as avg_disagreement FROM ensemble_predictions WHERE disagreement_rate >= 0.50; -- TEMPORAL ANALYSIS -- ---------------------------------------------------------------------------- -- 11. Prediction timeline (when predictions were generated) SELECT DATE_TRUNC('minute', timestamp) as minute, COUNT(*) as predictions_per_minute FROM ensemble_predictions GROUP BY minute ORDER BY minute DESC LIMIT 10; -- 12. Time since last prediction (Expected: >1 hour - system stopped) SELECT MAX(timestamp) as last_prediction_time, NOW() - MAX(timestamp) as time_since_last_prediction FROM ensemble_predictions; -- MISSING CONSUMER VALIDATION -- ---------------------------------------------------------------------------- -- 13. Predictions that SHOULD be executed (but aren't due to missing consumer) SELECT id, timestamp, symbol, ensemble_action, ensemble_signal, ensemble_confidence, order_id FROM ensemble_predictions WHERE order_id IS NULL -- Not yet executed AND ensemble_confidence >= 0.60 -- High confidence AND ensemble_action IN ('BUY', 'SELL') -- Actionable AND timestamp > NOW() - INTERVAL '5 minutes' -- Recent ORDER BY ensemble_confidence DESC LIMIT 20; -- 14. Count of executable predictions (if consumer existed) SELECT COUNT(*) as executable_predictions, ROUND(100.0 * COUNT(*) / (SELECT COUNT(*) FROM ensemble_predictions), 2) as executable_percentage FROM ensemble_predictions WHERE order_id IS NULL AND ensemble_confidence >= 0.60 AND ensemble_action IN ('BUY', 'SELL'); -- EXPECTED RESULTS AFTER FIX -- ---------------------------------------------------------------------------- -- After implementing PaperTradingExecutor: -- -- Query 2 (total_orders): >1500 (not 0!) -- Query 3 (linked_predictions): >1500 (not 0!) -- Query 4 (conversion_rate_percent): >50% (not 0%) -- Query 6 (symbol): ES.FUT, NQ.FUT, ZN.FUT, 6E.FUT (not TEST_SYM!) -- Query 14 (executable_predictions): Decreasing over time as consumer executes -- ============================================================================ -- RUN ALL DIAGNOSTICS -- ============================================================================ -- Usage: -- psql postgresql://foxhunt:foxhunt_dev_password@localhost:5432/foxhunt -f PAPER_TRADING_DIAGNOSTIC_QUERIES.sql