量价淘金
下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/zerone-iteration--volume-price-goldmine.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @zerone-iteration/volume-price-goldmine。把四类量价微观结构信号落成可复现因子:MIF 隔夜信息因子、日频 RSI、订单簿资金流、趋势资金日内交易行为——覆盖隔夜、反转、量能配合、盘口资金流与事件驱动五条量价 Alpha 路径。
阅读全文 (展开查看完整说明)
概述
Pay Skill 范式:鉴权型(agent_local)
鉴权型:履约在本机执行(需本地取数 / 解析大文件),远端网关只做支付鉴权,支付通过后返回
fulfillment: "agent_local",Agent 再跑scripts/下的脚本产出结果。
Overview
把四类量价微观结构信号落成可复现的因子,覆盖五条量价 Alpha 路径——隔夜信息、短期反转、量能配合、盘口资金流、事件驱动。直接回答「这个量价信号怎么落成月度 IC 可测的因子、方向对不对、在本样本上能不能复现」。
覆盖四套可独立调用的范式(公式、参数、方向、边界见 references/methodology.md):
| 范式 | mode | 要解决的问题 | 数据门槛 |
|---|---|---|---|
| MIF 隔夜因子 | mif | 隔夜跳空 × 换手代理的滚动相关,截面正交化隔夜跳空取残差 | 日线(含 open/volume)即可 |
| 日频 RSI 因子 | rsi | 日线 RSI(14) 的横截面 IC 与多空分档 | 日线(含 close)即可 |
| 订单簿资金流因子簇 | orderflow | 逐笔/分钟盘口资金流子因子的降频合成 | 需分钟/逐笔数据(本面板未获取) |
| 趋势资金日内交易行为 | trend | 分钟 VWAP 识别趋势资金分钟,构造均价/净支撑量指标 + 降频事件信号 | 需分钟 VWAP(本面板未获取) |
本包可真实复现的范式:mif、rsi(日线即可)。未获取(缺分钟/逐笔/盘口数据):orderflow、trend 两范式——本包不以合成数据冒充结论,只输出「数据未获取」说明与原始文献实测对照数值(不具名)。
边界:只做因子构造与统计诊断,不做行情预测、不给买卖点位、不连接任何券商交易接口;不访问用户未明确提供的外部系统;取不到的数据一律标注「未获取」,不用代理变量凑数。
When to Use(触发条件)
- 用户说「我想验证隔夜信息优势——隔夜跳空和换手的关系能不能做成月度 IC 为负的因子」时
- 用户说「日频 RSI 到底有没有用,帮我在这批日线上复现一下它的横截面 IC 和方向」时
- 用户说「订单簿资金流因子簇怎么构造,大单主买主卖、盘口量价怎么降频成日度因子」时(需分钟数据)
- 用户说「趋势资金怎么识别,分钟 VWAP 的均价指标和净支撑量指标怎么算,事件驱动怎么降频」时(需分钟数据)
- 用户说「量价微观结构的几条路径,哪些我日线就能跑、哪些必须上高频,帮我分清边界」时
- 用户说「别给我讲理论——把因子公式和数值直接跑出来,要和文献口径可对」时
Workflow(工作流)
Step 0 收集口径(缺一项就问,不猜)
| 需要确认 | 默认 |
|---|---|
| 数据文件与粒度 | 日线(前复权),列见「输入数据规格」 |
| 是否有流通市值 / 分钟数据 | 无 → mif 换手率用 log(成交量) 代理、未做市值中性化;orderflow/trend 标注未获取 |
| 调仓周期 | 月末(因子用月末截面,前瞻下月收益) |
| RSI 窗口 / MIF 滚动窗 | 14 / 20(内部固定,可调参) |
Step 1 取数(二选一,脚本都在 scripts/)
# 1) 拉真实 A 股日线(前复权,分段拉长历史)
python3 scripts/fetch_daily.py --out bars.csv --beg 2018-01-01 --end 2026-08-30
# 2) 用自有数据:导出 CSV,列见 references/methodology.md 第零节Step 2 跑诊断
python3 scripts/run_local.py --input bars.csv --mode all
--groups 5 --out out_dir --html report.html --json result.json
--sub-order <支付订单号> --sub-channel "微信支付 · Agent Pay"--mode可单选(mif/rsi/orderflow/trend)或all- 只想要某几套:
--mode mif,rsi - 支付通过后才执行;
--sub-order由 Agent 在收到paid:true后注入
Step 3 读报告(out_dir/report.md 或 report.html)
先看顶部订阅状态横幅,再看四个范式各自的因子表(月度 IC / 年化 ICIR / 多空年化 / IR / 最大回撤)。orderflow 与 trend 两段为「未获取 + 文献实测对照」,不含本包复现结论。
Step 4 判定与交付:按「分级规则」给每个范式定级,输出给用户并附参数回显与边界说明。
输入数据规格
CSV 列(大小写不敏感,逗号分隔):
| 列 | 必填 | 说明 |
|---|---|---|
date | 是 | 交易日,YYYY-MM-DD |
ticker | 是 | 标的代码(6 位) |
close | 是 | 前复权收盘价 |
open | 是(mif 必需) | 开盘价;隔夜跳空 = open/前收盘-1 |
volume | 是(mif 必需) | 成交量;作换手代理 log(成交量) |
high / low | 否 | 区间高/低(预留,当前未参与计算) |
amount | 否 | 成交额;预留,当前未参与计算 |
bar | 否 | 区间序号(日线固定为 0) |
ret | 否 | 下期收益;不给则由月末 close 前瞻推算 |
必需样本:至少 13 个月历史 + 1 个月前瞻(即 >= 14 个调仓月末),且任月末有效标的数 >= 10。mif 额外要求每只股票在月末前至少有 MIF_WIN+1(默认 21)个含 open/volume 的交易日。
Output(输出规范)
固定四段(顺序不可变,让每次结果可横向比对):
- 订阅状态横幅(置顶 1 条)
- 已订阅:
订阅状态:您已通过 <渠道> 订阅此技能 · 订单 <号> · 有效期至 <日期> - 未订阅:
订阅状态:未检测到有效订阅 —— 请先购买订阅(订阅后由 Agent 带入订单号重新生成本报告) - Markdown 与 HTML 两个版本都必须有,HTML 版用渐变横幅(已订阅=绿,未订阅=琥珀)
- 已订阅:
- 数据画像:股票数、调仓月末数、日期范围、可用因子清单、缺失字段
- 四张范式块:
- 一、MIF 隔夜因子(月度 IC / 年化 ICIR / 多空年化 / IR / 最大回撤 + 口径边界)
- 二、日频 RSI 因子(同上)
- 三、订单簿资金流因子簇(未获取 + 文献实测对照)
- 四、趋势资金日内交易行为(未获取 + 文献实测对照)
- 边界说明:任何因缺列 / 样本不足而未计算的部分,逐条列出原因
分级规则(决定措辞,不决定用户行为)
| 等级 | 触发条件 | 报告措辞 |
|---|---|---|
| 强有效 | |IR| >= 0.50 且样本足 | 「可进入组合观察池」 |
| 弱有效 | 0.10 <= |IR| < 0.50 | 「需加约束后再评估」 |
| 不显著 | |IR| < 0.10 | 「不得据此下单」 |
| 样本不足 | 有效调仓期 < 24 期,或有效标的数 < 10 | 「仅作方法验证,结论仅供参考」 |
缺失信息处理:缺 open/volume → mif 标注「未获取」并说明缺哪一列;缺分钟/逐笔数据 → orderflow/trend 标注「未获取」并给文献对照;样本不足 → 标注「样本不足」并给出所需最小样本;取数失败 → 打印 [未获取] 原因 到 stderr 并返回 1,不输出任何推测结果。
First-Use Configuration(首次使用时向用户确认)
| 参数 | 命令行 | 默认 | 说明 |
|---|---|---|---|
| 多空分档数 | --groups | 5 | 多空分组数,用于复现收益的截面分档 |
| RSI 窗口 | 内部 | 14 | RSI 计算窗口 |
| MIF 滚动窗 | 内部 | 20 | 隔夜跳空与换手代理的滚动相关窗口 |
Notes / Constraints(约束)
- 免责:所有输出末尾固定一句「本结果为量化方法在有限数据上的统计验证,不构成任何投资建议;
历史结论不代表未来,因子有效性随市场结构变化而衰减。」不承诺任何收益水平。
- 不替代什么:不替代投顾意见、不替代风控审批、不替代合规审查;
不提供具体买卖点位、不提供仓位建议、不推荐任何标的。
- 取不到就标注未获取:文件缺失、列不对、样本不足、取数失败,一律如实标注,
绝不因用户已付费而推测补造(鉴权型铁律)。orderflow/trend 依赖分钟/逐笔数据,本面板仅日线,故只给文献对照。
- 口径诚实:本包仅有前复权价量,不含流通股本 / 行业 / 基本面 / 分钟数据。
- mif 真实换手率 = 成交量/流通股本 不可得,用
log(成交量)代理,且未做市值中性化,报告中必须明说; - 订单簿资金流、趋势资金两范式完全未获取,不得把文献数字包装成本包实证结论。
- mif 真实换手率 = 成交量/流通股本 不可得,用
- 方向如实:本包日线 RSI 复现呈弱正 IC,与部分文献日频弱负向方向不一致,属真实样本/池效应,
须如实标注,不强行对齐文献方向、不夸大。
- 显著不等于有效:IR 受样本期数影响。判定必须同时看年化收益、波动、最大回撤与分档多空,不能只看单一指标。
- 付费内容仅报告:本 Skill 售卖的是因子构造计算与报告,不含任何标的推荐名单。
Pay Skill 模式(鉴权型,按次付费,已接入 X402)
本 Skill 为付费技能(Pay Skill),按次收费,已通过腾讯 SkillHub + 微信支付 Agent Pay X402 协议接入。不存在免费运行模式——未完成支付授权前,不得执行本地履约脚本、不得输出任何付费内容;鉴权型只由服务端返回的 paid: true 解锁本机履约。
使用者须已安装并开通
weixinpay_pay插件(微信 AI 支付 / AI 专属卡)。Step 0 检查不通过时不发起付费调用,直接引导开通后重试。
鉴权型:履约在本机执行(需调用本地取数脚本 / 解析本地或远程大文件),远端网关只负责订单鉴权与支付状态确认,支付通过后返回 fulfillment: "agent_local",不返回业务结果;Agent 收到 paid: true 后才在本地跑 scripts/ 下的脚本产出结果。
- 统一网关主接口:
POST https://pay.zerone-iteration.com/api/invoke
(请求体 {"skill": "volume-price-goldmine", "skill_version": "1.0.1", "query": "...", "amount": 990})
- 兼容入口:
POST https://pay.zerone-iteration.com/api/resource(等价于默认 Skill) - 支付回调:
POST https://pay.zerone-iteration.com/api/pay/notify - 退款回调:
POST https://pay.zerone-iteration.com/api/refund/notify - 实现:透明网关(nginx + Java 17 / Spring Boot + WechatPay-Java,微信支付公钥模式);
skill/skill_version 仅做格式校验后透传进 X402 预下单,不查 SkillHub(不查注册表、不反查是否真实存在/已发布/版本匹配);无本地白名单,新增 Skill 免 Java 注册、免改 JAR、免重启,直接 POST /api/invoke 传正确 slug+版本即可
- 状态:于
DEV_MODE=true下完成本地付费链路冒烟——首次调用返回
HTTP 402 + WeixinPay-Required(X402 payment_code)+ X-Out-Trade-No,模拟回调置位后带订单号重试返回 paid:true / fulfillment:agent_local。生产密钥真实扣费待 SkillHub 发布并绑定 X402 商户后实测。自托管联调端口:VOLUME_PRICE_GOLDMINE_PORT(默认 18105)。
Agent 侧调用规范(含付费前置插件检查)
Step 0 付费前置插件检查(必须,缺失则不得发起付费调用)
- 检测当前环境中
weixinpay_pay插件(微信支付 Agent Pay / AI 专属卡)是否已安装并已开通; - 若不存在或未开通:不调用
/api/invoke,改为提示用户先安装/开通微信 AI 支付,完成后再继续; - 若可用:继续 Step 1。
Step 1 调用统一网关:POST /api/invoke,请求体:
{
"skill": "volume-price-goldmine",
"skill_version": "1.0.1",
"query": "用户原始需求(用于订单留痕,不作为履约输入)",
"amount": 990
}skill:必填,固定为本 Skill 的 slugvolume-price-goldmine(与 SkillHub 已发布的一致;透明网关下传错 slug 时错误延后到 SkillHub/微信预下单环节才返回);skill_version:必填,当前版本号1.0.1(缺失返回400 MISSING_SKILL_VERSION);amount:必填,单位分,服务端校验为大于 0 的整数(小数/布尔/零/负数一律400 INVALID_AMOUNT,不静默截断);
区间不强制,价格由 SkillHub 产品定价约束。
Step 2 支付触发(X402 预下单 → 402):未支付时服务端依次执行——
- 生成订单号
out_trade_no(402 响应头X-Out-Trade-No与响应体out_trade_no均会返回,Agent 须记下); - 调用微信支付 Native 下单,获取
code_url; - 用 SkillHub 开发者私钥(SHA256withRSA)对 X402 AI 预下单请求签名;
- 调用
POST https://payapp.weixin.qq.com/palmpayminiapp/clawagentpay/preorder换取payment_code; - 返回 HTTP 402,响应头
WeixinPay-Required与 bodyWeixinPay块中
同时携带 X402 预下单返回的 payment_code(必须是 X402 的 payment_code,不能直接把微信 code_url 当作 payment_code 返回),并回显本单 amount 与 out_trade_no。⚠️ body 的 WeixinPay 嵌套结构最易遗漏:缺失时 weixinpay 插件从 body 解析不到payment_code,会报「当前支付订单已过期」,该报错常被误判为「返回了 code_url」。
Step 3 用户支付授权:Agent 将 WeixinPay-Required 头(或 body WeixinPay 块)中的payment_code 作为 paymentCode 交给 weixinpay_pay 插件,向用户申请支付授权。
Step 4 二次调用鉴权:用户完成支付后,Agent 再次调用 POST /api/invoke(请求体同 Step 1,带请求头 X-Out-Trade-No: <402 返回的订单号>);服务端按订单号主动向微信查单验证支付成功(不依赖回调到达)后返回:
{"ok": true, "paid": true, "fulfillment": "agent_local",
"skill": "volume-price-goldmine", "out_trade_no": "...", "already_fulfilled": false}Step 5 本地履约(本 Skill 的关键差异):Agent 收到 paid: true 且fulfillment: "agent_local" 后,在本机执行 scripts/ 下的脚本产出结果(见 scripts/README.md),再把结果交付给用户。支付未确认前,不执行本地取数脚本、不输出任何付费内容(未支付重试返回 402 {"code":"NOT_PAID"})。
幂等说明:
already_fulfilled: true表示同一订单此前已鉴权通过;此时直接复用上次已产出的结果,不要重复跑取数脚本(避免重复消耗外部接口配额)。
异常处理说明(Agent 与服务端两侧)
| 异常场景 | 处理方式 |
|---|---|
weixinpay_pay 插件不可用 | 不发起付费调用,引导用户安装/开通微信 AI 支付后重试 |
| 用户拒绝支付 / 支付取消 | 如实告知用户支付未完成,不推进后续流程、不输出付费内容;可重新发起(服务端生成新订单) |
| 支付失败(余额不足/风控拦截) | 如实转达失败原因,引导稍后重试;失败订单作废,不据此履约 |
payment_code 过期(最长 15 分钟) | 提示订单已过期,Agent 重新调用获取新订单与新 payment_code,不得复用旧码 |
| 报错「当前支付订单已过期」 | 先查 402 响应体是否有 WeixinPay 嵌套结构,其次才是 code_url 方向 |
| 支付成功但二次调用仍 402(回调延迟) | 等待 3~5 秒后重试,最多 3 次(指数退避),携带 X-Out-Trade-No、订单号不变 |
| 网络异常 / 5xx | 指数退避重试(1s/2s/4s,上限 3 次);持续失败告知服务暂不可用 |
| 本地取数脚本失败(数据源不可用/文件缺失) | 如实告知用户并说明原因,不得因为已付费而编造数据;可引导稍后重试同一订单(already_fulfilled 为 false 时不会重复扣费) |
| 金额校验失败(400 INVALID_AMOUNT) | 修正 amount 为大于 0 的整数分后重试 |
| skill 传错 / 未发布(错误延后到 X402/微信预下单环节) | 核对 skill/skill_version 与 SkillHub 已发布条目一致后重试,不得随便换 slug |
| skill_version 缺失(400 MISSING_SKILL_VERSION) | 补上当前版本号 1.0.1 后重试 |
| 未支付即重试(402 NOT_PAID) | 等待用户完成支付授权后按 Step 4 重试,不得跳过支付环节 |
| 退款 | 服务端经 /api/refund/notify 接收回调;已退款订单的 payment_code 失效,再次调用将重新走支付流程 |
核心原则(SkillHub 官方教程 FAQ):支付失败/未确认时必须如实告知用户,绝不据此推进后续流程。
核心特征对照表(供审核查验)
| # | 核心特征 | 实现位置 |
|---|---|---|
| 1 | X402 AI 预下单换取 payment_code(开发者私钥 SHA256withRSA 签名,调官方 preorder 接口;WeixinPay-Required 返回 payment_code 而非微信 code_url) | pay/server.py skillpay_x402_preorder();链路 Step 2.3~2.5 |
| 2 | 支付触发(未支付返回 402 + WeixinPay-Required 头/体双通道) | pay/server.py _handle_invoke();链路 Step 2.5 |
| 3 | 订单号传递(out_trade_no 全链路关联:下单→预下单→回调置位→X-Out-Trade-No 重试→二次调用) | pay/server.py generate_trade_no() / mark_paid / 402 响应 X-Out-Trade-No 头 |
| 4 | 重试机制(402 回调延迟重试带 X-Out-Trade-No、5xx 指数退避、订单过期重新下单) | 上表「异常处理说明」 |
| 5 | 付费前置插件检查(weixinpay_pay 可用性检测,缺失不发起付费调用) | 链路 Step 0 |
| 6 | 异常处理说明(拒绝支付/取消/过期/退款/本地脚本失败等全场景) | 上表「异常处理说明」 |
| 7 | 透明网关(skill/skill_version 仅做格式校验、不查 SkillHub、不查注册表) | pay/server.py resolve_skill()(无 SKILL_REGISTRY,免 Java 注册/重启) |
包内 pay/server.py 为 Python 参考实现(含 APIv3 签名、X402 预下单、回调验签解密、主动查单、幂等鉴权、透明网关无需注册表),部署说明见 pay_skill.yaml。
注意:本 Skill 涉及两套独立密钥/证书——
- 微信支付 API 证书(
wechat_pay):用于微信 Native 下单与主动查单; - SkillHub 开发者密钥(
skillhub):用于 X402 预下单签名。
私钥均不得写入 Skill 包或仓库,须通过环境变量注入服务端。