【问题标题】:Nonce Override in python ccxtpython ccxt中的随机数覆盖
【发布时间】:2018-02-08 09:22:42
【问题描述】:

所以我在尝试使用 ccxt 进行交易时不断收到此消息:

“此请求的时间戳无效。”

我已阅读 ccxt 手册,上面说要覆盖我应该使用的随机数:

class MyBitfinex (ccxt.bitfinex):
    def nonce (self):
        return self.milliseconds ()

但我就是不明白如何进行这项工作。我不是一个 python 程序员太先进。

任何帮助都非常感谢

这是我要运行的代码:

def BuyAll (symbol):

base = markets[symbol]['base']
quote = markets[symbol]['quote']
Balances = binance.fetchBalance()
quoteBalance = Balances[quote]['free']
stopOut = 0
orderBookPosition = 0

while quoteBalance > stopOut:
    print('quote balance',quoteBalance)
    runningBalance = quoteBalance - stopOut
    orderbook = binance.fetchOrderBook(symbol)


    if (orderbook['asks'][orderBookPosition][1])*(orderbook['asks'][orderBookPosition][0])< runningBalance:
        if base == 'BNB':
            quantity = truncate(orderbook['asks'][orderBookPosition][1],0)
        else:
            quantity = truncate(orderbook['asks'][orderBookPosition][1],3)
        print('quantity',quantity)
        binance.createLimitBuyOrder(symbol,quantity,orderbook['asks'][orderBookPosition][0])
        print('Bought' + ' ' + symbol)
        stopOut += (orderbook['asks'][orderBookPosition][1])*(orderbook['asks'][orderBookPosition][0])

    elif (runningBalance)/(orderbook['asks'][orderBookPosition][0]) > 0:

        if base == 'BNB':
            amount = int((runningBalance)/(orderbook['asks'][orderBookPosition][0]))

        else:
            amount = truncate((runningBalance)/(orderbook['asks'][orderBookPosition][0]),3)

        print('amount',amount)
        binance.createLimitBuyOrder(symbol,amount,orderbook['asks'][orderBookPosition][0])
        print('Bought' + ' ' + symbol)
        stopOut += (orderbook['asks'][orderBookPosition][1])*(orderbook['asks'][orderBookPosition][0])
    orderBookPosition += 1

这是我得到的错误:

Traceback(最近一次调用最后一次):文件 "C:\Users\Scott\AppData\Local\Programs\Python\Python35\lib\site-packages\ccxt\exchange.py", 第 209 行,获取中 response = opener.open(request, timeout=int(self.timeout / 1000)) 文件 "C:\Users\Scott\AppData\Local\Programs\Python\Python35\lib\urllib\request.py", 第 471 行,开放 response = meth(req, response) 文件 "C:\Users\Scott\AppData\Local\Programs\Python\Python35\lib\urllib\request.py", 第 581 行,在 http_response 'http', 请求, 响应, 代码, msg, hdrs) 文件 "C:\Users\Scott\AppData\Local\Programs\Python\Python35\lib\urllib\request.py", 第 509 行,错误 return self._call_chain(*args) 文件 "C:\Users\Scott\AppData\Local\Programs\Python\Python35\lib\urllib\request.py", 第 443 行,在 _call_chain 结果 = func(*args) 文件 "C:\Users\Scott\AppData\Local\Programs\Python\Python35\lib\urllib\request.py", 第 589 行,在 http_error_default raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 400: Bad Request

在处理上述异常的过程中,又发生了一个异常:

Traceback(最近一次调用最后一次):文件“”,第 1 行,in MomentumTrader('ETH','BTC') 文件“C:/Users/Scott/Desktop/MomentumTraderFifth.py”,第 199 行,在 动量交易者 BuyAll(currencyPair) 文件“C:/Users/Scott/Desktop/MomentumTraderFifth.py”,第 89 行,在 BuyAll 中 binance.createLimitBuyOrder(symbol,amount,orderbook['asks'][orderBookPosition][0]) 文件 "C:\Users\Scott\AppData\Local\Programs\Python\Python35\lib\site-packages\ccxt\exchange.py", 第 646 行,在 createLimitBuyOrder 中 return self.create_limit_buy_order(market, amount, price, params) 文件 "C:\Users\Scott\AppData\Local\Programs\Python\Python35\lib\site-packages\ccxt\exchange.py", 第 634 行,在 create_limit_buy_order return self.create_order(market, 'limit', 'buy', amount, price, params) 文件 "C:\Users\Scott\AppData\Local\Programs\Python\Python35\lib\site-packages\ccxt\exchanges.py", 第 986 行,在 create_order response = self.privatePostOrder(self.extend(order, params)) 文件 "C:\Users\Scott\AppData\Local\Programs\Python\Python35\lib\site-packages\ccxt\exchanges.py", 第 1049 行,应要求提供 response = self.fetch(url, method, headers, body) 文件 "C:\Users\Scott\AppData\Local\Programs\Python\Python35\lib\site-packages\ccxt\exchange.py", 第 244 行,获取中 self.raise_error(error, url, method, e, details) File "C:\Users\Scott\AppData\Local\Programs\Python\Python35\lib\site-packages\ccxt\exchange.py", 第 181 行,在 raise_error 详细信息,ccxt.errors.ExchangeNotAvailable:binance POST https://www.binance.com/api/v1/order 400 错误请求(可能 原因:无效的 API 密钥、坏的或旧的随机数、交换关闭或 离线,维护中,DDoS保护,限速, {"code":-1021,"msg":"此请求的时间戳无效。"})

【问题讨论】:

    标签: python bitcoin trading nonce ccxt


    【解决方案1】:

    请仔细阅读 ccxt 库手册中的Troubleshooting 部分。这是由于过期的密钥。您是否尝试过使用另一个密钥对?

    另外,对于 Bitfinex,不需要将 nonce 设置为毫秒,默认情况下它已经以毫秒为单位。试试这个示例,看看它是否适合您:

    import ccxt
    
    bitfinex = ccxt.bitfinex ({
        'apiKey': '4FlEDtxDl35gdEiobnfZ72vJeZteE4Bb7JdvqzjIjHq',
        'secret': 'D4DXM8DZdHuAq9YptUsb42aWT1XBnGlIJgLi8a7tzFH',
    })
    
    print(bitfinex.fetch_balance())
    

    如果它确实有效,那么您应该创建一个新的密钥对,然后一切都应该正常。不用担心,如果您创建新的密钥对,您的帐户不会丢失资金。

    【讨论】:

    • 但是钥匙是全新的。我需要多久制作一组新钥匙?我可以访问我的余额,但是在进行交易时,我会收到消息。
    • 你能显示你的代码吗? github.com/kroitor/ccxt/blob/master/… - 你的语言版本,ccxt 库版本 - 你试图特别调用的方法 - 一个完整的代码 sn-p 你遇到困难(避免单行) - 粘贴完整的堆栈跟踪(错误输出)在详细模式下的那个 sn-p 保持不变,如果您希望我们更快地提供帮助,我们需要它。
    • 嗨伊戈尔,所以我已经上传了我正在使用的代码以及伴随它的错误消息。有时它的工作原理很奇怪,有时它会给我那个时间戳BS。
    • 我真的不明白为什么这是一个问题,因为当我提交一个请求时,它带有与我提交它的时刻相关的时间戳。它们是阻止处理旧请求的限制,但我的所有请求都是即时的。
    • 嗨,斯科特!这是 binance 的不同代码,而不是 bitfinex ... Binance 上的错误意味着您的系统时间与其时钟不同步 > 5 秒...检查您的时间 UTC 对齐。 Binance doc:一个额外的参数,recvWindow,可以发送到请求有效的时间戳之后的特定毫秒数。如果没有发送 recvWindow,则默认为 5000 毫秒。如果您与 Binance 的连接速度较慢,请尝试传递更大的 recvWindow:binance.createLimitBuyOrder(symbol,amount,orderbook['asks'][orderBookPosition][0], {'recvWindow':10000})(或 20000)...
    猜你喜欢
    • 2015-12-10
    • 2020-06-24
    • 2012-02-24
    • 1970-01-01
    • 2013-04-08
    • 2012-07-06
    • 2023-04-02
    • 2020-05-13
    • 1970-01-01
    相关资源
    最近更新 更多