diff --git a/app/api/trading/execute/route.ts b/app/api/trading/execute/route.ts index 762f9b2..7052579 100644 --- a/app/api/trading/execute/route.ts +++ b/app/api/trading/execute/route.ts @@ -13,6 +13,84 @@ import { getMergedConfig } from '@/config/trading' import { getInitializedPositionManager, ActiveTrade } from '@/lib/trading/position-manager' import { createTrade } from '@/lib/database/trades' +/** + * Calculate signal quality score (same logic as check-risk endpoint) + */ +function calculateQualityScore(params: { + atr?: number + adx?: number + rsi?: number + volumeRatio?: number + pricePosition?: number + direction: 'long' | 'short' +}): number | undefined { + // If no metrics provided, return undefined + if (!params.atr || params.atr === 0) { + return undefined + } + + let score = 50 // Base score + + // ATR check + if (params.atr < 0.6) { + score -= 15 + } else if (params.atr > 2.5) { + score -= 20 + } else { + score += 10 + } + + // ADX check + if (params.adx && params.adx > 0) { + if (params.adx > 25) { + score += 15 + } else if (params.adx < 18) { + score -= 15 + } else { + score += 5 + } + } + + // RSI check + if (params.rsi && params.rsi > 0) { + if (params.direction === 'long') { + if (params.rsi > 50 && params.rsi < 70) { + score += 10 + } else if (params.rsi > 70) { + score -= 10 + } + } else { + if (params.rsi < 50 && params.rsi > 30) { + score += 10 + } else if (params.rsi < 30) { + score -= 10 + } + } + } + + // Volume check + if (params.volumeRatio && params.volumeRatio > 0) { + if (params.volumeRatio > 1.2) { + score += 10 + } else if (params.volumeRatio < 0.8) { + score -= 10 + } + } + + // Price position check + if (params.pricePosition && params.pricePosition > 0) { + if (params.direction === 'long' && params.pricePosition > 90) { + score -= 15 + } else if (params.direction === 'short' && params.pricePosition < 10) { + score -= 15 + } else { + score += 5 + } + } + + return score +} + export interface ExecuteTradeRequest { symbol: string // TradingView symbol (e.g., 'SOLUSDT') direction: 'long' | 'short' @@ -312,6 +390,16 @@ export async function POST(request: NextRequest): Promise