Files
foxhunt/sql/PAPER_TRADING_DIAGNOSTIC_QUERIES.sql
jgrusewski 8d89fe80ff chore: Second cleanup wave - organize root directory
- Archive: 85 agent .txt files → docs/archive/agents/legacy_txt/
- Scripts: Move 110 shell scripts → scripts/ (keep deploy.sh in root)
- Models: Move 18 .safetensors → ml/models/checkpoints/training_artifacts/
- Delete: 34 directories (~33GB freed) - target/, coverage_*, test artifacts
- Build: Clean 14 build artifacts (.rlib, .o, .pid, binaries)
- Tests: Move 14 .rs files → tests/standalone/
- SQL: Move 5 files → sql/ (keep init-db*.sql for Docker)
- Wave 153: Archive to docs/archive/historical/wave153/
- Docs: Archive 9 markdown files to wave_d/reports/ and historical/

Total impact: ~34GB freed (both waves), root directory cleaned from 583 to ~40 essential files
Directory count reduced from 65 to 31 (52% reduction)
All historical data preserved in organized archive structure
2025-10-30 01:26:02 +01:00

165 lines
5.5 KiB
SQL

-- ============================================================================
-- 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