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

Python对接Binance期货下单报错-1111:资产精度超限问题

问题解决:Binance限价单报错-1111(精度超限)

报错原因

BinanceAPIException: APIError(code=-1111): Precision is over the maximum defined for this asset.
翻译:价格精度超出该资产允许的最大值

止损/止盈市价单能正常创建,是因为这类订单的stopPrice精度要求相对宽松;而限价单的price参数必须严格符合标的资产的价格小数位数限制,你当前的处理只考虑了最小价格变动单位(tickSize),忽略了Binance对价格小数位数上限的约束。

问题根源

你的get_ticksize函数仅获取了PRICE_FILTER中的tickSize(最小价格步长),但每个交易对还存在pricePrecision字段——它规定了价格最多能保留的小数位数。比如1INCHUSDT的pricePrecision为4,意味着价格最多只能有4位小数,一旦处理后的价格小数位数超过这个值,就会触发-1111错误。

解决方案

1. 修改函数,同时获取步长和精度参数

def get_price_info(symbol):
    info = client.futures_exchange_info()
    for item in info['symbols']:
        if item['symbol'] == symbol:
            tick_size = None
            price_precision = item['pricePrecision']
            for f in item['filters']:
                if f['filterType'] == 'PRICE_FILTER':
                    tick_size = f['tickSize']
            return tick_size, price_precision

2. 双重处理价格:先按步长取整,再按精度格式化

# 获取步长和精度参数
tick_size, price_precision = get_price_info(symbol)

# 第一步:按最小变动单位取整
price = round_step_size(float(price), float(tick_size))
stopl = round_step_size(float(stopl), float(tick_size))
takep = round_step_size(float(takep), float(tick_size))

# 第二步:按小数位数上限格式化,避免浮点数精度误差
price = "{0:.{1}f}".format(price, price_precision)
stopl = "{0:.{1}f}".format(stopl, price_precision)
takep = "{0:.{1}f}".format(takep, price_precision)

通过字符串格式化强制保留指定小数位数,能彻底避免浮点数运算导致的末尾多余小数问题,确保价格完全符合Binance的要求。

3. 验证处理结果

以你的输入信号为例:

  • 原价格0.6396 → 处理后仍为0.6396(符合4位小数要求)
  • 止损价0.652392 → 按步长取整后为0.6523,格式化后保持0.6523
  • 止盈价0.588432 → 处理后为0.5884

处理后的价格既满足最小变动单位要求,又不超过小数位数上限,限价单即可正常创建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:36:29