| name | fund_analysis |
| description | 分析基金数据,从天天基金网获取基金信息并生成HTML分析报告。当用户输入'帮我分析基金,代号为xxxx'或类似请求时触发。 |
基金分析 Skill
功能描述
此 skill 用于从天天基金网获取基金历史数据,通过 Python 脚本进行深度数据分析,最终生成包含可视化图表、数据表格和 Agent 解读的 PPT 风格的 HTML 分析报告。
分析维度:
- 净值走势可视化
- 多周期净值统计分析(1个月、半年、1年、3年、成立以来)
- 压力指标分析(支撑/压力位识别)
- 不同间隔周期涨跌幅分析(1天、3天、1周、1月、半年、1年)
- 收益反转周期分析
- 月度收益分布
触发条件
当用户输入以下或类似表达时触发:
- "帮我分析基金"
- "分析基金"
- "基金分析"
- 包含基金代码(如 012805)
执行流程
Step 1: 创建输出目录
mkdir -p ./output_fund/{基金代码}/raw
mkdir -p ./output_fund/{基金代码}/analysis
mkdir -p ./output_fund/{基金代码}/report
Step 2: 获取基金数据
- 从用户输入中提取基金代码(6位数字)
- 构建请求 URL:
https://fund.eastmoney.com/pingzhongdata/{基金代码}.js?v={时间戳}
- 时间戳格式:年月日时分秒,如 20260410022145
- 发送 HTTP GET 请求获取数据
- 将返回的 JS 数据保存到
./output_fund/{基金代码}/raw/{基金代码}_raw.js
Step 3: 解析数据
返回的 JS 文件包含以下关键变量:
基金基本信息
| 变量名 | 说明 | 示例值 |
|---|
fS_name | 基金名称 | "广发恒生科技ETF联接(QDII)C" |
fS_code | 基金代码 | "012805" |
fund_sourceRate | 原费率 | "0.00" |
fund_Rate | 现费率 | "0.00" |
fund_minsg | 最小申购金额 | "10" |
收益率数据
| 变量名 | 说明 | 示例值 |
|---|
syl_1n | 近一年收益率(%) | "-4.23" |
syl_6y | 近6月收益率(%) | "-27.71" |
syl_3y | 近3月收益率(%) | "-16.73" |
syl_1y | 近1月收益率(%) | "-3.08" |
净值走势数据
| 变量名 | 说明 | 数据格式 |
|---|
Data_netWorthTrend | 单位净值走势 | [{"x":时间戳,"y":净值,"equityReturn":回报率,"unitMoney":派送金},...] |
Data_acWorthTrend | 累计净值走势 | [[时间戳,累计净值],...] |
Data_grandTotal | 累计收益率走势 | [[时间戳,收益率],...] |
Step 4: 数据分析(Python脚本)
使用 Python 脚本进行深度数据分析:
python scripts/fund_analyzer.py \
--code {基金代码} \
--input ./output_fund/{基金代码}/raw/{基金代码}_raw.js \
--output ./output_fund/{基金代码}/report/report_{基金代码}.html \
--json-output ./output_fund/{基金代码}/analysis/analysis_{基金代码}.json
分析维度
-
净值走势可视化
- 绘制累计净值总体走势曲线
- 支持鼠标悬停查看具体日期和数值
- 支持缩放查看不同时间段
-
多周期净值统计分析
| 周期 | 说明 |
|---|
| 1个月 | 最近30天的净值统计 |
| 半年 | 最近180天的净值统计 |
| 1年 | 最近365天的净值统计 |
| 3年 | 最近1095天的净值统计 |
| 成立以来 | 全部历史净值统计 |
每个周期计算:
- 平均值、中位数
- 最高值、最低值
- 标准差(波动程度)
- 统计区间起止日期
-
压力指标分析
基于净值区间的支撑与压力分析:
- 将历史净值区间划分为10个档位
- 统计每个档位内买入后的上涨/下跌概率
- 计算每个档位的平均收益率(5日、10日、20日)
- 识别支撑位(上涨概率≥60%)和压力位(下跌概率≥60%)
- 标注当前净值所在区间
- 显示最近的支撑位和压力位
-
不同间隔周期涨跌幅分析
| 周期 | 说明 |
|---|
| 1天 | 日涨幅 |
| 3天 | 3日累计涨幅 |
| 1周 | 周涨幅(7天) |
| 1月 | 月涨幅(30天) |
| 半年 | 6个月涨幅(180天) |
| 1年 | 年度涨幅(365天) |
每个周期计算(使用不重叠窗口):
- 上涨次数、上涨均值、上涨中位数、最大涨幅
- 下跌次数、下跌均值、下跌中位数、最大跌幅
-
收益反转周期分析
- 正转负平均天数:从正收益状态转为负收益状态的平均时间
- 负转正平均天数:从负收益状态转为正收益状态的平均时间
- 包含平均、中位数、最大值统计
-
月度收益分析
- 上涨月份统计:上涨月数、平均涨幅、中位数涨幅、最大涨幅
- 下跌月份统计:下跌月数、平均跌幅、中位数跌幅、最大跌幅
- 月度收益分布图表
Step 5: Agent 数据解读
Agent 需要同时参考以下两个文件进行数据解读:
- JSON 分析结果:
./output_fund/{基金代码}/analysis/analysis_{基金代码}.json - 包含结构化数据
- HTML 报告:
./output_fund/{基金代码}/report/report_{基金代码}.html - 包含可视化图表和表格
解读流程:
- 读取 JSON 文件获取详细的数值数据
- 查看 HTML 报告了解可视化呈现(净值走势、压力指标分布、月度收益图等)
- 综合分析后,将解读内容追加到 HTML 报告的"数据洞察"部分
解读要点:
- 净值走势解读:整体趋势是上涨/下跌/震荡?波动幅度如何?
- 多周期净值分析:不同时间周期的净值分布特征,当前净值处于什么位置?
- 压力指标解读:当前是否处于支撑位或压力位?最近的支撑/压力位在哪里?
- 周期收益解读:不同持有周期的收益表现如何?短期vs长期?
- 反转周期解读:正收益平均能持续多久?何时需要警惕?
- 月度规律解读:是否存在明显的季节性规律?
- 投资建议:基于以上分析给出买入/持有/卖出建议
解读输出:
将解读内容追加到 HTML 报告的"数据洞察"部分,替换原有的"等待Agent解读..."文本。
Step 6: 生成最终报告
最终生成包含以下内容的 HTML 格式报告:
报告结构:
-
基金基本信息
-
累计净值走势
- 可交互的净值曲线图(支持悬停查看具体数值、缩放查看时间段)
-
净值统计分析
- 多周期净值统计表格(平均值、中位数、最高最低值、标准差)
- 帮助了解净值分布特征和当前位置
-
压力指标分析
- 当前净值位置显示
- 最近支撑位和压力位提示
- 10个净值区间的详细分析表格
- 每个区间的上涨/下跌概率(带可视化进度条)
- 5日和20日平均收益
- 支撑位/压力位/中性区间标识
-
不同间隔周期涨跌幅分析
- 完整的数据表格(间隔周期、样本数、上涨/下跌统计)
- 蓝色渐变表头,清晰展示各周期表现
-
收益反转周期分析
- 反转天数统计卡片(平均、中位数、最大值)
- 持有策略建议
-
月度收益分析
-
数据洞察
HTML报告特性:
- PPT风格布局:采用横版16:9比例(297mm × 167mm),每页一个幻灯片
- 响应式设计:完美适配移动端阅读体验
- 现代化UI:渐变色彩、圆角卡片、悬停效果
- PDF导出:右上角提供一键导出PDF按钮,每页对应一个PPT幻灯片
- 交互图表:使用 ECharts 绘制,支持缩放和悬停查看详情
PPT布局说明:
- Slide 1: 封面 - 基金名称、代码、报告时间、免责声明
- Slide 2: 基金基本信息 - 4个关键指标卡片
- Slide 3: 累计净值走势 - 全页图表展示
- Slide 4: 净值统计分析 - 多周期统计表格
- Slide 5: 压力指标分析 - 支撑位/压力位识别(优化布局,表格占比更大)
- Slide 6: 周期涨跌幅分析 - 不同持有周期表现
- Slide 7: 收益反转周期分析 - 正转负/负转正统计
- Slide 8: 月度收益分析 - 月度统计+柱状图
- Slide 9: 数据洞察 (1/2) - Agent解读:基金概况与走势分析
- Slide 10: 数据洞察 (2/2) - Agent解读:风险提示与投资策略
PDF导出说明:
- 使用浏览器原生打印功能导出PDF
- 自动设置横向布局(297mm × 167mm)
- 保留背景颜色和渐变效果
- 每页幻灯片对应PDF一页,无空白页
输出文件
| 文件类型 | 路径 | 说明 |
|---|
| 原始数据 | ./output_fund/{基金代码}/raw/{基金代码}_raw.js | 从天天基金网获取的原始 JS 数据 |
| 分析结果 | ./output_fund/{基金代码}/analysis/analysis_{基金代码}.json | Python 脚本生成的结构化分析数据 |
| HTML报告 | ./output_fund/{基金代码}/report/report_{基金代码}.html | 最终可视化报告(支持移动端和PDF导出) |
压力指标分析算法说明
核心逻辑
- 区间划分:将历史最高净值到最低净值之间划分为10个等宽区间
- 数据统计:对每个区间,统计历史上落入该区间的所有交易日
- 未来收益计算:计算从这些交易日买入后,未来5天、10天、20天的收益率
- 概率计算:
- 上涨概率 = 未来5天收益为正的次数 / 总次数 × 100%
- 下跌概率 = 未来5天收益为负的次数 / 总次数 × 100%
- 区间类型判定:
- 支撑位:上涨概率 ≥ 60% 且 反弹概率 ≥ 55%
- 压力位:下跌概率 ≥ 60% 且 回落概率 ≥ 55%
- 中性区间:不满足上述条件
使用建议
- 支撑位:历史上该区间买入后上涨概率较高,适合考虑加仓
- 压力位:历史上该区间买入后下跌概率较高,适合考虑减仓或观望
- 当前位置:报告会标注当前净值所在区间,并显示最近的支撑位和压力位