You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Binance API错误-1111:BTCUSDT精度超限问题求助

问题根源分析
  • Float类型的精度丢失:你当前函数最后将Decimal转成float返回,但float的二进制存储无法精确表示所有十进制小数。比如日志里的0.28761,转成float后可能变成0.28761000000000003这类带冗余小数位的数值,提交给Binance时会触发-1111精度超限错误。
  • 舍入模式的潜在问题:默认的ROUND_HALF_UP舍入可能在边缘场景产生不符合平台隐含要求的数值,不过从你的日志看,这并非本次报错的核心原因。
修复方案

核心逻辑是全程用Decimal处理数值,避免float转换导致的精度丢失,最终以字符串格式提交参数(Binance API支持字符串格式的数值输入,且能精确识别)。

修正后的精度处理函数

from decimal import Decimal, ROUND_DOWN

def __get_trimmed_quantity(self, quantity):
    self.logger.log("untrimmed qty: ", quantity)
    quantity_dec = Decimal(str(quantity))
    step_size_dec = Decimal(str(self.step_size))
    # 按step_size截断数值(可选ROUND_HALF_UP,根据需求调整舍入模式)
    trimmed_quantity_dec = quantity_dec.quantize(step_size_dec, rounding=ROUND_DOWN)
    # 返回字符串格式,彻底避免float精度问题
    return str(trimmed_quantity_dec)

def __get_trimmed_price(self, price):
    self.logger.log("untrimmed price: ", price)
    price_dec = Decimal(str(price))
    tick_size_dec = Decimal(str(self.tick_size))
    trimmed_price_dec = price_dec.quantize(tick_size_dec, rounding=ROUND_DOWN)
    return str(trimmed_price_dec)

订单提交注意事项

构造订单参数时,直接使用上述函数返回的字符串,禁止转成float:

order_params = {
    'side': 'SELL',
    'positionSide': 'SHORT',
    'type': 'LIMIT',
    'timeInForce': 'GTC',
    'quantity': self.__get_trimmed_quantity(0.28760622),
    'price': self.__get_trimmed_price(26193.02),
    'newClientOrderId': '35021e7298b34c838f0b64e291ead9e1'
}
额外验证步骤
  1. 打印处理后的字符串参数,确认数值小数位严格匹配step_size和tick_size的要求,无冗余位数。
  2. 确认exchange info的正确性:如果是合约交易,要确保获取的是合约交易对的规格参数,而非现货交易对的。

内容的提问来源于stack exchange,提问作者Juan Chaher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 19:52:14