处理时间差,统一UTC时间

This commit is contained in:
lz_db
2025-11-30 19:29:17 +08:00
parent ef0058aded
commit 502a0c49f2
3 changed files with 33 additions and 17 deletions

View File

@@ -156,6 +156,10 @@ class mt5(Exchange, ImplicitAPI):
response = await self.private_get_connect(request)
self.token = response
self.diff_milliseconds = 0 # 重置时间差
# 获取服务器时区
await self.server_timezone()
return self.token
async def check_connect(self):
@@ -367,6 +371,7 @@ class mt5(Exchange, ImplicitAPI):
}
response = await self.private_get_servertimezone(request)
self.timezone = int(float(response))
self.diff_milliseconds = self.timezone * 3600 * 1000
return self.timezone
async def fetch_balance(self, params={}):
@@ -567,7 +572,7 @@ class mt5(Exchange, ImplicitAPI):
"""异步获取持仓信息"""
if not hasattr(self, 'token') or not self.token:
await self.get_token()
await self.server_timezone()
request = {
'id': self.token,
}
@@ -602,8 +607,8 @@ class mt5(Exchange, ImplicitAPI):
close_lots = self.safe_number(position, 'closeLots', 0)
# 解析时间戳
timestamp = self.parse8601(self.safe_string(position, 'openTime'))
open_timestamp_utc = self.safe_integer(position, 'openTimestampUTC')
timestamp = self.parse8601(self.safe_string(position, 'openTime')) - self.diff_milliseconds
open_timestamp_utc = self.safe_integer(position, 'openTimestampUTC') - self.diff_milliseconds
if open_timestamp_utc:
timestamp = open_timestamp_utc
@@ -697,6 +702,8 @@ class mt5(Exchange, ImplicitAPI):
'id': self.token,
}
await self.server_timezone()
response = await self.private_get_openedorders(self.extend(request, params))
# 如果指定了特定交易对,进行过滤
@@ -715,6 +722,8 @@ class mt5(Exchange, ImplicitAPI):
if not hasattr(self, 'token') or not self.token:
await self.get_token()
await self.server_timezone()
if params.get('from') is None or params.get('to') is None:
yesterday = datetime.now() - timedelta(days=3)
params['from'] = yesterday.strftime('%Y-%m-%d') + 'T00:00:00'
@@ -764,8 +773,8 @@ class mt5(Exchange, ImplicitAPI):
# 如果无法解析,使用原始 market_id
symbol = market_id
timestamp = self.parse8601(self.safe_string(order, 'openTime'))
last_trade_timestamp = self.parse8601(self.safe_string(order, 'closeTime'))
timestamp = self.parse8601(self.safe_string(order, 'openTime')) - self.diff_milliseconds
last_trade_timestamp = self.parse8601(self.safe_string(order, 'closeTime')) - self.diff_milliseconds
if last_trade_timestamp is None:
last_trade_timestamp = timestamp

View File

@@ -170,6 +170,8 @@ class mt5(Exchange, ImplicitAPI):
response = self.private_get_connect(params)
self.token = response
self.diff_milliseconds = 0 # 服务器时区差异,默认设置为 0
self.server_timezone()
return self.token
def check_connect(self):
@@ -208,6 +210,7 @@ class mt5(Exchange, ImplicitAPI):
}
response = self.private_get_servertimezone(request)
self.timezone = int(float(response))
self.diff_milliseconds = self.timezone * 3600 * 1000
return self.timezone
def fetch_markets(self, params={}):
@@ -588,7 +591,7 @@ class mt5(Exchange, ImplicitAPI):
"""异步获取持仓信息"""
if not hasattr(self, 'token') or not self.token:
self.get_token()
self.server_timezone()
request = {
'id': self.token,
}
@@ -623,8 +626,8 @@ class mt5(Exchange, ImplicitAPI):
close_lots = self.safe_number(position, 'closeLots', 0)
# 解析时间戳
timestamp = self.parse8601(self.safe_string(position, 'openTime'))
open_timestamp_utc = self.safe_integer(position, 'openTimestampUTC')
timestamp = self.parse8601(self.safe_string(position, 'openTime')) - self.diff_milliseconds
open_timestamp_utc = self.safe_integer(position, 'openTimestampUTC') - self.diff_milliseconds
if open_timestamp_utc:
timestamp = open_timestamp_utc
@@ -715,6 +718,7 @@ class mt5(Exchange, ImplicitAPI):
def fetch_open_orders(self, symbol=None, since=None, limit=None, params={}):
"""获取未平仓订单"""
self.load_token()
self.server_timezone()
request = {
'id': self.token,
}
@@ -734,6 +738,7 @@ class mt5(Exchange, ImplicitAPI):
def fetch_closed_orders(self, symbol=None, since=None, limit=None, params={}):
"""获取已平仓订单"""
self.load_token()
self.server_timezone()
if params.get('from') is None or params.get('to') is None:
yesterday = datetime.now() - timedelta(days=3)
params['from'] = yesterday.strftime('%Y-%m-%d') + 'T00:00:00'
@@ -777,8 +782,8 @@ class mt5(Exchange, ImplicitAPI):
else:
symbol = market_id
timestamp = self.parse8601(self.safe_string(order, 'openTime'))
last_trade_timestamp = self.parse8601(self.safe_string(order, 'closeTime'))
timestamp = self.parse8601(self.safe_string(order, 'openTime')) - self.diff_milliseconds
last_trade_timestamp = self.parse8601(self.safe_string(order, 'closeTime')) - self.diff_milliseconds
status = self.parse_order_status(self.safe_string(order, 'state'))
side = self.parse_order_side(self.safe_string(order, 'orderType'))

View File

@@ -67,6 +67,7 @@ class mt5(mt5Parent):
"""监听订单变化"""
if not hasattr(self, 'token') or not self.token:
await self.get_token()
await self.server_timezone()
ws_url = self.implode_hostname(self.urls['api']['ws'])
url = ws_url + '/OnOrderUpdate?id=' + self.token
message_hash = 'orders'
@@ -92,6 +93,7 @@ class mt5(mt5Parent):
"""监听持仓变化"""
if not hasattr(self, 'token') or not self.token:
await self.get_token()
await self.server_timezone()
ws_url = self.implode_hostname(self.urls['api']['ws'])
url = ws_url + '/OnOrderUpdate?id=' + self.token
message_hash = 'positions'
@@ -365,7 +367,7 @@ class mt5(mt5Parent):
"""处理 OrderUpdate 类型消息(包含订单、持仓、余额)"""
try:
data = self.safe_value(message, 'data', {})
timestamp = self.safe_integer(message, 'timestampUTC')
timestamp = self.safe_integer(message, 'timestampUTC') - self.diff_milliseconds
# 1. 解析余额信息
balance_data = self.parse_ws_balance_from_data(data)
@@ -427,7 +429,7 @@ class mt5(mt5Parent):
"""处理 OpenedOrders 类型消息(只包含持仓)"""
try:
data = self.safe_value(message, 'data', [])
timestamp = self.safe_integer(message, 'timestampUTC')
timestamp = self.safe_integer(message, 'timestampUTC') - self.diff_milliseconds
# 解析持仓信息
positions = self.parse_ws_positions_from_orders(data)
@@ -618,13 +620,13 @@ class mt5(mt5Parent):
close_time = self.safe_string(order_data, 'closeTime')
is_closed = close_time and close_time != "0001-01-01T00:00:00"
timestamp = self.parse8601(self.safe_string(order_data, 'openTime'))
timestamp = self.parse8601(self.safe_string(order_data, 'openTime')) - self.diff_milliseconds
if timestamp is None:
timestamp = self.milliseconds()
last_trade_timestamp = timestamp
if is_closed:
last_trade_timestamp = self.parse8601(close_time)
last_trade_timestamp = self.parse8601(close_time) - - self.diff_milliseconds
mt5_order_type = self.safe_string(order_data, 'update_type', None)
@@ -715,7 +717,7 @@ class mt5(mt5Parent):
quote = symbol[3:]
symbol = base + '/' + quote
timestamp = self.parse8601(self.safe_string(order_data, 'openTime'))
timestamp = self.parse8601(self.safe_string(order_data, 'openTime')) - self.diff_milliseconds
contracts = self.safe_number(order_data, 'lots')
entry_price = self.safe_number(order_data, 'openPrice')