我正在尝试用 Python 构建一个非常简单的自动化工具,以便我可以在币安上发布订单。这实际上是在牢记“目标”(终点线)的同时掌握 Python 的窍门。
我正在使用这个 很棒的库 其中我想做的基本事情就是找出答案如果我的计算机时间和币安服务器的时间之间存在时间差。
为此,我正在使用 get_server_time 方法。两次都以 EPOCH 返回,这是可以的,但有一个很小的时差。
对于我来说传递订单或继续我的旅程不是问题,但我想了解其背后的原因;我很想彻底了解并了解这一切的来龙去脉。
这是我的代码:
# Get Server Time
def get_server_time():
ts = client.get_server_time()['serverTime']
server_time = datetime.utcfromtimestamp(ts / 1000).strftime('%Y-%m-%d %H:%M:%S')
return server_time
print(round(time.time()*1000))
print(client.get_server_time()['serverTime'])
# Check if computer time is the same as server time
if time.time()*1000 != client.get_server_time()['serverTime']:
print("There is a problem in time sync.")
else:
print("Your computer time matches server time.")
它返回一个很小的时间差,如下所示:
1639147119502
1639147120114
There is a problem in time sync.
我尝试同步我的通过各种方式设置计算机时钟(最著名的是你在 Google 上看到的;摆弄 Windows10 的时间服务)。
这背后有什么你们能想到的原因吗?
提前非常感谢;)
你遇到的时间差是由你的计算机和币安服务器之间不可避免的小延迟造成的。你的代码在两个不同的时间点获取时间戳,并在它们之间存在一个很小的延迟。
让我们分解一下发生了什么:
-
print(round(time.time()*1000))
: 这一行获取你计算机上的当前时间戳(以毫秒为单位)。 -
print(client.get_server_time()['serverTime'])
: 这一行向币安服务器发出请求以获取其时间戳。这需要一些时间,通常是几毫秒或几十毫秒,具体取决于你的互联网连接和币安服务器的响应时间。 - 比较 : 当你比较这两个时间戳时,币安服务器的时间戳将更大,因为它是在你的计算机获取其时间戳之后获取的。
这不是同步问题,而是网络延迟的结果。 你不可能完全消除这种延迟。
对于你的交易机器人来说,这不是问题的原因:
- 币安库的设计考虑了这种延迟。当你下订单时,库会自动使用服务器的时间戳,而不是你的本地计算机的时间戳。
- 你观察到的时间差非常小(在本例中约为 61 毫秒),与交易决策相关的精度水平相比可以忽略不计。
如果你仍然担心时间差:
- 不要试图完美同步 : 相反,专注于在你的代码中处理小的差异。例如,使用服务器时间来安排订单,而不是依赖你的本地计算机时间。
-
使用 Binance API 中的
recvWindow
参数 : 当向 Binance 发送请求时,此参数允许你设置订单被视为有效的最大时间差(以毫秒为单位)。这可以帮助你处理潜在的时间戳问题。
请记住,在构建交易机器人时,理解和处理网络延迟至关重要。通过专注于处理小的时差而不是实现完美同步,你可以创建一个更强大可靠的交易机器人。
标签:python,time,unix-timestamp,binance From: 70306172