diff --git a/backend/app/crypto_agent/crypto_agent.py b/backend/app/crypto_agent/crypto_agent.py index 20c6cd4..2a735e3 100644 --- a/backend/app/crypto_agent/crypto_agent.py +++ b/backend/app/crypto_agent/crypto_agent.py @@ -731,9 +731,10 @@ class CryptoAgent: paper_decision = self.execute_signal_with_rules( trading_signal, 'PaperTrading', paper_account, paper_positions, paper_pending ) - await self._send_trading_decision_notification( - paper_decision, market_signal, current_price, prefix="[模拟盘]" - ) + # 不发送决策通知(因为是基于硬编码规则的执行,不是 LLM 决策) + # await self._send_trading_decision_notification( + # paper_decision, market_signal, current_price, prefix="[模拟盘]" + # ) else: paper_decision = {"action": "IGNORE", "reason": "未启用"} logger.info(f"⏸️ 模拟盘交易未启用") @@ -745,9 +746,10 @@ class CryptoAgent: hl_decision = self.execute_signal_with_rules( trading_signal, 'Hyperliquid', hl_account, hl_positions, hl_pending ) - await self._send_trading_decision_notification( - hl_decision, market_signal, current_price, prefix="[Hyperliquid]" - ) + # 不发送决策通知(因为是基于硬编码规则的执行,不是 LLM 决策) + # await self._send_trading_decision_notification( + # hl_decision, market_signal, current_price, prefix="[Hyperliquid]" + # ) else: hl_decision = {"action": "IGNORE", "reason": "未启用"} logger.info(f"⏸️ Hyperliquid 实盘交易未启用") @@ -759,9 +761,10 @@ class CryptoAgent: bg_decision = self.execute_signal_with_rules( trading_signal, 'Bitget', bg_account, bg_positions, bg_pending ) - await self._send_trading_decision_notification( - bg_decision, market_signal, current_price, prefix="[Bitget]" - ) + # 不发送决策通知(因为是基于硬编码规则的执行,不是 LLM 决策) + # await self._send_trading_decision_notification( + # bg_decision, market_signal, current_price, prefix="[Bitget]" + # ) else: bg_decision = {"action": "IGNORE", "reason": "未启用"} logger.info(f"⏸️ Bitget 实盘交易未启用") diff --git a/backend/app/crypto_agent/executor/paper_trading_executor.py b/backend/app/crypto_agent/executor/paper_trading_executor.py index 0b4e268..a12117e 100644 --- a/backend/app/crypto_agent/executor/paper_trading_executor.py +++ b/backend/app/crypto_agent/executor/paper_trading_executor.py @@ -34,27 +34,21 @@ class PaperTradingExecutor(BaseExecutor): # 调整保证金(模拟盘无手续费) adjusted_margin = margin - # 执行下单 - if order_type == 'market': - result = self.paper_trading.create_order_from_signal( - symbol=symbol, - action=action, - entry_type='market', - position_value=adjusted_margin * self.paper_trading.leverage, - entry_price=current_price, # 市价单使用当前价格 - stop_loss=stop_loss, - take_profit=take_profit - ) - else: - result = self.paper_trading.create_order_from_signal( - symbol=symbol, - action=action, - entry_type='limit', - position_value=adjusted_margin * self.paper_trading.leverage, - entry_price=entry_price, - stop_loss=stop_loss, - take_profit=take_profit - ) + # 构建信号字典 + signal = { + 'symbol': symbol, + 'action': action, + 'entry_type': order_type, + 'entry_price': entry_price if order_type == 'limit' else current_price, + 'stop_loss': stop_loss, + 'take_profit': take_profit, + } + + # 执行下单(统一调用方式) + result = self.paper_trading.create_order_from_signal( + signal=signal, + current_price=current_price + ) if result.get('success'): order = result.get('order') diff --git a/check_bitget_status.py b/check_bitget_status.py new file mode 100644 index 0000000..9c6103c --- /dev/null +++ b/check_bitget_status.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python3 +""" +Bitget 交易状态诊断脚本(简化版) +仅检查配置文件,不导入服务模块 +""" +import sys +import os +from pathlib import Path + +# 添加后端路径 +backend_path = Path(__file__).parent / 'backend' +sys.path.insert(0, str(backend_path)) + +def check_env_file(): + """检查 .env 文件""" + env_path = Path(__file__).parent / '.env' + + print("=" * 60) + print("🔍 Bitget 交易配置检查") + print("=" * 60) + + if not env_path.exists(): + print("\n❌ .env 文件不存在") + return + + print(f"\n📄 检查 .env 文件: {env_path}") + + with open(env_path, 'r', encoding='utf-8') as f: + lines = f.readlines() + + # 查找 Bitget 相关配置 + bitget_configs = [] + for i, line in enumerate(lines, 1): + line = line.strip() + if line.startswith('BITGET_') or 'bitget' in line.lower(): + # 隐藏敏感信息 + if 'KEY' in line or 'SECRET' in line or 'PASSPHRASE' in line: + key, value = line.split('=', 1) if '=' in line else (line, '') + bitget_configs.append((i, f"{key}=***")) + else: + bitget_configs.append((i, line)) + + if bitget_configs: + print("\n✅ 找到 Bitget 配置:") + for line_num, config in bitget_configs: + print(f" 行 {line_num}: {config}") + else: + print("\n⚠️ 未找到任何 Bitget 相关配置") + + # 检查关键配置项 + print("\n📋 关键配置项检查:") + + env_dict = {} + for line in lines: + line = line.strip() + if '=' in line and not line.startswith('#'): + key, value = line.split('=', 1) + env_dict[key.strip()] = value.strip() + + # 1. BITGET_TRADING_ENABLED + enabled = env_dict.get('BITGET_TRADING_ENABLED', 'false').lower() + print(f" • BITGET_TRADING_ENABLED: {enabled}") + if enabled == 'true': + print(" ⚠️ Bitget 实盘交易: **已启用**") + else: + print(" ✅ Bitget 实盘交易: 未启用") + + # 2. API Keys + api_key = env_dict.get('BITGET_API_KEY', '') + api_secret = env_dict.get('BITGET_API_SECRET', '') + passphrase = env_dict.get('BITGET_PASSPHRASE', '') + + print(f" • BITGET_API_KEY: {'✅ 已配置' if api_key else '❌ 未配置'}") + print(f" • BITGET_API_SECRET: {'✅ 已配置' if api_secret else '❌ 未配置'}") + print(f" • BITGET_PASSPHRASE: {'✅ 已配置' if passphrase else '❌ 未配置'}") + + # 3. 其他配置 + max_leverage = env_dict.get('BITGET_MAX_TOTAL_LEVERAGE', '未设置') + max_position = env_dict.get('BITGET_MAX_SINGLE_POSITION', '未设置') + print(f" • BITGET_MAX_TOTAL_LEVERAGE: {max_leverage}") + print(f" • BITGET_MAX_SINGLE_POSITION: {max_position}") + + # 4. 检查 config.py 默认值 + print("\n📖 检查 config.py 默认值:") + config_path = backend_path / 'app' / 'config.py' + + if config_path.exists(): + with open(config_path, 'r', encoding='utf-8') as f: + config_content = f.read() + + # 查找 bitget_trading_enabled 默认值 + import re + match = re.search(r'bitget_trading_enabled[:\s=]+(?:bool\s*=\s*)?([^\n]+)', config_content) + if match: + default_value = match.group(1).strip() + print(f" • 默认值: {default_value}") + + # 结论 + print("\n" + "=" * 60) + print("📝 诊断结论:") + print("=" * 60) + + if enabled == 'true': + print("\n⚠️ Bitget 实盘交易功能已启用!") + print("\n如果您不想使用实盘交易,请:") + print(" 1. 编辑 .env 文件") + print(" 2. 设置 BITGET_TRADING_ENABLED=false") + print(" 3. 重启后端服务") + else: + print("\n✅ Bitget 实盘交易功能未启用") + print("\n如果您收到了交易通知,可能原因:") + print(" 1. 配置被运行时修改") + print(" 2. 有旧进程仍在运行") + print(" 3. 通知配置错误") + print("\n建议:") + print(" • 检查后端日志: tail -f backend/logs/app.log") + print(" • 重启后端服务: 重启 uvicorn 进程") + + print("=" * 60) + +if __name__ == "__main__": + try: + check_env_file() + except Exception as e: + print(f"\n❌ 诊断失败: {e}") + import traceback + traceback.print_exc()