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

币安API逐仓做空订单报错APIError(-1013):LOT_SIZE筛选失败求助

解决逐仓做空APIError(code=-1013): Filter failure: LOT_SIZE问题

这个报错是因为下单数量不符合BTCUSDT交易对的LOT_SIZE过滤规则——数量没满足平台要求的最小下单量、且不是规定步长的整数倍。你当前的精度处理仅保留小数位数,但未匹配平台步长规则,同时代码存在重复计算数量的问题,以下是具体修复方案:

1. 移除重复数量计算

你在MaxBTCAmount方法里已经将可借最大量乘以0.99预留安全余量,Execute方法的下单参数里又重复执行了/100*99的计算,会导致下单量被过度压缩,先去掉这层重复计算:

# Execute方法中的quantity参数修改为直接调用MaxBTCAmount()
order = self.acc.client.create_margin_order(symbol="BTCUSDT", side=SIDE_SELL, isIsolated='TRUE',
                                            type=ORDER_TYPE_MARKET,
                                            quantity=self.MaxBTCAmount())

2. 按平台LOT_SIZE规则调整数量

必须确保下单数量是平台要求步长的整数倍,且不小于最小下单量。先通过API获取BTCUSDT的LOT_SIZE规则,再调整数量:
修改MaxBTCAmount方法如下:

def MaxBTCAmount(self):
    # 获取BTCUSDT的交易规则
    exchange_info = self.acc.client.get_exchange_info()
    symbol_info = next(s for s in exchange_info['symbols'] if s['symbol'] == 'BTCUSDT')
    lot_size_filter = next(f for f in symbol_info['filters'] if f['filterType'] == 'LOT_SIZE')
    
    min_qty = float(lot_size_filter['minQty'])  # 平台要求的最小下单量
    step_size = float(lot_size_filter['stepSize'])  # 平台要求的数量步长
    
    # 计算可使用的最大金额(保留99%安全余量)
    max_available = self.acc.GetMaxMarginAmount("BTC") / 100 * 99
    
    # 将数量调整为步长的整数倍
    adjusted_amount = max_available - (max_available % step_size)
    
    # 确保数量不低于最小下单量
    if adjusted_amount < min_qty:
        adjusted_amount = min_qty
    
    # 根据步长确定小数位数,避免精度丢失
    decimal_places = len(str(step_size).split('.')[1]) if '.' in str(step_size) else 0
    return self.acc.FloorPrecisionFix(adjusted_amount, decimal_places)

3. 验证规则匹配

如果仍报错,可以先打印min_qty和step_size的值,确认计算后的数量是否符合要求。比如BTCUSDT的LOT_SIZE通常为minQty=0.00001、stepSize=0.00001,你的下单数量必须是0.00001的整数倍,且不小于0.00001。

内容的提问来源于stack exchange,提问作者Mertcan Koçak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:15:41