- 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
165 lines
5.5 KiB
SQL
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
|
|
|