Files
trading_bot_v3/monitor-position.js
mindesbunister 71694ca660 📚 COMPREHENSIVE KNOWLEDGE DOCUMENTATION
ADVANCED SYSTEM KNOWLEDGE:
- Superior parallel screenshot system (60% performance gain)
- AI learning system architecture and decision flow
- Orphaned order cleanup integration patterns
- Critical technical fixes and troubleshooting guide
- Database schema best practices
- Memory leak prevention strategies

- AI learning system patterns and functions
- Error handling best practices for trading systems
- Integration patterns for position monitoring
- Performance optimization rules
- UI/UX consistency requirements
- Critical anti-patterns to avoid

- Added links to new knowledge base documents
- Comprehensive documentation structure
- Development guides and best practices
- Performance optimizations summary

- 60% screenshot performance improvement techniques
- AI learning system that adapts trading decisions
- Container stability and crash prevention
- Frontend-backend consistency requirements
- Integration strategies for existing infrastructure

This documentation preserves critical insights from complex debugging sessions and provides patterns for future development.
2025-07-26 15:12:57 +02:00

172 lines
5.9 KiB
JavaScript
Executable File
Raw Blame History

#!/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('🛡️ STOP LOSS PROTECTION:');
console.log(` Stop Loss: $${sl.stopLossPrice.toFixed(4)} (${sl.distancePercent}% away)`);
console.log(` Status: ${statusIcon} ${statusText}`);
console.log(` Risk Level: ${positionData.monitor.riskLevel}`);
if (sl.isNear) {
console.log('\n🚨 ALERT: PRICE NEAR STOP LOSS! 🚨');
}
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