Files
trading_bot_v3/ai-learning-dashboard.js
mindesbunister 3a305c8cc4 feat: fix AI learning dashboard data display and analysis tools
- Fix position-history API case sensitivity for WIN/LOSS outcomes
- Update trade filtering to properly distinguish real vs simulation trades
- Correct database record for real trade (6.13 profit, 100% win rate)

- ai-learning-dashboard.js: Comprehensive AI intelligence report
- analyze-learning-progress.js: Learning system progress analysis
- analyze-decision-patterns.js: AI decision pattern analysis
- analyze-learning-intelligence.js: Deep learning system insights
- test-trade-data.js: Trade data validation and filtering tests
- fix-real-trade.js: Utility to correct trade classifications

- Dashboard now shows 1 real trade (previously 0)
- 100% win rate with .13 total P&L
- 9,767+ AI learning records properly separated from real trades
- Real-time trading performance data vs analysis-only data

 Result: AI Learning System dashboard displays accurate real trading data
2025-07-28 18:40:05 +02:00

217 lines
8.6 KiB
JavaScript

const { PrismaClient } = require('@prisma/client');
async function createLearningDashboard() {
console.log('🎯 AI LEARNING SYSTEM - COMPREHENSIVE INTELLIGENCE REPORT');
console.log('═'.repeat(80));
const prisma = new PrismaClient();
try {
// Load learning system
const SimplifiedStopLossLearner = require('./lib/simplified-stop-loss-learner.js');
const learner = new SimplifiedStopLossLearner();
console.log('\n📊 CURRENT LEARNING STATUS');
console.log('─'.repeat(50));
const totalRecords = await prisma.ai_learning_data.count();
console.log(`📈 Total Learning Records: ${totalRecords.toLocaleString()}`);
// Learning system status
try {
const report = await learner.generateLearningReport();
console.log(`🧠 System Confidence: ${(report.summary?.systemConfidence || 0).toFixed(1)}%`);
console.log(`🎯 Success Rate: ${report.summary?.successRate || 'No trades yet'}`);
console.log(`📋 Decisions Made: ${report.summary?.totalDecisions || 0}`);
} catch (e) {
console.log('❌ Learning report unavailable');
}
// What symbols the AI knows best
const symbolExpertise = await prisma.ai_learning_data.groupBy({
by: ['symbol'],
_count: { symbol: true },
orderBy: { _count: { symbol: 'desc' } }
});
console.log('\n🎯 AI TRADING EXPERTISE BY SYMBOL');
console.log('─'.repeat(50));
symbolExpertise.slice(0, 5).forEach((sym, i) => {
const expertise = sym._count.symbol > 1000 ? '🥇 Expert' :
sym._count.symbol > 100 ? '🥈 Experienced' :
'🥉 Learning';
console.log(`${expertise} ${sym.symbol}: ${sym._count.symbol.toLocaleString()} analyses`);
});
// AI Decision Patterns
console.log('\n🧠 AI DECISION INTELLIGENCE');
console.log('─'.repeat(50));
const recentDecisions = await prisma.ai_learning_data.findMany({
where: {
timeframe: 'DECISION',
confidenceScore: { not: null }
},
select: {
confidenceScore: true,
analysisData: true,
createdAt: true
},
orderBy: { createdAt: 'desc' },
take: 20
});
const avgConfidence = recentDecisions.reduce((sum, d) => sum + d.confidenceScore, 0) / recentDecisions.length;
console.log(`📊 Current Confidence Level: ${avgConfidence.toFixed(1)}%`);
// Confidence distribution
const high = recentDecisions.filter(d => d.confidenceScore >= 70).length;
const medium = recentDecisions.filter(d => d.confidenceScore >= 40 && d.confidenceScore < 70).length;
const low = recentDecisions.filter(d => d.confidenceScore < 40).length;
console.log(`🔥 High Confidence (≥70%): ${high}/${recentDecisions.length} decisions`);
console.log(`⚡ Medium Confidence (40-69%): ${medium}/${recentDecisions.length} decisions`);
console.log(`⚠️ Low Confidence (<40%): ${low}/${recentDecisions.length} decisions`);
// What makes the AI cautious vs confident
console.log('\n🎭 WHAT INFLUENCES AI CONFIDENCE');
console.log('─'.repeat(50));
// Analyze decision reasoning patterns
const reasoningPatterns = {};
recentDecisions.forEach(decision => {
try {
const analysis = JSON.parse(decision.analysisData);
if (analysis.reasoning) {
const reasoning = analysis.reasoning.toLowerCase();
// Extract key phrases that indicate learning
const patterns = [
'increased monitoring',
'position is safe',
'standard monitoring',
'preparing contingency',
'technical analysis',
'emergency',
'risk'
];
patterns.forEach(pattern => {
if (reasoning.includes(pattern)) {
if (!reasoningPatterns[pattern]) reasoningPatterns[pattern] = [];
reasoningPatterns[pattern].push(decision.confidenceScore);
}
});
}
} catch (e) {}
});
Object.entries(reasoningPatterns).forEach(([pattern, confidences]) => {
const avgConf = confidences.reduce((a, b) => a + b, 0) / confidences.length;
const emoji = avgConf >= 60 ? '🟢' : avgConf >= 40 ? '🟡' : '🔴';
console.log(`${emoji} "${pattern}": Avg ${avgConf.toFixed(1)}% confidence (${confidences.length} times)`);
});
// Learning evolution over time
console.log('\n📈 LEARNING EVOLUTION');
console.log('─'.repeat(50));
const oldDecisions = await prisma.ai_learning_data.findMany({
where: { confidenceScore: { not: null } },
orderBy: { createdAt: 'asc' },
take: 50,
select: { confidenceScore: true }
});
const newDecisions = await prisma.ai_learning_data.findMany({
where: { confidenceScore: { not: null } },
orderBy: { createdAt: 'desc' },
take: 50,
select: { confidenceScore: true }
});
const oldAvg = oldDecisions.reduce((sum, d) => sum + d.confidenceScore, 0) / oldDecisions.length;
const newAvg = newDecisions.reduce((sum, d) => sum + d.confidenceScore, 0) / newDecisions.length;
const evolution = newAvg - oldAvg;
console.log(`📊 Early Period Confidence: ${oldAvg.toFixed(1)}%`);
console.log(`📊 Recent Period Confidence: ${newAvg.toFixed(1)}%`);
console.log(`📈 Evolution: ${evolution > 0 ? '+' : ''}${evolution.toFixed(1)}% ${evolution > 0 ? '(Learning & Improving)' : '(Becoming More Cautious)'}`);
// Test AI recommendation system
console.log('\n🤖 AI RECOMMENDATION ENGINE TEST');
console.log('─'.repeat(50));
try {
const testScenarios = [
{ distanceFromSL: 0.01, desc: 'Very close to stop loss (1%)' },
{ distanceFromSL: 0.05, desc: 'Close to stop loss (5%)' },
{ distanceFromSL: 0.15, desc: 'Safe distance from stop loss (15%)' }
];
for (const scenario of testScenarios) {
const recommendation = await learner.getSmartRecommendation({
distanceFromSL: scenario.distanceFromSL,
symbol: 'SOL-PERP',
marketConditions: 'VOLATILE'
});
console.log(`🎯 ${scenario.desc}:`);
console.log(` → Action: ${recommendation.action} (${recommendation.confidence.toFixed(1)}% confidence)`);
console.log(` → Reasoning: ${recommendation.reasoning}`);
}
} catch (e) {
console.log('❌ Recommendation system test failed');
}
// Trading outcomes (actual learning validation)
const outcomes = await prisma.ai_learning_data.findMany({
where: { outcome: { not: null } },
select: { outcome: true, confidenceScore: true }
});
console.log('\n🏆 REAL TRADING VALIDATION');
console.log('─'.repeat(50));
if (outcomes.length > 0) {
const wins = outcomes.filter(o => o.outcome === 'WIN').length;
const total = outcomes.length;
console.log(`✅ Validated Trades: ${total}`);
console.log(`🎯 Success Rate: ${wins}/${total} (${(wins/total*100).toFixed(1)}%)`);
console.log(`🧠 AI is learning from REAL trading outcomes`);
} else {
console.log(`⚠️ No real trading outcomes recorded yet`);
console.log(`📝 AI needs actual trade results to validate its learning`);
}
// Summary insights
console.log('\n💡 KEY LEARNING INSIGHTS');
console.log('─'.repeat(50));
console.log(`🔹 The AI has analyzed ${totalRecords.toLocaleString()} market situations`);
console.log(`🔹 Primary expertise: SOL-PERP trading (${symbolExpertise[0]?._count?.symbol || 0} analyses)`);
console.log(`🔹 Current confidence level: ${avgConfidence.toFixed(1)}% (${evolution > 0 ? 'improving' : 'more cautious than before'})`);
console.log(`🔹 Learning pattern: More analysis → ${evolution > 0 ? 'Higher' : 'Lower'} confidence`);
if (outcomes.length > 0) {
console.log(`🔹 Real trade validation: Active (${outcomes.length} outcomes recorded)`);
} else {
console.log(`🔹 Real trade validation: Pending (needs actual trading results)`);
}
console.log('\n🚀 NEXT STEPS FOR AI ENHANCEMENT');
console.log('─'.repeat(50));
console.log(`📊 Continue real trading to validate AI predictions`);
console.log(`🎯 Monitor confidence evolution as more trades complete`);
console.log(`🧠 AI will learn from win/loss patterns to improve accuracy`);
console.log(`⚡ Current state: Analysis-heavy, validation-light`);
} catch (error) {
console.error('❌ Dashboard error:', error);
} finally {
await prisma.$disconnect();
}
}
createLearningDashboard();