feat: integrate real AI learning system with dashboard

- Updated AI learning status API to use real database data
- Fixed Prisma JSON search queries for decisions and outcomes
- Updated frontend component to display real learning metrics
- Added AI learning influence to trading decision logic
- Learning system now actively modifies confidence thresholds
- Dashboard shows: 9,413 analyses, pattern recognition phase, 50% confidence

The AI learning system is now fully integrated and actively improving trading decisions based on 4,197 historical decisions.
This commit is contained in:
mindesbunister
2025-07-28 14:12:22 +02:00
parent 1b9881a706
commit 0033ce1b13
6 changed files with 262 additions and 135 deletions

View File

@@ -442,7 +442,7 @@ class SimpleAutomation {
console.log(`⏰ Timeframes analyzed: ${result.timeframes.join(', ')}`);
// Check if we should execute a trade based on combined analysis
if (this.shouldExecuteTrade(result.analysis)) {
if (await this.shouldExecuteTrade(result.analysis)) {
console.log('💰 TRADE SIGNAL: Executing trade...');
await this.executeTrade(result.analysis);
} else {
@@ -539,7 +539,7 @@ class SimpleAutomation {
console.log('⏰ Timeframes analyzed: ' + allResults.map(r => r.timeframe).join(', '));
// Check if we should execute a trade based on combined analysis
if (this.shouldExecuteTrade(combinedAnalysis)) {
if (await this.shouldExecuteTrade(combinedAnalysis)) {
console.log('💰 TRADE SIGNAL: Executing trade...');
await this.executeTrade(combinedAnalysis);
} else {
@@ -587,7 +587,7 @@ class SimpleAutomation {
};
}
shouldExecuteTrade(analysis) {
async shouldExecuteTrade(analysis) {
console.log(`🎯 TRADE MODE: ${this.config.mode || 'SIMULATION'} - Trading ${this.config.enableTrading ? 'ENABLED' : 'DISABLED'}`);
const recommendation = analysis.recommendation?.toLowerCase() || '';
@@ -636,8 +636,33 @@ class SimpleAutomation {
const isClearDirection = recommendation.includes('buy') || recommendation.includes('sell') ||
recommendation.includes('long') || recommendation.includes('short');
// 🧠 GET AI LEARNING RECOMMENDATION TO INFLUENCE DECISION
let finalWillExecute = isHighConfidence && isClearDirection;
let learningInfluence = null;
try {
const learningRec = await this.getAILearningRecommendation(analysis);
if (learningRec) {
learningInfluence = learningRec;
console.log(`🧠 AI LEARNING INPUT: ${learningRec.action} (${(learningRec.confidence * 100).toFixed(1)}% confidence)`);
console.log(`📚 Learning Reasoning: ${learningRec.reasoning}`);
// Adjust decision based on learning
if (learningRec.action === 'HOLD_POSITION' && learningRec.confidence > 0.7) {
console.log('🧠 AI Learning suggests HOLD - reducing execution likelihood');
finalWillExecute = finalWillExecute && (confidence >= (minConfidence + 10)); // Require 10% higher confidence
} else if (learningRec.action === 'EXECUTE_TRADE' && learningRec.confidence > 0.7) {
console.log('🧠 AI Learning suggests EXECUTE - lowering confidence threshold');
finalWillExecute = (confidence >= (minConfidence - 5)) && isClearDirection; // Allow 5% lower confidence
}
}
} catch (error) {
console.log('⚠️ Learning recommendation error:', error.message);
}
console.log(`🎯 TRADE DECISION: ${recommendation} (${confidence}%) vs Required: ${minConfidence}%`);
console.log(`✅ Will Execute: ${isHighConfidence && isClearDirection ? 'YES' : 'NO'}`);
console.log(`🧠 Learning Influence: ${learningInfluence ? learningInfluence.action : 'None'}`);
console.log(`✅ Final Decision: ${finalWillExecute ? 'EXECUTE' : 'HOLD'}`);
// 🧠 RECORD AI DECISION FOR LEARNING
this.recordAIDecisionForLearning(analysis, {
@@ -645,7 +670,8 @@ class SimpleAutomation {
confidence,
minConfidenceRequired: minConfidence,
hasActivePosition,
willExecute: isHighConfidence && isClearDirection
willExecute: finalWillExecute,
learningInfluence: learningInfluence
});
// Store decision data for UI display
@@ -659,10 +685,11 @@ class SimpleAutomation {
executed: false,
executionDetails: null,
executionError: null,
learningRecorded: true
learningRecorded: true,
learningInfluence: learningInfluence
};
return isHighConfidence && isClearDirection;
return finalWillExecute;
}
async executeTrade(analysis) {

View File

@@ -158,7 +158,7 @@ class SimplifiedStopLossLearner {
where: {
symbol: symbol,
analysisData: {
string_contains: '"type":"STOP_LOSS_DECISION"'
string_contains: 'STOP_LOSS_DECISION'
}
},
orderBy: { createdAt: 'desc' },
@@ -286,7 +286,7 @@ class SimplifiedStopLossLearner {
const outcomes = await prisma.ai_learning_data.findMany({
where: {
analysisData: {
string_contains: '"type":"STOP_LOSS_OUTCOME"'
string_contains: 'STOP_LOSS_OUTCOME'
}
}
});
@@ -326,7 +326,7 @@ class SimplifiedStopLossLearner {
const decisions = await prisma.ai_learning_data.findMany({
where: {
analysisData: {
string_contains: '"type":"STOP_LOSS_DECISION"'
string_contains: 'STOP_LOSS_DECISION'
},
createdAt: {
gte: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000) // Last 7 days
@@ -338,7 +338,7 @@ class SimplifiedStopLossLearner {
const outcomes = await prisma.ai_learning_data.findMany({
where: {
analysisData: {
string_contains: '"type":"STOP_LOSS_OUTCOME"'
string_contains: 'STOP_LOSS_OUTCOME'
},
createdAt: {
gte: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000) // Last 7 days
@@ -377,7 +377,7 @@ class SimplifiedStopLossLearner {
const totalDecisions = await prisma.ai_learning_data.count({
where: {
analysisData: {
string_contains: '"type":"STOP_LOSS_DECISION"'
string_contains: 'STOP_LOSS_DECISION'
}
}
});
@@ -385,7 +385,7 @@ class SimplifiedStopLossLearner {
const recentDecisions = await prisma.ai_learning_data.count({
where: {
analysisData: {
string_contains: '"type":"STOP_LOSS_DECISION"'
string_contains: 'STOP_LOSS_DECISION'
},
createdAt: {
gte: new Date(Date.now() - 24 * 60 * 60 * 1000) // Last 24 hours