diff --git a/backend/app/crypto_agent/crypto_agent.py b/backend/app/crypto_agent/crypto_agent.py index 4638397..fbf5080 100644 --- a/backend/app/crypto_agent/crypto_agent.py +++ b/backend/app/crypto_agent/crypto_agent.py @@ -1435,7 +1435,15 @@ class CryptoAgent: # 决策信息 decision_type = decision.get('decision', 'HOLD') - decision_reasoning = decision.get('reasoning', reason) + decision_reasoning = decision.get('reasoning', '') + + # 如果有外部传入的 reason(订单创建失败的具体原因),优先使用 + if reason: + final_reason = reason + elif decision_reasoning: + final_reason = decision_reasoning + else: + final_reason = "未知原因" # 方向图标 action = best_signal.get('action', 'wait') @@ -1461,7 +1469,7 @@ class CryptoAgent: f"**当前价格**: ${current_price:,.2f}", f"", f"⚠️ **未执行原因**:", - f"{decision_reasoning}", + f"{final_reason}", ] content = "\n".join(content_parts) @@ -1473,7 +1481,7 @@ class CryptoAgent: message = f"{title}\n\n{content}" await self.telegram.send_message(message) - logger.info(f" 📤 已发送信号未执行通知: {decision_type} - {decision_reasoning[:50]}") + logger.info(f" 📤 已发送信号未执行通知: {decision_type} - {final_reason[:50]}") except Exception as e: logger.warning(f"发送信号未执行通知失败: {e}") diff --git a/backend/app/services/paper_trading_service.py b/backend/app/services/paper_trading_service.py index d4930b6..98a4f73 100644 --- a/backend/app/services/paper_trading_service.py +++ b/backend/app/services/paper_trading_service.py @@ -161,7 +161,9 @@ class PaperTradingService: # 1. 检查总订单数(持仓+挂单)是否超过最大限制 total_orders = len(self.active_orders) if total_orders >= self.max_orders: - logger.info(f"订单限制: 已达到最大订单数 {self.max_orders},跳过") + msg = f"已达到最大订单数限制 ({self.max_orders}个),无法创建新订单" + logger.info(f"订单限制: {msg},跳过") + result['message'] = msg return result # 2. 检查是否有接近的挂单(价格差距 < 1%) @@ -176,13 +178,17 @@ class PaperTradingService: for pending in pending_orders: price_diff = abs(pending.entry_price - entry_price) / pending.entry_price if price_diff < 0.01: # 价格差距小于 1% - logger.info(f"订单限制: {symbol} 已有接近的挂单 @ ${pending.entry_price:,.2f},新信号 @ ${entry_price:,.2f},跳过") + msg = f"已有接近的挂单 @ ${pending.entry_price:,.2f}(价格差距 {price_diff*100:.2f}%)" + logger.info(f"订单限制: {symbol} {msg},新信号 @ ${entry_price:,.2f},跳过") + result['message'] = msg return result # 获取信号等级 grade = signal.get('signal_grade') or signal.get('grade', 'D') if grade == 'D': - logger.info(f"D级信号不开仓: {signal.get('symbol')}") + msg = "D级信号,不符合开仓条件" + logger.info(f"{msg}: {signal.get('symbol')}") + result['message'] = msg return result # === 动态仓位计算 === @@ -200,7 +206,9 @@ class PaperTradingService: margin, position_value = self._calculate_dynamic_position(position_size, symbol) if margin <= 0: - logger.info(f"无可用保证金: {symbol} | 当前杠杆已达上限") + msg = f"保证金不足或已达杠杆上限(当前杠杆已达 {self.leverage}x)" + logger.info(f"{msg}: {symbol}") + result['message'] = msg return result quantity = position_value # 订单数量(以 USDT 计价)