python Binance API:API错误(代码=-1111):精度超过为此资产定义的最大值,||巨蟒

r6vfmomb  于 2023-03-11  发布在  Python
关注(0)|答案(6)|浏览(253)

我有一个交易机器人,它在'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仍然向我抛出错误“Precision is over the maximum defined for this asset”。
编辑:i_o是我的“USDT”余额,理论上应该随着每笔交易而变化,因此使用这个变量而不是每个订单数量的普通数字。
注:我在Python方面还很嫩,哈哈,我一周前才学到一些基础知识,所以如果你能详细说明的话,那就太棒了。

hkmswyz6

hkmswyz61#

根据您的代码和对交易密码的一点熟悉,我假设您计算的'余额'是您的USDT余额,而不是您通过i_o = float(bal[11]["free"])的ADA余额,这意味着您正在下一个等于您当前USDT余额(四舍五入)的ADA金额的买入订单-您确定这是您想要做的吗?
为了更直接地回答你为什么会得到这个错误,我只能推断你一定是在用一个包含除法的函数计算你想买的价格,你得到的结果v_min最终是1.32578935987532098325,而不是1.2。
因此,为了方便起见,您还想对其进行舍入:
price = float(round(v_min,8)) ,

z2acfund

z2acfund2#

使用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}
)
efzxgjgh

efzxgjgh3#

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

pprl5pva

pprl5pva4#

对于那些努力想得到正确答案的人来说,下面是我用来截断数量和价格的函数的简洁版本:

def __get_trimmed_quantity(self, quantity):
    trimmed_quantity = round(quantity / self.step_size) * self.step_size
    return trimmed_quantity

def __get_trimmed_price(self, price):
    trimmed_price = round(price / self.tick_size) * self.tick_size
    return trimmed_price
qhhrdooz

qhhrdooz5#

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)
ldioqlga

ldioqlga6#

最简单的方法是这样的:

  1. sell_amount = int(0.99 * (float(coins_amount))) 2. quantity = sell_amount
    通过上述方法,您将能够出售99%的基础资产。

相关问题