波动率信息
下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-u6fr30n3--openvlab-scanner.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-u6fr30n3/openvlab-scanner。扫描期权波动率市场数据,解析隐波百分位、偏度百分位、溢价等指标,并按用户指定条件筛选满足要求的品种。当用户提到扫描隐波百分位、筛选偏度百分位、查找溢价品种、期权波动率筛选、隐波百分位范围、偏度百分位范围、溢价大于或小于等与期权波动率指标筛选相关的需求时触发此技能。
阅读全文 (展开查看完整说明)
概述
OpenVlab Scanner
Overview
扫描 OpenVlab 期权波动率分析平台 (https://www.openvlab.cn/market) 的市场数据页面,提取所有品种的隐波百分位 (atmv_percentile)、偏度百分位 (skew_percentile)、溢价 (premium) 等关键指标,并按用户指定的条件筛选出满足要求的品种。
数据来源
- 网站: https://www.openvlab.cn/market
- 平台: OpenVlab — 期权波动率分析平台
- 数据类型: 商品期权 / 股指期权的波动率市场概览
- 数据获取方式: 该页面为 Next.js 单页应用,数据通过客户端 JavaScript 动态加载。
使用 WebFetch 工具可成功提取渲染后的页面数据。
核心数据字段
主数据表包含以下字段(详见 references/data_model.md):
| 字段 | 英文标识 | 说明 | 示例值 |
|---|---|---|---|
| 名称 | name | 品种名称 | 多晶硅 |
| 代码 | code | 合约代码 | PS2609 |
| 最新价 | last_price | 标的最新价格 | 35445 |
| 标的涨幅% | underlying_change_pct | 标的日涨跌幅 | +7.28% |
| 剩余时间 | days_to_expiry | 距到期日天数 | 4天 |
| 平值隐波 | atmv_current | ATM隐含波动率 | 47.65 |
| 隐波变化 | atmv_1dchg | 隐波日变化值 | +15.28 |
| 隐波涨速 | iv_speed | 隐波变化速率 | +0.790 |
| 实波 | rv_current | 已实现波动率 | 22.57 |
| 溢价 | premium | 隐波 – 实波 | 25.08 |
| 偏度 | skew | 波动率偏度值 | 3.62 |
| 隐波百分位 | atmv_percentile | 隐波历史分位数 | 72% |
| 偏度百分位 | skew_percentile | 偏度历史分位数 | 87 |
页面还提供板块分类:股指、金属、能化、农副、油脂、黑色。
工作流程
第零步(首选):直接调数据 API
页面数据来自 JSON 接口,无需浏览器,一次拿全 75 个品种(2026-08-07 验证):
curl -s "https://www.openvlab.cn/api/ctamap-all?add_overseas=true" -H "User-Agent: Mozilla/5.0"返回 {"code":0,"result":[...]},每条记录字段与主表对应:product_alias(品种名)、prodUnd+exp(合约)、price(最新价)、atmv_current(平值隐波)、atmv_1dchg(隐波变化)、valphaT(隐波涨速)、rv22(实波)、溢价 = atmv_current − rv22(= 字段 carry)、skew_current(偏度)、atmv_percentile(隐波百分位,数值不带%)、skew_percentile(偏度百分位)、expiry_date(到期日)、sector_alias(板块)、is_overseas(=1 为境外品种,一般过滤掉)。同一品种有多条(不同到期月),主表展示的是最近到期(expiry_date 最小)的那条。
第一步:获取页面数据(WebFetch 模板,API 不可用时用)
使用 WebFetch 工具获取页面数据。调用时使用以下 prompt 模板(注意:页面为 SPA,WebFetch 可能只拿到"暂无数据"空表,此时跳到备选方案):
URL: https://www.openvlab.cn/market
Prompt: 提取页面主数据表的每一行数据。对每一行,按以下格式输出(用 | 分隔):
名称|代码|最新价|标的涨幅%|剩余时间|平值隐波|隐波变化|隐波涨速|实波|溢价|偏度|隐波百分位|偏度百分位
注意:
- 代码从链接URL中提取(如 /chart/light/PS202609 中的 PS2609)
- 隐波百分位带%号,偏度百分位不带%号
- 涨幅和变化值保留正负号
- 只输出主数据表(含"选择品种"筛选器下方的表格),不要输出"隐波最大上升/下降"等排名小表第一步备选:浏览器全表提取(WebFetch 主表被截断时用)
openvlab.cn/market 主数据表是虚拟滚动的 SPA:默认按"标的涨幅%"降序,满屏仅渲染约 18~21 行,WebFetch 把整页(导航+4 个排名 widget+主表)转 markdown 时会在主表约第 21 行处被截断,导致底部品种缺失;且主表只收录约 35 个品种(玉米/菜粕/沪银/沪锡/沪铜/甲醇/苯乙烯/碳酸锂/花生 等常不在主表)。
可靠做法:用 agent-browser 真实浏览器,异步滚动网格把全部行渲染出来再抽取。
- 启动/打开页面(Chromium 已装在
C:/Users/PC/.agent-browser/browsers/):
node <agent-browser>/bin/agent-browser.js open https://www.openvlab.cn/market- 用
eval --stdin跑下面这段 JS(注意:该站把每个数字拆成独立<span>,
所以取 textContent 会自动复原数字;行元素特征是 div[childElementCount===13][class~=cursor-pointer]):
(async () => {
const all=[...document.querySelectorAll('*')];
const hdr=all.find(e=>e.children.length===0 && e.textContent.trim()==='隐波百分位');
let hrow=hdr;
while(hrow && !(hrow.parentElement && [...hrow.parentElement.children].some(c=>c.textContent.includes('隐波百分位')))) hrow=hrow.parentElement;
const grid=hrow?hrow.parentElement:null; if(!grid) return 'NO_GRID';
const seen=new Map();
const collect=()=>{[...document.querySelectorAll('div')]
.filter(d=>d.childElementCount===13 && (d.className||'').includes('cursor-pointer') && d.textContent.includes('天'))
.forEach(r=>{const c=[...r.children].map(x=>x.textContent.replace(/s+/g,''));
const n=c[0].split('主')[0]; seen.set(n+'|'+c[1], c.join('|'));});};
collect(); const sleep=ms=>new Promise(r=>setTimeout(r,ms));
let prev=-1,stable=0,n=0;
while(n<50 && stable<5){
if(grid) grid.scrollTop=grid.scrollHeight;
if(grid.parentElement) grid.parentElement.scrollTop=grid.parentElement.scrollHeight;
window.scrollTo(0,document.body.scrollHeight); await sleep(300); collect();
const top=grid?grid.scrollTop:window.scrollY;
if(Math.abs(top-prev)<2){stable++;}else{stable=0;prev=top;} n++;
}
return [...seen.values()].join('n');
})()- 输出每行格式:
名称主CODE|最新价|涨幅%|剩余时间|平值隐波|隐波变化|隐波涨速|实波|溢价|偏度|隐波百分位|偏度百分位|走势预览。
字段顺序对应 references/data_model.md;隐波百分位 带 %、偏度百分位 不带。
- 注意
液化石油气在主表显示名为LPG;沪铜/沪锡仅出现在"溢价最高"排名 widget(缺百分位),不在主表行里。
第二步:解析数据
将 WebFetch 返回的文本数据传递给 scripts/scan_openvlab.py 进行解析和筛选。
# 将 WebFetch 输出保存到临时文件,然后用脚本解析
python scripts/scan_openvlab.py --input <webfetch_output_file> [筛选条件]
# 或者直接通过管道传入
echo "<webfetch_output>" | python scripts/scan_openvlab.py [筛选条件]如果 Python 脚本不可用,也可直接从 WebFetch 输出中手动解析:
- 每行用
|分隔,共 13 个字段 - 数值字段需要去掉
+、%、天等后缀
第三步:应用筛选条件
根据用户需求应用筛选条件。常见筛选模式:
筛选条件语法
--atmv-percentile-min <值> 隐波百分位下限(如 20 表示 20%)
--atmv-percentile-max <值> 隐波百分位上限(如 50 表示 50%)
--skew-percentile-min <值> 偏度百分位下限
--skew-percentile-max <值> 偏度百分位上限
--premium-min <值> 溢价下限
--premium-max <值> 溢价上限
--sector <板块> 板块筛选(股指/金属/能化/农副/油脂/黑色)
--sort-by <字段> 排序字段
--sort-order <asc|desc> 排序方向常见筛选场景
- 低隐波 + 低偏度(寻找波动率偏低、偏度不极端的品种):
--atmv-percentile-max 30 --skew-percentile-max 30
- 高隐波 + 高溢价(寻找隐波偏高且有溢价空间的品种):
--atmv-percentile-min 70 --premium-min 5
- 负溢价品种(隐波低于实波,可能存在波动率低估):
--premium-max 0
- 高偏度百分位(偏度处于历史高位,可能存在尾部风险定价):
--skew-percentile-min 80
- 低隐波百分位 + 正溢价(隐波历史低位但有正溢价):
--atmv-percentile-max 25 --premium-min 0
第四步:输出结果
脚本输出 JSON 格式的筛选结果,包含:
- 筛选条件摘要
- 符合条件的品种数量
- 每个品种的完整数据
- 排序后的列表
将结果以表格形式呈现给用户,高亮关键字段。
使用示例
示例 1:筛选隐波百分位低于 30% 的品种
用户:"帮我扫描 openvlab,找出隐波百分位低于 30% 的品种"
执行步骤:
- WebFetch 获取页面数据
- 运行:
python scripts/scan_openvlab.py --input <file> --atmv-percentile-max 30 - 将结果整理为表格展示
示例 2:筛选低隐波 + 高溢价的品种
用户:"找出隐波百分位低于 25% 但溢价大于 3 的品种"
执行步骤:
- WebFetch 获取页面数据
- 运行:
python scripts/scan_openvlab.py --input <file> --atmv-percentile-max 25 --premium-min 3 - 展示结果
示例 3:多条件筛选 + 排序
用户:"扫描偏度百分位在 50-80 之间、溢价为正的品种,按隐波百分位降序排列"
执行步骤:
- WebFetch 获取页面数据
- 运行:
python scripts/scan_openvlab.py --input <file> --skew-percentile-min 50 --skew-percentile-max 80 --premium-min 0 --sort-by atmv_percentile --sort-order desc - 展示结果
注意事项
- 数据时效性: 页面数据为实时行情数据,每次扫描获取的是当前快照。
- 品种范围: 页面包含约 30-50 个活跃品种,主要是商品期权和部分股指期权。
- 隐波百分位 vs 偏度百分位: 隐波百分位带
%号(0-100%),偏度百分位不带%号(0-100 整数)。
脚本内部统一处理为 0-100 的数值进行比较。
- 溢价含义: 溢价 = 平值隐波 – 实波(已实现波动率),正值表示隐波高于实波,负值表示隐波低于实波。
- 网络依赖: 需要能够访问 https://www.openvlab.cn ,如果网络不通则无法获取数据。
- 板块分类: 股指(沪深300/中证1000等ETF和期货)、金属(铜/锌/铝/贵金属等)、
能化(原油/PTA/橡胶等)、农副(玉米/豆粕/白糖/苹果等)、油脂(豆油/棕榈油等)、黑色(螺纹/铁矿石/焦煤等)。