国家队持仓估计(全宽基版 · Pay Skill)
通过追踪上交所核心宽基 ETF 的份额变化,估计国家队(中央汇金)的持仓变动与结构轮动, 并为每个宽基叠加其对应指数走势生成可视化图表。
当用户提到以下任何场景时必须触发:国家队持仓、国家队仓位、中央汇金持仓、ETF份额变化、 国家队加仓、国家队减仓、看看国家队、国家队最近在干嘛。
本 Skill 为 Pay Skill:每次完整分析需先完成微信支付验证,再执行本地 Python 脚本生成图表。
付费前置检查
调用本 Skill 前,检查当前 Agent 是否已安装 weixinpay 插件:
- 已安装:可继续提供付费服务
- 未安装:向用户提示「当前 Agent 暂不支持微信支付付费能力」,终止流程
付费工作流程(⚠️ 必须先于本地脚本执行)
第一步:请求付费网关
向 Pay Skill 网关发起 POST 请求(invoke_url 见 frontmatter):
POST https://pay-skill-nat-4198535-1341112664.ap-shanghai.run.tcloudbase.com/api/skill/invoke
Content-Type: application/json
{
"query": "用户的原始查询内容(如:看看国家队最近在干嘛)",
"skill_id": "national-team-position",
"skill_version": "1.0.0",
"amount_fen": 5
}
第二步:处理 402 响应
若收到 HTTP 402,从响应中提取并保存以下信息(Header 与 Body 均可能出现):
WeixinPay-Required:支付码(payment_code)X-Out-Trade-No:商户订单号
将 WeixinPay-Required 的值作为 paymentCode,调用 微信支付官方技能skill(weixinpay-pay),若遇系统繁忙等支付失败,调用mcp__weixinpay__weixinpay_retry_pay 把 paymentCode 回传给系统拉起卡片 向用户申请支付授权。
第三步:支付成功后重新请求(⚠️ 必须执行,不可跳过)
支付成功后,必须用与第一步完全一致的 JSON body 重新 POST 同一接口,并在 Header 中携带第二步保存的值:
POST https://pay-skill-nat-4198535-1341112664.ap-shanghai.run.tcloudbase.com/api/skill/invoke
Content-Type: application/json
WeixinPay-Required: <payment_code>
X-Out-Trade-No: <out_trade_no>
{
"query": "用户的原始查询内容(与第一步完全一致)",
"skill_id": "national-team-position",
"skill_version": "1.0.0",
"amount_fen": 5
}
注意:body 与第一步完全一致,不要修改 body 中的任何字段。支付信息通过 Header 传递。
第四步:确认 access_granted 后执行本地 Skill
仅当第三步返回 HTTP 200 且 "access_granted": true 时,才继续执行下方「本地分析工作流」。
若返回 "code": "NOT_PAID",说明支付尚未完成,等待后重试第三步。
若返回 "code": "REFUNDED",向用户说明:"抱歉,该服务暂时无法提供内容,已自动退款至原支付账户。"并终止流程,不要再次尝试支付或重新请求。
若返回 "code": "FULFILL_AND_REFUND_FAILED",说明服务异常且退款失败,建议用户联系客服。
原理
- 中央汇金是宽基 ETF 的绝对控盘方,追踪 ETF 份额(而非规模)可准确反映买卖行为
- 在沪深300 基础上覆盖全部上交所核心宽基,能区分「真减仓」与「换仓轮动」
- 数据来源:上海证券交易所官网 ETF 份额接口(AKShare
fund_etf_scale_sse,一次返回当日全部 ETF)- AKShare 指数日线
覆盖的宽基指数
| 指数 | 代表 ETF | 价格 symbol | 信号干净度 | |------|----------|-------------|------------| | 沪深300 | 510300/510310/510330… | sh000300 | ⭐⭐⭐ 汇金绝对主力 | | 上证50 | 510050/510710/510850… | sh000016 | ⭐⭐⭐ 护盘核心 | | 中证500 | 510500/512500… | sh000905 | ⭐⭐ 含较多散户 | | 中证1000 | 512100/560010 | sh000852 | ⭐⭐ 散户/对冲盘多 | | 中证A500 | 名称含 "A500" 的全部 | sh000510 | ⭐⭐ 2024末新发,汇金基石 | | 科创50 | 588000/588080… | sh000688 | ⭐ 散户/杠杆重,噪音大 |
创业板等 ETF 全在深交所,本接口取不到,未纳入。 科创50/中证500 散户底仓重,绝对值会高估"国家队持仓",解读时建议参考增量(相对早期基线)。
依赖
pip install akshare matplotlib pandas
本地分析工作流(付费验证通过后执行)
# 默认:2024-01-01 至今,按周采样
python <skill-path>/scripts/national_team_position.py --output-dir ./
# 指定日期范围(推荐看 2023 至今,能完整覆盖建仓→轮动→撤离)
python <skill-path>/scripts/national_team_position.py --start 2023-01-01 --output-dir ./
# 仅获取数据不画图
python <skill-path>/scripts/national_team_position.py --data-only --output-dir ./
<skill-path> 替换为此 SKILL.md 所在目录的实际路径。
参数说明
| 参数 | 必填 | 说明 |
|------|------|------|
| --start | 否 | 起始日期,格式 YYYY-MM-DD,默认 2024-01-01 |
| --end | 否 | 结束日期,格式 YYYY-MM-DD,默认今天 |
| --output-dir | 否 | 输出目录,默认当前目录 |
| --data-only | 否 | 仅输出 JSON 数据,不画图 |
| --freq | 否 | 采样频率:weekly(默认)或 monthly |
输出文件
| 文件 | 说明 |
|------|------|
| national_team_overview.png | 六合一总图(2x3,每格 = 该宽基份额 + 对应指数价格双轴) |
| national_team_hs300.png | 沪深300 单图(份额 + 指数价格双轴) |
| national_team_sse50.png | 上证50 单图 |
| national_team_csi500.png | 中证500 单图 |
| national_team_csi1000.png | 中证1000 单图 |
| national_team_csiA500.png | 中证A500 单图 |
| national_team_star50.png | 科创50 单图 |
| national_team_position.json | 各宽基份额时间序列 + 全宽基合计 JSON |
推荐工作流
- 完成付费验证(见上方四步流程)
- 运行脚本获取数据并生成全部图表
- 先发总图(national_team_overview.png)给用户,再按需发单图
- 解读:各宽基的建仓/减仓时间点、份额变化量、与指数走势的对应关系; 重点区分「真减仓」与「轮动换仓」(如沪深300 见顶后资金是否流向新发的 A500)
- 如用户有后续问题,读取 JSON 做进一步分析(如增量口径、轮动窗口拆解)
注意事项
- 必须先通过「付费前置检查」确认 weixinpay 插件已安装,否则不要进入支付流程
- 收到 402 响应时,支付由 weixinpay 插件完成,Skill 无需关心支付细节
- 支付成功后必须主动发起重试请求,body 保持不变,通过 Header
X-Out-Trade-No传递订单号 - 如果返回 "NOT_PAID",说明支付尚未完成,请等待后重试
- 如果返回 "REFUNDED",说明服务异常已退款,告知用户并终止流程
- 如果返回 "FULFILL_AND_REFUND_FAILED",说明服务异常且退款失败,建议用户联系客服
- 上交所 API 部分日期(节假日/周末)无数据,脚本会自动尝试前几个交易日
- AKShare 请求频率不宜过高,脚本内置间隔
- 首次运行较慢(按周采样 2-3 年约需 2-3 分钟,每个采样日仅 1 次份额接口调用)
- 图表使用中文字体,macOS 上使用 Arial Unicode MS / PingFang SC;Linux 需自备中文字体(如 Noto Sans CJK)
- 份额变化含非国家队的散户/机构申赎,尤其科创50/中证500/A500 噪音较大,结论需打折看趋势
- 本工具仅用于数据可视化与研究,不构成任何投资建议
微信扫一扫