con un clic
portfolio-optimization
// 用于基于约束条件生成投资组合优化处方。调用 prescription_main.py 完成量化优化,仅保留约束收集、异常处理和结果解释。
// 用于基于约束条件生成投资组合优化处方。调用 prescription_main.py 完成量化优化,仅保留约束收集、异常处理和结果解释。
用于快速分析投资组合的持仓概览、集中度检查和总体评价。适用于用户请求组合快速诊断、持仓概览、集中度分析或面向客户的结构化结果说明时。
串联投资组合快速诊断、深度诊断和优化处方三个子技能。支持对话模式(交互式阶段确认)和 API 模式(无状态一次性执行)。
定时推送、手动获取事件资讯,并支持查询单条事件详情。
用于对投资组合进行深度诊断。收集 4 个分析参数后调用 run_pipeline() 完成量化计算,再向用户解释诊断结果。
| name | portfolio-optimization |
| description | 用于基于约束条件生成投资组合优化处方。调用 prescription_main.py 完成量化优化,仅保留约束收集、异常处理和结果解释。 |
在持仓现状、深度诊断结果和用户约束条件基础上,生成分层优化建议与前后对比。
SKILL_ROOT = 本 SKILL.md 的父目录(即 portfolio-health-check/ 技能根目录)。所有 cd "$SKILL_ROOT" 命令均指向技能根目录,不要硬编码绝对路径。
run_pipeline() 的完整输出可用必须收集以下约束(新格式字段名):
| 参数 | 字段名 | 选项 |
|---|---|---|
| 可投资市场 | allowed_markets | A-share / HK / US |
| 可接受敞口 | allowed_exposure | A-share / HK / US / global(默认 = allowed_markets + global) |
| 可使用工具 | allowed_instruments | stock / etf / fund / futures / option / crypto |
| 已开通权限 | account_permissions | option_account / futures_account / hk_connect / qdii |
| 可追加资金 | additional_capital_ratio | none / 10-30% / 30-50% / 50%+ |
| 优化目标 | objectives | growth / income / hedge / ipo_base(多选) |
向后兼容: 旧格式
investable_markets/available_capital/objectives(旧枚举)仍被接受,parse_constraints()自动转换为新格式。
如果用户不理解这些项,先让用户从几个常见目标里选,不要让用户用长段文字自由描述。
从用户处收集上述约束参数。如果参数不足,先追问最少必要信息。
用 Phase 2 的输出文件和约束构建调用。
Step 2a:写约束文件
用 exec 工具把约束写到 /tmp/portfolio_constraints.json:
{
"allowed_markets": ["A-share"],
"allowed_instruments": ["stock", "etf"],
"additional_capital_ratio": "10-30%",
"objectives": ["growth"]
}
Step 2b:调用 CLI
cd "$SKILL_ROOT" && \
python scripts/portfolio-health-check/prescription_main.py \
--diagnosis /tmp/portfolio_output/diagnosis_result.json \
--internal /tmp/portfolio_output/_internal.json \
--constraints-file /tmp/portfolio_constraints.json \
--output-dir /tmp/optimization_output
--diagnosis和--internal指向 Phase 2--output-dir里的文件- 如果
_internal.json不存在,可省略--internal(优化结果会降级,跳过回验和压力测试)- 执行成功后,
/tmp/optimization_output/optimization_result.json包含完整结果
Step 2c:读取结果
cat /tmp/optimization_output/optimization_result.json
prescription_main.py CLI 内部自动完成:
diagnosis_result 剥出诊断数据和 _internal(returns/holdings)不要手动调用 QVeris 或拉取数据。 Phase 3 的所有数据来自 Phase 2 输出。
run_optimization() 返回 envelope:
# 成功
{
"status": "ok",
"error_message": null,
"data": {
"recommendations": {...},
"exclusive_groups": [...],
"asset_alignment": {...},
"constraints_applied": {...},
"summary": {...},
"client_output": {...},
"execution_info": {"rescore_executed": true, "stress_test_executed": true, "warnings": []}
}
}
# 失败
{
"status": "error",
"error_message": "...",
"data": null
}
如果 status == "ok":
client_output 里的结构化文字作为对客交付底稿。execution_info.rescore_executed == false,告知用户推荐未经回验。如果 status == "error":
error_message 判断是输入问题还是代码 bug。结果解释完毕后,流程结束。
constrained 状态),允许输出"暂不建议"并说明约束瓶颈。