| name | portfolio-report |
| description | 根据持仓和最新价格生成投资组合报告(日报/周报/月报)和智能提醒 |
Portfolio Report Skill
自动化投资组合报告系统,提供日报(极简)/周报(标准)/月报(详细)和智能提醒。
调用方式
/portfolio-report # 默认日报
/portfolio-report daily # 日报(极简版,1-2分钟)
/portfolio-report weekly # 周报(标准版,3-5分钟)
/portfolio-report monthly # 月报(详细版,5-10分钟)
/portfolio-report --check-alerts # 仅检查智能提醒
/portfolio-report --show-latest daily # 查看最近一次日报
/portfolio-report --list # 列出历史报告
执行流程
- 参数解析 → 确定报告类型(daily/weekly/monthly)
- 数据获取 → current-holdings + MCP实时价格
- 数据计算 → 盈亏、配置、偏离度
- 风险扫描 → 根据报告类型使用不同敏感度
- 生成报告 → Markdown格式输出
- 存档 → 自动模式下存入memories/reports/
- 通知 → 自动模式下发送系统通知
核心实现
1. 数据获取
从 current-holdings 获取持仓
调用 current-holdings skill,期望返回格式:
{
"总资产": 3000000,
"更新时间": "2026-01-26 15:00:00",
"持仓明细": [
{
"类别": "美股基金", # 美股基金/A股基金/美股个股/股息+成长/债券
"代码": "513100",
"名称": "纳斯达克ETF",
"数量": 10000,
"成本价": 2.50,
"买入日期": "2024-01-15",
"止损价": None, # 可选
"止盈价": None # 可选
},
...
],
"资产配置": {
"美股基金": {"金额": 1161000, "占比": 38.7, "目标范围": [35, 45]},
"A股基金": {"金额": 405000, "占比": 13.5, "目标范围": [10, 20]},
"美股个股": {"金额": 210000, "占比": 7.0, "目标范围": [5, 10]},
"股息+成长": {"金额": 390000, "占比": 13.0, "目标上限": 15},
"债券": {"金额": 840000, "占比": 28.0, "安全线": 30}
}
}
从 MCP 获取实时价格
根据持仓代码分类调用:
- A股/A股基金 →
efinance或akshare-mcp - 美股/美股基金 →
yahoo-finance-mcp
2. 数据计算
持仓盈亏计算
当前市值 = 数量 × 当前价
成本 = 数量 × 成本价
盈亏金额 = 当前市值 - 成本
盈亏率 = (当前价 - 成本价) / 成本价
今日盈亏 = 数量 × (当前价 - 昨收价)
今日涨跌幅 = (当前价 - 昨收价) / 昨收价
配置偏离度计算
当前占比 = 类别当前市值 / 总资产
目标中位数 = (目标下限 + 目标上限) / 2
偏离度 = 当前占比 - 目标中位数
状态 = "超配" # 当前>上限
| "低配" # 当前<下限
| "正常" # 在范围内
3. 风险扫描
扫描模式
日报(保守): 只扫描紧急+警告
- 止损触发、止盈触发
- 债券<30%、债券<28%
- 单日暴跌>5%、>8%
- 配置严重失衡(超出5%+)
周报(标准): 保守 + 接近阈值
- 距离止损止盈<10%
- 配置额度剩余<3%
- 择时信号(RSI接近30/70)
月报(激进): 标准 + 全面机会
- 潜在机会识别
- 估值低点
- 行业轮动
- 持仓逻辑验证
风险信号格式
{
"级别": "🔴 紧急" | "🟡 重要" | "🟢 提示" | "💡 机会",
"标题": "英伟达触发止损",
"内容": "当前价$612已触及止损位$612",
"建议": "建议立即执行: /investment-decision 选择'E. 考虑卖出'",
"类别": "止损触发"
}
4. 报告生成
日报格式(极简)
# 投资组合日报 📊
**日期**: 2026-01-26
**数据时间**: 15:00
## 资产概览
总资产: ¥3,024,500 (+0.82% / +24,500)
今日盈亏: +12,300 (+0.41%)
## 配置状态
✅ 美股基金: 38.5% (目标35-45%)
⚠️ 债券: 29.3% (安全线30%)
...
## ⚠️ 需要关注
[紧急+重要风险列表]
## 💡 可选行动
[提示信号列表]
周报格式(标准)
增加内容:
- 本周表现表格(各类别涨跌、贡献)
- 持仓明细(表现最佳/较弱 TOP3)
- 市场环境简要(美股/A股)
- 下周关注事项
月报格式(详细)
增加内容:
- 每个持仓的详细分析
- 买入逻辑回顾(从memory读取)
- 本月变化
- 与买入逻辑对照
- 持有建议
- 市场环境深度分析
- 配置健康度评估
- 下月行动计划
- 月度复盘
5. 智能提醒
提醒触发条件
- 止损/止盈触发 → 立即通知
- 债券破安全线 → 立即通知
- 单日暴跌>5% → 立即通知
- 择时信号触发 → 汇总到日报
提醒去重
使用 memories/alert_history.json 记录已发送的提醒:
{
"止损触发-英伟达": {
"最后提醒时间": "2026-01-26 14:35:00",
"去重周期": 24 # 小时
}
}
同一提醒在去重周期内不重复发送。
通知方式
- 系统通知(macOS):
osascript命令 - 微信(二期): Webhook
- 邮件(二期): SMTP
主入口
当用户调用 /portfolio-report 时,执行以下逻辑:
- 解析参数 → 确定报告类型
- 获取持仓数据 →
current-holdings - 获取实时价格 → MCP工具
- 计算盈亏和配置
- 风险扫描
- 生成报告
- 如果是
--auto模式:- 存档到 memories/reports/
- 生成摘要
- 发送通知
- 返回报告内容
使用示例
手动查看日报
$ /portfolio-report
# 输出日报(1-2分钟扫完)
# 发现: 债券29.5%接近安全线,无其他风险
自动生成周报
# 由 scheduler.py 每周日20:00自动调用
$ /portfolio-report weekly --auto
# 生成周报 → 存档 → 发送通知摘要
查看历史报告
$ /portfolio-report --show-latest weekly
# 显示最近一次周报
$ /portfolio-report --list
# 列出所有历史报告
与其他Skills集成
必须调用
current-holdings: 获取持仓数据
条件调用
technical-indicators: 获取RSI等技术指标(周报/月报)trend-analysis: 判断趋势(月报)financial-health: 基本面分析(月报深度)business-moat: 护城河评分(月报深度)valuation: 估值分析(月报深度)industry-analysis: 行业环境(月报深度)news-impact: 新闻影响(月报深度)
引导用户调用
investment-decision: 根据风险信号引导用户启动完整决策流程
配置文件
config/alert_rules.yaml: 提醒规则配置config/notification.yaml: 通知渠道配置config/thresholds.yaml: 阈值参数配置
注意事项
- 数据依赖: 确保
current-holdingsskill 正常工作 - MCP可用性: 如果MCP调用失败,使用昨日价格(从history读取)
- 提醒去重: 避免同一提醒短时间内重复发送
- 引导式建议: 不直接说"买"或"卖",引导用户启动 investment-decision
- 自动存档:
--auto模式下自动存档到 memories/reports/ - 时间格式: 统一使用 "YYYY-MM-DD HH:MM:SS"
实现细节提示
由于这是一个skill描述文件,具体的Python代码实现需要在Claude Code的运行时环境中完成。关键点:
- 使用
call_skill()调用其他skills - 使用
call_mcp()调用MCP工具 - 使用
load_yaml()加载配置 - 使用
read_memory()/write_memory()读写持久化数据 - 使用
subprocess.run()发送系统通知
当Claude看到这个skill文件时,会理解整体逻辑并执行相应的操作。