币安错误——使用了过多的请求权重;当前限制是每 1 分钟 1200 个请求重量
Binance error - Too much request weight used; current limit is 1200 request weight per 1 MINUTE
exchange.load_markets()
while 1:
try:
bars = exchange.fetch_ohlcv(ETH/USDT, timeframe='5m', limit=5)
df = pd.DataFrame(bars[:], columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
except ccxt.BaseError as Error:
print("[ERROR] ", Error)
continue
您好,
我在 Binance 中使用 Python 进行算法交易。我正在使用 ccxt。
我在 运行 上面的代码中,但我没有收到任何关于请求使用的错误消息。但是,在我成为 运行 相同 IP 中使用相同代码的第二个交易机器人后,我收到“超过 1200 个请求使用”错误。
我如何计算我在一分钟内创建了多少个请求?如果我能计算出来,我会安排在 2 或 3 秒内下载 ohlvc 数据,或者需要多少秒。
谢谢。
您可以这样做的一种方法是检索交换时间并将其保存在一个变量中,然后每次循环代码时将该变量减去当前时间。
这会让您了解循环之间有多少毫秒以查看您是否达到限制:
import ccxt
import pandas as pd
exchange = ccxt.binance()
exchange.load_markets()
previous_time = 0
while 1:
try:
current_time = exchange.fetchTime()
time_difference = current_time - previous_time
previous_time = current_time
print(time_difference)
bars = exchange.fetch_ohlcv('ETH/USDT', timeframe='5m', limit=5)
df = pd.DataFrame(bars[:], columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
# print(df)
except ccxt.BaseError as Error:
print("[ERROR] ", Error)
continue
据我所知,每 0.5 秒到 1 秒发出一个请求,这远低于每分钟 1200 个请求/60 秒 = 每秒 20 个请求。话虽这么说,如果你是 运行 其他并行的机器人,那么你可以很快达到极限。
也就是说,确切的错误消息如下:
{"code":-1003,"msg":"Too many requests; current limit is 1200 requests per minute.
Please use the websocket for live updates to avoid polling the API."}
正如错误消息所暗示的那样,您真的应该考虑使用 websocket
进行实时更新,因为如果您想继续轮询 [=32=,您这样做的方式并不是正确的方法] 在非常短的时间范围内。
这还需要您学习使用 asyncio
事件循环。可以找到一个很好的教程 here。
最后,这是一个 link 使用 websockets
和 asyncio
检索 binance 价格的工作示例。
exchange.load_markets()
while 1:
try:
bars = exchange.fetch_ohlcv(ETH/USDT, timeframe='5m', limit=5)
df = pd.DataFrame(bars[:], columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
except ccxt.BaseError as Error:
print("[ERROR] ", Error)
continue
您好, 我在 Binance 中使用 Python 进行算法交易。我正在使用 ccxt。 我在 运行 上面的代码中,但我没有收到任何关于请求使用的错误消息。但是,在我成为 运行 相同 IP 中使用相同代码的第二个交易机器人后,我收到“超过 1200 个请求使用”错误。 我如何计算我在一分钟内创建了多少个请求?如果我能计算出来,我会安排在 2 或 3 秒内下载 ohlvc 数据,或者需要多少秒。 谢谢。
您可以这样做的一种方法是检索交换时间并将其保存在一个变量中,然后每次循环代码时将该变量减去当前时间。
这会让您了解循环之间有多少毫秒以查看您是否达到限制:
import ccxt
import pandas as pd
exchange = ccxt.binance()
exchange.load_markets()
previous_time = 0
while 1:
try:
current_time = exchange.fetchTime()
time_difference = current_time - previous_time
previous_time = current_time
print(time_difference)
bars = exchange.fetch_ohlcv('ETH/USDT', timeframe='5m', limit=5)
df = pd.DataFrame(bars[:], columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
# print(df)
except ccxt.BaseError as Error:
print("[ERROR] ", Error)
continue
据我所知,每 0.5 秒到 1 秒发出一个请求,这远低于每分钟 1200 个请求/60 秒 = 每秒 20 个请求。话虽这么说,如果你是 运行 其他并行的机器人,那么你可以很快达到极限。
也就是说,确切的错误消息如下:
{"code":-1003,"msg":"Too many requests; current limit is 1200 requests per minute.
Please use the websocket for live updates to avoid polling the API."}
正如错误消息所暗示的那样,您真的应该考虑使用 websocket
进行实时更新,因为如果您想继续轮询 [=32=,您这样做的方式并不是正确的方法] 在非常短的时间范围内。
这还需要您学习使用 asyncio
事件循环。可以找到一个很好的教程 here。
最后,这是一个 link 使用 websockets
和 asyncio
检索 binance 价格的工作示例。