本文目录与来源 4 节
文章要点
- quantize 调整小数位数,不保证结果是指定步长的整数倍。
- 向上或向下对齐都可能改变原本的价格或数量限制。
- 步长对齐后,仍须检查适用的数量、金额与预算限制。
两位小数不保证能下单
价格 1.23、最小变动单位 0.05,看起来都是两位小数,却对不上步长:1.23 不是 0.05 的整数倍。本次合成测试把两个数值交给 Decimal.quantize,结果仍是 1.23,除以 0.05 的余数是 0.03。
quantize 管的是小数位数。Python 文档说明,它按第二个数值的指数调整位数;Binance 现货的 PRICE_FILTER 则要求价格符合 tickSize 的倍数条件。显示格式过关,还不能当成交易规则过关。[1][2]
给同一个数值多写几个零
把步长从 0.05 改写为 0.05000000 后,quantize 的输出是 1.23000000。小数位变多了,余数仍是 0.03000000。对这组数据,先除以步长、向下取整、再乘回步长,才得到 1.20;向上取整则得到 1.25。原本已对齐的 1.25,两个方向都保持 1.25。
读者可用 Python 标准库复现:from decimal import Decimal as D, ROUND_FLOOR, ROUND_CEILING;令 x = D('1.23')、step = D('0.05'),比较 x.quantize(step) 与 (x / step).to_integral_value(rounding=ROUND_FLOOR) * step。把 ROUND_FLOOR 换成 ROUND_CEILING 即可比较另一方向。价格与步长直接从原始十进制字符串创建,避免先转 float 再转 Decimal。[1]
舍入方向会改变订单
如果 1.23 是买方愿付的最高限价,调到 1.25 就超过了上限;如果 1.23 是卖方愿收的最低限价,调到 1.20 就低于下限。往哪边调,得先看这笔订单的约束,不能给所有买单或卖单固定一个方向。对齐步长也不保证成交。
数量也有同样的问题。本次把数量设为 0.0049、步长设为 0.005,向下对齐得到 0.000,向上则得到 0.005。前者没有可提交的正数量,后者超过原先数量。遇到这种情况,应根据原本的数量和预算约束决定是否取消,不应为了通过格式检查就擅自加量。
对齐之后,还有其他检查
Binance 的 LOT_SIZE 另有数量上下限,名义金额也有独立的过滤条件。以另一组合成限制为例,价格 1.20 乘数量 4 等于 4.80;如果最低名义金额设为 5,仍然不合格。应按当前交易对和订单类型读取适用规则,不要把本文示例当成实际门槛。[2]
本次于 2026-11-07 使用 Python 3.14.6、Decimal 精度 28 运行四组小型合成案例,没有连接交易账户或下单,也没有测量收益、手续费、滑点或成交率。示例中的除法可在此精度下精确表示;更长的数值必须另测精度与边界。正式验证还需拒绝非有限值,处理零值或已停用的规则,并在调整后重新检查价格、数量和预算限制。本文由 AI 辅助研究与撰写,封面为 AI 概念插画。
资料来源与延伸阅读
(2)
核对数据时,请一并确认来源日期、统计期间与适用条件;部分链接会持续更新。
本文为信息与教育用途,不构成投资建议。加密资产可能大幅波动,请独立核实。


