中文投资组合管理技能:同步持仓,基于持仓重新计算组合结果,生成当日快照/历史记录。适用于用户提供截图、CSV、券商导出或类似持仓的JSON,需要更新持仓、刷新组合结果、检查警告并落盘快照的场景。
当用户要做下面这些事时使用这个 skill:
如果这是用户第一次使用这个 skill,优先用自然语言确认一件事:
默认情况下,优先推荐默认数据目录。 只有用户已经有现成的数据目录,或者明确希望自己管理路径时,再使用自定义目录。
如果用户没有可用数据目录,就先初始化目录,再继续后续 workflow。
凡是会改动真实数据目录的操作,默认都先预演:
holdings / snapshots / history.csv 的动作预演时:
正式写入:
第一次使用时,先确认用户希望:
默认数据目录在:
~/.agents/data/portfolio-workflows/<profile>/portfolio
这个默认路径会记录在用户配置文件里:
~/.agents/data/portfolio-workflows/settings.json
后续如果用户没有显式提供路径,就直接用配置文件里的默认目录。
除非用户明确要求,否则不要主动向用户解释脚本路径、repo 结构或内部文件布局。 对用户只需要表达:
同步持仓时,默认按“账户组替换”理解。 只有用户明确说“整份覆盖今天持仓”时,才应该走整份覆盖模式。
holdings 是真源snapshot 是派生结果,不是真源Agent 可主动调用外部 CLI(如 ticker)获取行情,再注入到分析流程:
ticker --config <config> print --format jsonportfolio_analysis.py --market-context /path/to/market_context.jsonmarket_context.json 格式:
json
{
"prices": {"NASDAQ:AMZN": 262.59, "OTC:002963": 3.20},
"currencies": {"NASDAQ:AMZN": "USD", "OTC:002963": "CNY"},
"fx_rates": {"CNY": 1.0, "USD": 6.8, "HKD": 0.87},
"warnings": [],
"meta": {}
}
ticker config 示例(/tmp/ticker.yaml):
yaml
watchlist:
- AMZN
- BIL
- DIA
- QQQ
- QQQM
- SCHD
- SGOV
- SOXX
- VOO
- VXUS
- NIO
lots:
- symbol: AMZN
quantity: 1
unit_cost: 1
# ... 每个 symbol 都需要一个 synthetic lot
merge 规则:
调用示例:
bash
# 1. 获取 ticker 价格并生成 market_context.json
ticker --config /tmp/ticker.yaml print --format json | \
jq '{prices: (map({key: ("NASDAQ:" + .symbol), value: (.price | tonumber)}) | from_entries),
currencies: (map({key: ("NASDAQ:" + .symbol), value: "USD"}) | from_entries),
fx_rates: {"CNY": 1.0, "USD": 6.8},
warnings: [], meta: {}}' > /tmp/market-context.json
# 2. 注入到分析流程
python3 scripts/portfolio_analysis.py \
--date 2026-05-16 \
--portfolio-dir ~/.agents/data/portfolio-workflows/default/portfolio \
--market-context /tmp/market-context.json
bash
python3 scripts/refresh_portfolio.py \
--date 2026-05-16 \
--portfolio-dir ~/.agents/data/portfolio-workflows/default/portfolio \
[--confirm-write] \
[--skip-history] \
[--output-format summary|debug]
参数说明--date目标日期,格式 YYYY-MM-DD--portfolio-dir数据目录,不提供则使用默认或 profile 目录--profile用户数据 profile 名,默认 default--confirm-write确认写入真实目录;未提供则默认预演(不写真实文件)--skip-history跳过 history.csv 更新--output-formatsummary=用户可读摘要;debug=完整 JSON
bash
python3 scripts/portfolio_analysis.py \
--date 2026-05-16 \
--portfolio-dir ~/.agents/data/portfolio-workflows/default/portfolio \
[--market-context /path/to/market_context.json] \
[--output /path/to/output.json]
参数说明--date目标日期,格式 YYYY-MM-DD--portfolio-dir数据目录--profile用户数据 profile 名,默认 default--market-context外部 market_context JSON;提供后跳过内置 HTTP 获取--output可选输出路径
bash
python3 scripts/holdings_sync.py \
--input '{"groups": {...}}' \
--portfolio-dir ~/.agents/data/portfolio-workflows/default/portfolio \
--date 2026-05-16
参数说明--inputholdings-like JSON payload--portfolio-dir数据目录--date目标日期
bash
python3 scripts/persist_snapshot.py \
--analysis-result /path/to/analysis.json \
--date 2026-05-16 \
--portfolio-dir ~/.agents/data/portfolio-workflows/default/portfolio
参数说明--analysis-resultportfolio_analysis 输出 JSON--date目标日期--portfolio-dir数据目录
系统会产生以下类型的 warning:
Warning含义处理方式XXX 当日估值不可用,已回退为最近披露净值OTC 基金当天净值获取失败,使用历史数据正常,可接受XXX Yahoo 价格获取失败,已回退为 stooq 报价Yahoo 获取失败,stooq 回退成功正常,可接受XXX 当前价格获取失败,已回退为 0所有数据源都失败,回退到 0需要关注,可能数据有问题
Warning含义处理方式HKD 汇率获取失败,已回退为 0.88无法获取 HKD/CNY,使用默认汇率正常,可接受USD 汇率获取失败,已回退为 6.90无法获取 USD/CNY,使用默认汇率正常,可接受
Warning含义处理方式XXX 的 cost_price 为 0,收益率可能失真持仓成本为 0需要用户确认是否正常XXX 使用未知币种 XXX,汇率已回退为 1.0币种无法识别需要检查 ticker 配置
Warning含义处理方式外部 market_context 缺少 N 个标的,已使用内置 source 补齐外部 context 未覆盖全部标的正常,缺失部分由内置补齐market_context 仍缺少 N 个标的即使内置补齐后仍有缺失需要关注