Orange Hitick 波动率数据 Skill 文档
这份文档用于开发者手动接入,或让 Agent 按统一规则接入 Orange Hitick 的波动率数据服务。
1. 服务信息
- 平台接口前缀:
/api/v1/vol-data - 鉴权方式:请求头
X-API-Token - 返回包装:Orange Hitick 统一
ApiResponse - 当前服务编码:
vol_data - 当前服务名称:
波动率数据 - 计费说明:
/groups不计费;/query/*、/snapshot/*、/ts/*、/gex/*、/gex-image/*成功返回后计费,扣费失败则接口直接返回错误
平台统一返回结构:
{
"code": 0,
"message": "success",
"data": {}
}
说明:
code = 0表示平台调用成功- 真正的波动率数据结果放在
data中 data是上游接口返回结果的透传 JSON
2. 鉴权
所有请求都必须带:
X-API-Token: your_token_value
为减少大 JSON 的传输量,HTTP 客户端可发送 Accept-Encoding: gzip。服务端协商压缩后返回 Content-Encoding: gzip,客户端应解压后再解析 JSON;例如 curl --compressed 会自动完成协商和解压。不声明支持 gzip 时仍返回原文,返回结构和查询范围限制不变。
3. 接口能力总览
本服务可以提供 6 大类数据能力:
- 分组目录:可查询哪些
(underlying, expire_date, multiplier)组合当前可用 - 实时快照:可查询标的报价、ATM 隐波、期权链、Greeks、盘口隐波、卖方保证金
- 历史小时快照:可查询本地落库的 T 型报价小时快照
- 时序数据:可查询某一时间区间内的
atm_iv与标的价格走势 - GEX 曲线与 GEX 小时快照:可查询 Gamma Exposure 分布、当前净 GEX、零 gamma 位置,并可回看本地落库的小时 GEX 快照
- Agent / MCP 接入:先用
orange_resolve_subject解析标的,实时快照统一使用by_underlying,并支持snapshot_*、ts_*、gex_*标准化动作
建议使用顺序:
- Agent 中先用
orange_resolve_subject把中文品种名、代码前缀或不完整合约解析成标准三元组 - 查询实时快照时优先使用
query/* - 查询历史整点快照时使用
snapshot/* - 查询波动率走势时使用
ts/* - 查询 Gamma Exposure 分布时使用
gex/* - 查询历史整点 GEX 结构时使用
gex/snapshot/*
REST 的 /groups 接口仍保持不变,供原有 HTTP 客户端使用;Raw MCP 不公开全量分组 action。
4. 接口列表与请求参数
4.1 获取缓存分组
GET /api/v1/vol-data/groups
用途:
- 返回当前可查询的
(underlying, expire_date, multiplier)组合 - 适合在已知标的代码后,进一步确认有哪些到期日和合约乘数可查
- 不扣费
请求参数:
- 无 query 参数
示例:
curl -sS 'https://api.hitick.top/api/v1/vol-data/groups' \
-H 'X-API-Token: your_token_value'
返回核心结构:
{
"groups": [
{
"underlying": "au2607",
"expire_date": "20260624",
"multiplier": 1000
}
]
}
字段说明:
groups[].underlying:标的代码groups[].expire_date:到期日,格式yyyyMMddgroups[].multiplier:合约乘数
4.2 实时快照接口
实时快照接口用于查询某个标的分组下的完整 T 型报价快照,包含:
- 标的最新报价
- 当前 ATM 隐含波动率
- 隐含波动率偏度(
iv_skew) - PCR 指标(
oi_pcr、volume_pcr) - 行权价维度的期权链
- Call / Put 双边 Greeks
- 理论隐波、盘口隐波
- 卖方参考保证金
4.2.1 按标的查询
GET /api/v1/vol-data/query/by-underlying?underlying=au2607
必填参数:
underlying:标的代码,例如au2607
可选参数:
expire:到期日,格式yyyyMMddmultiplier:合约乘数,例如1000
适用场景:
- 只知道标的代码,想拿当前默认分组的实时快照
- 若同时传
expire/multiplier,上游会按更具体的分组筛选
4.2.2 按到期日查询
GET /api/v1/vol-data/query/by-expire?underlying=au2607&expire=20260624
必填参数:
underlying:标的代码,例如au2607
建议参数:
expire:到期日,格式yyyyMMdd
可选参数:
multiplier:合约乘数,例如1000
适用场景:
- 已明确目标到期日,希望获取该到期日下的实时快照
4.2.3 按乘数查询
GET /api/v1/vol-data/query/by-multiplier?underlying=au2607&expire=20260624&multiplier=1000
必填参数:
underlying:标的代码,例如au2607
建议参数:
expire:到期日,格式yyyyMMddmultiplier:合约乘数,例如1000
适用场景:
- 已明确完整分组,想精确锁定某一条可交易链
4.2.4 历史小时快照查询
GET /api/v1/vol-data/snapshot/by-underlying?underlying=au2607&snapshotTime=1781062200000
用途:
- 查询本地数据库中某个小时档位的历史 T 型快照
- 返回结构与实时快照
GET /api/v1/vol-data/query/by-multiplier基本一致 - 适合回看某个历史时点的
atm_iv、iv_skew、PCR、标的报价、期权链、Greeks 和盘口隐波
必填参数:
underlying:标的代码,例如au2607snapshotTime:目标时间戳,毫秒;也可传last,表示查询当前分组在数据库中最新的一条快照,主要用于非开盘时段获取上次收盘时的快照
可选参数:
expire:到期日,格式yyyyMMddmultiplier:合约乘数,例如1000
参数规则:
- 当未传
expire时,默认选择该underlying的最近月 - 当未传
multiplier时,默认选择该月下最小乘数 snapshotTime传毫秒时间戳时会先向下取整到整点,再查询对应小时快照snapshotTime=last时不做时间取整,直接按当前分组查询数据库中snapshot_hour_ms最大的一条记录;主要使用场景是在非开盘时段获取上次收盘时的快照
示例:
curl -sS 'https://api.hitick.top/api/v1/vol-data/snapshot/by-underlying?underlying=au2607&snapshotTime=1781062200000' \
-H 'X-API-Token: your_token_value'
返回核心结构:
{
"found": true,
"query_type": "snapshot_by_underlying",
"underlying": "au2607",
"expire_date": "20260624",
"multiplier": 1000,
"atm_iv": 0.1852,
"iv_skew": -0.0174,
"oi_pcr": 1.2389,
"volume_pcr": 0.8123,
"data_time_ms": 1781062200000,
"underlying_quote": {
"symbol": "au2607",
"last_price": 812.34
},
"rows": [
{
"strike": 800,
"call": {
"symbol": "au2607-C-800",
"delta": 0.54,
"gamma": 0.0012,
"vega": 0.0831,
"theta": -0.0245,
"theo_vol": 0.1841,
"implied_vol": 0.1863
},
"put": {
"symbol": "au2607-P-800",
"delta": -0.46,
"gamma": 0.0011,
"vega": 0.0818,
"theta": -0.0229,
"theo_vol": 0.1874,
"implied_vol": 0.1889
}
}
]
}
字段说明:
found:是否命中该历史快照query_type:固定为snapshot_by_underlyingunderlying:标的代码expire_date:实际命中的到期日,格式yyyyMMddmultiplier:实际命中的合约乘数atm_iv:该小时快照的 ATM 隐含波动率,小数表示iv_skew:该小时快照的隐含波动率偏度oi_pcr:按put.open_interest / call.open_interest聚合得到的持仓量 PCRvolume_pcr:按put.volume / call.volume聚合得到的成交量 PCRdata_time_ms:快照所属整点时间,毫秒underlying_quote.last_price:该时点标的最新价rows[]:该时点期权链,结构与实时query/*返回一致
说明:
- 如果
found = false,表示该分组在对应整点没有可用历史快照 rows[].call/rows[].put下的 Greeks、理论隐波、盘口隐波字段与实时接口一致- PCR 口径与实时快照一致:
oi_pcr = sum(put.open_interest) / sum(call.open_interest)volume_pcr = sum(put.volume) / sum(call.volume)- 缺失
open_interest或volume按0处理 - 当 call 侧分母为
0时,返回NaN atm_iv、theo_vol、implied_vol等隐波字段均为小数,不是百分比
4.3 时间序列接口
时间序列接口用于查询某个时间区间内的 ATM 隐波、隐含波动率偏度和标的价格时序。
三个 /ts/* 接口统一限制单次查询跨度最多 24 小时(86400000 毫秒):
start、end必填。正数为绝对 Unix 毫秒时间戳;非正数为相对该分组最新有效数据时间的毫秒偏移,0表示最新数据,并非服务器当前时间。- 绝对、相对及混合写法均按解析后的时间校验:
0 <= end - start <= 86400000。恰好 24 小时允许,超过 24 小时直接报错,不自动截断。 start=-86400000&end=0查询最新 24 小时;原相对查询自动裁剪到 12 小时的行为已取消。- 超限请求不扣查询费用。沿用业务错误格式:HTTP 状态码为
200,客户端必须检查code,并展示message。请缩小时间范围后再请求,不要原样重试。
超限返回示例:
{
"code": 1001,
"message": "时序查询时间范围不能超过 24 小时(86400000 毫秒),请缩小 start/end 时间范围后重试。",
"data": null
}
返回重点:
timestamp_msunderlying_last_priceatm_iviv_skew
4.3.1 按标的查询时序
GET /api/v1/vol-data/ts/by-underlying?underlying=au2607&start=1781062200000&end=1781062300000
必填参数:
underlying:标的代码,例如au2607start:起始时间戳,毫秒end:结束时间戳,毫秒
可选参数:
expire:到期日,格式yyyyMMddmultiplier:合约乘数,例如1000
4.3.2 按到期日查询时序
GET /api/v1/vol-data/ts/by-expire?underlying=au2607&expire=20260624&start=1781062200000&end=1781062300000
必填参数:
underlying:标的代码,例如au2607start:起始时间戳,毫秒end:结束时间戳,毫秒
建议参数:
expire:到期日,格式yyyyMMdd
可选参数:
multiplier:合约乘数,例如1000
4.3.3 按乘数查询时序
GET /api/v1/vol-data/ts/by-multiplier?underlying=au2607&expire=20260624&multiplier=1000&start=1781062200000&end=1781062300000
必填参数:
underlying:标的代码,例如au2607start:起始时间戳,毫秒end:结束时间戳,毫秒
建议参数:
expire:到期日,格式yyyyMMddmultiplier:合约乘数,例如1000
4.4 GEX 曲线接口
GEX 接口用于查询 Gamma Exposure 扫描结果,适合分析:
- 当前净 GEX 是正还是负
- 价格上移 / 下移后净 GEX 如何变化
- 零 gamma 位置在哪里
- 当前价附近是否存在 GEX 翻转区
4.4.1 按标的查询 GEX
GET /api/v1/vol-data/gex/by-underlying?underlying=au2607
必填参数:
underlying:标的代码,例如au2607
可选参数:
expire:到期日,格式yyyyMMddmultiplier:合约乘数,例如1000
4.4.2 按到期日查询 GEX
GET /api/v1/vol-data/gex/by-expire?underlying=au2607&expire=20260624
必填参数:
underlying:标的代码,例如au2607
建议参数:
expire:到期日,格式yyyyMMdd
可选参数:
multiplier:合约乘数,例如1000
4.4.3 按乘数查询 GEX
GET /api/v1/vol-data/gex/by-multiplier?underlying=au2607&expire=20260624&multiplier=1000
必填参数:
underlying:标的代码,例如au2607
建议参数:
expire:到期日,格式yyyyMMddmultiplier:合约乘数,例如1000
4.5 GEX 历史小时快照接口
GEX 历史小时快照接口用于查询本地数据库中已落库的整点 GEX 结构。它适合回看某一小时档位的净 GEX、零 gamma 和扫描曲线,而不是重新按当前行情计算。
GET /api/v1/vol-data/gex/snapshot/by-underlying?underlying=au2607&snapshotTime=1781651875123
用途:
- 查询本地数据库中某个小时档位的历史 GEX 快照
- 返回结构与实时 GEX
GET /api/v1/vol-data/gex/by-multiplier基本一致 - 适合回看某个历史时点的
current_gex、zero_gamma、spot_price和points
必填参数:
underlying:标的代码,例如au2607snapshotTime:目标时间戳,毫秒;也可传last,表示查询当前分组在数据库中最新的一条 GEX 快照,主要用于非开盘时段获取上次收盘时的 GEX 快照
可选参数:
expire:到期日,格式yyyyMMddmultiplier:合约乘数,例如1000
参数规则:
- 当未传
expire时,默认选择该underlying的最近月 - 当未传
multiplier时,默认选择该月下最小乘数 snapshotTime传毫秒时间戳时会先向下取整到整点,再查询对应小时快照snapshotTime=last时不做时间取整,直接按当前分组查询数据库中snapshot_hour_ms最大的一条记录;主要使用场景是在非开盘时段获取上次收盘时的 GEX 快照- 计费 payload 中会同时记录实际查询的
snapshotTime和原始请求的requestedSnapshotTime
示例:
curl -sS 'https://api.hitick.top/api/v1/vol-data/gex/snapshot/by-underlying?underlying=au2607&snapshotTime=1781651875123' \
-H 'X-API-Token: your_token_value'
返回核心结构:
{
"found": true,
"query_type": "gex_by_multiplier",
"underlying": "au2607",
"expire_date": "20260624",
"multiplier": "1000",
"data_time_ms": 1781650800123,
"spot_price": 919.12,
"price_min": 827.208,
"price_max": 1011.032,
"range_pct": 0.1,
"steps": 81,
"current_gex": -1582342.118,
"zero_gamma": 941.47,
"points": [
{
"price": 827.208,
"net_gex": -2120341.441
}
],
"error": null
}
字段说明:
found:是否命中该历史 GEX 快照query_type:命中快照时通常保留落库时的实时查询类型,例如gex_by_multiplier;未命中时为gex_snapshot_by_underlyingunderlying:标的代码expire_date:实际命中的到期日,格式yyyyMMddmultiplier:实际命中的合约乘数data_time_ms:落库快照对应的上游行情时间戳spot_price:该快照用于计算 GEX 的标的价格current_gex:该快照现价下的净 GEXzero_gamma:若曲线穿越 0,则返回线性插值得到的零 gamma 价格,否则为nullpoints[]:扫描价格点数组,结构与实时gex/*返回一致
说明:
- 如果
found = false,表示该分组在对应整点没有可用 GEX 快照 - 后台定时任务按可用分组抓取实时
gex/by-multiplier,并以整点小时作为snapshotHourMs落库 - 只有上游返回
found = true且data_time_ms距当前时间不超过 30 分钟时,后台才会持久化该小时 GEX 快照
4.6 GEX 图片接口
GEX 图片接口用于获取已渲染的 GEX 结构图 CDN 地址,适合聊天机器人、外部系统或移动端直接展示图片。默认生成实时 GEX 图;传入 snapshotTime 后可生成过去某个小时档位的历史 GEX 图,传 snapshotTime=last 可生成当前分组数据库最新快照图,主要用于非开盘时段获取上次收盘时的 GEX 图。
GET /api/v1/vol-data/gex-image/by-underlying?underlying=au2607
必填参数:
underlying:标的代码,例如au2607
建议参数:
expire:到期日,格式yyyyMMddmultiplier:合约乘数,例如1000snapshotTime:目标时间戳,毫秒;也可传last,表示使用当前分组数据库最新 GEX 快照生成图片,主要用于非开盘时段获取上次收盘时的 GEX 图
返回示例:
{
"code": 0,
"message": "ok",
"data": {
"url": "https://cdn.example.com/gex/au2607-20260624-1000.png",
"generated_at": 1781650800000
}
}
调用说明:
- 只传
underlying即可获取该标的的 GEX 图片 URL expire/multiplier可选;未传时系统会自动选择可用组合- 未传
snapshotTime时生成实时 GEX 图;传毫秒时间戳时生成对应小时快照图;传last时生成最新落库快照图,主要用于非开盘时段获取上次收盘时的 GEX 图 - 返回的
url可直接用于图片展示或发送 - 成功返回图片 URL 后触发计费;失败时接口返回错误信息
5. 参数说明总表
所有接口的 query 参数都来自下面这组字段:
| 参数名 | 类型 | 是否必填 | 适用接口 | 说明 |
|---|---|---|---|---|
underlying |
string | query/*、snapshot/*、ts/*、gex/*、gex-image/* 必填 |
query/*、snapshot/*、ts/*、gex/*、gex-image/* |
标的代码,例如 au2607、cu2607 |
expire |
string | 视场景建议传 | query/*、snapshot/*、ts/*、gex/*、gex-image/* |
到期日,格式 yyyyMMdd,例如 20260624 |
multiplier |
string / number | 视场景建议传 | query/*、snapshot/*、ts/*、gex/*、gex-image/* |
合约乘数,例如 1000、5 |
start |
string / number | ts/* 必填 |
ts/* |
起始毫秒时间戳 |
end |
string / number | ts/* 必填 |
ts/* |
结束毫秒时间戳 |
snapshotTime |
string / number | snapshot/*、gex/snapshot/* 必填;gex-image/* 可选 |
snapshot/*、gex/snapshot/*、gex-image/* |
目标毫秒时间戳,服务端会向下取整到整点查询;也可传 last 查询当前分组数据库最新快照,主要用于非开盘时段获取上次收盘时的快照。用于 gex-image/* 时,表示生成历史 GEX 图或最新落库 GEX 图 |
实务建议:
- 如果你只知道标的代码,先用
by-underlying - 如果你在做单一期限分析,优先传
expire - 如果同一标的存在多个乘数,建议显式传
multiplier - 时间区间建议用毫秒级 Unix 时间戳,避免时区歧义
6. 返回结构详解
6.1 快照查询返回结构
三个 query/* 接口的 data 顶层结构一致:
{
"found": true,
"query_type": "by_underlying",
"underlying": "au2607",
"expire_date": "20260624",
"multiplier": 1000,
"atm_iv": 0.29434965770081106,
"iv_skew": -0.0174,
"oi_pcr": 1.2389,
"volume_pcr": 0.8123,
"data_time_ms": 1781071070500,
"api_latency_ms": 132,
"calc_latency_ms": 8,
"underlying_quote": {
"symbol": "au2607",
"last_price": 919.12,
"bid_price": 918.94,
"ask_price": 919.24,
"open_price": 930.0,
"highest_price": 951.2,
"lowest_price": 912.6,
"pre_settlement_price": 947.94
},
"rows": [
{
"strike": 704.0,
"call": {
"symbol": "au2607C704",
"delta": 0.9920005958397674,
"gamma": 0.00019125757057879587,
"vega": 0.03419517453622726,
"theta": -0.10879514980386451,
"theo_vol": 0.584031857797719,
"implied_vol": null,
"implied_bid_vol": null,
"implied_ask_vol": null,
"short_margin": 364215.4
},
"put": {
"symbol": "au2607P704",
"delta": -0.007040959652272832,
"gamma": 0.00019125757057879587,
"vega": 0.03419517453622726,
"theta": -0.10879514980386451,
"theo_vol": 0.584031857797719,
"implied_vol": null,
"implied_bid_vol": null,
"implied_ask_vol": null,
"short_margin": 85297.7
}
}
],
"error": null
}
6.1.1 顶层字段
found:是否命中数据query_type:查询类型,如by_underlying、by_expire、by_multiplierunderlying:标的代码expire_date:到期日multiplier:合约乘数atm_iv:当前 ATM 隐含波动率,使用小数表示,不是百分比iv_skew:当前隐含波动率偏度oi_pcr:按put.open_interest / call.open_interest聚合得到的持仓量 PCRvolume_pcr:按put.volume / call.volume聚合得到的成交量 PCRdata_time_ms:快照数据时间戳,毫秒api_latency_ms:上游接口耗时,毫秒calc_latency_ms:上游计算耗时,毫秒error:上游错误对象;正常时通常为null
6.1.2 标的报价字段
underlying_quote 用于表示标的实时行情,稳定字段包括:
underlying_quote.symbol:标的代码underlying_quote.last_price:标的最新价underlying_quote.bid_price/ask_price:买一价和卖一价underlying_quote.open_price:Basic Data 返回的当前交易日开盘价underlying_quote.highest_price:Basic Data 返回的当前交易日最高价underlying_quote.lowest_price:Basic Data 返回的当前交易日最低价underlying_quote.pre_settlement_price:昨结算价underlying_quote.open_interest:持仓量underlying_quote.volume:成交量underlying_quote.exchange:交易所underlying_quote.timestamp_ms:行情源时间戳
说明:
- 开盘、最高和最低均直接透传 Basic Data,不由 volData 的分钟序列推算。
- 字段在上游尚未形成有效价格时可能为
null。
6.1.3 期权链字段
rows 表示按行权价展开的期权链。
rows[].strike:行权价rows[].call:该行权价对应的看涨期权数据rows[].put:该行权价对应的看跌期权数据
如果某一侧无数据,对应 call 或 put 可能为空。
6.1.4 报价相关字段
当前快照结构中,文档已确认或约定可重点关注以下报价相关字段:
underlying_quote.last_price:标的最新价underlying_quote.open_price/highest_price/lowest_price:当前交易日开高低underlying_quote.pre_settlement_price:昨结算价rows[].strike:行权价rows[].call.symbol/rows[].put.symbol:期权合约代码
如果上游后续补充盘口价、买一卖一、成交量、持仓量等字段,也会继续透传在 call / put 节点中。当前这份对外文档先只写明已验证存在的稳定字段。
6.1.5 隐含波动率字段
本接口可提供多层次的隐波数据:
atm_iv:整个分组当前的 ATM 隐含波动率iv_skew:整个分组当前的隐含波动率偏度rows[].call.theo_vol/rows[].put.theo_vol:模型理论波动率rows[].call.implied_vol/rows[].put.implied_vol:该合约的中间隐含波动率rows[].call.implied_bid_vol/rows[].put.implied_bid_vol:按买价反推的隐含波动率rows[].call.implied_ask_vol/rows[].put.implied_ask_vol:按卖价反推的隐含波动率
字段解释:
atm_iv:最适合做品种层面的升波 / 降波、时点比较、排序分析theo_vol:更偏模型内部估计值,适合与市场隐波对比implied_vol:更适合看单个合约当前的市场定价隐波implied_bid_vol/implied_ask_vol:适合衡量盘口两侧隐波差异和流动性状态
注意:
- 所有隐波字段都以小数表示,例如
0.28表示28% - 返回
null表示该时刻无法稳定反推出对应隐波,不应直接当作0
6.1.6 PCR 字段
当前快照顶层还会返回两个 PCR 指标:
oi_pcr:持仓量 Put/Call Ratiovolume_pcr:成交量 Put/Call Ratio
PCR 口径:
oi_pcr = sum(put.open_interest) / sum(call.open_interest)volume_pcr = sum(put.volume) / sum(call.volume)- 缺失
open_interest或volume按0处理 - 当 call 侧分母为
0时,返回NaN
6.1.7 Greeks 字段
本接口目前明确可返回以下 Greeks:
deltagammavegatheta
字段位置:
rows[].call.deltarows[].call.gammarows[].call.vegarows[].call.thetarows[].put.deltarows[].put.gammarows[].put.vegarows[].put.theta
含义说明:
delta:标的价格变化 1 单位时,期权价格的一阶敏感度gamma:delta对标的价格变化的二阶敏感度vega:期权价格对隐含波动率变化的敏感度theta:期权价格对时间流逝的敏感度
使用建议:
- 做方向判断时优先看
delta - 做 Gamma 风险或 Gamma 暴露分析时看
gamma - 做升波 / 降波敏感度分析时看
vega - 做临近到期的时间损耗分析时看
theta
6.1.7 保证金字段
rows[].call.short_marginrows[].put.short_margin
说明:
short_margin面向卖方场景,表示卖出该期权时的参考保证金金额- 可用于估算资金占用、静态收益率和风控承受能力
- 该字段是参考值,实际交易保证金仍可能因期货公司、交易所规则、账户风险参数和盘中行情而变化
6.2 时间序列返回结构
三个 ts/* 接口的 data 顶层结构一致:
{
"found": true,
"query_type": "ts_by_underlying",
"underlying": "au2607",
"expire_date": "20260624",
"multiplier": 1000,
"start_ms": 1781062200000,
"end_ms": 1781062300000,
"rows": [
{
"timestamp_ms": 1781062200500,
"underlying_last_price": 911.92,
"atm_iv": 0.3072331463176879,
"iv_skew": -0.0174
}
],
"error": null
}
字段说明:
found:是否命中query_type:查询类型,可能为ts_by_underlying、ts_by_expire、ts_by_multiplierunderlying:标的代码expire_date:到期日multiplier:合约乘数start_ms:请求起始时间戳end_ms:请求结束时间戳rows:时间序列点数组rows[].timestamp_ms:数据点时间戳,毫秒rows[].underlying_last_price:该时点的标的最新价rows[].atm_iv:该时点的 ATM 隐含波动率rows[].iv_skew:该时点的隐含波动率偏度error:上游错误对象;正常时通常为null
时序能力总结:
- 可以做日内升波 / 降波分析
- 可以做开盘到当前的
atm_iv变化分析 - 可以做某一交易时段的标的价格与隐波联动分析
- 可以作为主观信号、量化特征、图表展示的原始输入
6.3 GEX 曲线返回结构
三个 gex/* 接口的 data 顶层结构一致:
{
"found": true,
"query_type": "gex_by_underlying",
"underlying": "au2607",
"expire_date": "20260624",
"multiplier": 1000,
"data_time_ms": 1781071070500,
"spot_price": 919.12,
"price_min": 827.208,
"price_max": 1011.032,
"range_pct": 0.1,
"steps": 81,
"current_gex": -1582342.118,
"zero_gamma": 941.47,
"points": [
{
"price": 827.208,
"net_gex": -2120341.441
}
],
"error": null
}
字段说明:
found:是否命中query_type:查询类型,可能为gex_by_underlying、gex_by_expire、gex_by_multiplierunderlying:标的代码expire_date:到期日multiplier:合约乘数data_time_ms:快照时间戳spot_price:当前标的价格,GEX 扫描中心price_min:扫描下界price_max:扫描上界range_pct:扫描半区间比例,例如0.1表示以现价上下各10%扫描steps:扫描网格数量current_gex:当前现价下的净 GEXzero_gamma:若曲线穿越 0,则返回线性插值得到的零 gamma 价格,否则为nullpoints:扫描价格点数组points[].price:扫描价格点points[].net_gex:该价格点对应的净 GEXerror:上游错误对象;正常时通常为null
GEX 能力总结:
- 可看当前市场整体是正 GEX 还是负 GEX
- 可判断现价附近是否接近零 gamma 区域
- 可辅助分析价格波动放大 / 收敛的潜在结构
- 可与
gamma、open interest、持仓结构分析配合使用
6.4 GEX 历史小时快照返回结构
gex/snapshot/by-underlying 返回本地落库的小时 GEX 快照。命中时结构与实时 gex/* 基本一致,未命中时返回一个轻量的未命中对象:
{
"found": false,
"query_type": "gex_snapshot_by_underlying",
"underlying": "au2607",
"expire_date": "20260624",
"multiplier": "1000"
}
使用建议:
- 需要“某个整点附近的 GEX 结构”时使用
gex/snapshot/by-underlying - 需要“当前实时 GEX 结构”时使用
gex/by-underlying、gex/by-expire或gex/by-multiplier snapshotTime可传任意毫秒时间戳,服务端会按整点小时归档查询;也可传last查询当前分组数据库最新快照,主要用于非开盘时段获取上次收盘时的快照
7. 波动率日差说明
如果需要回答这类问题:
- “今天
xx有升波吗?” - “今天升波最大的品种是什么?”
- “今天哪些品种降波最多?”
建议统一使用“波动率日差”口径。
定义:
- 波动率日差 = 当前波动率 - 上一交易日收盘时波动率
- 波动率上升 / 下降,均以上一交易日收盘时的波动率为比较基准
使用建议:
- 先用快照接口读取当前
atm_iv - 再用时间序列接口读取覆盖“上一交易日收盘前后”和“当前时刻”的数据
- 取上一交易日收盘时最近的
atm_iv作为对比基准 - 用当前
atm_iv - 上一交易日收盘时 atm_iv得到波动率日差
判读规则:
- 波动率日差 > 0:表示今天升波
- 波动率日差 < 0:表示今天降波
- 波动率日差 = 0:表示与上一交易日收盘相比基本持平
注意:
atm_iv为小数形式返回,例如0.28表示28%- 做跨品种比较时,建议统一使用同一时点的当前快照,并统一以上一交易日收盘时为基准
- 如果上一交易日收盘附近没有有效时序点,应选择最接近收盘时间的可用点,并在结果中说明是“收盘附近参考值”
8. Agent 接入规范
如果给 Agent 使用,建议按下面的最小规则封装。
8.1 工具名建议
orange_resolve_subject
orange_vol_data
orange_resolve_subject 输入 query,可选 limit 默认 5、最大 5。它返回推荐的 selected 三元组及最多 5 个候选,不返回完整目录、行情或期权链。
8.2 输入结构建议
{
"action": "by_underlying | snapshot_by_underlying | gex_snapshot_by_underlying | ts_by_underlying | ts_by_expire | ts_by_multiplier | gex_by_underlying | gex_by_expire | gex_by_multiplier | gex_image_by_underlying",
"params": {
"underlying": "au2607",
"expire": "20260624",
"multiplier": "1000",
"start": "1781062200000",
"end": "1781062300000",
"fullChain": false
}
}
参数要求:
action = by_underlying:必须传underlying;expire、multiplier可选,未传时自动选择最早到期日及该到期日最小乘数;默认只返回现价上下 10% 行权价档位,完整链需传fullChain=trueaction = snapshot_by_underlying:必须传underlying、snapshotTime,建议传expire、multiplier;snapshotTime可为毫秒时间戳或last,其中last主要用于非开盘时段获取上次收盘时的快照action = gex_snapshot_by_underlying:必须传underlying、snapshotTime,建议传expire、multiplier;snapshotTime可为毫秒时间戳或last,其中last主要用于非开盘时段获取上次收盘时的 GEX 快照action = ts_by_underlying:必须传underlying、start、endaction = ts_by_expire:必须传underlying、start、end,建议传expireaction = ts_by_multiplier:必须传underlying、start、end,建议传expire、multiplieraction = gex_by_underlying:必须传underlyingaction = gex_by_expire:必须传underlying,建议传expireaction = gex_by_multiplier:必须传underlying,建议传expire、multiplieraction = gex_image_by_underlying:必须传underlying,建议传expire、multiplier;未传时后端自动补齐;可选传snapshotTime毫秒时间戳或last生成历史 GEX 图,其中last主要用于非开盘时段获取上次收盘时的 GEX 图
8.3 路由映射
by_underlying->GET /api/v1/vol-data/query/by-underlyingsnapshot_by_underlying->GET /api/v1/vol-data/snapshot/by-underlyinggex_snapshot_by_underlying->GET /api/v1/vol-data/gex/snapshot/by-underlyingts_by_underlying->GET /api/v1/vol-data/ts/by-underlyingts_by_expire->GET /api/v1/vol-data/ts/by-expirets_by_multiplier->GET /api/v1/vol-data/ts/by-multipliergex_by_underlying->GET /api/v1/vol-data/gex/by-underlyinggex_by_expire->GET /api/v1/vol-data/gex/by-expiregex_by_multiplier->GET /api/v1/vol-data/gex/by-multipliergex_image_by_underlying->GET /api/v1/vol-data/gex-image/by-underlying
8.4 Agent 调用流程建议
- 从安全存储读取
X-API-Token - 标的不完整时先调用
orange_resolve_subject;命中且无歧义后使用selected,否则向用户澄清 - 根据目标调用
orange_vol_data - 检查平台响应
code - MCP
by_underlying默认只返回现价上下 10% 档位;根据chain_meta判断是否发生裁剪或缺少现价回退 - 如果确实需要完整期权链,显式传
params.fullChain=true - 如果需要分析一段时间内的隐波变化,读取
ts/*的rows - 如果需要分析 Gamma Exposure 分布,读取
gex/*的points、current_gex、zero_gamma - 如果需要回看历史整点 GEX 结构,调用
gex_snapshot_by_underlying,读取points、current_gex、zero_gamma - 如果因为未开盘、行情源不可用或实时接口返回
found=false导致实时query/*或gex/*获取失败,可以改用snapshot/by-underlying或gex/snapshot/by-underlying,并传snapshotTime=last;这是last的主要使用场景,返回的是当前分组数据库最新快照,通常可视为上次收盘时的快照 - 当用户询问特定标的的 GEX、零 gamma、正负 GEX 或 GEX 结构时,除
gex/*结构化数据外,可以额外调用gex_image_by_underlying,把图片 URL 一并返回,方便用户理解与查看 - 如果需要给用户直接展示或发送 GEX 图,调用
gex_image_by_underlying并使用返回的url;如果用户需要过去的 GEX 图,传snapshotTime毫秒时间戳,若处于非开盘时段、需要上次收盘图则传snapshotTime=last
8.5 Agent 错误处理建议
- 平台
code != 0:直接抛出平台错误 401/403:扣费侧使用Authorization: Bearer <X-API-Token>调用计费接口时鉴权失败扣费失败:直接透传平台错误,提示用户检查 token 或计费服务状态404且found = false:按“未命中”处理,不要当系统故障- 上游超时或异常:建议重试,并保留原始错误信息
9. 计费与明细说明
- 平台在业务数据成功返回后,使用 OpenAI 兼容
POST /chat/completions发起同步扣费 groups不触发扣费query/*、snapshot/*、ts/*、gex/*、gex-image/*成功返回后触发扣费- 对外业务接口协议保持不变,仍然由调用方传
X-API-Token model固定为VolData,用于标识业务类型messages保持最简,只携带本次请求路径和参数- 扣费请求头格式固定为
Authorization: Bearer <X-API-Token> - 外部计费接口返回 HTTP
200视为扣费成功 - 扣费失败时,业务响应直接返回错误,不再写本地 usage 明细或异步扣费任务
10. 最小测试示例
查询实时快照:
curl -sS 'https://api.hitick.top/api/v1/vol-data/query/by-underlying?underlying=au2607' \
-H 'X-API-Token: your_token_value'
查询 ATM IV 时序:
curl -sS 'https://api.hitick.top/api/v1/vol-data/ts/by-underlying?underlying=au2607&start=1781062200000&end=1781062300000' \
-H 'X-API-Token: your_token_value'
查询 GEX 曲线:
curl -sS 'https://api.hitick.top/api/v1/vol-data/gex/by-underlying?underlying=au2607' \
-H 'X-API-Token: your_token_value'
11. 接入建议
- 手动接入适合后端服务、脚本、联调测试
- Agent 接入适合自动查询、波动率分析、Greeks 辅助处理、GEX 结构分析
- 建议给不同用途创建不同 Token,方便审计和隔离