diff --git a/app/api/trading/check-risk/route.ts b/app/api/trading/check-risk/route.ts index 0ddf277..4cdc147 100644 --- a/app/api/trading/check-risk/route.ts +++ b/app/api/trading/check-risk/route.ts @@ -8,7 +8,7 @@ import { NextRequest, NextResponse } from 'next/server' import { getMergedConfig } from '@/config/trading' import { getInitializedPositionManager } from '@/lib/trading/position-manager' -import { getLastTradeTime, getTradesInLastHour, getTodayPnL } from '@/lib/database/trades' +import { getLastTradeTime, getLastTradeTimeForSymbol, getTradesInLastHour, getTodayPnL } from '@/lib/database/trades' export interface RiskCheckRequest { symbol: string @@ -118,18 +118,18 @@ export async function POST(request: NextRequest): Promise 0) { - const timeSinceLastTrade = Date.now() - lastTradeTime.getTime() + // 3. Check cooldown period PER SYMBOL (not global) + const lastTradeTimeForSymbol = await getLastTradeTimeForSymbol(body.symbol) + if (lastTradeTimeForSymbol && config.minTimeBetweenTrades > 0) { + const timeSinceLastTrade = Date.now() - lastTradeTimeForSymbol.getTime() const cooldownMs = config.minTimeBetweenTrades * 60 * 1000 // Convert minutes to milliseconds if (timeSinceLastTrade < cooldownMs) { const remainingMs = cooldownMs - timeSinceLastTrade const remainingMinutes = Math.ceil(remainingMs / 60000) - console.log('🚫 Risk check BLOCKED: Cooldown period active', { - lastTradeTime: lastTradeTime.toISOString(), + console.log('🚫 Risk check BLOCKED: Cooldown period active for', body.symbol, { + lastTradeTime: lastTradeTimeForSymbol.toISOString(), timeSinceLastTradeMs: timeSinceLastTrade, cooldownMs, remainingMinutes, @@ -138,7 +138,7 @@ export async function POST(request: NextRequest): Promise { } } +/** + * Get the most recent trade time for a specific symbol + */ +export async function getLastTradeTimeForSymbol(symbol: string): Promise { + const prisma = getPrismaClient() + + try { + const lastTrade = await prisma.trade.findFirst({ + where: { symbol }, + orderBy: { entryTime: 'desc' }, + select: { entryTime: true }, + }) + + return lastTrade?.entryTime || null + } catch (error) { + console.error(`❌ Failed to get last trade time for ${symbol}:`, error) + return null + } +} + /** * Get the most recent trade with full details */