Binance API:API错误(代码=-1111):精度超过为此资产定义的最大值。 || Python
Binance API: APIError(code=-1111): Precision is over the maximum defined for this asset. || 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
根据您的代码和对交易加密货币的一些熟悉,我假设您正在计算的 'balance' 是您的 USDT 余额,而不是通过 i_o = float(bal[11]["free"])
计算的 ADA 余额,这意味着您正在下达相当于您当前 USDT 余额(四舍五入)的 ADA 数量的买入订单——您确定这是您想要做的吗?
为了更直接地回答您为什么会收到该错误的问题,我只能推断您必须使用包含除法的函数计算您想购买的价格,并且您的结果 v_min
最终变成 1.32578935987532098325 而不是 1.2.
因此,为了您的方便,您也想将其四舍五入:
price = float(round(v_min,8)) ,
解决方案:
我将指定每个买卖订单价格的变量以及 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)
最简单的方法是这样的:
1。
sell_amount = int(0.99 * (float(coins_amount)))
2.
quantity = sell_amount
通过上述方法,您将能够出售 99% 的基础资产。
使用 python Binance API 获取精度数据的代码:
from binance.client import Client
client = Client()
info = client.futures_exchange_info()
requestedFutures = ['BTCUSDT', 'ETHUSDT', 'BNBUSDT', 'SOLUSDT', 'DYDXUSDT']
print(
{si['symbol']:si['quantityPrecision'] for si in info['symbols'] if si['symbol'] in requestedFutures}
)
我有一个交易机器人,它在 '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
根据您的代码和对交易加密货币的一些熟悉,我假设您正在计算的 'balance' 是您的 USDT 余额,而不是通过 i_o = float(bal[11]["free"])
计算的 ADA 余额,这意味着您正在下达相当于您当前 USDT 余额(四舍五入)的 ADA 数量的买入订单——您确定这是您想要做的吗?
为了更直接地回答您为什么会收到该错误的问题,我只能推断您必须使用包含除法的函数计算您想购买的价格,并且您的结果 v_min
最终变成 1.32578935987532098325 而不是 1.2.
因此,为了您的方便,您也想将其四舍五入:
price = float(round(v_min,8)) ,
解决方案:
我将指定每个买卖订单价格的变量以及 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)
最简单的方法是这样的:
1。
sell_amount = int(0.99 * (float(coins_amount)))
2.
quantity = sell_amount
通过上述方法,您将能够出售 99% 的基础资产。
使用 python Binance API 获取精度数据的代码:
from binance.client import Client
client = Client()
info = client.futures_exchange_info()
requestedFutures = ['BTCUSDT', 'ETHUSDT', 'BNBUSDT', 'SOLUSDT', 'DYDXUSDT']
print(
{si['symbol']:si['quantityPrecision'] for si in info['symbols'] if si['symbol'] in requestedFutures}
)