涨停价是怎么算出来的?四舍五入规则为什么决定打板回测成败

迪雅数据 · A股数据口径系列 · 2026-10-10

先给结论:涨停价不是"昨收乘以 10%"这么简单——它是前收盘价 ×(1±涨跌幅比例),四舍五入到分。这一分钱的舍入误差、加上"昨收必须是交易所口径的不复权价格"这个前提,正是大多数打板回测与实盘对不上的两个根源。算涨停价,永远用不复权数据;判断买不买得到,永远要看封单和可成交性,而不是只看价格到了没到。

一、计算公式与一个真实的舍入例子

涨停价 = round( 前收盘价 × (1 + 涨跌幅限制), 2 )
跌停价 = round( 前收盘价 × (1 - 涨跌幅限制), 2 )

沪深交易所交易规则明确:计算结果四舍五入至 0.01 元。看两个例子,体会舍入如何改变结果:

注意:因为舍入的存在,涨停日的"实际涨幅"几乎从来不是精确的 10%——它在 10% 上下浮动,方向由昨收的小数部分决定。这正是"打板党"口中"涨停价差一分钱"的来源:同一价位,算对了就是排板成功,算错了就是买在不可能成交的位置。

二、"昨收"的精确定义:三个容易踩错的点

情形前收盘价取什么
正常交易日上一交易日的收盘价(交易所口径真实价格,即不复权)
除权除息日除权除息参考价(交易所按分红送股方案计算公布,不是原始昨收)
停牌复牌日停牌前最后一个交易日的收盘价
最大的坑在这里:用复权数据算涨停价。前复权/后复权的"昨收"已经被复权因子改写,不是交易所口径的真实昨收。用它乘以涨跌幅再舍入,得出的价格在实际盘口根本不存在。这也解释了为什么打板回测必须用不复权数据——复权口径的选择逻辑一文有完整展开。

三、各板块涨跌幅限制速查表

板块代码特征日常涨跌幅新股上市初期ST 股
沪深主板60 / 00 开头±10%前 5 日无限制,第 6 日起 ±10%±5%
创业板30 开头±20%前 5 日无限制,第 6 日起 ±20%±20%(不适用 5%)
科创板68 开头±20%前 5 日无限制,第 6 日起 ±20%±20%(不适用 5%)
北交所8 / 4 / 92 开头±30%首日无限制,次日起 ±30%±30%

两个新规要点(2023 年 4 月全面注册制落地后):

四、价格算对了,然后呢:可成交性才是打板回测的生死线

算准涨停价只完成了一半。另一半是:价格到了涨停,不代表你买得到。

五、常见问题

Q1:涨停价计算用四舍五入还是直接截断?

四舍五入到分(0.01 元)。例如昨收 9.87 元,9.87 × 1.1 = 10.857,四舍五入后涨停价是 10.86 元。

Q2:除权除息日当天的涨停价怎么算?

用交易所公布的除权除息参考价作为前收盘价计算,而不是上一交易日的原始收盘价。

Q3:ST 股票的涨跌幅限制是多少?

沪深主板 ST/*ST 为 ±5%;创业板、科创板的 ST 股不适用 5%,仍是 ±20%;北交所 ±30%。

Q4:新股上市第一天有涨跌幅限制吗?

2023 年全面注册制后,沪深三个板块新股前 5 个交易日均无涨跌幅限制,第 6 日起主板 ±10%、创业板/科创板 ±20%。旧规则的首日 44% 已废除。

Q5:为什么用前复权数据算出的涨停价和实际盘口不一样?

涨停价只能用真实昨收(不复权)计算,复权昨收不是交易所口径的真实价格,算出的涨停价在盘口不存在。

Q6:一字涨停板在回测里能买入吗?

不能。一字板全天封死、封单巨大,实际无法成交。回测应标记为不可成交,非一字板可用涨停价成交量占比近似判断可成交性。

Q7:怎么用接口数据自己计算涨停价?

取不复权日线(如迪雅数据 A股历史交易数据接口,默认即不复权),用前一交易日 close 作为真实昨收,按板块确定比例后相乘、四舍五入到分。

六、用接口落地:三行 Python 算出涨停价

计算思路(不复权口径)

盘中封板与打开的时序还原,可配合 A股分时交易数据接口 使用。

一个隐蔽的工程细节:Python 内置 round(11.275, 2) 可能得到 11.27 而不是 11.28——因为浮点表示误差加上银行家舍入规则。交易所口径是四舍五入(ROUND_HALF_UP),用 Decimal(str(x)).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP) 才是对齐盘口的实现。回测里几百只股票累积下来的舍入偏差,足以让打板策略的成交记录系统性失真。
打板回测的诚实,始于承认涨停价是四舍五入算出来的——而你是排队的那个。
相关页面