Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python binance:apierro(代码=-1111)下期货市场订单:精度超过为此资产定义的最大值_Python_Api_Exception_Cryptocurrency_Binance - Fatal编程技术网

如何使用python binance:apierro(代码=-1111)下期货市场订单:精度超过为此资产定义的最大值

如何使用python binance:apierro(代码=-1111)下期货市场订单:精度超过为此资产定义的最大值,python,api,exception,cryptocurrency,binance,Python,Api,Exception,Cryptocurrency,Binance,感谢您抽出时间查看我的问题。我正在努力使用python binance下订单,特别是永久期货市场订单。我不认为这是重复的,但在python binance(以及其他软件包)上有几个关于相同错误代码的查询(因此我不认为这是python binance的问题,我理解这是一个问题),不幸的是,似乎没有一个成功的解决方案 错误代码表示精度超过该符号允许的最大值。就我所知(或至少对于我感兴趣的仪器而言),baseAssetPrecision始终为8。然而,每种仪器也有不同的尺寸 from binanc

感谢您抽出时间查看我的问题。我正在努力使用python binance下订单,特别是永久期货市场订单。我不认为这是重复的,但在python binance(以及其他软件包)上有几个关于相同错误代码的查询(因此我不认为这是python binance的问题,我理解这是一个问题),不幸的是,似乎没有一个成功的解决方案

错误代码表示精度超过该符号允许的最大值。就我所知(或至少对于我感兴趣的仪器而言),baseAssetPrecision始终为8。然而,每种仪器也有不同的尺寸

from binance.client import Client
from binance.enums import *
from binance.exceptions import BinanceAPIException, BinanceOrderException
from decimal import Decimal

api_key = 'YOURAPIKEY'
api_secret = 'YOURAPISECRET'

client = Client(api_key, api_secret)

#tick_size = {'BTCUSDT': 6, 'ETHUSDT': 5, 'XRPUSDT': 1, 'LINKUSDT': 2}

trade_size = 10 # The trade size we want in USDT
sym = 'BTCUSDT' # the symbol we want to place a market order on
tick_size = 6 # the tick_size as per binance API docs
price = 19000 # Just making this up for now to exemplify, this is fetched within the script

trade_quantity = trade_size / price # Work out how much BTC to order
trade_quantity_str = "{:0.0{}f}".format(trade_quantity, tick_size)

#print(trade_quantity_str)
#0.000526

#PLACING THE ORDER
client.futures_create_order(symbol=sym, side='BUY', type='MARKET', quantity=trade_quantity)

结果

BinanceAPIException:APIError(代码=-1111):精度超过为此资源定义的最大值

我也尝试过包括十进制,但没有用

在过去的两天里,这一直是我生命中的祸根,任何帮助都将不胜感激。如果我没有提供一些细节,请告诉我

编辑:我有一个不满意的解决方案,就是通过二进制手动检查允许的位置大小。在这样做的过程中,我发现所需的精度与通过API请求符号信息时返回的精度大不相同

例如,请求信息时:

sym = 'BTCUSDT'
info = client.get_symbol_info(sym)
print(info)
它返回(在编写本文时):

{'symbol':'BTCUSDT','status':'TRADING','baseAssetPrecision':'BTC','baseAssetPrecision':8,'quoteAssetPrecision':8,'baseCommissionPrecision':8,'quoteCommissionPrecision':8,'orderTypes':['LIMIT','LIMIT'MAKER','MARKET','STOP'LOSS'LIMIT','TAKE'PROFIT'],'icebergAllowed':True,'ocoAllowed':True,'quoteOrderQtyMarketAllowed':True,'isSpotTradingAllowed':True,'IsMargingTradingAllowed':True,'filterType':'PRICE"FILTER','minPrice':'0.01000000','maxPrice':'1000000.00000000','tickSize':'0.01000000},{'filterType':'PERCENT_PRICE','multiplierUp':'5','multiplierDown':'0.2','avgPriceMins':5},{'filterType':'LOT_SIZE','minQty':'0.00000100','maxQty':'9000.00000000','stepSize':'0.00000100',{'filterType':'MIN名义值','10.00000000','applyToMarket':True,'avgPriceMins':5},{'filterType':'ICEBERG_PARTS','limit':10},{'filterType':'MARKET_LOT_SIZE','minQty':'0.00000000','maxQty':'247.36508140','stepSize':'0.00000000'},{'filterType':'MAX_NUM_ALGO_ORDERS','MaxNumGoorders':5},'permissions':['SPOT','MARGIN']

然而,通过手动检查binance,我可以看到它只允许最多小数点后三位的交易……我看不出如何使用上面返回的信息来实现这一点

*****编辑2******

多亏了下面的回答,我已经制定了一个解决方案,它可以很好地满足我的需要

从binance.client导入客户端
从binance.enums导入*
从binance.exceptions导入BinanceAPIException、BinanceOrderException
从十进制输入十进制
api_key='YOURAPIKEY'
api_secret='YOURAPISECRET'
客户端=客户端(api\U密钥、api\U密钥)
info=client.futures_exchange_info()#请求所有期货符号的信息
对于信息['symbols']中的项目:
符号\u n_精度[item['symbol']]=item['quantityPrecision']#实际上不需要,但我们现在。。。
#示例:100美元的BTCUSDT
交易规模(单位:美元=100)
symbol=“BTCUSDT”
价格=55000#例如
订单金额=交易金额(单位:美元)/价格(单位:BTC)
精度=符号\u n_精度[符号]#所需的二进制精度级别
精确订单金额=“{:0.0{}f}”。格式(订单金额,精度)#创建订单时可使用的精确订单金额字符串
谢谢大家的帮助!

在您的电话中

client.futures_create_order(symbol=sym, side='BUY', type='MARKET', quantity=trade_quantity)
变量
trade\u数量=10/19000=0.0005263157894736842
所以它的精度是19位

trade\u quantity\u str=“{:0.0{}f}”格式(trade\u quantity,tick\u size)
中,可以将精度调整为6位,但这只是打印出来的,不会发送到二进制

很可能是这样的:

client.futures_create_order(symbol=sym, side='BUY', type='MARKET', quantity=float(trade_quantity_str))

将修复这种情况。

在我的例子中,我搞乱了testnet和实际binance平台的模块导入…我同时导入了“from binance\u f”和“from binance.client”。
因此,只有导入“from binance_f”才能执行交易,并发送正确的标题信息:“client_SDK_Version”:“binance_futures-1.0.1-py3.7”

您可以调用api来检索步长:

symbol_info = client.get_symbol_info('BTCUSDT')
step_size = 0.0
for f in symbol_info['filters']:
  if f['filterType'] == 'LOT_SIZE':
    step_size = float(f['stepSize'])


precision = int(round(-math.log(stepSize, 10), 0))
quantity = float(round(quantity, precision))

client.futures_create_order(symbol=sym, side='BUY', type='MARKET', quantity=quantity)

您将要设置期货头寸。但请求现货的配对信息。
对于期货配对,您可以通过调用.futures\u exchange\u info()来获得精度。

为你们简化了,给你们:

def get_quantity_precision(currency_symbol):    
    info = client.futures_exchange_info() 
    info = info['symbols']
    for x in range(len(info)):
        if info[x]['symbol'] == currency_symbol:
            return info[x]['pricePrecision']
    return None

你找到解决方案了吗?我遇到了同样的问题!是的,我现在回到这里,使用下面的答案组合(谢谢!)我想出了一个解决方案,并将编辑我的帖子,包括如何设置杠杆金额?回报应该是“quantityPrecision”而不是“pricePrecision”。