0

我在尝试使用 Binance API 和 Python 进行交易时遇到问题。我想出售 100% 的以太币并将其转换为另一种代币。请求有时会顺利通过,但大约 75% 的时间不会,我收到一个错误代码,说我没有足够的余额。但是,我知道我确实有足够的余额,因为我去 Binance 并单击以将我的 100% 的以太币转换为另一种资产,并且我得到的数字与我的脚本生成的完全相同。

这是我用来向 Binance API 发出请求的代码:

def marketBuy(symbol, side, quantity, test=False, **kwargs):
    params = {
    "symbol": symbol,
    "side": side,
    "type": MARKET,
    "quantity": quantity,
    }
    params.update(kwargs)
    path = "/api/v3/order/test" if test else "/api/v3/order"
    data = signedRequest("POST", path, params)
    return data

def signedRequest(method, path, params):
    if "apiKey" not in options or "secret" not in options:
        raise ValueError("Api key and secret must be set")

    query = urlencode(sorted(params.items()))
    query += "&timestamp={}".format(int(time.time() * 1000))
    secret = bytes(options["secret"].encode("utf-8"))
    signature = hmac.new(secret, query.encode("utf-8"),
                     hashlib.sha256).hexdigest()
    query += "&signature={}".format(signature)
    resp = requests.request(method,
                            ENDPOINT + path + "?" + query,
                            headers={"X-MBX-APIKEY": options["apiKey"]})
    data = resp.json()
    if "msg" in data:
        logging.error(data['msg'])
    return data

这里是我调用这个函数的地方:

marketBuy(token+"ETH", binance.BUY, math.floor((10**getDigits(token)*int(float(binance.balances()["ETH"]['free'])*1/float(binance.prices()[token+"ETH"]))))/(10**getDigits(token)), test=False)

getDigits 函数返回 Binance 支持特定资产的最小交易规模和步长,所以我相信我的问题不在于我发送的数字的精度。

我有 0.11059760 ETH。我去币安并选择将我的 100% 的以太币卖给 DNT,得到的金额是 1574 DNT。现在我去我的控制台检查我的脚本说了多少。它还显示 1574。现在我尝试通过我的控制台运行交易,我收到一条错误消息,提示我没有足够的资金。我回到浏览器,能够成功地将我所有的以太币换成 1574 DNT。

runfile('C:/Users/alexa/Desktop/cryptoalerts/binanceTransfer.py', wdir='C:/Users/alexa/Desktop/cryptoalerts')
math.floor((10**getDigits(token)*int(float(binanc.balances()["ETH"]['free'])*1/float(binanc.prices()[token+"ETH"]))))/(10**getDigits(token))
binanc.marketBuy(token+"ETH", binanc.BUY, math.floor((10**getDigits(token)*int(float(binanc.balances()["ETH"]['free'])*1/float(binanc.prices()[token+"ETH"]))))/(10**getDigits(token)), test=False)
{'code': -2010, 'msg': 'Account has insufficient balance for requested action.'}
ERROR:root:Account has insufficient balance for requested action.

由于我能够在网站上以完全相同的金额进行交易,我想知道这是否是 Binance API 的问题。

4

0 回答 0