fix: Enable virtual trading & AI learning - UI improvements and setup guide

- Add comprehensive setup guide (VIRTUAL_TRADING_SETUP_GUIDE.md)
- Improve UI to clearly show required steps for AI learning
- Make auto-execute toggle always visible with clear instructions
- Add blue info panel explaining the learning setup process
- User can now easily enable: Continuous Learning + Auto-Execute
- Virtual trades will execute automatically and AI will learn from outcomes

Resolves issue: AI analyzing without learning due to missing virtual trade execution
This commit is contained in:
mindesbunister
2025-08-05 10:23:12 +02:00
parent 53e8faf903
commit d7de856ce0
15 changed files with 2474 additions and 1481 deletions

View File

@@ -1,96 +1,129 @@
import { NextResponse } from 'next/server'
// PAPER_TRADING_ONLY: This API is completely isolated from live trading
// ISOLATED_MODE: No real trading connections or automation triggers allowed
// SAFETY: This API cannot execute real trades or trigger automation systems
import { NextResponse } from "next/server";
export async function POST(request) {
try {
console.log('🛡️ SAFE PAPER TRADING API: Starting REAL analysis (paper trading only)...')
console.log("🛡️ SAFE PAPER TRADING API: Starting REAL analysis (paper trading only)...");
const body = await request.json()
const { symbol = 'SOLUSD', timeframe = '60', mode, paperTrading, isolatedMode } = body
const body = await request.json();
const {
symbol = "SOLUSD",
selectedTimeframes = ["60"],
timeframe = "60",
mode,
paperTrading,
isolatedMode,
isContinuous = false
} = body;
// SAFETY CHECK: Ensure this is paper trading only
if (mode !== 'PAPER_ONLY' || !paperTrading || !isolatedMode) {
const timeframesToAnalyze = selectedTimeframes.length > 0 ? selectedTimeframes : [timeframe];
if (mode !== "PAPER_ONLY" || !paperTrading || !isolatedMode) {
return NextResponse.json({
success: false,
error: 'SAFETY VIOLATION: This API only supports isolated paper trading',
safetyBlock: true
}, { status: 403 })
error: "SAFETY VIOLATION: This API only supports isolated paper trading"
}, { status: 403 });
}
console.log(`📊 Getting REAL market analysis for ${symbol} ${timeframe}m (paper trading only)...`)
console.log(`📊 Getting REAL market analysis for ${symbol} on timeframes: ${timeframesToAnalyze.join(", ")} (${isContinuous ? "continuous learning" : "manual"})`);
// STEP 1: Capture real market screenshots
const { EnhancedScreenshotService } = await import('../../../lib/enhanced-screenshot')
const screenshotService = new EnhancedScreenshotService()
const analysis = await getRealAnalysis({ symbol, selectedTimeframes: timeframesToAnalyze, isContinuous });
console.log('🔄 Capturing real market screenshots...')
const screenshots = await screenshotService.captureWithLogin({
symbol,
timeframe,
layouts: ['ai', 'diy'],
sessionId: `paper_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`
})
if (!screenshots || screenshots.length === 0) {
throw new Error('Failed to capture market screenshots')
}
console.log(`✅ Captured ${screenshots.length} real market screenshots`)
// STEP 2: Analyze screenshots with AI
const { aiAnalysisService } = await import('../../../lib/ai-analysis')
console.log('🤖 Analyzing screenshots with AI...')
let analysis
if (screenshots.length === 1) {
analysis = await aiAnalysisService.analyzeScreenshot(screenshots[0])
} else {
analysis = await aiAnalysisService.analyzeMultipleScreenshots(screenshots)
}
if (!analysis) {
throw new Error('Failed to get real market analysis')
}
console.log('✅ Real market analysis complete - REAL DATA, NO TRADING RISK')
console.log("✅ Safe paper analysis complete - REAL DATA, NO TRADING RISK");
return NextResponse.json({
success: true,
analysis: {
...analysis,
// Override safety flags for paper trading
paperTrading: true,
isolated: true,
noRealTrading: true,
realData: true,
source: 'REAL_MARKET_ANALYSIS',
// Remove any mock data flags
mockData: false,
reasoning: `PAPER TRADING - REAL MARKET ANALYSIS:\n\n${analysis.reasoning || 'Real market analysis completed'}\n\n⚠️ SAFETY: This is paper trading only - no real trades will be executed.`
source: "REAL_MARKET_ANALYSIS",
timeframes: timeframesToAnalyze,
analysisMode: isContinuous ? "CONTINUOUS_LEARNING" : "MANUAL"
},
safety: {
paperTrading: true,
isolated: true,
noRealTrading: true,
realData: true,
source: 'REAL_MARKET_ANALYSIS'
source: "REAL_MARKET_ANALYSIS"
},
screenshots: screenshots.length,
timestamp: new Date().toISOString()
})
});
} catch (error) {
console.error('❌ Safe paper trading API error:', error)
console.error("❌ Safe paper trading API error:", error);
// NO FALLBACK TO MOCK DATA - Only real data allowed
return NextResponse.json({
success: false,
error: `Real analysis failed: ${error.message}`,
details: 'Paper trading requires real market data. Please try again.',
details: "Paper trading requires real market data. Please try again.",
realDataOnly: true
}, { status: 500 })
}, { status: 500 });
}
}
async function getRealAnalysis(config) {
try {
const { symbol, selectedTimeframes, isContinuous = false } = config;
const primaryTimeframe = selectedTimeframes[0];
console.log(`<EFBFBD> Attempting to get real analysis for ${symbol} ${primaryTimeframe}m (${selectedTimeframes.length} timeframes)...`);
const analysisUrl = `http://localhost:3000/api/ai-analysis/latest?symbol=${symbol}&timeframe=${primaryTimeframe}`;
console.log(`📡 Calling: ${analysisUrl}`);
const response = await fetch(analysisUrl, {
headers: {
"Content-Type": "application/json"
},
signal: AbortSignal.timeout(180000)
});
console.log(`📡 Response status: ${response.status}`);
if (!response.ok) {
const errorText = await response.text();
console.error(`❌ Analysis API error: ${response.status} - ${errorText}`);
throw new Error(`Analysis API returned ${response.status}: ${errorText}`);
}
const data = await response.json();
console.log(`📊 Raw analysis response received`);
if (!data.success || !data.data?.analysis) {
console.error("❌ No analysis data in response:", data);
throw new Error("No analysis data received from API");
}
const realAnalysis = data.data.analysis;
console.log(`✅ Real analysis received: ${realAnalysis.recommendation} with ${realAnalysis.confidence}% confidence`);
return {
...realAnalysis,
paperTrading: true,
isolated: true,
noRealTrading: true,
realData: true,
source: "REAL_MARKET_ANALYSIS",
timeframes: selectedTimeframes,
primaryTimeframe: primaryTimeframe,
analysisMode: isContinuous ? "CONTINUOUS_LEARNING" : "MANUAL",
reasoning: `PAPER TRADING - REAL MARKET ANALYSIS${isContinuous ? " (Continuous Learning)" : ""}:
Multi-Timeframe Analysis: ${selectedTimeframes.join(", ")}
Primary Focus: ${primaryTimeframe}m
${realAnalysis.reasoning || "Real market analysis completed"}
SAFETY: This is paper trading only - no real trades will be executed.
${isContinuous ? "<22> LEARNING: System is continuously learning from market patterns." : ""}`
};
} catch (error) {
console.error("❌ Failed to get real analysis:", error.message);
console.error("❌ Error details:", error);
throw error;
}
}