Files
aiagents-stock/sector_strategy_agents.py
T
2025-10-12 15:24:32 +08:00

548 lines
21 KiB
Python

"""
智策AI智能体分析集群
包含四个专业分析师智能体
"""
from deepseek_client import DeepSeekClient
from typing import Dict, Any
import time
class SectorStrategyAgents:
"""板块策略AI智能体集合"""
def __init__(self, model="deepseek-chat"):
self.model = model
self.deepseek_client = DeepSeekClient(model=model)
print(f"[智策] AI智能体系统初始化 (模型: {model})")
def macro_strategist_agent(self, market_data: Dict, news_data: list) -> Dict[str, Any]:
"""
宏观策略师 - 分析宏观经济和新闻对板块的影响
职责:
- 分析国际国内新闻和宏观经济数据
- 判断对整体市场和不同板块的潜在影响
- 识别政策导向和宏观趋势
"""
print("🌐 宏观策略师正在分析...")
time.sleep(1)
# 构建新闻摘要
news_summary = ""
if news_data:
news_summary = "\n【重要财经新闻】\n"
for idx, news in enumerate(news_data[:30], 1):
news_summary += f"{idx}. [{news.get('publish_time', '')}] {news.get('title', '')}\n"
if news.get('content'):
news_summary += f" 摘要: {news['content'][:200]}...\n"
# 构建市场概况
market_summary = ""
if market_data:
market_summary = f"""
【市场概况】
大盘指数:
"""
if market_data.get("sh_index"):
sh = market_data["sh_index"]
market_summary += f" 上证指数: {sh['close']} ({sh['change_pct']:+.2f}%)\n"
if market_data.get("sz_index"):
sz = market_data["sz_index"]
market_summary += f" 深证成指: {sz['close']} ({sz['change_pct']:+.2f}%)\n"
if market_data.get("cyb_index"):
cyb = market_data["cyb_index"]
market_summary += f" 创业板指: {cyb['close']} ({cyb['change_pct']:+.2f}%)\n"
if market_data.get("total_stocks"):
market_summary += f"""
市场涨跌统计:
上涨: {market_data['up_count']} ({market_data['up_ratio']:.1f}%)
下跌: {market_data['down_count']}
涨停: {market_data['limit_up']} | 跌停: {market_data['limit_down']}
"""
prompt = f"""
你是一名资深的宏观策略分析师,拥有10年以上的市场研究经验,擅长从宏观经济和政策新闻中洞察市场趋势。
{market_summary}
{news_summary}
请基于以上信息,从宏观角度进行深度分析:
1. **宏观环境评估**
- 当前宏观经济形势判断(经济周期位置)
- 政策环境分析(货币政策、财政政策倾向)
- 国际环境影响(地缘政治、全球经济)
- 市场整体风险偏好评估
2. **新闻事件影响分析**
- 识别对市场影响最大的3-5条重要新闻
- 分析新闻的性质(利好/利空/中性)和影响范围
- 判断新闻对不同板块的差异化影响
- 识别政策导向和行业扶持重点
3. **行业板块影响预判**
- 分析哪些板块受宏观环境影响最积极(看多)
- 分析哪些板块面临宏观压力(看空)
- 识别政策支持的重点行业
- 预判资金可能流向的板块
4. **市场情绪和节奏**
- 当前市场情绪状态(恐慌/谨慎/乐观/亢奋)
- 大盘趋势判断(上涨/震荡/下跌)
- 市场参与热情(活跃度、成交量)
- 风险偏好变化趋势
5. **投资策略建议**
- 当前宏观环境下的配置思路
- 建议重点关注的板块(3-5个)
- 建议规避的板块(2-3个)
- 仓位管理建议
请给出专业、深入的宏观策略分析报告。
"""
messages = [
{"role": "system", "content": "你是一名资深的宏观策略分析师,擅长从宏观经济、政策和新闻事件中把握市场脉搏。"},
{"role": "user", "content": prompt}
]
analysis = self.deepseek_client.call_api(messages, max_tokens=4000)
print(" ✓ 宏观策略师分析完成")
return {
"agent_name": "宏观策略师",
"agent_role": "分析宏观经济、政策导向、新闻事件对市场和板块的影响",
"analysis": analysis,
"focus_areas": ["宏观经济", "政策解读", "新闻事件", "市场情绪", "行业轮动"],
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S")
}
def sector_diagnostician_agent(self, sectors_data: Dict, concepts_data: Dict, market_data: Dict) -> Dict[str, Any]:
"""
板块诊断师 - 分析板块的走势、估值和基本面
职责:
- 深入分析特定板块的历史走势
- 评估板块的估值水平
- 分析板块的成长性和基本面因素
"""
print("📊 板块诊断师正在分析...")
time.sleep(1)
# 构建行业板块数据
sector_summary = ""
if sectors_data:
sorted_sectors = sorted(sectors_data.items(), key=lambda x: x[1]["change_pct"], reverse=True)
sector_summary = f"""
【行业板块表现】(共 {len(sectors_data)} 个板块)
涨幅榜 TOP15:
"""
for idx, (name, info) in enumerate(sorted_sectors[:15], 1):
sector_summary += f"{idx}. {name}: {info['change_pct']:+.2f}% | 换手率: {info['turnover']:.2f}% | 领涨股: {info['top_stock']} ({info['top_stock_change']:+.2f}%) | 涨跌家数: {info['up_count']}/{info['down_count']}\n"
sector_summary += f"""
跌幅榜 TOP10:
"""
for idx, (name, info) in enumerate(sorted_sectors[-10:], 1):
sector_summary += f"{idx}. {name}: {info['change_pct']:+.2f}% | 换手率: {info['turnover']:.2f}% | 领跌股: {info['top_stock']} ({info['top_stock_change']:+.2f}%) | 涨跌家数: {info['up_count']}/{info['down_count']}\n"
# 构建概念板块数据
concept_summary = ""
if concepts_data:
sorted_concepts = sorted(concepts_data.items(), key=lambda x: x[1]["change_pct"], reverse=True)
concept_summary = f"""
【概念板块表现】(共 {len(concepts_data)} 个板块)
热门概念 TOP15:
"""
for idx, (name, info) in enumerate(sorted_concepts[:15], 1):
concept_summary += f"{idx}. {name}: {info['change_pct']:+.2f}% | 换手率: {info['turnover']:.2f}% | 领涨股: {info['top_stock']} ({info['top_stock_change']:+.2f}%)\n"
prompt = f"""
你是一名资深的板块分析师,具有CFA资格和深厚的行业研究背景,擅长板块诊断和趋势判断。
【市场环境】
{self._format_market_overview(market_data)}
{sector_summary}
{concept_summary}
请基于以上数据,进行专业的板块诊断分析:
1. **板块强弱分析**
- 识别当前最强势的5个板块(涨幅、换手率、领涨股表现综合考虑)
- 识别当前最弱势的3个板块
- 分析板块强弱的内在逻辑(基本面、资金面、情绪面)
- 判断强势板块的持续性
2. **板块估值与位置**
- 评估热门板块的估值合理性
- 判断板块所处的位置(启动期/加速期/高位/调整期)
- 识别估值洼地(低估且有潜力的板块)
- 提示估值泡沫风险
3. **板块轮动特征**
- 分析当前的板块轮动特征
- 识别资金轮动的方向和节奏
- 判断是否存在明显的板块切换信号
- 预判下一个可能轮动的板块
4. **成长性与基本面**
- 分析强势板块的成长驱动因素
- 评估板块的中长期发展前景
- 识别具有持续成长潜力的板块
- 提示基本面恶化的风险板块
5. **技术形态分析**
- 分析板块的技术走势特征
- 识别突破、整理、调整等形态
- 判断技术面的支撑和阻力
- 提供技术性买卖点参考
6. **投资建议**
- 推荐3-5个值得关注的板块(多头方向)
- 提示2-3个需要规避的板块(空头方向)
- 给出每个板块的投资逻辑和风险提示
- 建议配置比例和持有周期
请给出专业、详细的板块诊断报告。
"""
messages = [
{"role": "system", "content": "你是一名资深的板块分析师,擅长板块趋势判断和投资价值评估。"},
{"role": "user", "content": prompt}
]
analysis = self.deepseek_client.call_api(messages, max_tokens=4000)
print(" ✓ 板块诊断师分析完成")
return {
"agent_name": "板块诊断师",
"agent_role": "深入分析板块走势、估值水平、基本面因素和成长性",
"analysis": analysis,
"focus_areas": ["板块走势", "估值分析", "基本面", "技术形态", "板块轮动"],
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S")
}
def fund_flow_analyst_agent(self, fund_flow_data: Dict, north_flow_data: Dict, sectors_data: Dict) -> Dict[str, Any]:
"""
资金流向分析师 - 分析板块资金流向和主力行为
职责:
- 实时跟踪主力资金在板块间的流动
- 分析北向资金的板块偏好
- 判断资金进攻或撤离的方向
"""
print("💰 资金流向分析师正在分析...")
time.sleep(1)
# 构建资金流向数据
fund_flow_summary = ""
if fund_flow_data and fund_flow_data.get("today"):
flow_list = fund_flow_data["today"]
# 净流入前15
sorted_inflow = sorted(flow_list, key=lambda x: x["main_net_inflow"], reverse=True)
fund_flow_summary = f"""
【板块资金流向】(更新时间: {fund_flow_data.get('update_time', 'N/A')})
主力资金净流入 TOP15:
"""
for idx, item in enumerate(sorted_inflow[:15], 1):
fund_flow_summary += f"{idx}. {item['sector']}: {item['main_net_inflow']:.2f}万 ({item['main_net_inflow_pct']:+.2f}%) | 涨跌: {item['change_pct']:+.2f}% | 超大单: {item['super_large_net_inflow']:.2f}\n"
# 净流出前10
sorted_outflow = sorted(flow_list, key=lambda x: x["main_net_inflow"])
fund_flow_summary += f"""
主力资金净流出 TOP10:
"""
for idx, item in enumerate(sorted_outflow[:10], 1):
fund_flow_summary += f"{idx}. {item['sector']}: {item['main_net_inflow']:.2f}万 ({item['main_net_inflow_pct']:+.2f}%) | 涨跌: {item['change_pct']:+.2f}%\n"
# 构建北向资金数据
north_summary = ""
if north_flow_data:
north_summary = f"""
【北向资金】
日期: {north_flow_data.get('date', 'N/A')}
今日北向资金净流入: {north_flow_data.get('north_net_inflow', 0):.2f} 万元
沪股通净流入: {north_flow_data.get('hgt_net_inflow', 0):.2f} 万元
深股通净流入: {north_flow_data.get('sgt_net_inflow', 0):.2f} 万元
"""
if north_flow_data.get('history'):
north_summary += "\n近10日北向资金流向:\n"
for item in north_flow_data['history'][:10]:
north_summary += f" {item['date']}: {item['net_inflow']:.2f}\n"
prompt = f"""
你是一名资深的资金流向分析师,拥有15年的市场资金研究经验,擅长从资金流向中洞察主力意图和市场趋势。
{fund_flow_summary}
{north_summary}
请基于以上资金流向数据,进行深入的板块资金分析:
1. **主力资金流向分析** ⭐ 核心
- 识别主力资金重点流入的板块(TOP5)
- 分析主力资金大幅流出的板块(TOP3)
- 判断资金流向的集中度(集中/分散)
- 评估资金流向的持续性和强度
2. **资金类型分析**
- 超大单资金的流向特征(机构大资金)
- 大单资金的流向特征(主力资金)
- 中小单资金的流向(散户资金)
- 主力与散户的博弈特征
3. **量价配合分析**
- 分析资金流入与板块涨幅的匹配度
- 识别"资金流入+板块上涨"的强势板块
- 识别"资金流入+板块下跌"的低吸信号
- 识别"资金流出+板块上涨"的出货警示
- 识别"资金流出+板块下跌"的弱势板块
4. **北向资金偏好**
- 分析北向资金的流向趋势
- 判断外资对A股的态度(积极/观望/撤离)
- 识别北向资金偏好的板块
- 评估北向资金的指示意义
5. **板块资金轮动**
- 识别资金从哪些板块流出
- 识别资金流向哪些板块
- 分析板块资金轮动的节奏和方向
- 预判下一个资金可能流入的板块
6. **主力操作意图研判**
- 判断主力是否在积极建仓某些板块
- 识别主力可能在出货的板块
- 分析主力的操作风格(激进/稳健)
- 评估主力对后市的态度
7. **投资策略建议**
- 基于资金流向,推荐3-5个强势板块
- 提示2-3个资金流出的风险板块
- 给出板块配置的优先级
- 提供跟随主力的操作建议
8. **风险提示**
- 识别资金面的潜在风险
- 提示可能的资金陷阱
- 评估市场流动性状况
请给出专业、深度的资金流向分析报告。
"""
messages = [
{"role": "system", "content": "你是一名资深的资金流向分析师,擅长从资金数据中洞察主力意图和市场趋势。"},
{"role": "user", "content": prompt}
]
analysis = self.deepseek_client.call_api(messages, max_tokens=4000)
print(" ✓ 资金流向分析师分析完成")
return {
"agent_name": "资金流向分析师",
"agent_role": "跟踪板块资金流向,分析主力行为和资金轮动",
"analysis": analysis,
"focus_areas": ["资金流向", "主力行为", "北向资金", "板块轮动", "量价配合"],
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S")
}
def market_sentiment_decoder_agent(self, market_data: Dict, sectors_data: Dict, concepts_data: Dict) -> Dict[str, Any]:
"""
市场情绪解码员 - 从多维度解读市场情绪
职责:
- 量化市场情绪指标
- 识别过度乐观或恐慌信号
- 评估板块热度和市场关注度
"""
print("📈 市场情绪解码员正在分析...")
time.sleep(1)
# 构建市场情绪指标
sentiment_summary = ""
if market_data:
sentiment_summary = f"""
【市场情绪指标】
涨跌统计:
总股票数: {market_data.get('total_stocks', 0)}
上涨股票: {market_data.get('up_count', 0)} ({market_data.get('up_ratio', 0):.1f}%)
下跌股票: {market_data.get('down_count', 0)}
涨停数: {market_data.get('limit_up', 0)}
跌停数: {market_data.get('limit_down', 0)}
大盘表现:
"""
if market_data.get("sh_index"):
sh = market_data["sh_index"]
sentiment_summary += f" 上证指数: {sh['close']} ({sh['change_pct']:+.2f}%)\n"
if market_data.get("sz_index"):
sz = market_data["sz_index"]
sentiment_summary += f" 深证成指: {sz['close']} ({sz['change_pct']:+.2f}%)\n"
if market_data.get("cyb_index"):
cyb = market_data["cyb_index"]
sentiment_summary += f" 创业板指: {cyb['close']} ({cyb['change_pct']:+.2f}%)\n"
# 板块热度分析
hot_sectors = ""
if sectors_data:
sorted_sectors = sorted(sectors_data.items(), key=lambda x: abs(x[1]["change_pct"]), reverse=True)
hot_sectors = f"""
【板块热度排行】(按涨跌幅绝对值排序)
最活跃板块 TOP10:
"""
for idx, (name, info) in enumerate(sorted_sectors[:10], 1):
hot_sectors += f"{idx}. {name}: {info['change_pct']:+.2f}% | 换手率: {info['turnover']:.2f}% | 涨跌家数: {info['up_count']}/{info['down_count']}\n"
# 概念热度
hot_concepts = ""
if concepts_data:
sorted_concepts = sorted(concepts_data.items(), key=lambda x: abs(x[1]["change_pct"]), reverse=True)
hot_concepts = f"""
【概念热度排行】
最热概念 TOP10:
"""
for idx, (name, info) in enumerate(sorted_concepts[:10], 1):
hot_concepts += f"{idx}. {name}: {info['change_pct']:+.2f}% | 换手率: {info['turnover']:.2f}%\n"
prompt = f"""
你是一名资深的市场情绪分析师,拥有心理学和金融学双重背景,擅长从市场数据中解读投资者情绪和市场心理。
{sentiment_summary}
{hot_sectors}
{hot_concepts}
请基于以上数据,进行深入的市场情绪分析:
1. **整体市场情绪评估**
- 量化当前市场情绪(0-100分,0=极度恐慌,50=中性,100=极度亢奋)
- 判断市场情绪状态(恐慌/谨慎/中性/乐观/亢奋)
- 分析情绪的强度和持续性
- 对比历史情绪水平
2. **赚钱效应分析**
- 评估市场的赚钱效应(强/中/弱)
- 分析上涨股票占比和涨停数量
- 判断是否存在明显的板块效应
- 评估散户参与热情
3. **市场热点分析**
- 识别当前最热门的3-5个板块/概念
- 分析热点的形成原因和逻辑
- 评估热点的持续性和扩散性
- 判断是否存在炒作泡沫
4. **恐慌贪婪指数**
- 综合判断市场的贪婪或恐慌程度
- 分析涨跌停数量反映的情绪极端
- 识别情绪拐点信号
- 提示过度贪婪或过度恐慌的风险
5. **板块情绪分化**
- 分析不同板块的情绪差异
- 识别高情绪板块和低情绪板块
- 判断情绪分化是否合理
- 预判情绪可能扩散的方向
6. **换手率与活跃度**
- 分析整体市场和板块的换手率
- 评估市场活跃度(活跃/一般/低迷)
- 判断资金参与意愿
- 识别异常活跃的板块
7. **情绪对市场的影响**
- 分析当前情绪对大盘的支撑或压制
- 判断情绪反转的可能性和时机
- 评估情绪驱动的交易机会
- 提示情绪面的风险
8. **投资策略建议**
- 基于市场情绪给出操作建议
- 推荐情绪支持的板块(2-3个)
- 提示情绪透支的风险板块(1-2个)
- 给出仓位管理建议
请给出专业、客观的市场情绪分析报告,避免主观臆测。
"""
messages = [
{"role": "system", "content": "你是一名资深的市场情绪分析师,擅长从市场数据中解读投资者情绪和市场心理。"},
{"role": "user", "content": prompt}
]
analysis = self.deepseek_client.call_api(messages, max_tokens=4000)
print(" ✓ 市场情绪解码员分析完成")
return {
"agent_name": "市场情绪解码员",
"agent_role": "量化市场情绪,识别恐慌贪婪信号,评估板块热度",
"analysis": analysis,
"focus_areas": ["市场情绪", "赚钱效应", "热点识别", "恐慌贪婪", "活跃度"],
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S")
}
def _format_market_overview(self, market_data):
"""格式化市场概况"""
if not market_data:
return "暂无市场数据"
text = ""
if market_data.get("sh_index"):
sh = market_data["sh_index"]
text += f"上证指数: {sh['close']} ({sh['change_pct']:+.2f}%)\n"
if market_data.get("sz_index"):
sz = market_data["sz_index"]
text += f"深证成指: {sz['close']} ({sz['change_pct']:+.2f}%)\n"
if market_data.get("total_stocks"):
text += f"涨跌统计: 上涨{market_data['up_count']}只({market_data['up_ratio']:.1f}%),下跌{market_data['down_count']}\n"
return text
# 测试函数
if __name__ == "__main__":
print("=" * 60)
print("测试智策AI智能体系统")
print("=" * 60)
# 创建模拟数据
test_market_data = {
"sh_index": {"close": 3200, "change_pct": 0.5},
"sz_index": {"close": 10500, "change_pct": 0.8},
"total_stocks": 5000,
"up_count": 3000,
"up_ratio": 60.0,
"down_count": 2000
}
test_news = [
{"title": "央行宣布降准0.5个百分点", "content": "为支持实体经济发展...", "publish_time": "2024-01-15 10:00"}
]
agents = SectorStrategyAgents()
# 测试宏观策略师
print("\n测试宏观策略师...")
result = agents.macro_strategist_agent(test_market_data, test_news)
print(f"分析师: {result['agent_name']}")
print(f"分析内容长度: {len(result['analysis'])} 字符")