先给结论:交易所行情的成交量口径是手,1 手 = 100 股;行情软件上显示"成交量 5 万",实际是 500 万股。而各家数据接口返回的量、额字段单位五花八门——股、手、万手,元、千元、万元、亿元都有人用。单位错一个数量级,回测不会"变差一点",而是直接变成另一个故事:换手率虚高百倍、流动性过滤形同虚设、冲击成本模型全盘失效。
A股交易以"手"为基本单位,1 手 = 100 股,这源自交易所的申报数量规则。但各板块的最小申报量并不一致:
| 板块 | 最低买入申报 | 递增单位 | 卖出零股处理 |
|---|---|---|---|
| 沪深主板 | 100 股及其整数倍 | 100 股 | 不足 100 股一次性卖出 |
| 创业板 | 100 股及其整数倍 | 100 股 | 不足 100 股一次性卖出 |
| 科创板 | ≥ 200 股 | 1 股 | 余额不足 200 股一次性卖出 |
| 北交所 | ≥ 100 股 | 1 股 | 余额不足 100 股一次性卖出 |
行情播报和K线里的成交量用的是"手"这个交易所口径,但申报规则里科创板、北交所已经细到 1 股——显示单位与申报单位在注册制之后已经不完全对应,这也是"手/股"混乱的源头之一。
拿到一个行情接口,量、额字段的单位可能是下面任意组合:
| 字段 | 常见单位 | 典型踩坑场景 |
|---|---|---|
| 成交量 | 股 | 接口直接返回股数,你按手理解 → 假觉得流动性奇差 |
| 手 | 交易所原生口径,多数行情类接口的默认 | |
| 万手 | 展示友好型,拼接自行情软件的数据常见 | |
| 成交额 | 元 | 最干净的口径,但数值大 |
| 万元 / 千元 | 常见于行情软件导出与部分历史接口 | |
| 亿元 | 资讯类页面的展示口径,混进数据管道最难察觉 |
确定性关系只有一条:成交额 ≈ 成交量 × 成交均价。不管字段单位怎么包装,物理关系不会变。取一天数据,量与额互相反推,量级一对,单位就现形了:
# 量纲交叉校验:判定 volume / amount 字段的单位组合
# 关系:amount(元) = volume(股) × 均价 ≈ volume × close
ratio = amount / (volume * close)
# ratio 的量级直接暴露单位组合:
# ≈ 1 → 额是元,量是股
# ≈ 1/100 → 额是元,量是手 (volume * 100 才是股)
# ≈ 1e4 → 额是万元,量是股
# ≈ 1e4/100 → 额是万元,量是手 (最常见的组合之一)
# ≈ 1e8 → 额是亿元,量是股
# 多抽几天、多抽几只票验证,取 ratio 的中位数更稳。
to_share()、一个 to_yuan()),下游永远只见股和元。换数据源时重跑一次校验脚本——文档会撒谎或缺席,物理关系不会。
回测撮合层如果不模拟申报数量约束,仓位结果就是假的。标准分层:
资金较少的账户尤其注意:5 万元本金买 30 元一股的科创板股票,第一次申报至少 200 股 = 6000 元起,而同价格主板股票 100 股 = 3000 元起——最小申报量直接决定小资金的可行标的池。
Q1:行情软件显示的A股成交量单位是手还是股?
交易所行情口径是手,1手=100股。行情软件显示成交量5万,实际是500万股。
Q2:为什么不同数据源的成交量字段数值差100倍甚至1万倍?
单位不统一:股/手/万手与元/千元/万元/亿元并存。拼接多源或照抄示例代码不核对单位,量纲错误直接进回测。
Q3:怎么确定一个接口的量、额字段到底是什么单位?
用价格反推交叉校验:amount ÷ (volume × close) 的量级直接暴露单位组合,本文第三节给了判定表和代码。
Q4:买入申报必须是100股的整数倍吗?
主板和创业板是;科创板不低于200股、1股递增;北交所不低于100股、1股递增。零股卖出须一次性申报。
Q5:不足100股的零股能卖出吗?
能。送转配股产生的零股可卖,但须一次性申报卖出,不能拆单。
Q6:回测和实盘下单时,数量该用股还是手?
策略层统一用股,撮合层按板块规则转换(主板/创业板100股整数倍,科创板/北交所各自递增规则)。不加这条约束的回测仓位结果是假的。
Q7:数据接口的成交量字段单位文档没写怎么办?
不要猜,用交叉校验法实测。任何数据源接入时都做一次量纲验证,结论固化在数据接入层代码里。
以A股历史交易数据接口为例,接入时跑一次第三节的校验脚本,确认量、额字段单位后把换算固化到接入层;分频数据同理处理,A股分时交易数据接口的量字段也要走同样的验证流程。多源拼接的场景(如免费源补历史、付费源补实时),每个源各自校验、各自换算,在入库前统一成"股 + 元"。
volume_share、amount_yuan)