jy-portfolio-calculation
by @jiayinian
模拟组合试算技能 - 基于恒生聚源 MCP 服务的投资组合构建、调整、成分券查询、交易记录查询及绩效指标获取工具。 **Triggers when user mentions:** - 组合构建:"模拟组合","建仓","创建组合","组合 ID","资产配置","portfolio" - 组合调整:"调仓","...
clawhub install jy-portfolio-calculation📖 About This Skill
name: jy-portfolio-calculation description: | 模拟组合试算技能 - 基于恒生聚源 MCP 服务的投资组合构建、调整、成分券查询、交易记录查询及绩效指标获取工具。 Triggers when user mentions: - 组合构建:"模拟组合","建仓","创建组合","组合 ID","资产配置","portfolio" - 组合调整:"调仓","调整权重","加仓","减仓","再平衡","rebalance" - 成分券查询:"持仓","成分券","组合持仓","权重","持仓明细","position" - 交易记录:"交易流水","交易记录","买卖记录","分红","配股","trade flow" - 绩效指标:"收益率","年化收益","最大回撤","夏普比率","组合表现","绩效","indicator" 使用场景:当用户需要构建模拟投资组合、调整现有组合配置、查询组合持仓明细、查看交易记录或获取组合绩效指标时触发本技能。 Use case: Triggered when users need to build a simulated investment portfolio, adjust existing portfolio allocations, query portfolio positions, view trade records, or obtain portfolio performance indicators. 所有结果以结构化表格形式输出,确保数据完整性和可溯源性。 metadata: openclaw: requires: bins: ["node", "npm", "mcporter", "python3"] install: - id: install-mcporter kind: node package: mcporter label: Install mcporter via npm
模拟组合试算
基于恒生聚源 (jy-financedata-api) MCP 服务的模拟投资组合试算工具,支持组合构建、调仓、持仓查询、交易流水查询及绩效指标获取。
功能范围
本技能支持以下功能:
| 功能 | 说明 | 工具 |
|------|------|------|
| 模拟组合构建 | 创建新的模拟投资组合,生成组合 ID | PortfolioBuild |
| 模拟组合调整 | 对已有组合进行权重调整和再平衡 | PortfolioRebalance |
| 成分券查询 | 查询组合在指定日期的持仓明细 | PortfolioPositionQuery |
| 交易记录查询 | 查询组合的交易流水明细 | TradeFlowQuery |
| 绩效指标查询 | 获取组合的收益率、回撤、夏普比率等指标 | PortfolioIndicatorQuery |
| 报告生成 | 生成组合收益报告(Markdown/PDF 格式) | scripts/generate_portfolio_report_*.py |
查询建议
查询需要具备的要素:
查询写法:
query 参数查询示例
# 新建组合
mcporter call jy-financedata-api.PortfolioBuild query='2026-03-20 建仓,买入贵州茅台 600519 1000 股,权重 50%,中国平安 601318 2000 股,权重 50%,业绩基准沪深 300'调整组合
mcporter call jy-financedata-api.PortfolioRebalance query='组合 0439d6e585034f46846d0a70b5a967e0 在 2026-03-21 调仓,贵州茅台权重 30%,中国平安权重 70%'查询持仓
mcporter call jy-financedata-api.PortfolioPositionQuery query='查询组合 0439d6e585034f46846d0a70b5a967e0 的持仓'查询交易流水
mcporter call jy-financedata-api.TradeFlowQuery query='查询组合 0439d6e585034f46846d0a70b5a967e0 的交易流水'查询绩效指标
mcporter call jy-financedata-api.PortfolioIndicatorQuery query='查询组合 0439d6e585034f46846d0a70b5a967e0 的绩效指标'
环境检查与配置
每次使用本技能前,必须先检查 mcporter 安装和 MCP 服务配置状态!
步骤 1:检查 mcporter 是否安装
mcporter --version
如未安装,按以下流程安装:
# 1. 通过 npm 全局安装
npm install -g mcporter2. 验证安装
mcporter --version
步骤 2:检查 MCP 服务配置
# 列出所有已配置的 MCP 服务
mcporter list
预期输出(必须包含以下服务):
如服务未配置,需要获取 JY_API_KEY 并配置:
1. 获取 JY_API_KEY:向恒生聚源申请 JY_API_KEY,通过邮箱申请(首次配置需提供,配置一次即可)
JY_API_KEY 申请路径: 向恒生聚源官方邮箱发送邮件申请签发 数据地图 JY_API_KEY,用于接口鉴权 申请通过后,恒生聚源将默认发送【工具版和接口版】KEY 另外,【Skill】包可通过 https://clawhub.ai/ 自行选择下载,若需要我们通过邮件提供【Skill】,亦可在邮件中注明 申请邮箱: mailto:datamap@gildata.com 邮件标题: 数据地图 KEY 申请-XX 公司 - 申请人姓名 正文模板: - 姓名: - 手机号: - 公司/单位全称: - 所属部门: - 岗位: - MCP_KEY 申请用途: - Skill 申请列表: - 是否需要 Skill 安装包:(是,邮件提供/否,自行下载) - 其他补充说明(可选):
2. 配置 MCP 服务:
# 配置 jy-financedata-api 服务
mcporter config add jy-financedata-api --url "https://api.gildata.com/mcp-servers/aidata-assistant-srv-api?token=你的 JY_API_KEY"
3. 验证配置:
mcporter list
4. 使用方式:
# 基础键值对传参
mcporter call 服务名称。工具 参数=值示例,注意:所有服务工具的入参均为 query
mcporter call jy-financedata-api.PortfolioBuild query='2026-03-20 建仓,买入贵州茅台 600519 1000 股,权重 50%'
步骤 3:在 OpenClaw 中启用 mcporter(如未配置)
mcporter 配置文件路径:
C:\Users\你的用户名\config\mcporter.json/root/config/mcporter.jsonOpenClaw 配置文件路径:
C:\Users\你的用户名\.openclaw\openclaw.json~/.openclaw/openclaw.json编辑 openclaw.json,在 skills 部分添加 mcporter 配置:
{
"skills": {
"entries": {
"mcporter": {
"enabled": true,
"env": {
"MCPORTER_CONFIG": "C:\\Users\\你的用户名\\config\\mcporter.json"
}
}
}
}
}
重启 OpenClaw 使配置生效:
openclaw gateway restart
核心工作流程
流程中的工具调用能够并发调用尽量并发调用提速,但建仓/调仓与查询操作必须串行执行。
步骤 1:组合构建或调仓
根据用户需求调用 PortfolioBuild(新建组合)或 PortfolioRebalance(调整组合)。
注意事项:
步骤 2:成分券查询(串行)
建仓/调仓完成后,调用 PortfolioPositionQuery 查询最新持仓。
步骤 3:交易流水查询(串行)
调用 TradeFlowQuery 查询组合交易记录。
步骤 4:绩效指标查询(串行)
调用 PortfolioIndicatorQuery 获取组合绩效指标。
执行顺序限制:
建仓/调仓 → (等待完成) → 成分券查询/交易记录查询/指标查询 (串行)
快速开始
场景一:新建模拟组合
用户: "我想创建一个模拟组合,2026-03-20 建仓,买入贵州茅台 1000 股,权重 50%,中国平安 2000 股,权重 50%,业绩基准沪深 300"
# Step 1: 调用 PortfolioBuild 建仓
mcporter call jy-financedata-api.PortfolioBuild query='2026-03-20 建仓,买入贵州茅台 600519 1000 股,权重 50%,中国平安 601318 2000 股,权重 50%,业绩基准沪深 300'返回:组合 ID (如 0439d6e585034f46846d0a70b5a967e0)
Step 2: 串行查询持仓
mcporter call jy-financedata-api.PortfolioPositionQuery query='查询组合 0439d6e585034f46846d0a70b5a967e0 的持仓'Step 3: 串行查询交易流水
mcporter call jy-financedata-api.TradeFlowQuery query='查询组合 0439d6e585034f46846d0a70b5a967e0 的交易流水'Step 4: 串行查询绩效指标
mcporter call jy-financedata-api.PortfolioIndicatorQuery query='查询组合 0439d6e585034f46846d0a70b5a967e0 的绩效指标'
场景二:调整已有组合
用户: "把组合 0439d6e585034f46846d0a70b5a967e0 调仓一下,2026-03-21 调仓,贵州茅台权重降到 30%,中国平安权重升到 70%"
# Step 1: 调用 PortfolioRebalance 调仓
mcporter call jy-financedata-api.PortfolioRebalance query='组合 0439d6e585034f46846d0a70b5a967e0 在 2026-03-21 调仓,贵州茅台权重 30%,中国平安权重 70%'Step 2: 串行查询新持仓
mcporter call jy-financedata-api.PortfolioPositionQuery query='查询组合 0439d6e585034f46846d0a70b5a967e0 的持仓'Step 3: 串行查询新交易流水
mcporter call jy-financedata-api.TradeFlowQuery query='查询组合 0439d6e585034f46846d0a70b5a967e0 的交易流水'
场景三:查询组合信息
用户: "查一下组合 0439d6e585034f46846d0a70b5a967e0 的持仓情况"
# 直接查询持仓 (无需先建仓/调仓)
mcporter call jy-financedata-api.PortfolioPositionQuery query='查询组合 0439d6e585034f46846d0a70b5a967e0 的持仓'
场景四:查询组合收益
用户: "这个组合的收益怎么样?"
# 查询绩效指标
mcporter call jy-financedata-api.PortfolioIndicatorQuery query='查询组合 0439d6e585034f46846d0a70b5a967e0 的绩效指标'
场景五:查询交易记录
用户: "看看这个组合的交易记录"
# 查询交易流水
mcporter call jy-financedata-api.TradeFlowQuery query='查询组合 0439d6e585034f46846d0a70b5a967e0 的交易流水'
场景六:生成收益报告(Markdown/PDF)
用户: "帮我把组合 8210d5eaf0bc4a0aba64be988c467e9b 的收益情况生成报告"
# 1. 先查询绩效指标、持仓数据、调仓历史
mcporter call jy-financedata-api.PortfolioIndicatorQuery query='查询组合 8210d5eaf0bc4a0aba64be988c467e9b 的绩效指标'
mcporter call jy-financedata-api.PortfolioPositionQuery query='查询组合 8210d5eaf0bc4a0aba64be988c467e9b 的持仓'
mcporter call jy-financedata-api.TradeFlowQuery query='查询组合 8210d5eaf0bc4a0aba64be988c467e9b 的交易流水'2. 生成 Markdown 报告(推荐,无依赖)
python3 scripts/generate_portfolio_report_md.py或生成 PDF 报告(需要 fpdf2)
pip install fpdf2
python3 scripts/generate_portfolio_report.py
输出:
sample/模拟组合收益报告_8210d5ea.md(推荐,格式清晰,无依赖)sample/模拟组合收益报告_8210d5ea.pdf(需要 fpdf2,支持打印)依赖安装:
# Markdown 报告:无需额外依赖
PDF 报告:
pip install fpdf2
工具参数说明
通用调用格式
所有工具都使用自然语言字符串作为 query 参数:
mcporter call jy-financedata-api.<工具名> query='<自然语言描述>'
PortfolioBuild (组合建仓)
输入参数: query (自然语言字符串)
必需信息:
示例:
'2026-03-20 建仓,买入贵州茅台 600519 1000 股,权重 50%,中国平安 601318 2000 股,权重 50%,业绩基准沪深 300'
输出: 组合 ID (32 位十六进制,如 0439d6e585034f46846d0a70b5a967e0)
PortfolioRebalance (组合调仓)
输入参数: query (自然语言字符串)
必需信息:
示例:
'组合 0439d6e585034f46846d0a70b5a967e0 在 2026-03-21 调仓,贵州茅台权重 30%,中国平安权重 70%'
输出: 调仓确认信息 (成功/失败)
PortfolioPositionQuery (成分券查询)
输入参数: query (自然语言字符串)
必需信息: 组合 ID
输出字段: secuCode, secuName, realPosition, quantity, price, totalAssets, costPrice, costProfit
TradeFlowQuery (交易流水查询)
输入参数: query (自然语言字符串)
必需信息: 组合 ID
输出字段: transactionDate, secuCode, secuName, transactionTypeDesc, changeQuantity, transactionPrice, changeAmount
PortfolioIndicatorQuery (组合指标查询)
输入参数: query (自然语言字符串)
必需信息: 组合 ID
输出字段: totalAssets, netAssets, nv, dailyProfitRate, totalReturn, maxRetreat, toNowSharpe, weekReturn, monthReturn, yearReturn, tonowReReturn
输出格式规范
所有查询结果必须以结构化表格形式输出,确保数据完整性和易读性。详细输出格式示例请参考 references/ 目录下各工具文档。
限制
⚠️ 执行顺序限制
组合持仓查询、交易流水查询、组合指标查询工具不得与组合建仓或调仓工具并行执行。
原因:并行执行无法获取当轮调仓结果数据。
正确流程:
建仓/调仓 → (等待完成) → 成分券查询/交易记录查询/指标查询 (串行)
⚠️ 数据展示限制
⚠️ 内容限制
禁止输出以下金融数据供应商相关词语:
⚠️ 日期限制
建仓/调仓日期不能是当天或未来日期,必须使用历史日期。
处理策略:
示例:
用户:"今天调仓,等权配置"
→ 检测今天是 2026-03-24,不允许使用
→ 自动使用 2026-03-23(上一交易日)
→ 提醒用户:"⚠️ 系统不允许使用当天日期进行调仓,已自动使用 2026-03-23(上一交易日)的收盘价执行"
服务端限制说明: 恒生聚源模拟组合服务的服务端代码强制校验:调仓日期必须早于当天,否则会抛出异常: > "导入文件中不能填写当天以及未来日期"
⚠️ 权重验证与现金补充
权重总和必须等于 1 (100%):
示例:
用户:"建仓,贵州茅台权重 50%,中国平安权重 40%"
→ 自动补充现金 10%
→ 实际调用:"2026-03-20 建仓,买入贵州茅台 600519 权重 50%,中国平安 601318 权重 40%,现金 10%"
资源清单
~/openclaw/workspace/skills/jy-portfolio-calculation/
├── SKILL.md # 本技能主文档
├── references/ # 工具详细文档
│ ├── portfolio_build.md # 组合建仓工具说明
│ ├── portfolio_rebalance.md # 组合调仓工具说明
│ ├── position_query.md # 成分券查询工具说明
│ ├── trade_flow_query.md # 交易流水查询工具说明
│ └── indicator_query.md # 组合指标查询工具说明
└── scripts/ # 辅助脚本
├── generate_portfolio_report_md.py # Markdown 收益报告生成器(推荐,无依赖)
└── generate_portfolio_report.py # PDF 收益报告生成器(需要 fpdf2)
scripts/generate_portfolio_report_md.py
功能: 生成 Markdown 格式的模拟组合收益报告
依赖: 无(Python 标准库)
用法:
python3 scripts/generate_portfolio_report_md.py
输出: sample/模拟组合收益报告_<组合 ID>.md
特点:
scripts/generate_portfolio_report.py
功能: 生成 PDF 格式的模拟组合收益报告
依赖: pip install fpdf2
用法:
pip install fpdf2
python3 scripts/generate_portfolio_report.py
输出: sample/模拟组合收益报告_<组合 ID>.pdf
特点:
错误处理
| 错误信息 | 原因 | 解决方案 | |----------|------|----------| | 导入文件中不能填写当天以及未来日期 | 日期是当天或未来 | 使用历史日期 (至少昨天) | | 组合 ID 不存在 | 组合 ID 错误 | 检查组合 ID 格式 (32 位十六进制) | | 权重总和不等于 1 | 用户输入的权重有误 | 提醒用户调整权重或自动补充现金 | | 查询超时 | 服务响应延迟 | 重试查询,或检查网络连接 |