Features Added: - 🤖 Autonomous AI Risk Management System - 🛡️ Smart Stop Loss Proximity Monitoring - 📊 Real-time Position Monitor with Dark Theme - 🚨 Emergency Stop Buttons on All Pages - 🏖️ Full Beach Mode Operation - Emergency exit analysis (< 1% from SL) - Position review and adjustments (1-2% from SL) - Enhanced monitoring (2-5% from SL) - Opportunity scanning (> 5% from SL) - Beautiful dark theme Position Monitor - Emergency stop buttons on automation pages - Real-time P&L tracking with trend indicators - Beach mode demo script - Autonomous risk manager integration - Position monitoring API endpoints - Enhanced automation with AI leverage calculator - CLI monitoring tools with enhanced display Now you can truly relax on the beach while your AI handles everything! 🏖️🤖💰
184 lines
6.4 KiB
JavaScript
Executable File
184 lines
6.4 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
||
|
||
/**
|
||
* Real-time Position & Automation Monitor
|
||
*
|
||
* Enhanced with:
|
||
* - Real-time P&L tracking
|
||
* - Stop loss alerts
|
||
* - Analysis progress indicators
|
||
* - Performance metrics
|
||
*/
|
||
|
||
const baseUrl = 'http://localhost:9001';
|
||
let startTime = Date.now();
|
||
let lastPnl = null;
|
||
let alertSound = false;
|
||
|
||
async function fetchData(endpoint) {
|
||
try {
|
||
const response = await fetch(`${baseUrl}${endpoint}`);
|
||
return await response.json();
|
||
} catch (error) {
|
||
return { error: error.message };
|
||
}
|
||
}
|
||
|
||
function getRunningTime() {
|
||
const elapsed = Date.now() - startTime;
|
||
const minutes = Math.floor(elapsed / 60000);
|
||
const seconds = Math.floor((elapsed % 60000) / 1000);
|
||
return `${minutes}m ${seconds}s`;
|
||
}
|
||
|
||
function getPnlTrend(currentPnl) {
|
||
if (lastPnl === null) {
|
||
lastPnl = currentPnl;
|
||
return '';
|
||
}
|
||
|
||
const diff = currentPnl - lastPnl;
|
||
lastPnl = currentPnl;
|
||
|
||
if (Math.abs(diff) < 0.01) return ' ➡️';
|
||
return diff > 0 ? ' 📈' : ' 📉';
|
||
}
|
||
|
||
async function monitor() {
|
||
console.clear();
|
||
console.log('🔍 TRADING BOT POSITION MONITOR');
|
||
console.log('=' .repeat(60));
|
||
console.log(`⏰ ${new Date().toLocaleString()} | Running: ${getRunningTime()}\n`);
|
||
|
||
// Get position status
|
||
const positionData = await fetchData('/api/automation/position-monitor');
|
||
|
||
if (positionData.success && positionData.monitor.hasPosition) {
|
||
const pos = positionData.monitor.position;
|
||
const sl = positionData.monitor.stopLossProximity;
|
||
const trend = getPnlTrend(pos.unrealizedPnl);
|
||
|
||
console.log('📊 ACTIVE POSITION:');
|
||
console.log(` ${pos.symbol} | ${pos.side.toUpperCase()} | ${pos.size} SOL`);
|
||
console.log(` Entry: $${pos.entryPrice.toFixed(4)} → Current: $${pos.currentPrice.toFixed(4)}`);
|
||
console.log(` P&L: ${pos.unrealizedPnl >= 0 ? '🟢 +' : '🔴 '}$${pos.unrealizedPnl.toFixed(2)}${trend}`);
|
||
console.log(` Value: $${pos.notionalValue.toFixed(2)}`);
|
||
console.log('');
|
||
|
||
// Enhanced stop loss display
|
||
const distanceNum = parseFloat(sl.distancePercent);
|
||
let statusIcon = '✅';
|
||
let statusText = 'SAFE';
|
||
|
||
if (distanceNum <= 2) {
|
||
statusIcon = '🚨';
|
||
statusText = 'DANGER - VERY CLOSE';
|
||
} else if (distanceNum <= 5) {
|
||
statusIcon = '⚠️';
|
||
statusText = 'WARNING - APPROACHING';
|
||
} else if (distanceNum <= 10) {
|
||
statusIcon = '🟡';
|
||
statusText = 'CAUTION - MONITOR';
|
||
}
|
||
|
||
console.log('🤖 AI AUTONOMOUS RISK MANAGEMENT:');
|
||
console.log(` Stop Loss: $${sl.stopLossPrice.toFixed(4)} (${sl.distancePercent}% away)`);
|
||
console.log(` Status: ${statusIcon} ${statusText}`);
|
||
|
||
// AI Action Display
|
||
const aiActions = {
|
||
'DANGER - VERY CLOSE': '🚨 AI: Executing emergency analysis',
|
||
'WARNING - APPROACHING': '⚠️ AI: Reviewing position for adjustments',
|
||
'CAUTION - MONITOR': '🟡 AI: Enhanced monitoring active',
|
||
'SAFE': '✅ AI: Scanning for new opportunities'
|
||
};
|
||
|
||
const aiAction = aiActions[statusText] || '🤖 AI: Autonomous operation';
|
||
console.log(` AI Action: ${aiAction}`);
|
||
console.log(` Beach Mode: ${'🏖️ ACTIVE - No manual intervention needed'}`);
|
||
|
||
if (sl.isNear) {
|
||
console.log('\n🤖 AI AUTONOMOUS ACTION: Risk management protocols activated!');
|
||
console.log(' 🏖️ Relax - Your AI is handling this autonomously');
|
||
}
|
||
console.log('');
|
||
|
||
} else if (positionData.success) {
|
||
console.log('📊 NO OPEN POSITIONS');
|
||
console.log(' Status: Scanning for opportunities...');
|
||
console.log('');
|
||
} else {
|
||
console.log('❌ CONNECTION ERROR');
|
||
console.log(' Check if trading bot is running on port 9001');
|
||
console.log('');
|
||
}
|
||
|
||
// Enhanced automation status
|
||
const autoStatus = await fetchData('/api/automation/status');
|
||
|
||
if (autoStatus.isActive) {
|
||
console.log('🤖 AUTOMATION ENGINE:');
|
||
console.log(` Status: ✅ ACTIVE (${autoStatus.mode})`);
|
||
console.log(` Strategy: ${autoStatus.automationType || 'Scalping'}`);
|
||
console.log(` Markets: ${autoStatus.symbol} [${autoStatus.timeframes?.join(', ') || 'N/A'}]`);
|
||
console.log(` Performance: ${autoStatus.totalCycles} cycles, ${autoStatus.totalTrades} trades`);
|
||
|
||
if (autoStatus.lastActivity) {
|
||
const lastSeen = new Date(autoStatus.lastActivity);
|
||
const timeSince = Math.floor((Date.now() - lastSeen.getTime()) / 1000);
|
||
const activityStatus = timeSince < 180 ? '🟢 Active' : '🟡 Quiet';
|
||
console.log(` Last Activity: ${activityStatus} (${timeSince}s ago)`);
|
||
}
|
||
|
||
// Error monitoring
|
||
if (autoStatus.consecutiveErrors > 0) {
|
||
const errorLevel = autoStatus.consecutiveErrors >= 2 ? '🔴' : '🟡';
|
||
console.log(` ${errorLevel} Errors: ${autoStatus.consecutiveErrors}/3 consecutive`);
|
||
}
|
||
|
||
// Analysis status (if running for long time)
|
||
const timeSince = autoStatus.lastActivity ?
|
||
Math.floor((Date.now() - new Date(autoStatus.lastActivity).getTime()) / 1000) : 0;
|
||
|
||
if (timeSince > 60 && timeSince < 300) {
|
||
console.log(` 🔄 Likely analyzing... (${timeSince}s since last update)`);
|
||
}
|
||
|
||
} else {
|
||
console.log('🤖 AUTOMATION ENGINE: ❌ OFFLINE');
|
||
console.log(` Status: ${autoStatus.detailedStatus || 'Stopped'}`);
|
||
console.log(` Action: ${autoStatus.nextAction || 'Start automation to begin'}`);
|
||
}
|
||
|
||
console.log('');
|
||
console.log('<27> CONTROLS:');
|
||
console.log(' • Ctrl+C: Stop monitor • Updates every 8 seconds');
|
||
console.log(' • Real-time P&L tracking • Stop loss proximity alerts');
|
||
console.log('-'.repeat(60));
|
||
}
|
||
|
||
// Graceful shutdown
|
||
process.on('SIGINT', () => {
|
||
console.clear();
|
||
console.log('🔍 TRADING BOT MONITOR - SESSION COMPLETE');
|
||
console.log('=' .repeat(60));
|
||
console.log('');
|
||
console.log('📊 Session Summary:');
|
||
console.log(` Duration: ${getRunningTime()}`);
|
||
console.log(` Last P&L: ${lastPnl ? `$${lastPnl.toFixed(2)}` : 'No position tracked'}`);
|
||
console.log('');
|
||
console.log('💡 Quick Commands:');
|
||
console.log(' ./monitor-position.js - Start monitor again');
|
||
console.log(' curl localhost:9001/api/automation/status | jq . - Quick status');
|
||
console.log(' docker logs trading_bot -f - View live logs');
|
||
console.log('');
|
||
console.log('<27> Thank you for monitoring responsibly!');
|
||
console.log('');
|
||
process.exit(0);
|
||
});
|
||
|
||
// Start monitoring
|
||
console.log('🚀 Initializing position monitor...');
|
||
monitor();
|
||
const monitorInterval = setInterval(monitor, 8000); // Update every 8 seconds
|