feat: add retroactive position analysis functionality

New Features:
- 🔍 ANALYZE button to generate AI reasoning for existing positions
- Retroactive AI analysis API endpoint for positions opened outside automation
- Enhanced reasoning display with RETROACTIVE indicator
- Smart position analysis that handles missing stop loss data

- /api/automation/analyze-position endpoint for retroactive analysis
- analyzeExistingPosition() function in automation-v2 UI
- Automatic estimation of stop loss when not visible in position data
- Enhanced AI reasoning panel with retroactive analysis support

- Analyzes entry strategy, risk management, and leverage calculations
- Generates detailed AI reasoning for existing positions
- Shows estimated vs actual stop loss levels
- Calculates risk/reward ratios and leverage estimates
- Displays position status (profitable/underwater) with safety metrics

- RETROACTIVE badge for analyzed existing positions
- Blue 🔍 ANALYZE button in automation controls
- Enhanced reasoning display with position-specific insights
- Comprehensive execution details with estimated vs actual data

Now users can see AI reasoning for any existing position, not just new automation trades!
This commit is contained in:
mindesbunister
2025-07-27 08:59:50 +02:00
parent 167d7ff5bc
commit 6b5b955589
4 changed files with 205 additions and 0 deletions

58
test-position-analysis.js Normal file
View File

@@ -0,0 +1,58 @@
// Test the position analysis functionality
async function testPositionAnalysis() {
console.log('🔍 Testing Position Analysis Functionality...\n');
try {
// Get current position data
console.log('📊 Fetching current position...');
const positionResponse = await fetch('http://localhost:9001/api/automation/position-monitor');
const positionData = await positionResponse.json();
if (positionData.success && positionData.monitor.hasPosition) {
console.log('✅ Position found:', positionData.monitor.position);
// Analyze the position
console.log('\n🧠 Generating AI analysis...');
const analysisResponse = await fetch('http://localhost:9001/api/automation/analyze-position', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
action: 'analyze_existing_position',
positionData: positionData.monitor.position
})
});
const analysisData = await analysisResponse.json();
if (analysisData.success) {
console.log('\n🎯 AI Analysis Generated:');
console.log(`Recommendation: ${analysisData.decision.recommendation}`);
console.log(`Confidence: ${analysisData.decision.confidence}%`);
console.log(`Retroactive: ${analysisData.decision.isRetrospective}`);
console.log('\n📝 Reasoning Preview:');
console.log(analysisData.decision.reasoning.substring(0, 200) + '...');
console.log('\n💰 Execution Details:');
console.log(`Side: ${analysisData.decision.executionDetails.side}`);
console.log(`Amount: $${analysisData.decision.executionDetails.amount}`);
console.log(`Leverage: ${analysisData.decision.executionDetails.leverage}x`);
console.log(`Entry: $${analysisData.decision.executionDetails.currentPrice}`);
console.log(`Stop Loss: $${analysisData.decision.executionDetails.stopLoss}`);
console.log(`Take Profit: $${analysisData.decision.executionDetails.takeProfit.toFixed(2)}`);
console.log('\n✅ Position analysis test completed successfully!');
console.log('📱 Now you can use the "🔍 ANALYZE" button in the UI to see this analysis.');
} else {
console.error('❌ Analysis failed:', analysisData.error);
}
} else {
console.log(' No position found to analyze');
}
} catch (error) {
console.error('❌ Test error:', error.message);
}
}
testPositionAnalysis().catch(console.error);