from deepseek_client import DeepSeekClient from typing import Dict, Any import time class StockAnalysisAgents: """股票分析AI智能体集合""" def __init__(self, model="deepseek-chat"): self.model = model self.deepseek_client = DeepSeekClient(model=model) def technical_analyst_agent(self, stock_info: Dict, stock_data: Any, indicators: Dict) -> Dict[str, Any]: """技术面分析智能体""" print("🔍 技术分析师正在分析中...") time.sleep(1) # 模拟分析时间 analysis = self.deepseek_client.technical_analysis(stock_info, stock_data, indicators) return { "agent_name": "技术分析师", "agent_role": "负责技术指标分析、图表形态识别、趋势判断", "analysis": analysis, "focus_areas": ["技术指标", "趋势分析", "支撑阻力", "交易信号"], "timestamp": time.strftime("%Y-%m-%d %H:%M:%S") } def fundamental_analyst_agent(self, stock_info: Dict, financial_data: Dict = None) -> Dict[str, Any]: """基本面分析智能体""" print("📊 基本面分析师正在分析中...") time.sleep(1) analysis = self.deepseek_client.fundamental_analysis(stock_info, financial_data) return { "agent_name": "基本面分析师", "agent_role": "负责公司财务分析、行业研究、估值分析", "analysis": analysis, "focus_areas": ["财务指标", "行业分析", "公司价值", "成长性"], "timestamp": time.strftime("%Y-%m-%d %H:%M:%S") } def fund_flow_analyst_agent(self, stock_info: Dict, indicators: Dict, fund_flow_data: Dict = None) -> Dict[str, Any]: """资金面分析智能体""" print("💰 资金面分析师正在分析中...") # 如果有资金流向数据,显示数据来源 if fund_flow_data and fund_flow_data.get('query_success'): print(" ✓ 已获取问财资金流向数据") else: print(" ⚠ 未获取到问财资金流向数据,将基于技术指标分析") time.sleep(1) analysis = self.deepseek_client.fund_flow_analysis(stock_info, indicators, fund_flow_data) return { "agent_name": "资金面分析师", "agent_role": "负责资金流向分析、主力行为研究、市场情绪判断", "analysis": analysis, "focus_areas": ["资金流向", "主力动向", "市场情绪", "流动性"], "fund_flow_data": fund_flow_data, # 保存资金流向数据以供后续使用 "timestamp": time.strftime("%Y-%m-%d %H:%M:%S") } def risk_management_agent(self, stock_info: Dict, indicators: Dict) -> Dict[str, Any]: """风险管理智能体""" print("⚠️ 风险管理师正在评估中...") time.sleep(1) risk_prompt = f""" 作为风险管理专家,请基于以下信息进行风险评估: 股票信息: - 股票代码:{stock_info.get('symbol', 'N/A')} - 股票名称:{stock_info.get('name', 'N/A')} - 当前价格:{stock_info.get('current_price', 'N/A')} - Beta系数:{stock_info.get('beta', 'N/A')} - 52周最高:{stock_info.get('52_week_high', 'N/A')} - 52周最低:{stock_info.get('52_week_low', 'N/A')} 技术指标: - RSI:{indicators.get('rsi', 'N/A')} - 布林带位置:当前价格相对于上下轨的位置 - 波动率指标等 请从以下角度进行风险评估: 1. 市场风险(系统性风险) 2. 个股风险(非系统性风险) 3. 流动性风险 4. 波动性风险 5. 估值风险 6. 行业风险 7. 风险等级评定(低/中/高) 8. 风险控制建议 给出专业的风险评估报告。 """ messages = [ {"role": "system", "content": "你是一名专业的风险管理专家,具有丰富的风险识别和控制经验。"}, {"role": "user", "content": risk_prompt} ] analysis = self.deepseek_client.call_api(messages) return { "agent_name": "风险管理师", "agent_role": "负责风险识别、风险评估、风险控制策略制定", "analysis": analysis, "focus_areas": ["风险识别", "风险量化", "风险控制", "资产配置"], "timestamp": time.strftime("%Y-%m-%d %H:%M:%S") } def market_sentiment_agent(self, stock_info: Dict) -> Dict[str, Any]: """市场情绪分析智能体""" print("📈 市场情绪分析师正在分析中...") time.sleep(1) sentiment_prompt = f""" 作为市场情绪分析专家,请基于当前市场环境对以下股票进行情绪分析: 股票信息: - 股票代码:{stock_info.get('symbol', 'N/A')} - 股票名称:{stock_info.get('name', 'N/A')} - 行业:{stock_info.get('sector', 'N/A')} - 细分行业:{stock_info.get('industry', 'N/A')} 请从以下角度分析市场情绪: 1. 整体市场情绪(牛市/熊市/震荡市) 2. 行业板块情绪和热度 3. 个股关注度和讨论热度 4. 投资者情绪指标 5. 市场预期和共识 6. 消息面和事件驱动因素 7. 情绪对股价的影响评估 8. 情绪反转的可能性 结合当前宏观环境和市场热点,给出专业的市场情绪分析。 """ messages = [ {"role": "system", "content": "你是一名专业的市场情绪分析师,擅长解读市场心理和投资者行为。"}, {"role": "user", "content": sentiment_prompt} ] analysis = self.deepseek_client.call_api(messages) return { "agent_name": "市场情绪分析师", "agent_role": "负责市场情绪研究、投资者心理分析、热点追踪", "analysis": analysis, "focus_areas": ["市场情绪", "投资者心理", "热点板块", "消息面"], "timestamp": time.strftime("%Y-%m-%d %H:%M:%S") } def run_multi_agent_analysis(self, stock_info: Dict, stock_data: Any, indicators: Dict, financial_data: Dict = None, fund_flow_data: Dict = None) -> Dict[str, Any]: """运行多智能体分析""" print("🚀 启动多智能体股票分析系统...") print("=" * 50) # 并行运行各个分析师 agents_results = {} # 技术面分析 agents_results["technical"] = self.technical_analyst_agent(stock_info, stock_data, indicators) # 基本面分析 agents_results["fundamental"] = self.fundamental_analyst_agent(stock_info, financial_data) # 资金面分析(传入资金流向数据) agents_results["fund_flow"] = self.fund_flow_analyst_agent(stock_info, indicators, fund_flow_data) # 风险管理分析 agents_results["risk_management"] = self.risk_management_agent(stock_info, indicators) # 市场情绪分析 agents_results["market_sentiment"] = self.market_sentiment_agent(stock_info) print("✅ 所有分析师完成分析") print("=" * 50) return agents_results def conduct_team_discussion(self, agents_results: Dict[str, Any], stock_info: Dict) -> str: """进行团队讨论""" print("🤝 分析团队正在进行综合讨论...") time.sleep(2) # 提取各分析师的报告 technical_report = agents_results.get("technical", {}).get("analysis", "") fundamental_report = agents_results.get("fundamental", {}).get("analysis", "") fund_flow_report = agents_results.get("fund_flow", {}).get("analysis", "") risk_report = agents_results.get("risk_management", {}).get("analysis", "") sentiment_report = agents_results.get("market_sentiment", {}).get("analysis", "") discussion_prompt = f""" 现在进行投资决策团队会议,参会人员包括:技术分析师、基本面分析师、资金面分析师、风险管理师、市场情绪分析师。 股票:{stock_info.get('name', 'N/A')} ({stock_info.get('symbol', 'N/A')}) 各分析师报告: 【技术分析师报告】 {technical_report} 【基本面分析师报告】 {fundamental_report} 【资金面分析师报告】 {fund_flow_report} 【风险管理师报告】 {risk_report} 【市场情绪分析师报告】 {sentiment_report} 请模拟一场真实的投资决策会议讨论: 1. 各分析师观点的一致性和分歧 2. 不同维度分析的权重考量 3. 风险收益评估 4. 投资时机判断 5. 策略制定思路 6. 达成初步共识 请以对话形式展现讨论过程,体现专业团队的思辨过程。 """ messages = [ {"role": "system", "content": "你需要模拟一场专业的投资团队讨论会议,体现不同角色的观点碰撞和最终共识形成。"}, {"role": "user", "content": discussion_prompt} ] discussion_result = self.deepseek_client.call_api(messages, max_tokens=6000) print("✅ 团队讨论完成") return discussion_result def make_final_decision(self, discussion_result: str, stock_info: Dict, indicators: Dict) -> Dict[str, Any]: """制定最终投资决策""" print("📋 正在制定最终投资决策...") time.sleep(1) decision = self.deepseek_client.final_decision(discussion_result, stock_info, indicators) print("✅ 最终投资决策完成") return decision