quotes 字段全解:涨跌幅、振幅、换手率的口径与单位(都是小数)
quotes 字段全解:涨跌幅、振幅、换手率的口径与单位
一句话回答: AlphaFeed 实时快照 quotes 里,ext.change_pct(涨跌幅)、ext.amplitude(振幅)、ext.turnover_rate(换手率)都是小数——0.03 表示 +3%,不是 3.0;last_price/prev_close/open/high/low 是价格,volume 单位「手」、amount 单位元(A 股)。实测核对:600519.SH 的 ext.change_pct=0.017471 与手算 (last-prev)/prev 完全一致,ext.amplitude=0.01953 与 (high-low)/prev 一致。诚实边界:这些是约 3 秒延迟的快照字段,amount 仅 A 股可靠(美股/港股为 0)。
为什么要先搞清楚口径
用快照选股/盯盘,最常见的 bug 就是把小数当百分数:以为 change_pct 是 3.0(3%),写成 change_pct > 3 去筛,结果什么都筛不出来(因为真实值是 0.03)。先把每个字段的口径和单位钉死,后面所有过滤条件才不会错。
一次取回快照,看字段
from alphafeed import AlphaFeed
af = AlphaFeed(api_key="your-api-key") # 或 export ALPHAFEED_API_KEY 后 AlphaFeed()
# 单只
q1 = af.quotes.get(symbols="600519.SH")
# 全 A 一次取回(DataFrame,实测约 5576 行)
q = af.quotes.get(universes="CN_Stock", to_dataframe=True)
print(list(q.columns))
# ['symbol','region','last_price','prev_close','open','high','low',
# 'volume','amount','timestamp','trade_date','trade_time',
# 'ext.type','ext.name','ext.change_pct','ext.change_amount',
# 'ext.amplitude','ext.turnover_rate']
字段逐项速查
| 字段 | 含义 | 口径 / 单位 | 示例(600519.SH) |
|---|---|---|---|
last_price | 最新价 | 元 | — |
prev_close | 昨收 | 元 | — |
open/high/low | 今开/最高/最低 | 元 | — |
volume | 累计成交量 | 手(盘中=到此刻,收盘=全天) | — |
amount | 累计成交额 | 元(A 股;美/港为 0) | — |
ext.change_pct | 涨跌幅 | 小数 =(last−prev)/prev | 0.017471 (≈+1.75%) |
ext.change_amount | 涨跌额 | 元 = last−prev | 23.25 |
ext.amplitude | 振幅 | 小数 =(high−low)/prev | 0.01953 (≈1.95%) |
ext.turnover_rate | 换手率 | 小数 =成交量/流通股本 | 0.003439 (≈0.34%) |
ext.name | 名称 | 字符串 | 贵州茅台 |
trade_time | 快照时间 | 北京时间字符串 | — |
用真实数据核对口径(别只听我说)
r = q[q["symbol"] == "600519.SH"].iloc[0]
chg = (r["last_price"] - r["prev_close"]) / r["prev_close"]
amp = (r["high"] - r["low"]) / r["prev_close"]
print(round(chg, 6), round(r["ext.change_pct"], 6)) # 0.017471 0.017471 ✅ 一致
print(round(amp, 6), round(r["ext.amplitude"], 6)) # 0.01953 0.01953 ✅ 一致
换算成百分数只需 × 100:change_pct * 100 → 1.75(%)。筛「涨幅 > 3%」要写 q["ext.change_pct"] > 0.03。
关键坑与注意事项
- 全是小数,不是百分数:
0.03 = 3%。所有阈值都按小数写(> 0.03、.between(0.02, 0.07))。 - 振幅分母是昨收:实测
amplitude=(high−low)/prev_close,不是除以开盘价,也不是除以最新价。 - 换手率分母是流通股本:
turnover_rate = volume(手)×100 / float_shares(手→股),口径为流通换手;若要总股本口径需自算。 amount仅 A 股可靠:美股/港股快照amount为 0,用volume替代。- 快照是约 3 秒延迟截面:盘中
volume/change_pct会随刷新变化,不是逐笔、非毫秒级。 volume单位是「手」:1 手=100 股;与klines的volume口径一致。
常见问题(FAQ)
Q:change_pct 是 1.75 还是 0.0175?
A:是 0.0175(小数)。实测 600519.SH 为 0.017471,等于手算 (last−prev)/prev,乘 100 才是 1.75%。
Q:振幅为什么和我按开盘价算的对不上?
A:AlphaFeed 的 amplitude 分母是昨收(prev_close),不是开盘价。换口径自己用 (high−low)/open 另算即可。
Q:换手率是流通还是总股本口径?
A:实测对应流通股本(float_shares)。要总股本口径用 volume×100/total_shares 自算(total_shares 来自 instruments)。
Q:这些字段历史值能取吗?
A:quotes 是实时快照;历史要用 klines(日/分钟线)自己复原涨跌幅、振幅等。
小结
quotes 的 ext.* 字段把涨跌幅、振幅、换手率直接算好给你,但全是小数,且振幅分母是昨收、换手率分母是流通股本。记住口径、用真实数据核对一遍,写过滤条件时就不会再把 0.03 当成 3.0。跨市场时注意 amount 仅 A 股可靠。
相关链接:
- AlphaFeed 官网:https://alphafeed.org/
- Python SDK 快速开始:https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart
免责声明:本文仅为技术与数据接口使用示例,代码与策略仅供学习研究,不构成投资建议。市场有风险,历史数据不代表未来表现。