CRITICAL: Fix leveraged trading routing
- Add leverage detection in executeTrade function to route correctly - Leveraged positions (leverage > 1) now route to execute-perp API (Drift Protocol) - Spot trades (leverage = 1) continue to use execute-dex API (Jupiter DEX) - Enhanced success messages to distinguish between spot trades and leveraged positions - Fixes issue where 5x leveraged positions were incorrectly executed as spot swaps - Added proper console logging for debugging trade routing
This commit is contained in:
@@ -488,8 +488,17 @@ export default function AIAnalysisPanel({ onAnalysisComplete }: AIAnalysisPanelP
|
||||
// Trade execution API call
|
||||
const executeTrade = async (tradeData: any) => {
|
||||
try {
|
||||
// Use real DEX trading for manual trades
|
||||
const response = await fetch('/api/trading/execute-dex', {
|
||||
// Determine if this is a leveraged position or spot trade
|
||||
const leverage = parseFloat(tradeData.leverage) || 1
|
||||
const isLeveraged = leverage > 1
|
||||
|
||||
// Route to appropriate API based on leverage
|
||||
const apiEndpoint = isLeveraged ? '/api/trading/execute-perp' : '/api/trading/execute-dex'
|
||||
const tradingMode = isLeveraged ? 'PERP' : 'SPOT'
|
||||
|
||||
console.log(`🎯 Executing ${tradingMode} trade with ${leverage}x leverage via ${apiEndpoint}`)
|
||||
|
||||
const response = await fetch(apiEndpoint, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
@@ -497,9 +506,11 @@ export default function AIAnalysisPanel({ onAnalysisComplete }: AIAnalysisPanelP
|
||||
side: 'BUY', // Could be derived from analysis
|
||||
amount: parseFloat(tradeData.positionSize) || parseFloat(tradeData.size),
|
||||
amountUSD: parseFloat(tradeData.amountUSD || tradeData.positionSize || tradeData.size),
|
||||
leverage: leverage,
|
||||
stopLoss: parseFloat(tradeData.sl),
|
||||
takeProfit: parseFloat(tradeData.tp1), // Use TP1 as primary target
|
||||
useRealDEX: true, // Enable real trading for manual execution
|
||||
tradingMode: tradingMode,
|
||||
tradingPair: `${tradeData.symbol || symbol}/USDC`,
|
||||
quickSwap: false
|
||||
})
|
||||
@@ -508,17 +519,23 @@ export default function AIAnalysisPanel({ onAnalysisComplete }: AIAnalysisPanelP
|
||||
const result = await response.json()
|
||||
|
||||
if (response.ok && result.success) {
|
||||
// Show detailed success message for DEX execution
|
||||
let message = `✅ Real DEX Trade executed successfully!\n\n`
|
||||
// Show detailed success message based on trading type
|
||||
const leverage = parseFloat(tradeData.leverage) || 1
|
||||
const isLeveraged = leverage > 1
|
||||
const tradeType = isLeveraged ? 'Leveraged Position' : 'Spot Trade'
|
||||
const platform = isLeveraged ? 'Drift Protocol' : 'Jupiter DEX'
|
||||
|
||||
let message = `✅ ${tradeType} executed successfully!\n\n`
|
||||
message += `📊 Transaction ID: ${result.trade?.txId || result.txId}\n`
|
||||
message += `💰 Symbol: ${tradeData.symbol || symbol}\n`
|
||||
message += `📈 Size: ${tradeData.positionSize || tradeData.size}\n`
|
||||
message += `🏪 DEX: ${result.trade?.dex || 'Jupiter'}\n`
|
||||
message += `📈 Size: ${tradeData.positionSize || tradeData.size} USDC\n`
|
||||
if (isLeveraged) message += `⚡ Leverage: ${leverage}x\n`
|
||||
message += `🏪 Platform: ${platform}\n`
|
||||
|
||||
if (tradeData.sl) message += `🛑 Stop Loss: $${tradeData.sl}\n`
|
||||
if (tradeData.tp1) message += `🎯 Take Profit: $${tradeData.tp1}\n`
|
||||
|
||||
if (result.trade?.monitoring) {
|
||||
if (result.trade?.monitoring || result.position) {
|
||||
message += `\n🔄 Position monitoring: ACTIVE`
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user