处理时间差,统一UTC时间
This commit is contained in:
@@ -156,6 +156,10 @@ class mt5(Exchange, ImplicitAPI):
|
|||||||
response = await self.private_get_connect(request)
|
response = await self.private_get_connect(request)
|
||||||
|
|
||||||
self.token = response
|
self.token = response
|
||||||
|
self.diff_milliseconds = 0 # 重置时间差
|
||||||
|
|
||||||
|
# 获取服务器时区
|
||||||
|
await self.server_timezone()
|
||||||
return self.token
|
return self.token
|
||||||
|
|
||||||
async def check_connect(self):
|
async def check_connect(self):
|
||||||
@@ -367,6 +371,7 @@ class mt5(Exchange, ImplicitAPI):
|
|||||||
}
|
}
|
||||||
response = await self.private_get_servertimezone(request)
|
response = await self.private_get_servertimezone(request)
|
||||||
self.timezone = int(float(response))
|
self.timezone = int(float(response))
|
||||||
|
self.diff_milliseconds = self.timezone * 3600 * 1000
|
||||||
return self.timezone
|
return self.timezone
|
||||||
|
|
||||||
async def fetch_balance(self, params={}):
|
async def fetch_balance(self, params={}):
|
||||||
@@ -567,7 +572,7 @@ class mt5(Exchange, ImplicitAPI):
|
|||||||
"""异步获取持仓信息"""
|
"""异步获取持仓信息"""
|
||||||
if not hasattr(self, 'token') or not self.token:
|
if not hasattr(self, 'token') or not self.token:
|
||||||
await self.get_token()
|
await self.get_token()
|
||||||
|
await self.server_timezone()
|
||||||
request = {
|
request = {
|
||||||
'id': self.token,
|
'id': self.token,
|
||||||
}
|
}
|
||||||
@@ -602,8 +607,8 @@ class mt5(Exchange, ImplicitAPI):
|
|||||||
close_lots = self.safe_number(position, 'closeLots', 0)
|
close_lots = self.safe_number(position, 'closeLots', 0)
|
||||||
|
|
||||||
# 解析时间戳
|
# 解析时间戳
|
||||||
timestamp = self.parse8601(self.safe_string(position, 'openTime'))
|
timestamp = self.parse8601(self.safe_string(position, 'openTime')) - self.diff_milliseconds
|
||||||
open_timestamp_utc = self.safe_integer(position, 'openTimestampUTC')
|
open_timestamp_utc = self.safe_integer(position, 'openTimestampUTC') - self.diff_milliseconds
|
||||||
if open_timestamp_utc:
|
if open_timestamp_utc:
|
||||||
timestamp = open_timestamp_utc
|
timestamp = open_timestamp_utc
|
||||||
|
|
||||||
@@ -692,10 +697,12 @@ class mt5(Exchange, ImplicitAPI):
|
|||||||
"""异步获取未平仓订单 - 修复版本"""
|
"""异步获取未平仓订单 - 修复版本"""
|
||||||
if not hasattr(self, 'token') or not self.token:
|
if not hasattr(self, 'token') or not self.token:
|
||||||
await self.get_token()
|
await self.get_token()
|
||||||
|
|
||||||
request = {
|
request = {
|
||||||
'id': self.token,
|
'id': self.token,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await self.server_timezone()
|
||||||
|
|
||||||
response = await self.private_get_openedorders(self.extend(request, params))
|
response = await self.private_get_openedorders(self.extend(request, params))
|
||||||
|
|
||||||
@@ -714,7 +721,9 @@ class mt5(Exchange, ImplicitAPI):
|
|||||||
"""异步获取已平仓订单 - 修复版本"""
|
"""异步获取已平仓订单 - 修复版本"""
|
||||||
if not hasattr(self, 'token') or not self.token:
|
if not hasattr(self, 'token') or not self.token:
|
||||||
await self.get_token()
|
await self.get_token()
|
||||||
|
|
||||||
|
await self.server_timezone()
|
||||||
|
|
||||||
if params.get('from') is None or params.get('to') is None:
|
if params.get('from') is None or params.get('to') is None:
|
||||||
yesterday = datetime.now() - timedelta(days=3)
|
yesterday = datetime.now() - timedelta(days=3)
|
||||||
params['from'] = yesterday.strftime('%Y-%m-%d') + 'T00:00:00'
|
params['from'] = yesterday.strftime('%Y-%m-%d') + 'T00:00:00'
|
||||||
@@ -764,8 +773,8 @@ class mt5(Exchange, ImplicitAPI):
|
|||||||
# 如果无法解析,使用原始 market_id
|
# 如果无法解析,使用原始 market_id
|
||||||
symbol = market_id
|
symbol = market_id
|
||||||
|
|
||||||
timestamp = self.parse8601(self.safe_string(order, 'openTime'))
|
timestamp = self.parse8601(self.safe_string(order, 'openTime')) - self.diff_milliseconds
|
||||||
last_trade_timestamp = self.parse8601(self.safe_string(order, 'closeTime'))
|
last_trade_timestamp = self.parse8601(self.safe_string(order, 'closeTime')) - self.diff_milliseconds
|
||||||
if last_trade_timestamp is None:
|
if last_trade_timestamp is None:
|
||||||
last_trade_timestamp = timestamp
|
last_trade_timestamp = timestamp
|
||||||
|
|
||||||
|
|||||||
15
ccxt/mt5.py
15
ccxt/mt5.py
@@ -170,6 +170,8 @@ class mt5(Exchange, ImplicitAPI):
|
|||||||
response = self.private_get_connect(params)
|
response = self.private_get_connect(params)
|
||||||
|
|
||||||
self.token = response
|
self.token = response
|
||||||
|
self.diff_milliseconds = 0 # 服务器时区差异,默认设置为 0
|
||||||
|
self.server_timezone()
|
||||||
return self.token
|
return self.token
|
||||||
|
|
||||||
def check_connect(self):
|
def check_connect(self):
|
||||||
@@ -208,6 +210,7 @@ class mt5(Exchange, ImplicitAPI):
|
|||||||
}
|
}
|
||||||
response = self.private_get_servertimezone(request)
|
response = self.private_get_servertimezone(request)
|
||||||
self.timezone = int(float(response))
|
self.timezone = int(float(response))
|
||||||
|
self.diff_milliseconds = self.timezone * 3600 * 1000
|
||||||
return self.timezone
|
return self.timezone
|
||||||
|
|
||||||
def fetch_markets(self, params={}):
|
def fetch_markets(self, params={}):
|
||||||
@@ -588,7 +591,7 @@ class mt5(Exchange, ImplicitAPI):
|
|||||||
"""异步获取持仓信息"""
|
"""异步获取持仓信息"""
|
||||||
if not hasattr(self, 'token') or not self.token:
|
if not hasattr(self, 'token') or not self.token:
|
||||||
self.get_token()
|
self.get_token()
|
||||||
|
self.server_timezone()
|
||||||
request = {
|
request = {
|
||||||
'id': self.token,
|
'id': self.token,
|
||||||
}
|
}
|
||||||
@@ -623,8 +626,8 @@ class mt5(Exchange, ImplicitAPI):
|
|||||||
close_lots = self.safe_number(position, 'closeLots', 0)
|
close_lots = self.safe_number(position, 'closeLots', 0)
|
||||||
|
|
||||||
# 解析时间戳
|
# 解析时间戳
|
||||||
timestamp = self.parse8601(self.safe_string(position, 'openTime'))
|
timestamp = self.parse8601(self.safe_string(position, 'openTime')) - self.diff_milliseconds
|
||||||
open_timestamp_utc = self.safe_integer(position, 'openTimestampUTC')
|
open_timestamp_utc = self.safe_integer(position, 'openTimestampUTC') - self.diff_milliseconds
|
||||||
if open_timestamp_utc:
|
if open_timestamp_utc:
|
||||||
timestamp = 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={}):
|
def fetch_open_orders(self, symbol=None, since=None, limit=None, params={}):
|
||||||
"""获取未平仓订单"""
|
"""获取未平仓订单"""
|
||||||
self.load_token()
|
self.load_token()
|
||||||
|
self.server_timezone()
|
||||||
request = {
|
request = {
|
||||||
'id': self.token,
|
'id': self.token,
|
||||||
}
|
}
|
||||||
@@ -734,6 +738,7 @@ class mt5(Exchange, ImplicitAPI):
|
|||||||
def fetch_closed_orders(self, symbol=None, since=None, limit=None, params={}):
|
def fetch_closed_orders(self, symbol=None, since=None, limit=None, params={}):
|
||||||
"""获取已平仓订单"""
|
"""获取已平仓订单"""
|
||||||
self.load_token()
|
self.load_token()
|
||||||
|
self.server_timezone()
|
||||||
if params.get('from') is None or params.get('to') is None:
|
if params.get('from') is None or params.get('to') is None:
|
||||||
yesterday = datetime.now() - timedelta(days=3)
|
yesterday = datetime.now() - timedelta(days=3)
|
||||||
params['from'] = yesterday.strftime('%Y-%m-%d') + 'T00:00:00'
|
params['from'] = yesterday.strftime('%Y-%m-%d') + 'T00:00:00'
|
||||||
@@ -777,8 +782,8 @@ class mt5(Exchange, ImplicitAPI):
|
|||||||
else:
|
else:
|
||||||
symbol = market_id
|
symbol = market_id
|
||||||
|
|
||||||
timestamp = self.parse8601(self.safe_string(order, 'openTime'))
|
timestamp = self.parse8601(self.safe_string(order, 'openTime')) - self.diff_milliseconds
|
||||||
last_trade_timestamp = self.parse8601(self.safe_string(order, 'closeTime'))
|
last_trade_timestamp = self.parse8601(self.safe_string(order, 'closeTime')) - self.diff_milliseconds
|
||||||
|
|
||||||
status = self.parse_order_status(self.safe_string(order, 'state'))
|
status = self.parse_order_status(self.safe_string(order, 'state'))
|
||||||
side = self.parse_order_side(self.safe_string(order, 'orderType'))
|
side = self.parse_order_side(self.safe_string(order, 'orderType'))
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ class mt5(mt5Parent):
|
|||||||
"""监听订单变化"""
|
"""监听订单变化"""
|
||||||
if not hasattr(self, 'token') or not self.token:
|
if not hasattr(self, 'token') or not self.token:
|
||||||
await self.get_token()
|
await self.get_token()
|
||||||
|
await self.server_timezone()
|
||||||
ws_url = self.implode_hostname(self.urls['api']['ws'])
|
ws_url = self.implode_hostname(self.urls['api']['ws'])
|
||||||
url = ws_url + '/OnOrderUpdate?id=' + self.token
|
url = ws_url + '/OnOrderUpdate?id=' + self.token
|
||||||
message_hash = 'orders'
|
message_hash = 'orders'
|
||||||
@@ -92,6 +93,7 @@ class mt5(mt5Parent):
|
|||||||
"""监听持仓变化"""
|
"""监听持仓变化"""
|
||||||
if not hasattr(self, 'token') or not self.token:
|
if not hasattr(self, 'token') or not self.token:
|
||||||
await self.get_token()
|
await self.get_token()
|
||||||
|
await self.server_timezone()
|
||||||
ws_url = self.implode_hostname(self.urls['api']['ws'])
|
ws_url = self.implode_hostname(self.urls['api']['ws'])
|
||||||
url = ws_url + '/OnOrderUpdate?id=' + self.token
|
url = ws_url + '/OnOrderUpdate?id=' + self.token
|
||||||
message_hash = 'positions'
|
message_hash = 'positions'
|
||||||
@@ -365,7 +367,7 @@ class mt5(mt5Parent):
|
|||||||
"""处理 OrderUpdate 类型消息(包含订单、持仓、余额)"""
|
"""处理 OrderUpdate 类型消息(包含订单、持仓、余额)"""
|
||||||
try:
|
try:
|
||||||
data = self.safe_value(message, 'data', {})
|
data = self.safe_value(message, 'data', {})
|
||||||
timestamp = self.safe_integer(message, 'timestampUTC')
|
timestamp = self.safe_integer(message, 'timestampUTC') - self.diff_milliseconds
|
||||||
|
|
||||||
# 1. 解析余额信息
|
# 1. 解析余额信息
|
||||||
balance_data = self.parse_ws_balance_from_data(data)
|
balance_data = self.parse_ws_balance_from_data(data)
|
||||||
@@ -427,7 +429,7 @@ class mt5(mt5Parent):
|
|||||||
"""处理 OpenedOrders 类型消息(只包含持仓)"""
|
"""处理 OpenedOrders 类型消息(只包含持仓)"""
|
||||||
try:
|
try:
|
||||||
data = self.safe_value(message, 'data', [])
|
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)
|
positions = self.parse_ws_positions_from_orders(data)
|
||||||
@@ -618,13 +620,13 @@ class mt5(mt5Parent):
|
|||||||
close_time = self.safe_string(order_data, 'closeTime')
|
close_time = self.safe_string(order_data, 'closeTime')
|
||||||
is_closed = close_time and close_time != "0001-01-01T00:00:00"
|
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:
|
if timestamp is None:
|
||||||
timestamp = self.milliseconds()
|
timestamp = self.milliseconds()
|
||||||
|
|
||||||
last_trade_timestamp = timestamp
|
last_trade_timestamp = timestamp
|
||||||
if is_closed:
|
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)
|
mt5_order_type = self.safe_string(order_data, 'update_type', None)
|
||||||
|
|
||||||
@@ -715,7 +717,7 @@ class mt5(mt5Parent):
|
|||||||
quote = symbol[3:]
|
quote = symbol[3:]
|
||||||
symbol = base + '/' + quote
|
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')
|
contracts = self.safe_number(order_data, 'lots')
|
||||||
entry_price = self.safe_number(order_data, 'openPrice')
|
entry_price = self.safe_number(order_data, 'openPrice')
|
||||||
|
|||||||
Reference in New Issue
Block a user