1
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
Metadata-Version: 2.4
|
Metadata-Version: 2.1
|
||||||
Name: ccxt
|
Name: ccxt
|
||||||
Version: 4.5.18
|
Version: 4.5.18
|
||||||
Summary: A cryptocurrency trading API with more than 100 exchanges in JavaScript / TypeScript / Python / C# / PHP / Go
|
Summary: A cryptocurrency trading API with more than 100 exchanges in JavaScript / TypeScript / Python / C# / PHP / Go
|
||||||
@@ -32,34 +32,9 @@ Classifier: Programming Language :: PHP
|
|||||||
Classifier: Operating System :: OS Independent
|
Classifier: Operating System :: OS Independent
|
||||||
Classifier: Environment :: Console
|
Classifier: Environment :: Console
|
||||||
Description-Content-Type: text/markdown
|
Description-Content-Type: text/markdown
|
||||||
License-File: LICENSE.txt
|
|
||||||
Requires-Dist: setuptools>=60.9.0
|
|
||||||
Requires-Dist: certifi>=2018.1.18
|
|
||||||
Requires-Dist: requests>=2.18.4
|
|
||||||
Requires-Dist: cryptography>=2.6.1
|
|
||||||
Requires-Dist: typing_extensions>=4.4.0
|
|
||||||
Requires-Dist: aiohttp>=3.10.11; python_version >= "3.5.2"
|
|
||||||
Requires-Dist: aiodns>=1.1.1; python_version >= "3.5.2"
|
|
||||||
Requires-Dist: yarl>=1.7.2; python_version >= "3.5.2"
|
|
||||||
Requires-Dist: coincurve==21.0.0; python_version >= "3.9" and python_version <= "3.13"
|
|
||||||
Provides-Extra: qa
|
Provides-Extra: qa
|
||||||
Requires-Dist: ruff==0.0.292; extra == "qa"
|
|
||||||
Requires-Dist: tox>=4.8.0; extra == "qa"
|
|
||||||
Provides-Extra: type
|
Provides-Extra: type
|
||||||
Requires-Dist: mypy==1.6.1; extra == "type"
|
License-File: LICENSE.txt
|
||||||
Dynamic: author
|
|
||||||
Dynamic: author-email
|
|
||||||
Dynamic: classifier
|
|
||||||
Dynamic: description
|
|
||||||
Dynamic: description-content-type
|
|
||||||
Dynamic: home-page
|
|
||||||
Dynamic: keywords
|
|
||||||
Dynamic: license
|
|
||||||
Dynamic: license-file
|
|
||||||
Dynamic: project-url
|
|
||||||
Dynamic: provides-extra
|
|
||||||
Dynamic: requires-dist
|
|
||||||
Dynamic: summary
|
|
||||||
|
|
||||||
# CCXT – CryptoCurrency eXchange Trading Library
|
# CCXT – CryptoCurrency eXchange Trading Library
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ from ccxt.base.errors import ExchangeNotAvailable
|
|||||||
from ccxt.base.errors import InvalidNonce
|
from ccxt.base.errors import InvalidNonce
|
||||||
from ccxt.base.decimal_to_precision import TICK_SIZE
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
||||||
from ccxt.base.precise import Precise
|
from ccxt.base.precise import Precise
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
|
|
||||||
class mt5(Exchange, ImplicitAPI):
|
class mt5(Exchange, ImplicitAPI):
|
||||||
@@ -713,23 +714,31 @@ 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()
|
||||||
|
yesterday = datetime.now() - timedelta(days=3)
|
||||||
|
from_day = yesterday.strftime('%Y-%m-%d') + 'T00:00:00'
|
||||||
|
tomorrow = datetime.now() + timedelta(days=1)
|
||||||
|
to_day = tomorrow.strftime('%Y-%m-%d') + 'T00:00:00'
|
||||||
request = {
|
request = {
|
||||||
'id': self.token,
|
'id': self.token,
|
||||||
|
'from': from_day,
|
||||||
|
'to': to_day,
|
||||||
|
'sort': 'OpenTime',
|
||||||
|
'ascending': 'true',
|
||||||
}
|
}
|
||||||
|
|
||||||
response = await self.private_get_closedorders(self.extend(request, params))
|
response = await self.private_get_orderhistory(self.extend(request, params))
|
||||||
|
data = self.safe_list(response, 'orders')
|
||||||
|
|
||||||
# 如果指定了特定交易对,进行过滤
|
# 如果指定了特定交易对,进行过滤
|
||||||
if symbol is not None:
|
if symbol is not None:
|
||||||
market = self.market(symbol)
|
market = self.market(symbol)
|
||||||
filtered_orders = []
|
filtered_orders = []
|
||||||
for order in response:
|
for order in data:
|
||||||
if isinstance(order, dict) and order.get('symbol') == market['id']:
|
if isinstance(order, dict) and order.get('symbol') == market['id']:
|
||||||
filtered_orders.append(order)
|
filtered_orders.append(order)
|
||||||
return self.parse_orders(filtered_orders, market, since, limit)
|
return self.parse_orders(filtered_orders, market, since, limit)
|
||||||
else:
|
else:
|
||||||
return self.parse_orders(response, None, since, limit)
|
return self.parse_orders(data, None, since, limit)
|
||||||
|
|
||||||
def parse_order(self, order, market=None):
|
def parse_order(self, order, market=None):
|
||||||
"""解析订单信息 - 修复市场符号问题"""
|
"""解析订单信息 - 修复市场符号问题"""
|
||||||
|
|||||||
12
ccxt/mt5.py
12
ccxt/mt5.py
@@ -24,6 +24,7 @@ from ccxt.base.errors import InvalidNonce
|
|||||||
from ccxt.base.errors import RequestTimeout
|
from ccxt.base.errors import RequestTimeout
|
||||||
from ccxt.base.decimal_to_precision import TICK_SIZE
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
||||||
from ccxt.base.precise import Precise
|
from ccxt.base.precise import Precise
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
|
|
||||||
class mt5(Exchange, ImplicitAPI):
|
class mt5(Exchange, ImplicitAPI):
|
||||||
@@ -730,11 +731,20 @@ 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()
|
||||||
|
yesterday = datetime.now() - timedelta(days=3)
|
||||||
|
from_day = yesterday.strftime('%Y-%m-%d') + 'T00:00:00'
|
||||||
|
tomorrow = datetime.now() + timedelta(days=1)
|
||||||
|
to_day = tomorrow.strftime('%Y-%m-%d') + 'T00:00:00'
|
||||||
request = {
|
request = {
|
||||||
'id': self.token,
|
'id': self.token,
|
||||||
|
'from': from_day,
|
||||||
|
'to': to_day,
|
||||||
|
'sort': 'OpenTime',
|
||||||
|
'ascending': 'true',
|
||||||
}
|
}
|
||||||
|
|
||||||
response = self.private_get_closedorders(self.extend(request, params))
|
response = self.private_get_orderhistory(self.extend(request, params))
|
||||||
|
data = self.safe_list(response, 'orders')
|
||||||
|
|
||||||
if symbol is not None:
|
if symbol is not None:
|
||||||
market = self.market(symbol)
|
market = self.market(symbol)
|
||||||
|
|||||||
@@ -79,8 +79,8 @@ async def quick_order_test():
|
|||||||
# balance = await exchange.fetch_balance()
|
# balance = await exchange.fetch_balance()
|
||||||
# logger.info(f"✅ 连接成功,余额: {balance}")
|
# logger.info(f"✅ 连接成功,余额: {balance}")
|
||||||
|
|
||||||
positions = await exchange.fetch_positions()
|
# positions = await exchange.fetch_positions()
|
||||||
logger.info(f"✅ 连接成功,信息: {positions}")
|
# logger.info(f"✅ 连接成功,信息: {positions}")
|
||||||
|
|
||||||
# 获取市场信息
|
# 获取市场信息
|
||||||
# markets = await exchange.fetch_markets()
|
# markets = await exchange.fetch_markets()
|
||||||
@@ -97,6 +97,10 @@ async def quick_order_test():
|
|||||||
# 获取开单
|
# 获取开单
|
||||||
# open_orders = await exchange.fetch_open_orders()
|
# open_orders = await exchange.fetch_open_orders()
|
||||||
# logger.info(f"✅ 当前开单数量: {len(open_orders)}")
|
# logger.info(f"✅ 当前开单数量: {len(open_orders)}")
|
||||||
|
|
||||||
|
# 获取订单
|
||||||
|
closed_orders = await exchange.fetch_closed_orders()
|
||||||
|
logger.info(f"✅ 当前订单: {closed_orders}")
|
||||||
|
|
||||||
# for order in open_orders:
|
# for order in open_orders:
|
||||||
# logger.info(f" 订单 {order['id']}: {order['symbol']} {order['side']} {order['type']} {order['status']}")
|
# logger.info(f" 订单 {order['id']}: {order['symbol']} {order['side']} {order['type']} {order['status']}")
|
||||||
|
|||||||
Reference in New Issue
Block a user