Files
trading_bot_v3/analyze-trade-data.js
mindesbunister 08970acc85 fix: eliminate excessive P&L calculations and restore CoinGecko price source
- Fixed Prisma table name errors in price-monitor.ts (trades vs trade, automation_sessions vs automationSession)
- Commented out excessive P&L calculation logging in analysis-details API that was processing all 69 trades
- Restored CoinGecko as primary price source (was falling back to Binance due to DB errors)
- Optimized analysis-details to skip P&L calculations for FAILED/EXECUTED trades
- Added comprehensive cleanup system for orphaned orders
- Performance improvement: eliminated unnecessary processing of old trade data

Result: Clean logs, efficient price fetching from CoinGecko, no excessive calculations
2025-07-28 13:45:17 +02:00

96 lines
2.7 KiB
JavaScript

const { PrismaClient } = require('@prisma/client');
async function analyzeOldTrades() {
const prisma = new PrismaClient();
try {
console.log('🔍 Analyzing trade data in database...\n');
// Count total trades
const totalTrades = await prisma.trades.count();
console.log('📊 Total trades in database:', totalTrades);
// Count by status
const tradesByStatus = await prisma.trades.groupBy({
by: ['status'],
_count: {
status: true
}
});
console.log('\n📈 Trades by status:');
tradesByStatus.forEach(group => {
console.log(` ${group.status}: ${group._count.status} trades`);
});
// Find oldest and newest trades
const oldestTrade = await prisma.trades.findFirst({
orderBy: { createdAt: 'asc' },
select: { createdAt: true, symbol: true, status: true }
});
const newestTrade = await prisma.trades.findFirst({
orderBy: { createdAt: 'desc' },
select: { createdAt: true, symbol: true, status: true }
});
console.log('\n⏰ Trade age range:');
if (oldestTrade) {
console.log(' Oldest:', oldestTrade.createdAt, '-', oldestTrade.symbol, '-', oldestTrade.status);
}
if (newestTrade) {
console.log(' Newest:', newestTrade.createdAt, '-', newestTrade.symbol, '-', newestTrade.status);
}
// Count trades older than 30 days
const thirtyDaysAgo = new Date();
thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30);
const oldTrades = await prisma.trades.count({
where: {
createdAt: {
lt: thirtyDaysAgo
}
}
});
console.log(`\n🗓️ Trades older than 30 days: ${oldTrades} (${((oldTrades/totalTrades)*100).toFixed(1)}%)`);
// Count currently open trades
const openTrades = await prisma.trades.count({
where: {
status: 'open'
}
});
console.log(`\n🔴 Currently open trades: ${openTrades}`);
if (openTrades > 0) {
const openTradeDetails = await prisma.trades.findMany({
where: { status: 'open' },
select: {
id: true,
symbol: true,
side: true,
amount: true,
price: true,
createdAt: true
},
orderBy: { createdAt: 'desc' }
});
console.log('\n📋 Open trade details:');
openTradeDetails.forEach(trade => {
console.log(` ${trade.id}: ${trade.side} ${trade.amount} ${trade.symbol} @ $${trade.price} (${trade.createdAt})`);
});
}
} catch (error) {
console.error('❌ Error analyzing trades:', error);
} finally {
await prisma.$disconnect();
}
}
analyzeOldTrades().catch(console.error);