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
|
// Trade execution API call
|
||||||
const executeTrade = async (tradeData: any) => {
|
const executeTrade = async (tradeData: any) => {
|
||||||
try {
|
try {
|
||||||
// Use real DEX trading for manual trades
|
// Determine if this is a leveraged position or spot trade
|
||||||
const response = await fetch('/api/trading/execute-dex', {
|
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',
|
method: 'POST',
|
||||||
headers: { 'Content-Type': 'application/json' },
|
headers: { 'Content-Type': 'application/json' },
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
@@ -497,9 +506,11 @@ export default function AIAnalysisPanel({ onAnalysisComplete }: AIAnalysisPanelP
|
|||||||
side: 'BUY', // Could be derived from analysis
|
side: 'BUY', // Could be derived from analysis
|
||||||
amount: parseFloat(tradeData.positionSize) || parseFloat(tradeData.size),
|
amount: parseFloat(tradeData.positionSize) || parseFloat(tradeData.size),
|
||||||
amountUSD: parseFloat(tradeData.amountUSD || tradeData.positionSize || tradeData.size),
|
amountUSD: parseFloat(tradeData.amountUSD || tradeData.positionSize || tradeData.size),
|
||||||
|
leverage: leverage,
|
||||||
stopLoss: parseFloat(tradeData.sl),
|
stopLoss: parseFloat(tradeData.sl),
|
||||||
takeProfit: parseFloat(tradeData.tp1), // Use TP1 as primary target
|
takeProfit: parseFloat(tradeData.tp1), // Use TP1 as primary target
|
||||||
useRealDEX: true, // Enable real trading for manual execution
|
useRealDEX: true, // Enable real trading for manual execution
|
||||||
|
tradingMode: tradingMode,
|
||||||
tradingPair: `${tradeData.symbol || symbol}/USDC`,
|
tradingPair: `${tradeData.symbol || symbol}/USDC`,
|
||||||
quickSwap: false
|
quickSwap: false
|
||||||
})
|
})
|
||||||
@@ -508,17 +519,23 @@ export default function AIAnalysisPanel({ onAnalysisComplete }: AIAnalysisPanelP
|
|||||||
const result = await response.json()
|
const result = await response.json()
|
||||||
|
|
||||||
if (response.ok && result.success) {
|
if (response.ok && result.success) {
|
||||||
// Show detailed success message for DEX execution
|
// Show detailed success message based on trading type
|
||||||
let message = `✅ Real DEX Trade executed successfully!\n\n`
|
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 += `📊 Transaction ID: ${result.trade?.txId || result.txId}\n`
|
||||||
message += `💰 Symbol: ${tradeData.symbol || symbol}\n`
|
message += `💰 Symbol: ${tradeData.symbol || symbol}\n`
|
||||||
message += `📈 Size: ${tradeData.positionSize || tradeData.size}\n`
|
message += `📈 Size: ${tradeData.positionSize || tradeData.size} USDC\n`
|
||||||
message += `🏪 DEX: ${result.trade?.dex || 'Jupiter'}\n`
|
if (isLeveraged) message += `⚡ Leverage: ${leverage}x\n`
|
||||||
|
message += `🏪 Platform: ${platform}\n`
|
||||||
|
|
||||||
if (tradeData.sl) message += `🛑 Stop Loss: $${tradeData.sl}\n`
|
if (tradeData.sl) message += `🛑 Stop Loss: $${tradeData.sl}\n`
|
||||||
if (tradeData.tp1) message += `🎯 Take Profit: $${tradeData.tp1}\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`
|
message += `\n🔄 Position monitoring: ACTIVE`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user