🧪 Skills

Portfolio Daily Tracker

Track and report multi-group stock portfolios with daily snapshots, live Yahoo Finance prices, P&L analytics, and push notifications (Feishu/Telegram). Suppo...

v1.2.0
❤️ 0
⬇️ 116
👁 1
Share

Description


name: portfolio-daily-tracker description: Track and report multi-group stock portfolios with daily snapshots, live Yahoo Finance prices, P&L analytics, and push notifications (Feishu/Telegram). Supports A-shares, HK, US markets. Use when asked about holdings, buy/sell/rebalance positions, generate daily portfolio reports, check drawdown or returns, update fund/cash balances, or run the full snapshot-report-push pipeline. version: 1.2.0 setup: scripts/setup.sh env: OPENAI_API_KEY: description: OpenAI API key for AI chat features required: false FEISHU_WEBHOOK: description: Feishu/Lark webhook URL for push notifications required: false TELEGRAM_BOT_TOKEN: description: Telegram bot token for push notifications required: false PORTFOLIO_DIR: description: Override default portfolio data directory path required: false requires:

  • python3 >= 3.9
  • pip packages: yfinance, pandas, requests, fastapi, uvicorn
  • Engine scripts installed via setup.sh (clones repo with portfolio_manager.py, portfolio_snapshot.py, portfolio_report.py)

Portfolio Daily Tracker Skill

Prerequisites / 前置条件

This skill requires the engine scripts from the main repository. Run setup first:

bash scripts/setup.sh [target_dir]

This clones the repo, creates data directories, copies config templates, and installs Python dependencies. The Python engine scripts (portfolio_manager.py, portfolio_snapshot.py, portfolio_report.py, portfolio_daily_update.py) are located in engine/scripts/ after setup.

触发条件

当用户提到以下内容时使用此技能:

  • 持仓变动(买入、卖出、加仓、减仓、调仓)
  • 查询当前持仓、市值、盈亏
  • 询问投资组合报告、投资表现
  • 提到具体股票名称+数量变化
  • 询问回撤、收益率、资产走势
  • 基金/现金余额变更

系统概述

投资组合跟踪系统采用每日快照模式:

  • 持仓文件: portfolio/holdings/YYYY-MM-DD.json — 每天独立的持仓记录
  • 快照文件: portfolio/snapshots/YYYY-MM-DD.json — 每日计算后的完整数据(含价格、市值、盈亏)
  • 配置文件: portfolio/config.json — 组别定义、API配置
  • 历史CSV: portfolio/history.csv — 时序数据汇总

数据目录: $PROJECT_ROOT/engine/portfolio/(可通过环境变量 PORTFOLIO_DIR 覆盖)

投资组合分组

系统支持多个投资组合分组,每组有独立的成本基数和持仓。例如:

  • 进攻组 (Growth): 高成长个股 + 科技股 + 基金 + 现金
  • 稳健组 (Income): 蓝筹 + ETF + 债券 + 现金

注意:同一只股票可以同时出现在不同组中(分别持有不同数量),更新时需要指定组别。

持仓变更操作

当用户说"卖了500股某股"、"加了200股某股"等,执行以下步骤:

1. 解析用户意图

  • 识别股票名称 → 映射到 ticker(参见下方 Ticker 格式表)
  • 识别操作类型:买入/加仓(+quantity), 卖出/减仓(-quantity)
  • 识别组别:如果用户未指定且股票存在于多个组中,询问"哪个组?"
  • 识别数量和可选的成本价

2. 执行变更

cd $PROJECT_ROOT/engine
python3 scripts/portfolio_manager.py update <ticker> --qty <new_total> [--cost <price>] [--group <组名>]

常用命令:

# 查看当前持仓
python3 scripts/portfolio_manager.py show

# 更新持仓数量(设置为新的总量)
python3 scripts/portfolio_manager.py update SHA:603259 --qty 4000 --group Growth

# 添加新持仓
python3 scripts/portfolio_manager.py add NASDAQ:NVDA NVIDIA Growth --qty 10 --cost 120.0 --market us

# 删除持仓
python3 scripts/portfolio_manager.py remove NASDAQ:META --group Growth

# 显示分组信息
python3 scripts/portfolio_manager.py groups

基金/现金变更

当用户说"今天基金涨了500块"、"基金现在值16万了"、"现金变成-50万"等:

基金更新

# 设置某组基金市值(单位:元)
python3 scripts/portfolio_manager.py set-fund --group Growth --value 160000

# 设置另一组基金市值
python3 scripts/portfolio_manager.py set-fund --group Income --value 5000

现金更新

# 设置某组现金(可为负数,表示融资/杠杆)
python3 scripts/portfolio_manager.py set-cash --group Growth --value -500000

# 设置另一组现金
python3 scripts/portfolio_manager.py set-cash --group Income --value 3300

解析用户意图

  • "基金值16万" / "基金现在值16万" → set-fund --value 160000
  • "基金涨了500" → 先读取当前 fund 值,加500后 set-fund
  • "基金赎回了1万" → 先读取当前 fund 值,减10000后 set-fund
  • "转入5万" / "充值5万" → 先读取当前 cash 值,加50000后 set-cash
  • "现金变成-48万" → set-cash --value -480000

3. 确认变更

变更后读取并展示当天持仓文件,确认更新正确。

查询操作

查看最新快照

# 查看最新快照
ls -t engine/portfolio/snapshots/*.json | head -1 | xargs cat | python3 -m json.tool

生成/查看报告

# 生成今日快照(需取价)
python3 engine/scripts/portfolio_snapshot.py --date $(date +%Y-%m-%d)

# 生成报告
python3 engine/scripts/portfolio_report.py --date $(date +%Y-%m-%d)

查看历史数据

# 查看历史CSV
cat engine/portfolio/history.csv

# 查看特定日期快照
cat engine/portfolio/snapshots/2026-03-08.json | python3 -m json.tool

Ticker 格式表

市场 格式 示例 Yahoo代码
上交所A股 SHA:XXXXXX SHA:603259 603259.SS
深交所A股 SHE:XXXXXX SHE:002050 002050.SZ
上交所ETF SHA:XXXXXX SHA:513050 513050.SS
港股 HKG:XXXX HKG:0700 0700.HK
纳斯达克 NASDAQ:XXXX NASDAQ:GOOGL GOOGL
纽交所 NYSE:XXXX NYSE:BRK.B BRK-B

用户通常用中文名或简称,需要你映射为 Ticker 格式。 如果不确定某只股票的 Ticker,先用 portfolio_manager.py show 查看已有持仓中的命名。

交易信号短语识别

用户可能使用的中文表达:

  • "卖了/卖掉/清仓/减持" → 减少数量
  • "买了/加了/加仓/建仓" → 增加数量
  • "换仓/调仓 X→Y" → 卖出X + 买入Y
  • "成本调了/成本变成" → 更新 cost_price
  • "基金赎回了/基金买了" → 更新 fund 值
  • "转入/充值" → 更新 cash

完整日报流水线

当用户要求生成日报时,运行完整管道:

cd $PROJECT_ROOT/engine

# 1. 获取最新价格并生成快照
python3 scripts/portfolio_snapshot.py --date $(date +%Y-%m-%d)

# 2. 生成 Markdown 报告
python3 scripts/portfolio_report.py --date $(date +%Y-%m-%d)

# 3.(可选)推送到飞书/Telegram
# 在 scripts/portfolio-daily.sh 中可用 openclaw message send 推送

Tools Provided

  1. get_tracker_snapshot — 获取投资组合快照,包含分组持仓、融资杠杆、量化指标
  2. update_holdings — 更新每日持仓,接受自然语言描述
  3. run_portfolio_pipeline — 运行完整管道:快照→报告→推送

Example Interactions

User: 今日持仓有变化吗?
Agent: [calls get_tracker_snapshot to show current holdings]

User: 卖了500股某股票,现金变为-48万
Agent: [calls update_holdings with changes, then run_portfolio_pipeline]

User: 帮我生成今天的日报
Agent: [calls run_portfolio_pipeline]

User: Growth 组的基金现在值16万了
Agent: [runs: portfolio_manager.py set-fund --group Growth --value 160000]

注意事项

  1. 每日文件不可变: 修改当天的文件不影响历史文件
  2. 如果今天没有文件: 自动从最近一天复制
  3. 同一股票跨组: 需要指定组别才能准确更新
  4. 基金和现金: 使用 set-fundset-cash 命令更新
  5. 周末/节假日: 可以修改持仓,但价格快照获取可能无变化
  6. 融资/杠杆: 现金为负值时自动计算融资额和杠杆比率
  7. 回撤: 基于利润的回撤算法,从 history.csv 全量历史数据计算(排除资金注入/取出影响)
  8. 资金变动: 成本增加/减少(如注资、取出)会被记录为 capital_change,日盈亏 market_daily_change 自动排除资金变动
  9. 快照缺失容错: 即使某天的快照 JSON 被删除,API 会从 CSV 历史数据自动合成,日期导航不会出现缺口
  10. CSV 11列格式: date,total_value,total_cost,total_profit,return_pct,daily_change,daily_change_pct,max_drawdown_pct,capital_change,market_daily_change,market_daily_change_pct

Changelog

v1.2.0 (2026-03-10)

  • fix: 日盈亏正确排除资金注入/取出(market_daily_change = daily_change - capital_change
  • fix: 日期导航使用 CSV + 快照文件并集,不再因快照缺失而跳过日期
  • fix: 快照缺失时自动合成 synthetic snapshot(从 CSV + 最近快照重建)
  • fix: 回撤算法改为基于利润的计算方式,排除资金流影响
  • fix: CSV 升级为 11 列格式,新增 capital_change/market_daily_change/market_daily_change_pct
  • fix: 支持 成本增加/减少 解析模式

v1.1.0 (2026-03-08)

  • Initial ClawHub release with multi-market support, AI chat, backtesting engine

Reviews (0)

Sign in to write a review.

No reviews yet. Be the first to review!

Comments (0)

Sign in to join the discussion.

No comments yet. Be the first to share your thoughts!

Compatible Platforms

Pricing

Free

Related Configs