币安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
相关产品推荐
相关产品推荐

