Investment Multi-Agent Decision System
v1.1.1投资研究多智能体决策系统 - 8位专业分析师并行研究,加权投票给出投资建议。支持A股股票、基金、ETF、可转债等多种投资标的分析。支持实时行情获取、财务数据分析、多维度分析、风险提示。触发词:股票分析、基金推荐、投资建议、买卖建议、估值分析、能买吗。
投资研究多智能体决策系统
🎯 核心特性
| 特性 | 说明 |
|---|---|
| ✅ 多智能体分析 | 8位专业分析师并行研究 |
| ✅ 加权投票机制 | 按权重计算最终投资建议 |
| ✅ 多标的支持 | 支持A股股票、基金、ETF、可转债 |
| ✅ 实时行情 | 通过腾讯财经API获取实时行情 |
| ✅ 财务数据分析 | 行情数据+行业估算(部分指标) |
| ✅ 完整报告 | 输出结构化投资决策报告 |
| ✅ 风险提示 | 识别并提示潜在风险 |
⚠️ 数据说明:本技能仅使用腾讯财经API(qt.gtimg.cn)获取数据。部分财务指标(如毛利率、净利率)基于行业经验估算,非真实财务报表数据。如需精确财务数据,请查阅官方财报或专业数据平台。
🚀 快速开始
1️⃣ 安装
cd ~/.openclaw/skills/boheng-investment-workflow/scripts
chmod +x install.sh
./install.sh
会自动完成:
- ✅ 创建
~/.openclaw/workspace/investment/数据目录 - ✅ 安装 Python 依赖(requests, beautifulsoup4, akshare)
- ✅ 测试基本功能
依赖说明
| 依赖包 | 用途 |
|---|---|
requests | HTTP 请求(必需) |
beautifulsoup4 | HTML 解析(可选) |
⚠️ 注意:本技能不再依赖 AKShare。所有数据通过腾讯财经API获取,部分财务指标为估算值。
2️⃣ 分析投资标的
股票分析
# 分析单只股票
python3 analyze_stock.py 600919
# 指定股票名称
python3 analyze_stock.py 600919 江苏银行
基金分析
# 分析基金
python3 analyze_fund.py 110022 # 易方达消费行业
# 指定基金名称
python3 analyze_fund.py 110022 易方达消费行业
ETF分析
# 分析ETF
python3 analyze_etf.py 510300 # 沪深300ETF
# 指定ETF名称
python3 analyze_etf.py 510300 沪深300ETF
可转债分析
# 分析可转债
python3 analyze_bond.py 113050 # 核能转债
# 指定可转债名称
python3 analyze_bond.py 113050 核能转债
3️⃣ 输出示例
==================================================
投资研究决策报告
==================================================
【标的】:600919 江苏银行
【研究时间】:2026-04-29
【当前价格】:¥11.40 (+0.35%)
==========================================
财务数据概览
==========================================
📊 盈利能力:
ROE: 12.5% | 毛利率: 45.2% | 净利率: 28.3%
📈 成长能力:
营收增速: 8.5% | 利润增速: 12.3%
💰 估值指标:
PE: 5.8倍 | PB: 0.65倍 | 股息率: 5.2%
==========================================
8位分析师投票结果
==========================================
1. 宏观经济分析师 → ✅ 建议 (权重 1.0x)
理由:货币政策宽松,利率下行利好银行股...
2. 行业研究员 → ✅ 建议 (权重 1.5x) ⭐
理由:银行业景气度稳定,息差收窄但资产质量改善...
==========================================
最终结论
==========================================
最终建议:✅ 建议投资
综合建议:
1. 估值处于历史低位,具备安全边际
2. 高股息率(5.2%),适合长期持有
3. 建议分批建仓,控制仓位
风险提示:
- 经济下行可能导致不良贷款上升
- 息差收窄压力持续
==========================================
📁 文件结构
boheng-investment-workflow/
├── SKILL.md # 主文档
├── README.md # 使用说明
└── scripts/
├── config.py # ⭐ 统一配置
├── monitor.py # ⭐ 行情监控模块
├── financial_data.py # ⭐ 财务数据模块(AKShare)
├── analysts.py # ⭐ 8位分析师模块
├── analyze_stock.py # ⭐ 股票分析入口
├── analyze_fund.py # ⭐ 基金分析入口
├── analyze_etf.py # ⭐ ETF分析入口
├── analyze_bond.py # ⭐ 可转债分析入口
├── report_generator.py # 报告生成器
├── install.sh # 安装脚本
└── uninstall.sh # 卸载脚本
👥 8位分析师及其职责
| # | 分析师 | 职责 | 分析维度 | 权重 | 数据来源 |
|---|---|---|---|---|---|
| 1 | 宏观经济分析师 | 宏观环境分析 | GDP/利率/政策 | 1.0x | AKShare宏观接口 |
| 2 | 行业研究员 | 行业景气度 | 赛道/竞争/政策 | 1.5x | AKShare行业数据 |
| 3 | 基本面分析师 | 公司财务分析 | 业绩/增长/护城河 | 1.5x | AKShare财务报表 |
| 4 | 技术分析师 | K线趋势分析 | 趋势/支撑/信号 | 1.0x | AKShare K线数据 |
| 5 | 风险控制师 | 风险识别 | 仓位/止损/分散 | 1.2x | 综合分析 |
| 6 | 量化分析师 | 数据统计分析 | 因子/相关/回测 | 1.0x | AKShare历史数据 |
| 7 | 情绪分析师 | 市场情绪分析 | 资金/贪婪恐惧 | 0.8x | AKShare资金流向 |
| 8 | 估值分析师 | 合理价值分析 | DCF/PE分位/安全边际 | 1.2x | AKShare估值数据 |
📊 AKShare 数据接口使用
⚠️ 重要说明:v1.1.1 版本起,本技能已移除 AKShare 依赖,改为仅使用腾讯财经API。以下文档保留供参考,但代码中不再使用 AKShare。
行情数据(已弃用 AKShare)
import akshare as ak
# 实时行情
df = ak.stock_zh_a_spot_em()
quote = df[df['代码'] == '600919'].iloc[0]
# 历史K线
df = ak.stock_zh_a_hist(symbol="600919", period="daily",
start_date="20250101", end_date="20260429",
adjust="qfq") # 前复权
财务数据
import akshare as ak
# 主要财务指标
df = ak.stock_financial_analysis_indicator(symbol="600919")
# 包含:ROE、毛利率、净利率、营收增速等
# 资产负债表
df = ak.stock_balance_sheet_by_report_em(symbol="600919")
# 利润表
df = ak.stock_profit_sheet_by_report_em(symbol="600919")
# 现金流量表
df = ak.stock_cash_flow_sheet_by_report_em(symbol="600919")
估值数据
import akshare as ak
# 市盈率、市净率、股息率
df = ak.stock_a_lg_indicator(symbol="600919")
# 包含:pe_ttm、pb、dv_ratio(股息率)
# 估值分位
# 需要结合历史数据计算
资金流向
import akshare as ak
# 个股资金流向
df = ak.stock_individual_fund_flow(stock="600919", market="sh")
# 主力资金
df = ak.stock_fund_flow_individual(symbol="600919")
行业数据
import akshare as ak
# 行业板块行情
df = ak.stock_board_industry_name_em(symbol="银行")
# 个股所属行业
df = ak.stock_individual_info_em(symbol="600919")
📈 各分析师数据使用详解
1. 宏观经济分析师
数据接口:
# 中国GDP增速
df = ak.macro_china_gdp()
# CPI/PPI
df = ak.macro_china_cpi_yearly()
# 社融数据
df = ak.macro_china_shrz_money()
# 利率数据
df = ak.macro_china_shibor_all()
分析逻辑:
- GDP增速 > 5%:经济扩张,利好股市
- CPI < 3%:通胀温和,货币政策空间大
- 社融增速上升:信用扩张,利好市场
2. 行业研究员
数据接口:
# 行业涨跌幅排行
df = ak.stock_board_industry_index_em()
# 行业资金流向
df = ak.stock_board_industry_fund_flow_em()
# 行业估值
df = ak.stock_board_industry_pe_lg(symbol="银行")
分析逻辑:
- 行业涨跌幅排名前30%:景气度高
- 行业资金净流入:资金关注度高
- 行业PE处于历史低位:估值优势
3. 基本面分析师
数据接口:
# 主要财务指标
df = ak.stock_financial_analysis_indicator(symbol="600919")
# 关键指标:
# - roe: 净资产收益率
# - roa: 总资产收益率
# - grossprofitmargin: 毛利率
# - netprofitmargin: 净利率
# - revenue_growth: 营收增速
# - net_profit_growth: 利润增速
# - debt_to_asset: 资产负债率
# - current_ratio: 流动比率
# - ocf_to_revenue: 经营现金流/营收
评分标准:
| 指标 | 优秀 | 良好 | 一般 | 较差 |
|---|---|---|---|---|
| ROE | >15% | 10-15% | 5-10% | <5% |
| 毛利率 | >40% | 25-40% | 15-25% | <15% |
| 营收增速 | >20% | 10-20% | 0-10% | <0% |
| 资产负债率 | <40% | 40-60% | 60-75% | >75% |
4. 技术分析师
数据接口:
# 日K线数据
df = ak.stock_zh_a_hist(symbol="600919", period="daily",
start_date="20250101", adjust="qfq")
# 列包含:开盘、收盘、最高、最低、成交量、成交额
技术指标计算:
import pandas as pd
# 均线
df['MA5'] = df['收盘'].rolling(5).mean()
df['MA10'] = df['收盘'].rolling(10).mean()
df['MA20'] = df['收盘'].rolling(20).mean()
# MACD
exp12 = df['收盘'].ewm(span=12, adjust=False).mean()
exp26 = df['收盘'].ewm(span=26, adjust=False).mean()
df['MACD'] = exp12 - exp26
df['SIGNAL'] = df['MACD'].ewm(span=9, adjust=False).mean()
# RSI
delta = df['收盘'].diff()
gain = (delta.where(delta > 0, 0)).rolling(14).mean()
loss = (-delta.where(delta < 0, 0)).rolling(14).mean()
rs = gain / loss
df['RSI'] = 100 - (100 / (1 + rs))
信号判断:
- 金叉:MA5上穿MA20,MACD上穿信号线
- 超买:RSI > 70
- 超卖:RSI < 30
5. 风险控制师
数据来源:综合其他分析师数据
风险评估:
# 波动率(年化)
volatility = df['收盘'].pct_change().std() * (252 ** 0.5)
# 最大回撤
cummax = df['收盘'].cummax()
drawdown = (df['收盘'] - cummax) / cummax
max_drawdown = drawdown.min()
# 风险等级
if max_drawdown > -0.3:
risk_level = "高"
elif max_drawdown > -0.2:
risk_level = "中"
else:
risk_level = "低"
6. 量化分析师
数据接口:
# 历史行情(用于回测)
df = ak.stock_zh_a_hist(symbol="600919", period="daily",
start_date="20240101", adjust="qfq")
# 指数数据(计算相关性)
df_index = ak.stock_zh_index_daily(symbol="sh000300") # 沪深300
因子计算:
# 动量因子(过去20日收益率)
momentum = (df['收盘'].iloc[-1] / df['收盘'].iloc[-20] - 1) * 100
# 波动率因子
volatility = df['收盘'].pct_change().std() * 100
# 换手率因子
turnover = df['换手率'].mean()
# 价值因子(需要估值数据)
value_score = 100 - pe_percentile # PE分位越低越好
7. 情绪分析师
数据接口:
# 个股资金流向
df = ak.stock_individual_fund_flow(stock="600919", market="sh")
# 主力资金净流入
main_flow = df['主力净流入-净额'].iloc[-1]
# 融资融券
df = ak.stock_margin_detail_szse(date="20260429")
# 或
df = ak.stock_margin_detail_sse(date="20260429")
# 北向资金
df = ak.stock_hsgt_north_net_flow_in_em()
情绪判断:
- 主力资金连续3日净流入:情绪偏多
- 融资余额上升:杠杆资金入场
- 北向资金净流入:外资看好
8. 估值分析师
数据接口:
# 估值指标
df = ak.stock_a_lg_indicator(symbol="600919")
# pe_ttm: 滚动市盈率
# pb: 市净率
# ps_ttm: 市销率
# dv_ratio: 股息率
# total_mv: 总市值
# 历史PE数据(计算分位)
df_hist = ak.stock_a_pe_and_pb_analysis(symbol="600919")
估值分位计算:
# PE分位
pe_current = df['pe_ttm'].iloc[-1]
pe_hist = df_hist['pe'] # 历史PE序列
pe_percentile = (pe_hist < pe_current).sum() / len(pe_hist) * 100
# 分位解读
if pe_percentile < 20:
valuation = "严重低估"
elif pe_percentile < 40:
valuation = "偏低"
elif pe_percentile < 60:
valuation = "合理"
elif pe_percentile < 80:
valuation = "偏高"
else:
valuation = "严重高估"
🔄 决策流程
用户提问投资问题
↓
识别投资标的类型(股票/基金/ETF/可转债)
↓
获取实时行情(AKShare)
↓
获取财务/净值数据(AKShare)
↓
并行启动8个分析师
↓
各分析师独立分析并给出建议
↓
收集投票结果(✅建议/⚠️谨慎/❌不建议)
↓
按权重计算最终得分
↓
输出综合报告
💾 数据存储
watchlist.txt(自选股列表)
600919|江苏银行
000921|海信家电
reports/(分析报告存档)
2026-04-29_600919_江苏银行.txt
2026-04-29_000921_海信家电.txt
🔧 高级用法
批量分析
# 分析多只股票
for code in 600919 000921 600926; do
python3 analyze_stock.py $code
done
自定义分析
from financial_data import FinancialDataFetcher
from analysts import run_all_analysts
# 获取财务数据
fetcher = FinancialDataFetcher()
financial = fetcher.get_all_data("600919")
# 运行分析师
results = run_all_analysts(quote, financial)
❓ 常见问题
Q1: AKShare 接口报错怎么办?
部分接口有频率限制,建议:
- 添加请求间隔:
time.sleep(1) - 使用缓存减少重复请求
- 切换备用接口
Q2: 如何修改分析师权重?
编辑 scripts/config.py:
ANALYST_WEIGHTS = {
"宏观经济分析师": 1.0,
"行业研究员": 1.5,
# ...
}
Q3: 支持港股/美股吗?
AKShare 支持港股和美股数据,可在 financial_data.py 中扩展。
Q4: 支持哪些投资标的?
当前支持:
- A股股票:完整财务分析
- 公募基金:净值、持仓、业绩分析
- ETF:指数跟踪、估值分析
- 可转债:转股价值、溢价率分析
📊 基金分析
基金数据接口
import akshare as ak
# 基金基本信息
df = ak.fund_name_em()
fund_info = df[df['基金代码'] == '110022'].iloc[0]
# 基金净值
df = ak.fund_open_fund_daily_em(symbol="110022")
# 包含:单位净值、累计净值、日增长率
# 基金历史净值
df = ak.fund_open_fund_info_em(fund="110022", indicator="单位净值")
# 基金持仓
df = ak.fund_portfolio_em(fund="110022")
# 包含:股票持仓、债券持仓、行业分布
# 基金业绩排名
df = ak.fund_performance_open_fund_em(symbol="110022")
# 基金经理
df = ak.fund_manager_em(fund="110022")
基金分析维度
| 分析师 | 基金分析维度 |
|---|---|
| 宏观经济 | 市场环境、利率走势 |
| 行业研究 | 基金持仓行业分布 |
| 基本面 | 基金业绩、持仓股票质量 |
| 技术面 | 净值走势、MA趋势 |
| 风险控制 | 波动率、最大回撤 |
| 量化分析 | 夏普比率、Alpha/Beta |
| 情绪分析 | 基金规模变化、申购赎回 |
| 估值分析 | 基金估值、持仓股票PE |
基金评分标准
| 指标 | 优秀 | 良好 | 一般 | 较差 |
|---|---|---|---|---|
| 年化收益 | >15% | 10-15% | 5-10% | <5% |
| 夏普比率 | >1.5 | 1.0-1.5 | 0.5-1.0 | <0.5 |
| 最大回撤 | <10% | 10-20% | 20-30% | >30% |
| 基金规模 | 适中 | 偏大/偏小 | 过大/过小 | 极端 |
📈 ETF分析
ETF数据接口
import akshare as ak
# ETF列表
df = ak.fund_etf_spot_em()
# ETF实时行情
df = ak.fund_etf_fund_daily_em(symbol="510300")
# ETF历史净值
df = ak.fund_etf_fund_info_em(fund="510300", indicator="单位净值")
# ETF持仓(指数ETF)
# 查询指数成分股
df = ak.index_stock_cons_weight_csindex(symbol="000300") # 沪深300成分股
ETF分析维度
| 分析师 | ETF分析维度 |
|---|---|
| 宏观经济 | 市场环境、政策导向 |
| 行业研究 | ETF跟踪指数/行业 |
| 基本面 | 指数成分股质量 |
| 技术面 | ETF价格走势、MA趋势 |
| 风险控制 | 波动率、跟踪误差 |
| 量化分析 | 指数估值、PE分位 |
| 情绪分析 | ETF成交量、资金流向 |
| 估值分析 | 指数PE/PB分位 |
ETF类型分类
| ETF类型 | 代码示例 | 特点 |
|---|---|---|
| 宽基ETF | 510300(沪深300) | 跟踪宽基指数 |
| 行业ETF | 512690(酒ETF) | 跟踪行业指数 |
| 主题ETF | 515790(新能源) | 跟踪主题指数 |
| 跨境ETF | 513100(纳指ETF) | 跟踪海外指数 |
| 债券ETF | 511010(国债ETF) | 跟踪债券指数 |
💰 可转债分析
可转债数据接口
import akshare as ak
# 可转债列表
df = ak.bond_cb_jsl() # 集思录数据
# 可转债实时行情
df = ak.bond_zh_hs_cov_spot()
# 可转债详情
df = ak.bond_cb_jsl_detail(symbol="113050")
# 可转债历史行情
df = ak.bond_zh_hs_cov_hist(symbol="113050")
可转债核心指标
| 指标 | 说明 | 计算公式 |
|---|---|---|
| 转股价 | 转换为股票的价格 | 固定值 |
| 转股价值 | 100/转股价×正股价格 | 动态变化 |
| 转股溢价率 | (转债价格-转股价值)/转股价值 | 衡量估值 |
| 纯债价值 | 债券部分价值 | 到期收益率计算 |
| 纯债溢价率 | (转债价格-纯债价值)/纯债价值 | 衡量股性 |
| 双低指标 | 转股溢价率+纯债溢价率 | 选债参考 |
可转债分析维度
| 分析师 | 可转债分析维度 |
|---|---|
| 宏观经济 | 利率环境、信用环境 |
| 行业研究 | 正股所属行业 |
| 基本面 | 正股财务质量、信用评级 |
| 技术面 | 转债价格走势、正股走势 |
| 风险控制 | 信用风险、赎回风险 |
| 量化分析 | 双低指标、套利空间 |
| 情绪分析 | 转债成交量、正股情绪 |
| 估值分析 | 转股溢价率、纯债溢价率 |
可转债评分标准
| 指标 | 优秀 | 良好 | 一般 | 较差 |
|---|---|---|---|---|
| 转股溢价率 | <5% | 5-15% | 15-30% | >30% |
| 纯债溢价率 | <20% | 20-40% | 40-60% | >60% |
| 双低指标 | <120 | 120-150 | 150-180 | >180 |
| 信用评级 | AAA | AA+ | AA | AA-及以下 |
| 正股ROE | >15% | 10-15% | 5-10% | <5% |
📚 参考资源
📜 版本变更历史
v1.1.1 (2026-04-29)
安全修复:
- 🔒 统一数据源为腾讯财经API(qt.gtimg.cn)
- 🔒 移除所有其他域名
- 🔒 移除 AKShare 依赖
- 🔒 声明
background_tasks: false
数据说明:
- ⚠️ 部分财务指标为估算值(毛利率、净利率等)
- ⚠️ 基金净值数据为估算值
- ⚠️ 可转债转股溢价率为估算值
v1.1.0 (2026-04-29)
新增功能:
- ✅ 新增基金分析支持(
analyze_fund.py) - ✅ 新增ETF分析支持(
analyze_etf.py) - ✅ 新增可转债分析支持(
analyze_bond.py) - ✅ 基金净值、持仓、业绩分析
- ✅ ETF指数跟踪、估值分析
- ✅ 可转债转股价值、溢价率分析
文档更新:
- 📝 新增基金分析数据接口说明
- 📝 新增ETF分析数据接口说明
- 📝 新增可转债分析数据接口说明
- 📝 新增各标的分析维度说明
- 📝 新增评分标准说明
v1.0.3 (2026-04-29)
安全修复:
- 🔒 移除所有非白名单域名(雪球、百度、东方财富)
- 🔒 仅使用腾讯财经域名:
qt.gtimg.cn,web.ifzq.gtimg.cn - 🔒 所有网络请求使用 HTTPS
- 🔒 SKILL.md 添加
https_only: true声明
v1.0.2 (2026-04-29)
安全修复:
- 🔒 统一数据目录为
~/.openclaw/workspace/investment/ - 🔒 添加域名白名单
- 🔒 安装脚本添加错误处理和虚拟环境提示
v1.0.1 (2026-04-29)
修复:
- 🐛 更新技能名称为英文
v1.0.0 (2026-04-29)
首发版本:
- ✅ 8位专业分析师并行研究机制
- ✅ 加权投票决策系统
- ✅ 多数据源行情监控
- ✅ 真实财务数据获取
- ✅ 完整投资报告生成
- ✅ A股股票分析支持
<div align="center"> <strong>Boheng Investment Workflow</strong><br> 让投资决策更理性、更全面 📊🤖 </div>
Version tags
latest
