Проблема с запросом к Binance API с python - PullRequest
0 голосов
/ 25 июня 2018

У меня возникла проблема при попытке совершать сделки, используя 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% моего эфира против ДНТ, и сумма, которая появляется, составляет 1574 ДНТ. Теперь я иду к своей консоли и проверяю, сколько говорит мой сценарий. Там также написано 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...