Files

1 line
49 KiB
JSON

{"repo": "babybearai/atr", "files": {"ai_models/deepseek_trader.py": {"a77f7c58cc6224655ddfb2643da3272eef08e19c": {"t": 1785746644.3468297, "n": 20922, "h": "e90b424b330ed1a8", "c": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\"\"\"\nDeepSeek v3.1交易模型实现\n\"\"\"\n\nimport asyncio\nimport json\nfrom datetime import datetime\nfrom typing import Dict, List, Optional, Any\nfrom loguru import logger\n\ntry:\n import requests\nexcept ImportError:\n logger.warning(\"⚠️ requests库未安装,DeepSeek模型将无法使用\")\n requests = None\n\nfrom .base_model import BaseAIModel, TradingDecision, MarketAnalysis\nfrom config.settings import Settings\n\n\nclass DeepSeekTrader(BaseAIModel):\n \"\"\"基于DeepSeek v3.1的交易模型\"\"\"\n \n def __init__(self, name: str = \"DeepSeek-Trader\", config: Dict[str, Any] = None):\n if config is None:\n config = Settings.AI_MODELS.get('deepseek-v3', {})\n \n super().__init__(name, config)\n \n self.api_key = None\n self.model_name = config.get('model_name', 'deepseek-chat')\n self.max_tokens = config.get('max_tokens', 2000)\n self.temperature = config.get('temperature', 0.1)\n \n # DeepSeek特有的交易策略参数\n self.trading_style = config.get('trading_style', 'quantitative') # quantitative, fundamental, technical\n self.analysis_depth = config.get('analysis_depth', 'deep') # shallow, medium, deep\n self.risk_tolerance = config.get('risk_tolerance', 'moderate') # conservative, moderate, aggressive\n \n # API配置\n self.api_base_url = \"https://api.deepseek.com/v1/chat/completions\"\n \n # 系统提示词\n self.system_prompt = self._build_system_prompt()\n \n async def initialize(self) -> bool:\n \"\"\"初始化DeepSeek模型\"\"\"\n try:\n if requests is None:\n logger.error(\"❌ requests库未安装\")\n return False\n \n # 获取API密钥\n self.api_key = Settings.get_api_key('DEEPSEEK_API_KEY')\n if not self.api_key:\n logger.error(\"❌ 未找到DeepSeek API密钥\")\n return False\n \n # 测试API连接\n await self._test_api_connection()\n \n self.is_active = True\n logger.info(f\"✅ {self.name} 初始化成功\")\n return True\n \n except Exception as e:\n logger.error(f\"❌ {self.name} 初始化失败: {e}\")\n return False\n \n async def _test_api_connection(self):\n \"\"\"测试API连接\"\"\"\n try:\n test_payload = {\n \"model\": self.model_name,\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"Hello, test connection.\"\n }\n ],\n \"max_tokens\": 10,\n \"temperature\": 0.1\n }\n \n headers = {\n \"Authorization\": f\"Bearer {self.api_key}\",\n \"Content-Type\": \"application/json\"\n }\n \n # 在线程池中执行同步请求\n loop = asyncio.get_event_loop()\n response = await loop.run_in_executor(\n None,\n lambda: requests.post(\n self.api_base_url,\n headers=headers,\n json=test_payload,\n timeout=30\n )\n )\n \n if response.status_code == 200:\n result = response.json()\n if result.get('choices'):\n logger.info(f\"🔗 {self.name} API连接测试成功\")\n else:\n raise Exception(\"API响应格式异常\")\n else:\n raise Exception(f\"API请求失败: {response.status_code} - {response.text}\")\n \n except Exception as e:\n raise Exception(f\"API连接测试失败: {e}\")\n \n async def analyze_market(self, market_data: Dict[str, Any]) -> Dict[str, MarketAnalysis]:\n \"\"\"分析市场数据\"\"\"\n try:\n analyses = {}\n \n # DeepSeek的策略:深度量化分析,数据驱动决策\n symbols_to_analyze = self._select_analysis_targets(market_data)\n \n for symbol in symbols_to_analyze:\n if symbol in ['sentiment', 'QQQ', 'SPY', 'VIX']:\n continue\n \n stock_data = market_data.get(symbol, {})\n if not stock_data:\n continue\n \n analysis = await self._analyze_single_stock(symbol, stock_data, market_data)\n if analysis:\n analyses[symbol] = analysis\n \n return analyses\n \n except Exception as e:\n logger.error(f\"❌ {self.name} 市场分析失败: {e}\")\n return {}\n \n def _select_analysis_targets(self, market_data: Dict[str, Any]) -> List[str]:\n \"\"\"选择分析目标股票\"\"\"\n # DeepSeek的策略:量化选股,关注数据质量和流动性\n priority_stocks = {\n 'quantitative': ['AAPL', 'MSFT', 'GOOGL', 'AMZN', 'TSLA', 'META', 'NVDA', 'NFLX', 'AMD', 'QCOM'],\n 'fundamental': ['AAPL', 'MSFT', 'GOOGL', 'BRK.B', 'JNJ', 'PG', 'KO', 'WMT'],\n 'technical': ['TSLA', 'NVDA', 'AMD', 'NFLX', 'ZOOM', 'SQ', 'ROKU', 'SHOP']\n }\n \n target_stocks = priority_stocks.get(self.trading_style, priority_stocks['quantitative'])\n \n # 只选择有数据的股票\n available_stocks = [s for s in target_stocks if s in market_data]\n \n # 根据分析深度限制数量\n max_stocks = {\n 'shallow': 8,\n 'medium': 12,\n 'deep': 16\n }\n \n limit = max_stocks.get(self.analysis_depth, 12)\n return available_stocks[:limit]\n \n async def _analyze_single_stock(self, symbol: str, stock_data: Dict, market_data: Dict) -> Optional[MarketAnalysis]:\n \"\"\"分析单只股票\"\"\"\n try:\n # 构建深度分析提示\n analysis_prompt = self._build_analysis_prompt(symbol, stock_data, market_data)\n \n # 调用DeepSeek进行分析\n response_text = await self._call_deepseek_api(analysis_prompt)\n \n if not response_text:\n return None\n \n # 解析响应\n analysis = self._parse_analysis_response(symbol, response_text)\n \n return analysis\n \n except Exception as e:\n logger.error(f\"❌ 分析 {symbol} 失败: {e}\")\n return None\n \n async def make_trading_decision(self, market_data: Dict[str, Any]) -> Optional[TradingDecision]:\n \"\"\"做出交易决策\"\"\"\n try:\n if not await self.should_trade(market_data):\n return None\n \n # 进行市场分析\n market_analyses = await self.analyze_market(market_data)\n \n if not market_analyses:\n logger.warning(f\"⚠️ {self.name}: 没有可用的市场分析\")\n return None\n \n # 构建交易决策提示\n decision_prompt = self._build_decision_prompt(market_analyses, market_data)\n \n # 调用DeepSeek做出交易决策\n response_text = await self._call_deepseek_api(decision_prompt)\n \n if not response_text:\n return None\n \n # 解析交易决策\n decision = self._parse_decision_response(response_text, market_data)\n \n if decision:\n logger.info(\n f\"🤖 {self.name} 交易决策: {decision.action} {decision.symbol} \"\n f\"x{decision.quantity} (置信度: {decision.confidence:.2f})\"\n )\n \n return decision\n \n except Exception as e:\n logger.error(f\"❌ {self.name} 交易决策失败: {e}\")\n return None\n \n async def _call_deepseek_api(self, prompt: str) -> Optional[str]:\n \"\"\"调用DeepSeek API\"\"\"\n try:\n payload = {\n \"model\": self.model_name,\n \"messages\": [\n {\n \"role\": \"system\",\n \"content\": self.system_prompt\n },\n {\n \"role\": \"user\",\n \"content\": prompt\n }\n ],\n \"max_tokens\": self.max_tokens,\n \"temperature\": self.temperature,\n \"top_p\": 0.9,\n \"frequency_penalty\": 0.1,\n \"presence_penalty\": 0.1\n }\n \n headers = {\n \"Authorization\": f\"Bearer {self.api_key}\",\n \"Content-Type\": \"application/json\"\n }\n \n # 在线程池中执行同步请求\n loop = asyncio.get_event_loop()\n response = await loop.run_in_executor(\n None,\n lambda: requests.post(\n self.api_base_url,\n headers=headers,\n json=payload,\n timeout=60\n )\n )\n \n if response.status_code == 200:\n result = response.json()\n choices = result.get('choices', [])\n if choices:\n return choices[0].get('message', {}).get('content', '')\n else:\n logger.error(f\"❌ DeepSeek API响应格式异常: {result}\")\n return None\n else:\n logger.error(f\"❌ DeepSeek API请求失败: {response.status_code} - {response.text}\")\n return None\n \n except Exception as e:\n logger.error(f\"❌ 调用DeepSeek API失败: {e}\")\n return None\n \n def _build_system_prompt(self) -> str:\n \"\"\"构建系统提示词\"\"\"\n return f\"\"\"\n你是{self.name},一个基于DeepSeek v3.1的专业量化交易分析师。你以深度数据分析和量化建模著称。\n\n你的特征:\n- 交易风格: {self.trading_style}\n- 分析深度: {self.analysis_depth}\n- 风险容忍度: {self.risk_tolerance}\n- 核心优势: 深度学习、量化分析、数据挖掘\n\n分析方法:\n1. 多维度量化分析\n2. 深度学习模式识别\n3. 统计套利机会发现\n4. 高频数据处理分析\n5. 机器学习预测建模\n\n决策原则:\n1. 数据驱动的量化决策\n2. 统计显著性验证\n3. 多因子模型分析\n4. 动态风险调整\n5. 算法化执行策略\n\n技术特长:\n1. 时间序列分析\n2. 机器学习建模\n3. 统计套利识别\n4. 高频交易信号\n5. 风险因子分解\n\n响应要求:\n- 使用精确的JSON格式\n- 提供量化分析指标\n- 包含统计置信度\n- 给出概率化预测\n\n记住:量化交易基于数据和统计,每个决策都要有数学依据。\n\"\"\"\n \n def _build_analysis_prompt(self, symbol: str, stock_data: Dict, market_data: Dict) -> str:\n \"\"\"构建分析提示\"\"\"\n # 获取相关数据\n sentiment = market_data.get('sentiment', {})\n market_indices = {\n 'QQQ': market_data.get('QQQ', {}),\n 'SPY': market_data.get('SPY', {}),\n 'VIX': market_data.get('VIX', {})\n }\n \n prompt = f\"\"\"\n请对股票 {symbol} 进行{self.analysis_depth}量化分析:\n\n== 股票数据 ==\n{json.dumps(stock_data, indent=2)}\n\n== 市场情绪指标 ==\n{json.dumps(sentiment, indent=2)}\n\n== 基准指数数据 ==\n{json.dumps(market_indices, indent=2)}\n\n请从以下量化维度进行分析:\n\n1. **技术量化指标**\n - 动量因子分析\n - 均值回归信号\n - 波动率模式识别\n - 成交量价格关系\n\n2. **统计特征分析**\n - 价格分布特征\n - 收益率统计性质\n - 自相关性检验\n - 异常值检测\n\n3. **市场微观结构**\n - 流动性指标\n - 买卖价差分析\n - 订单流特征\n - 市场冲击成本\n\n4. **风险因子分解**\n - 系统性风险暴露\n - 特异性风险评估\n - 相关性分析\n - VaR计算\n\n5. **预测模型输出**\n - 短期价格预测\n - 波动率预测\n - 趋势持续概率\n - 反转信号强度\n\n请以JSON格式返回量化分析结果:\n{{\n \"symbol\": \"{symbol}\",\n \"quantitative_score\": 0.0-10.0,\n \"momentum_factor\": -1.0到1.0,\n \"mean_reversion_signal\": -1.0到1.0,\n \"volatility_regime\": \"low/medium/high\",\n \"liquidity_score\": 0.0-10.0,\n \"trend\": \"bullish/bearish/neutral\",\n \"strength\": 0.0-1.0,\n \"statistical_significance\": 0.0-1.0,\n \"support_level\": 支撑价位,\n \"resistance_level\": 阻力价位,\n \"expected_return\": 预期收益率,\n \"volatility_forecast\": 波动率预测,\n \"risk_metrics\": {{\n \"var_95\": \"95% VaR值\",\n \"max_drawdown_risk\": \"最大回撤风险\",\n \"beta\": \"市场Beta值\"\n }},\n \"trading_signals\": {{\n \"entry_signal\": \"strong/weak/none\",\n \"exit_signal\": \"strong/weak/none\",\n \"signal_confidence\": 0.0-1.0\n }},\n \"model_predictions\": {{\n \"price_target_1d\": \"1日价格目标\",\n \"price_target_5d\": \"5日价格目标\",\n \"trend_probability\": \"趋势持续概率\"\n }}\n}}\n\"\"\"\n \n return prompt\n \n def _build_decision_prompt(self, analyses: Dict[str, MarketAnalysis], market_data: Dict) -> str:\n \"\"\"构建交易决策提示\"\"\"\n # 整理分析结果\n analysis_summary = {}\n for symbol, analysis in analyses.items():\n analysis_summary[symbol] = {\n 'trend': analysis.trend,\n 'strength': analysis.strength,\n 'sentiment_score': analysis.sentiment_score,\n 'technical_indicators': analysis.technical_indicators\n }\n \n # 获取当前性能\n performance_info = {\n 'total_trades': self.performance_metrics['total_trades'],\n 'win_rate': self.performance_metrics.get('win_rate', 0),\n 'total_return': self.performance_metrics['total_return'],\n 'sharpe_ratio': self.performance_metrics.get('sharpe_ratio', 0)\n }\n \n prompt = f\"\"\"\n基于量化分析结果,请做出最优交易决策:\n\n== 量化分析汇总 ==\n{json.dumps(analysis_summary, indent=2)}\n\n== 模型历史表现 ==\n{json.dumps(performance_info, indent=2)}\n\n== 量化策略参数 ==\n- 交易风格: {self.trading_style}\n- 分析深度: {self.analysis_depth}\n- 风险容忍度: {self.risk_tolerance}\n\n请基于以下量化框架做决策:\n\n1. **信号强度评估**\n - 多因子信号合成\n - 统计显著性检验\n - 信号衰减分析\n - 噪声过滤处理\n\n2. **风险收益优化**\n - 夏普比率最大化\n - 最大回撤控制\n - 波动率目标管理\n - 相关性风险分散\n\n3. **执行成本分析**\n - 市场冲击成本\n - 时间衰减成本\n - 机会成本评估\n - 滑点预期管理\n\n4. **组合优化决策**\n - 权重分配优化\n - 再平衡频率\n - 对冲策略选择\n - 流动性管理\n\n请返回量化交易决策(JSON格式):\n{{\n \"action\": \"buy/sell/hold\",\n \"symbol\": \"最优标的\",\n \"quantity\": 最优数量,\n \"confidence\": 0.0-1.0,\n \"expected_return\": 预期收益率,\n \"expected_volatility\": 预期波动率,\n \"sharpe_ratio_forecast\": 预期夏普比率,\n \"max_drawdown_risk\": 最大回撤风险,\n \"holding_period\": 最优持有期,\n \"stop_loss\": 量化止损位,\n \"take_profit\": 量化止盈位,\n \"position_sizing_method\": \"kelly/fixed/volatility\",\n \"risk_budget\": 风险预算分配,\n \"signal_strength\": 信号强度评分,\n \"statistical_edge\": 统计优势评估,\n \"execution_strategy\": \"market/limit/twap/vwap\",\n \"reasoning\": \"量化决策逻辑\",\n \"alternative_strategies\": [\"备选策略列表\"]\n}}\n\n如果没有统计显著的交易机会,请返回:\n{{\n \"action\": \"hold\",\n \"reasoning\": \"无统计显著信号\",\n \"signal_analysis\": \"信号强度分析\",\n \"market_regime\": \"当前市场状态\",\n \"waiting_conditions\": [\"等待条件列表\"]\n}}\n\"\"\"\n \n return prompt\n \n def _parse_analysis_response(self, symbol: str, response_text: str) -> Optional[MarketAnalysis]:\n \"\"\"解析分析响应\"\"\"\n try:\n # 尝试提取JSON部分\n json_start = response_text.find('{')\n json_end = response_text.rfind('}') + 1\n \n if json_start == -1 or json_end == 0:\n return self._extract_analysis_from_text(symbol, response_text)\n \n json_text = response_text[json_start:json_end]\n data = json.loads(json_text)\n \n # 构建MarketAnalysis对象\n analysis = MarketAnalysis(\n symbol=symbol,\n trend=data.get('trend', 'neutral'),\n strength=float(data.get('strength', data.get('statistical_significance', 0.5))),\n support_level=data.get('support_level'),\n resistance_level=data.get('resistance_level'),\n technical_indicators={\n 'quantitative_score': data.get('quantitative_score', 5.0),\n 'momentum_factor': data.get('momentum_factor', 0.0),\n 'mean_reversion_signal': data.get('mean_reversion_signal', 0.0),\n 'volatility_regime': data.get('volatility_regime', 'medium'),\n 'liquidity_score': data.get('liquidity_score', 5.0),\n 'expected_return': data.get('expected_return', 0.0),\n 'volatility_forecast': data.get('volatility_forecast', 0.2)\n },\n sentiment_score=0.0, # 从市场数据获取\n news_impact='neutral'\n )\n \n return analysis\n \n except Exception as e:\n logger.error(f\"❌ 解析DeepSeek分析响应失败: {e}\")\n logger.debug(f\"响应内容: {response_text[:500]}...\")\n return None\n \n def _extract_analysis_from_text(self, symbol: str, text: str) -> Optional[MarketAnalysis]:\n \"\"\"从文本中提取分析信息\"\"\"\n try:\n text_lower = text.lower()\n \n # 量化信号识别\n if any(word in text_lower for word in ['买入信号', '上涨概率', 'bullish', 'positive momentum']):\n trend = 'bullish'\n strength = 0.75\n elif any(word in text_lower for word in ['卖出信号', '下跌概率', 'bearish', 'negative momentum']):\n trend = 'bearish'\n strength = 0.75\n else:\n trend = 'neutral'\n strength = 0.5\n \n return MarketAnalysis(\n symbol=symbol,\n trend=trend,\n strength=strength,\n technical_indicators={'deepseek_analysis': True}\n )\n \n except Exception as e:\n logger.error(f\"❌ 从文本提取分析信息失败: {e}\")\n return None\n \n def _parse_decision_response(self, response_text: str, market_data: Dict) -> Optional[TradingDecision]:\n \"\"\"解析交易决策响应\"\"\"\n try:\n # 提取JSON部分\n json_start = response_text.find('{')\n json_end = response_text.rfind('}') + 1\n \n if json_start == -1 or json_end == 0:\n logger.warning(f\"⚠️ 无法从DeepSeek决策响应中提取JSON\")\n return None\n \n json_text = response_text[json_start:json_end]\n data = json.loads(json_text)\n \n action = data.get('action', 'hold').lower()\n \n # 如果是hold,记录原因但不返回交易决策\n if action == 'hold':\n reason = data.get('reasoning', '无统计显著信号')\n logger.info(f\"🤖 {self.name}: {reason}\")\n return None\n \n symbol = data.get('symbol', '')\n if not symbol:\n logger.warning(f\"⚠️ DeepSeek交易决策缺少股票代码\")\n return None\n \n # 获取当前价格\n current_price = None\n if symbol in market_data:\n current_price = market_data[symbol].get('price')\n \n # 计算交易数量\n quantity = data.get('quantity', 0)\n if quantity == 0 and current_price:\n confidence = float(data.get('confidence', 0.5))\n expected_return = data.get('expected_return', 0.05)\n \n # DeepSeek的量化仓位计算\n risk_multipliers = {\n 'conservative': 0.3,\n 'moderate': 0.5,\n 'aggressive': 0.7\n }\n risk_multiplier = risk_multipliers.get(self.risk_tolerance, 0.5)\n \n # 基于Kelly公式的简化版本\n kelly_fraction = max(0.01, min(0.25, expected_return * confidence * risk_multiplier))\n quantity = int((10000 * kelly_fraction) / current_price)\n quantity = max(1, quantity)\n \n decision = TradingDecision(\n symbol=symbol,\n action=action,\n quantity=max(1, int(quantity)),\n confidence=float(data.get('confidence', 0.5)),\n reason=data.get('reasoning', ''),\n price=current_price,\n stop_loss=data.get('stop_loss'),\n take_profit=data.get('take_profit'),\n risk_level=self.risk_tolerance\n )\n \n return decision\n \n except Exception as e:\n logger.error(f\"❌ 解析DeepSeek交易决策失败: {e}\")\n logger.debug(f\"响应内容: {response_text[:500]}...\")\n return None\n \n async def get_quantitative_insights(self, market_data: Dict[str, Any]) -> Dict[str, Any]:\n \"\"\"获取量化洞察\"\"\"\n try:\n insights_prompt = f\"\"\"\n作为{self.name},请提供当前市场的量化分析洞察:\n\n当前模型表现:\n- 总交易: {self.performance_metrics['total_trades']}\n- 胜率: {self.performance_metrics.get('win_rate', 0):.1%}\n- 总收益: ${self.performance_metrics['total_return']:.2f}\n- 夏普比率: {self.performance_metrics.get('sharpe_ratio', 0):.2f}\n\n请从量化角度提供:\n1. 市场状态识别(牛市/熊市/震荡)\n2. 主要量化因子表现\n3. 统计套利机会\n4. 风险因子分析\n5. 量化策略建议\n\n请用专业的量化分析语言回答。\n\"\"\"\n \n response_text = await self._call_deepseek_api(insights_prompt)\n \n if response_text:\n return {\n 'model_name': self.name,\n 'timestamp': datetime.now().isoformat(),\n 'quantitative_insights': response_text,\n 'trading_style': self.trading_style,\n 'analysis_depth': self.analysis_depth,\n 'risk_tolerance': self.risk_tolerance,\n 'performance': self.performance_metrics\n }\n \n return {}\n \n except Exception as e:\n logger.error(f\"❌ 获取量化洞察失败: {e}\")\n return {}\n \n async def cleanup(self):\n \"\"\"清理资源\"\"\"\n await super().cleanup()\n self.api_key = None\n logger.info(f\"🧹 {self.name} 已清理完成\")"}, "95e153f208c790b6e1432cdd296614f401583656": {"t": 1785766527.5817876, "n": 20922, "h": "e90b424b330ed1a8", "c": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\"\"\"\nDeepSeek v3.1交易模型实现\n\"\"\"\n\nimport asyncio\nimport json\nfrom datetime import datetime\nfrom typing import Dict, List, Optional, Any\nfrom loguru import logger\n\ntry:\n import requests\nexcept ImportError:\n logger.warning(\"⚠️ requests库未安装,DeepSeek模型将无法使用\")\n requests = None\n\nfrom .base_model import BaseAIModel, TradingDecision, MarketAnalysis\nfrom config.settings import Settings\n\n\nclass DeepSeekTrader(BaseAIModel):\n \"\"\"基于DeepSeek v3.1的交易模型\"\"\"\n \n def __init__(self, name: str = \"DeepSeek-Trader\", config: Dict[str, Any] = None):\n if config is None:\n config = Settings.AI_MODELS.get('deepseek-v3', {})\n \n super().__init__(name, config)\n \n self.api_key = None\n self.model_name = config.get('model_name', 'deepseek-chat')\n self.max_tokens = config.get('max_tokens', 2000)\n self.temperature = config.get('temperature', 0.1)\n \n # DeepSeek特有的交易策略参数\n self.trading_style = config.get('trading_style', 'quantitative') # quantitative, fundamental, technical\n self.analysis_depth = config.get('analysis_depth', 'deep') # shallow, medium, deep\n self.risk_tolerance = config.get('risk_tolerance', 'moderate') # conservative, moderate, aggressive\n \n # API配置\n self.api_base_url = \"https://api.deepseek.com/v1/chat/completions\"\n \n # 系统提示词\n self.system_prompt = self._build_system_prompt()\n \n async def initialize(self) -> bool:\n \"\"\"初始化DeepSeek模型\"\"\"\n try:\n if requests is None:\n logger.error(\"❌ requests库未安装\")\n return False\n \n # 获取API密钥\n self.api_key = Settings.get_api_key('DEEPSEEK_API_KEY')\n if not self.api_key:\n logger.error(\"❌ 未找到DeepSeek API密钥\")\n return False\n \n # 测试API连接\n await self._test_api_connection()\n \n self.is_active = True\n logger.info(f\"✅ {self.name} 初始化成功\")\n return True\n \n except Exception as e:\n logger.error(f\"❌ {self.name} 初始化失败: {e}\")\n return False\n \n async def _test_api_connection(self):\n \"\"\"测试API连接\"\"\"\n try:\n test_payload = {\n \"model\": self.model_name,\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"Hello, test connection.\"\n }\n ],\n \"max_tokens\": 10,\n \"temperature\": 0.1\n }\n \n headers = {\n \"Authorization\": f\"Bearer {self.api_key}\",\n \"Content-Type\": \"application/json\"\n }\n \n # 在线程池中执行同步请求\n loop = asyncio.get_event_loop()\n response = await loop.run_in_executor(\n None,\n lambda: requests.post(\n self.api_base_url,\n headers=headers,\n json=test_payload,\n timeout=30\n )\n )\n \n if response.status_code == 200:\n result = response.json()\n if result.get('choices'):\n logger.info(f\"🔗 {self.name} API连接测试成功\")\n else:\n raise Exception(\"API响应格式异常\")\n else:\n raise Exception(f\"API请求失败: {response.status_code} - {response.text}\")\n \n except Exception as e:\n raise Exception(f\"API连接测试失败: {e}\")\n \n async def analyze_market(self, market_data: Dict[str, Any]) -> Dict[str, MarketAnalysis]:\n \"\"\"分析市场数据\"\"\"\n try:\n analyses = {}\n \n # DeepSeek的策略:深度量化分析,数据驱动决策\n symbols_to_analyze = self._select_analysis_targets(market_data)\n \n for symbol in symbols_to_analyze:\n if symbol in ['sentiment', 'QQQ', 'SPY', 'VIX']:\n continue\n \n stock_data = market_data.get(symbol, {})\n if not stock_data:\n continue\n \n analysis = await self._analyze_single_stock(symbol, stock_data, market_data)\n if analysis:\n analyses[symbol] = analysis\n \n return analyses\n \n except Exception as e:\n logger.error(f\"❌ {self.name} 市场分析失败: {e}\")\n return {}\n \n def _select_analysis_targets(self, market_data: Dict[str, Any]) -> List[str]:\n \"\"\"选择分析目标股票\"\"\"\n # DeepSeek的策略:量化选股,关注数据质量和流动性\n priority_stocks = {\n 'quantitative': ['AAPL', 'MSFT', 'GOOGL', 'AMZN', 'TSLA', 'META', 'NVDA', 'NFLX', 'AMD', 'QCOM'],\n 'fundamental': ['AAPL', 'MSFT', 'GOOGL', 'BRK.B', 'JNJ', 'PG', 'KO', 'WMT'],\n 'technical': ['TSLA', 'NVDA', 'AMD', 'NFLX', 'ZOOM', 'SQ', 'ROKU', 'SHOP']\n }\n \n target_stocks = priority_stocks.get(self.trading_style, priority_stocks['quantitative'])\n \n # 只选择有数据的股票\n available_stocks = [s for s in target_stocks if s in market_data]\n \n # 根据分析深度限制数量\n max_stocks = {\n 'shallow': 8,\n 'medium': 12,\n 'deep': 16\n }\n \n limit = max_stocks.get(self.analysis_depth, 12)\n return available_stocks[:limit]\n \n async def _analyze_single_stock(self, symbol: str, stock_data: Dict, market_data: Dict) -> Optional[MarketAnalysis]:\n \"\"\"分析单只股票\"\"\"\n try:\n # 构建深度分析提示\n analysis_prompt = self._build_analysis_prompt(symbol, stock_data, market_data)\n \n # 调用DeepSeek进行分析\n response_text = await self._call_deepseek_api(analysis_prompt)\n \n if not response_text:\n return None\n \n # 解析响应\n analysis = self._parse_analysis_response(symbol, response_text)\n \n return analysis\n \n except Exception as e:\n logger.error(f\"❌ 分析 {symbol} 失败: {e}\")\n return None\n \n async def make_trading_decision(self, market_data: Dict[str, Any]) -> Optional[TradingDecision]:\n \"\"\"做出交易决策\"\"\"\n try:\n if not await self.should_trade(market_data):\n return None\n \n # 进行市场分析\n market_analyses = await self.analyze_market(market_data)\n \n if not market_analyses:\n logger.warning(f\"⚠️ {self.name}: 没有可用的市场分析\")\n return None\n \n # 构建交易决策提示\n decision_prompt = self._build_decision_prompt(market_analyses, market_data)\n \n # 调用DeepSeek做出交易决策\n response_text = await self._call_deepseek_api(decision_prompt)\n \n if not response_text:\n return None\n \n # 解析交易决策\n decision = self._parse_decision_response(response_text, market_data)\n \n if decision:\n logger.info(\n f\"🤖 {self.name} 交易决策: {decision.action} {decision.symbol} \"\n f\"x{decision.quantity} (置信度: {decision.confidence:.2f})\"\n )\n \n return decision\n \n except Exception as e:\n logger.error(f\"❌ {self.name} 交易决策失败: {e}\")\n return None\n \n async def _call_deepseek_api(self, prompt: str) -> Optional[str]:\n \"\"\"调用DeepSeek API\"\"\"\n try:\n payload = {\n \"model\": self.model_name,\n \"messages\": [\n {\n \"role\": \"system\",\n \"content\": self.system_prompt\n },\n {\n \"role\": \"user\",\n \"content\": prompt\n }\n ],\n \"max_tokens\": self.max_tokens,\n \"temperature\": self.temperature,\n \"top_p\": 0.9,\n \"frequency_penalty\": 0.1,\n \"presence_penalty\": 0.1\n }\n \n headers = {\n \"Authorization\": f\"Bearer {self.api_key}\",\n \"Content-Type\": \"application/json\"\n }\n \n # 在线程池中执行同步请求\n loop = asyncio.get_event_loop()\n response = await loop.run_in_executor(\n None,\n lambda: requests.post(\n self.api_base_url,\n headers=headers,\n json=payload,\n timeout=60\n )\n )\n \n if response.status_code == 200:\n result = response.json()\n choices = result.get('choices', [])\n if choices:\n return choices[0].get('message', {}).get('content', '')\n else:\n logger.error(f\"❌ DeepSeek API响应格式异常: {result}\")\n return None\n else:\n logger.error(f\"❌ DeepSeek API请求失败: {response.status_code} - {response.text}\")\n return None\n \n except Exception as e:\n logger.error(f\"❌ 调用DeepSeek API失败: {e}\")\n return None\n \n def _build_system_prompt(self) -> str:\n \"\"\"构建系统提示词\"\"\"\n return f\"\"\"\n你是{self.name},一个基于DeepSeek v3.1的专业量化交易分析师。你以深度数据分析和量化建模著称。\n\n你的特征:\n- 交易风格: {self.trading_style}\n- 分析深度: {self.analysis_depth}\n- 风险容忍度: {self.risk_tolerance}\n- 核心优势: 深度学习、量化分析、数据挖掘\n\n分析方法:\n1. 多维度量化分析\n2. 深度学习模式识别\n3. 统计套利机会发现\n4. 高频数据处理分析\n5. 机器学习预测建模\n\n决策原则:\n1. 数据驱动的量化决策\n2. 统计显著性验证\n3. 多因子模型分析\n4. 动态风险调整\n5. 算法化执行策略\n\n技术特长:\n1. 时间序列分析\n2. 机器学习建模\n3. 统计套利识别\n4. 高频交易信号\n5. 风险因子分解\n\n响应要求:\n- 使用精确的JSON格式\n- 提供量化分析指标\n- 包含统计置信度\n- 给出概率化预测\n\n记住:量化交易基于数据和统计,每个决策都要有数学依据。\n\"\"\"\n \n def _build_analysis_prompt(self, symbol: str, stock_data: Dict, market_data: Dict) -> str:\n \"\"\"构建分析提示\"\"\"\n # 获取相关数据\n sentiment = market_data.get('sentiment', {})\n market_indices = {\n 'QQQ': market_data.get('QQQ', {}),\n 'SPY': market_data.get('SPY', {}),\n 'VIX': market_data.get('VIX', {})\n }\n \n prompt = f\"\"\"\n请对股票 {symbol} 进行{self.analysis_depth}量化分析:\n\n== 股票数据 ==\n{json.dumps(stock_data, indent=2)}\n\n== 市场情绪指标 ==\n{json.dumps(sentiment, indent=2)}\n\n== 基准指数数据 ==\n{json.dumps(market_indices, indent=2)}\n\n请从以下量化维度进行分析:\n\n1. **技术量化指标**\n - 动量因子分析\n - 均值回归信号\n - 波动率模式识别\n - 成交量价格关系\n\n2. **统计特征分析**\n - 价格分布特征\n - 收益率统计性质\n - 自相关性检验\n - 异常值检测\n\n3. **市场微观结构**\n - 流动性指标\n - 买卖价差分析\n - 订单流特征\n - 市场冲击成本\n\n4. **风险因子分解**\n - 系统性风险暴露\n - 特异性风险评估\n - 相关性分析\n - VaR计算\n\n5. **预测模型输出**\n - 短期价格预测\n - 波动率预测\n - 趋势持续概率\n - 反转信号强度\n\n请以JSON格式返回量化分析结果:\n{{\n \"symbol\": \"{symbol}\",\n \"quantitative_score\": 0.0-10.0,\n \"momentum_factor\": -1.0到1.0,\n \"mean_reversion_signal\": -1.0到1.0,\n \"volatility_regime\": \"low/medium/high\",\n \"liquidity_score\": 0.0-10.0,\n \"trend\": \"bullish/bearish/neutral\",\n \"strength\": 0.0-1.0,\n \"statistical_significance\": 0.0-1.0,\n \"support_level\": 支撑价位,\n \"resistance_level\": 阻力价位,\n \"expected_return\": 预期收益率,\n \"volatility_forecast\": 波动率预测,\n \"risk_metrics\": {{\n \"var_95\": \"95% VaR值\",\n \"max_drawdown_risk\": \"最大回撤风险\",\n \"beta\": \"市场Beta值\"\n }},\n \"trading_signals\": {{\n \"entry_signal\": \"strong/weak/none\",\n \"exit_signal\": \"strong/weak/none\",\n \"signal_confidence\": 0.0-1.0\n }},\n \"model_predictions\": {{\n \"price_target_1d\": \"1日价格目标\",\n \"price_target_5d\": \"5日价格目标\",\n \"trend_probability\": \"趋势持续概率\"\n }}\n}}\n\"\"\"\n \n return prompt\n \n def _build_decision_prompt(self, analyses: Dict[str, MarketAnalysis], market_data: Dict) -> str:\n \"\"\"构建交易决策提示\"\"\"\n # 整理分析结果\n analysis_summary = {}\n for symbol, analysis in analyses.items():\n analysis_summary[symbol] = {\n 'trend': analysis.trend,\n 'strength': analysis.strength,\n 'sentiment_score': analysis.sentiment_score,\n 'technical_indicators': analysis.technical_indicators\n }\n \n # 获取当前性能\n performance_info = {\n 'total_trades': self.performance_metrics['total_trades'],\n 'win_rate': self.performance_metrics.get('win_rate', 0),\n 'total_return': self.performance_metrics['total_return'],\n 'sharpe_ratio': self.performance_metrics.get('sharpe_ratio', 0)\n }\n \n prompt = f\"\"\"\n基于量化分析结果,请做出最优交易决策:\n\n== 量化分析汇总 ==\n{json.dumps(analysis_summary, indent=2)}\n\n== 模型历史表现 ==\n{json.dumps(performance_info, indent=2)}\n\n== 量化策略参数 ==\n- 交易风格: {self.trading_style}\n- 分析深度: {self.analysis_depth}\n- 风险容忍度: {self.risk_tolerance}\n\n请基于以下量化框架做决策:\n\n1. **信号强度评估**\n - 多因子信号合成\n - 统计显著性检验\n - 信号衰减分析\n - 噪声过滤处理\n\n2. **风险收益优化**\n - 夏普比率最大化\n - 最大回撤控制\n - 波动率目标管理\n - 相关性风险分散\n\n3. **执行成本分析**\n - 市场冲击成本\n - 时间衰减成本\n - 机会成本评估\n - 滑点预期管理\n\n4. **组合优化决策**\n - 权重分配优化\n - 再平衡频率\n - 对冲策略选择\n - 流动性管理\n\n请返回量化交易决策(JSON格式):\n{{\n \"action\": \"buy/sell/hold\",\n \"symbol\": \"最优标的\",\n \"quantity\": 最优数量,\n \"confidence\": 0.0-1.0,\n \"expected_return\": 预期收益率,\n \"expected_volatility\": 预期波动率,\n \"sharpe_ratio_forecast\": 预期夏普比率,\n \"max_drawdown_risk\": 最大回撤风险,\n \"holding_period\": 最优持有期,\n \"stop_loss\": 量化止损位,\n \"take_profit\": 量化止盈位,\n \"position_sizing_method\": \"kelly/fixed/volatility\",\n \"risk_budget\": 风险预算分配,\n \"signal_strength\": 信号强度评分,\n \"statistical_edge\": 统计优势评估,\n \"execution_strategy\": \"market/limit/twap/vwap\",\n \"reasoning\": \"量化决策逻辑\",\n \"alternative_strategies\": [\"备选策略列表\"]\n}}\n\n如果没有统计显著的交易机会,请返回:\n{{\n \"action\": \"hold\",\n \"reasoning\": \"无统计显著信号\",\n \"signal_analysis\": \"信号强度分析\",\n \"market_regime\": \"当前市场状态\",\n \"waiting_conditions\": [\"等待条件列表\"]\n}}\n\"\"\"\n \n return prompt\n \n def _parse_analysis_response(self, symbol: str, response_text: str) -> Optional[MarketAnalysis]:\n \"\"\"解析分析响应\"\"\"\n try:\n # 尝试提取JSON部分\n json_start = response_text.find('{')\n json_end = response_text.rfind('}') + 1\n \n if json_start == -1 or json_end == 0:\n return self._extract_analysis_from_text(symbol, response_text)\n \n json_text = response_text[json_start:json_end]\n data = json.loads(json_text)\n \n # 构建MarketAnalysis对象\n analysis = MarketAnalysis(\n symbol=symbol,\n trend=data.get('trend', 'neutral'),\n strength=float(data.get('strength', data.get('statistical_significance', 0.5))),\n support_level=data.get('support_level'),\n resistance_level=data.get('resistance_level'),\n technical_indicators={\n 'quantitative_score': data.get('quantitative_score', 5.0),\n 'momentum_factor': data.get('momentum_factor', 0.0),\n 'mean_reversion_signal': data.get('mean_reversion_signal', 0.0),\n 'volatility_regime': data.get('volatility_regime', 'medium'),\n 'liquidity_score': data.get('liquidity_score', 5.0),\n 'expected_return': data.get('expected_return', 0.0),\n 'volatility_forecast': data.get('volatility_forecast', 0.2)\n },\n sentiment_score=0.0, # 从市场数据获取\n news_impact='neutral'\n )\n \n return analysis\n \n except Exception as e:\n logger.error(f\"❌ 解析DeepSeek分析响应失败: {e}\")\n logger.debug(f\"响应内容: {response_text[:500]}...\")\n return None\n \n def _extract_analysis_from_text(self, symbol: str, text: str) -> Optional[MarketAnalysis]:\n \"\"\"从文本中提取分析信息\"\"\"\n try:\n text_lower = text.lower()\n \n # 量化信号识别\n if any(word in text_lower for word in ['买入信号', '上涨概率', 'bullish', 'positive momentum']):\n trend = 'bullish'\n strength = 0.75\n elif any(word in text_lower for word in ['卖出信号', '下跌概率', 'bearish', 'negative momentum']):\n trend = 'bearish'\n strength = 0.75\n else:\n trend = 'neutral'\n strength = 0.5\n \n return MarketAnalysis(\n symbol=symbol,\n trend=trend,\n strength=strength,\n technical_indicators={'deepseek_analysis': True}\n )\n \n except Exception as e:\n logger.error(f\"❌ 从文本提取分析信息失败: {e}\")\n return None\n \n def _parse_decision_response(self, response_text: str, market_data: Dict) -> Optional[TradingDecision]:\n \"\"\"解析交易决策响应\"\"\"\n try:\n # 提取JSON部分\n json_start = response_text.find('{')\n json_end = response_text.rfind('}') + 1\n \n if json_start == -1 or json_end == 0:\n logger.warning(f\"⚠️ 无法从DeepSeek决策响应中提取JSON\")\n return None\n \n json_text = response_text[json_start:json_end]\n data = json.loads(json_text)\n \n action = data.get('action', 'hold').lower()\n \n # 如果是hold,记录原因但不返回交易决策\n if action == 'hold':\n reason = data.get('reasoning', '无统计显著信号')\n logger.info(f\"🤖 {self.name}: {reason}\")\n return None\n \n symbol = data.get('symbol', '')\n if not symbol:\n logger.warning(f\"⚠️ DeepSeek交易决策缺少股票代码\")\n return None\n \n # 获取当前价格\n current_price = None\n if symbol in market_data:\n current_price = market_data[symbol].get('price')\n \n # 计算交易数量\n quantity = data.get('quantity', 0)\n if quantity == 0 and current_price:\n confidence = float(data.get('confidence', 0.5))\n expected_return = data.get('expected_return', 0.05)\n \n # DeepSeek的量化仓位计算\n risk_multipliers = {\n 'conservative': 0.3,\n 'moderate': 0.5,\n 'aggressive': 0.7\n }\n risk_multiplier = risk_multipliers.get(self.risk_tolerance, 0.5)\n \n # 基于Kelly公式的简化版本\n kelly_fraction = max(0.01, min(0.25, expected_return * confidence * risk_multiplier))\n quantity = int((10000 * kelly_fraction) / current_price)\n quantity = max(1, quantity)\n \n decision = TradingDecision(\n symbol=symbol,\n action=action,\n quantity=max(1, int(quantity)),\n confidence=float(data.get('confidence', 0.5)),\n reason=data.get('reasoning', ''),\n price=current_price,\n stop_loss=data.get('stop_loss'),\n take_profit=data.get('take_profit'),\n risk_level=self.risk_tolerance\n )\n \n return decision\n \n except Exception as e:\n logger.error(f\"❌ 解析DeepSeek交易决策失败: {e}\")\n logger.debug(f\"响应内容: {response_text[:500]}...\")\n return None\n \n async def get_quantitative_insights(self, market_data: Dict[str, Any]) -> Dict[str, Any]:\n \"\"\"获取量化洞察\"\"\"\n try:\n insights_prompt = f\"\"\"\n作为{self.name},请提供当前市场的量化分析洞察:\n\n当前模型表现:\n- 总交易: {self.performance_metrics['total_trades']}\n- 胜率: {self.performance_metrics.get('win_rate', 0):.1%}\n- 总收益: ${self.performance_metrics['total_return']:.2f}\n- 夏普比率: {self.performance_metrics.get('sharpe_ratio', 0):.2f}\n\n请从量化角度提供:\n1. 市场状态识别(牛市/熊市/震荡)\n2. 主要量化因子表现\n3. 统计套利机会\n4. 风险因子分析\n5. 量化策略建议\n\n请用专业的量化分析语言回答。\n\"\"\"\n \n response_text = await self._call_deepseek_api(insights_prompt)\n \n if response_text:\n return {\n 'model_name': self.name,\n 'timestamp': datetime.now().isoformat(),\n 'quantitative_insights': response_text,\n 'trading_style': self.trading_style,\n 'analysis_depth': self.analysis_depth,\n 'risk_tolerance': self.risk_tolerance,\n 'performance': self.performance_metrics\n }\n \n return {}\n \n except Exception as e:\n logger.error(f\"❌ 获取量化洞察失败: {e}\")\n return {}\n \n async def cleanup(self):\n \"\"\"清理资源\"\"\"\n await super().cleanup()\n self.api_key = None\n logger.info(f\"🧹 {self.name} 已清理完成\")"}}}}