1
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
Metadata-Version: 2.4
|
||||
Metadata-Version: 2.1
|
||||
Name: ccxt
|
||||
Version: 4.5.18
|
||||
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: Environment :: Console
|
||||
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
|
||||
Requires-Dist: ruff==0.0.292; extra == "qa"
|
||||
Requires-Dist: tox>=4.8.0; extra == "qa"
|
||||
Provides-Extra: type
|
||||
Requires-Dist: mypy==1.6.1; extra == "type"
|
||||
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
|
||||
License-File: LICENSE.txt
|
||||
|
||||
# CCXT – CryptoCurrency eXchange Trading Library
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ from ccxt.base.errors import ExchangeNotAvailable
|
||||
from ccxt.base.errors import InvalidNonce
|
||||
from ccxt.base.decimal_to_precision import TICK_SIZE
|
||||
from ccxt.base.precise import Precise
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
|
||||
class mt5(Exchange, ImplicitAPI):
|
||||
@@ -713,23 +714,31 @@ class mt5(Exchange, ImplicitAPI):
|
||||
"""异步获取已平仓订单 - 修复版本"""
|
||||
if not hasattr(self, 'token') or not self.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 = {
|
||||
'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:
|
||||
market = self.market(symbol)
|
||||
filtered_orders = []
|
||||
for order in response:
|
||||
for order in data:
|
||||
if isinstance(order, dict) and order.get('symbol') == market['id']:
|
||||
filtered_orders.append(order)
|
||||
return self.parse_orders(filtered_orders, market, since, limit)
|
||||
else:
|
||||
return self.parse_orders(response, None, since, limit)
|
||||
return self.parse_orders(data, None, since, limit)
|
||||
|
||||
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.decimal_to_precision import TICK_SIZE
|
||||
from ccxt.base.precise import Precise
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
|
||||
class mt5(Exchange, ImplicitAPI):
|
||||
@@ -730,11 +731,20 @@ class mt5(Exchange, ImplicitAPI):
|
||||
def fetch_closed_orders(self, symbol=None, since=None, limit=None, params={}):
|
||||
"""获取已平仓订单"""
|
||||
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 = {
|
||||
'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:
|
||||
market = self.market(symbol)
|
||||
|
||||
@@ -79,8 +79,8 @@ async def quick_order_test():
|
||||
# balance = await exchange.fetch_balance()
|
||||
# logger.info(f"✅ 连接成功,余额: {balance}")
|
||||
|
||||
positions = await exchange.fetch_positions()
|
||||
logger.info(f"✅ 连接成功,信息: {positions}")
|
||||
# positions = await exchange.fetch_positions()
|
||||
# logger.info(f"✅ 连接成功,信息: {positions}")
|
||||
|
||||
# 获取市场信息
|
||||
# markets = await exchange.fetch_markets()
|
||||
@@ -98,6 +98,10 @@ async def quick_order_test():
|
||||
# open_orders = await exchange.fetch_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:
|
||||
# logger.info(f" 订单 {order['id']}: {order['symbol']} {order['side']} {order['type']} {order['status']}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user