一键导入
一键导入
| name | portfolio-deep-diagnosis |
| description | 用于对投资组合进行深度诊断。收集 4 个分析参数后调用 run_pipeline() 完成量化计算,再向用户解释诊断结果。 |
把持仓与分析参数整理成结构化的深度诊断结果,重点输出相关性、风险指标、因子暴露和关键风险点。
SKILL_ROOT = 本 SKILL.md 的父目录(即 portfolio-health-check/ 技能根目录)。所有 cd "$SKILL_ROOT" 命令均指向技能根目录,不要硬编码绝对路径。
state/portfolio_state.json 的 stage1 已有结构化持仓数据client_output 结构化文字给父级 workflow 或 OpenClaw。必须收齐 4 个参数,缺一不可:
| 参数 | 字段名 | 选项 |
|---|---|---|
| 换仓频率 | rebalance_frequency | intraday / weekly / monthly / quarterly / buy_and_hold |
| 仓位风格 | position_style | market_timing / full_rotation / constant_mix / dca / core_satellite |
| 风险偏好 | risk_tolerance | conservative / moderate / aggressive / very_aggressive |
| 投资期限 | investment_horizon | <1y / 1-3y / 3-5y / >5y |
如果用户不理解某个参数,用选项形式提问,不要让用户自由描述。
用第 1 阶段的持仓数据和本阶段收集的参数构建 payload JSON 文件,然后通过命令行调用 pipeline。
Step 2a:写 payload 文件
用 exec 工具把 payload 写到 /tmp/portfolio_payload.json:
{
"holdings": [
{"code": "600519.SH", "name": "贵州茅台", "weight_pct": 30.0},
{"code": "300750.SZ", "name": "宁德时代", "weight_pct": 25.0}
],
"cash_pct": 10.0,
"params": {
"rebalance_frequency": "monthly",
"position_style": "core_satellite",
"risk_tolerance": "moderate",
"investment_horizon": "3-5y",
"portfolio_market_value": 1000000
}
}
从
state/portfolio_state.json的stage1读取持仓数据构建 holdings 数组。每个 holding 必须有code和weight_pct。
Step 2b:调用 CLI
cd "$SKILL_ROOT" && \
python scripts/portfolio-health-check/pipeline_main.py \
/tmp/portfolio_payload.json \
--emit-artifacts \
--output-dir /tmp/portfolio_output \
--as-of $(date +%Y-%m-%d)
执行成功后,结果文件在
/tmp/portfolio_output/目录:
diagnosis_result.json— 完整诊断结果(Step 3 解读用)_internal.json— 内部数据(Phase 3 优化用,不需要解读)diagnosis_report.html— HTML 报告(仅在用户要求时提及)
Step 2c:读取结果
cat /tmp/portfolio_output/diagnosis_result.json
pipeline_main.py CLI 内部自动完成:
rebalance_frequency 选择数据粒度和回看窗口client_output 结构化文字不要手动调用 QVeris/THS 取数据,不要手动跑分析逻辑。 CLI 是唯一计算入口。
run_pipeline() 返回 dict,结构如下:
# 成功
{
"status": "ok",
"error_message": None,
"data": {
"correlation_matrix": {...},
"risk_metrics": {"holdings": [...], "portfolio": {...}},
"risk_contribution": {...},
"concentration": {...},
"benchmark": {...},
"factor_exposure": {...},
"sector_exposure": {...},
"liquidity": {...},
"intraday_micro": {...}, # 仅 intraday 频率
"risk_flags": [...],
"metadata": {...},
},
"client_output": {
"title": "组合诊断摘要",
"headline": "...",
"sections": [...],
"markdown": "..."
},
"artifacts": null, # 默认不生成文件;显式要求时才有路径
"pipeline": {
"as_of": "2026-04-01",
"requested_rebalance_frequency": "monthly",
"selected_benchmark": {...},
"qveris_inputs": {...},
},
}
# 失败
{
"status": "error",
"error_message": "具体错误信息",
"data": None,
"artifacts": None,
}
如果 status == "ok":
client_output 里的 headline / sections / markdown 作为对客交付底稿。risk_flags:哪些旗标被触发,严重程度如何risk_metrics.portfolio:波动率、夏普、最大回撤等关键指标concentration:集中度是否过高correlation_matrix.high_correlation_pairs:高相关性配对factor_exposure.portfolio:因子偏向liquidity:清仓所需天数benchmark:与基准的相对表现artifacts 里的文件路径。如果 status == "error":
error_message 判断是数据问题(QVeris 不可达、代码不匹配)还是代码 bug。诊断结果解释完毕后,把控制权交回父级 workflow(portfolio-health-check/SKILL.md),由父级询问用户是否继续进入第 3 阶段。
run_pipeline() 计算得出。run_pipeline() 返回的某些指标因数据不足而缺失(见 metadata.warnings),要如实告知用户。用于快速分析投资组合的持仓概览、集中度检查和总体评价。适用于用户请求组合快速诊断、持仓概览、集中度分析或面向客户的结构化结果说明时。
串联投资组合快速诊断、深度诊断和优化处方三个子技能。支持对话模式(交互式阶段确认)和 API 模式(无状态一次性执行)。
定时推送、手动获取事件资讯,并支持查询单条事件详情。
用于基于约束条件生成投资组合优化处方。调用 prescription_main.py 完成量化优化,仅保留约束收集、异常处理和结果解释。