Binance API:APIError(code=-1111):精度超过了为此资产定义的最大值 || Python

问题描述

我有一个交易机器人,它在“ADAUSDT”中运行,具有动态的买卖数量,作为我的整个 USDT 平衡初始数量,并以相同的余额 + 利润或损失进行交易(它基本上与整个USDT余额一遍又一遍)。这是一些代码

from binance.client import Client
import Keys #personal api keys

client = Client(Keys.b_keys,Keys.b_secret)

infoa = client.get_account()
bal= infoa['balances']
i_o = float(bal[11]["free"])
v_min = v_min #some value of ADA,for example: 1.2 

order = client.create_order(
        symbol = "ADAUSDT",side=SIDE_BUY,type=ORDER_TYPE_LIMIT,timeInForce = TIME_IN_FORCE_GTC,quantity = float(round((i_o),8)),price = v_min,)               

我知道 quoteAsset 和 baseAsset 所需的精度都是 8,因此在订单本身的数量值中使用了 round() 函数,但即使在此之后,API 仍然抛出我错误“精度超过为此资产定义的最大值”。请帮帮我:c

编辑:i_o 是我的“USDT”余额,理论上应该随着每笔交易而变化,因此使用这个变量而不是每个订单数量的普通数字。

注意:我是 Python 的菜鸟 lol 我一周前刚刚学习了一些基础知识,所以如果你能详细说明一下就太棒了 :D

解决方法

根据您的代码和对加密货币交易的一些熟悉,我假设您计算的“余额”是您的 USDT 余额,而不是您通过 i_o = float(bal[11]["free"]) 的 ADA 余额,这意味着您要买入订购等于您当前 USDT 余额(四舍五入)的 ADA 数量——您确定这就是您想要做的吗?

为了更直接地回答您关于为什么会收到该错误的问题,我只能推断您必须使用包含除法的函数来计算您想要购买的价格,并且您的结果 {{1} } 最终会变成 1.32578935987532098325 而不是 1.2。

因此,为了方便起见,您还想将其四舍五入:

v_min

,

解决方案:

我将指定每个买卖订单的价格以及 i_o(“USDT”余额)的变量四舍五入了 2。

,
tradingPairs = ['BTCUSDT','ETHUSDT','BNBUSDT']

#Loop though cryptos

for i in range(0,len(tradingPairs)):

info = client.futures_exchange_info()

if info['symbols'][0]['pair'] == tradingPairs[i]:

print("Price Pre ",info['symbols'][0]['pricePrecision'])

pricePrecision = info['symbols'][0]['pricePrecision']
quantityS = 5.2
quantityB = "{:0.0{}f}".format(quantityS,pricePrecision)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...