Claude Code Plugins

Community-maintained marketplace

Feedback

portfolio-report

@codehehe/finance_skills
1
4

根据持仓和最新价格生成投资组合报告(日报/周报/月报)和智能提醒

Install Skill

Shared

Installs to .agents/skills, used by Codex, Amp, Warp, Cursor, OpenCode, and more.

CodexAmp
Warp
CursorOpenCode
Cline
Gemini CLI
GitHub Copilot
Personal

Available across projects.

$npx skills-installer add @codehehe/finance_skills/portfolio-report --client shared
Project

Writes to .agents/skills.

$npx skills-installer add @codehehe/finance_skills/portfolio-report -p --client shared
Note: Review the skill instructions before using it.

SKILL.md

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             # 列出历史报告

执行流程

  1. 参数解析 → 确定报告类型(daily/weekly/monthly)
  2. 数据获取 → current-holdings + MCP实时价格
  3. 数据计算 → 盈亏、配置、偏离度
  4. 风险扫描 → 根据报告类型使用不同敏感度
  5. 生成报告 → Markdown格式输出
  6. 存档 → 自动模式下存入memories/reports/
  7. 通知 → 自动模式下发送系统通知

核心实现

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股基金 → efinanceakshare-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 时,执行以下逻辑:

  1. 解析参数 → 确定报告类型
  2. 获取持仓数据 → current-holdings
  3. 获取实时价格 → MCP工具
  4. 计算盈亏和配置
  5. 风险扫描
  6. 生成报告
  7. 如果是 --auto 模式:
    • 存档到 memories/reports/
    • 生成摘要
    • 发送通知
  8. 返回报告内容

使用示例

手动查看日报

$ /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: 阈值参数配置

注意事项

  1. 数据依赖: 确保 current-holdings skill 正常工作
  2. MCP可用性: 如果MCP调用失败,使用昨日价格(从history读取)
  3. 提醒去重: 避免同一提醒短时间内重复发送
  4. 引导式建议: 不直接说"买"或"卖",引导用户启动 investment-decision
  5. 自动存档: --auto 模式下自动存档到 memories/reports/
  6. 时间格式: 统一使用 "YYYY-MM-DD HH:MM:SS"

实现细节提示

由于这是一个skill描述文件,具体的Python代码实现需要在Claude Code的运行时环境中完成。关键点:

  1. 使用 call_skill() 调用其他skills
  2. 使用 call_mcp() 调用MCP工具
  3. 使用 load_yaml() 加载配置
  4. 使用 read_memory() / write_memory() 读写持久化数据
  5. 使用 subprocess.run() 发送系统通知

当Claude看到这个skill文件时,会理解整体逻辑并执行相应的操作。