ccxt 4.2.76__py2.py3-none-any.whl → 4.2.78__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ccxt/__init__.py +1 -1
- ccxt/abstract/kucoin.py +1 -0
- ccxt/abstract/kucoinfutures.py +1 -0
- ccxt/async_support/__init__.py +1 -1
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/binance.py +503 -444
- ccxt/async_support/bingx.py +1 -1
- ccxt/async_support/bitflyer.py +2 -2
- ccxt/async_support/bithumb.py +2 -2
- ccxt/async_support/blofin.py +11 -2
- ccxt/async_support/bybit.py +88 -52
- ccxt/async_support/coinbase.py +21 -10
- ccxt/async_support/delta.py +65 -51
- ccxt/async_support/deribit.py +2 -2
- ccxt/async_support/gate.py +3 -2
- ccxt/async_support/htx.py +34 -27
- ccxt/async_support/hyperliquid.py +7 -5
- ccxt/async_support/kraken.py +8 -8
- ccxt/async_support/kucoin.py +192 -5
- ccxt/async_support/okcoin.py +27 -1
- ccxt/async_support/okx.py +20 -2
- ccxt/async_support/woo.py +62 -3
- ccxt/base/exchange.py +9 -4
- ccxt/binance.py +503 -444
- ccxt/bingx.py +1 -1
- ccxt/bitflyer.py +2 -2
- ccxt/bithumb.py +2 -2
- ccxt/blofin.py +11 -2
- ccxt/bybit.py +88 -52
- ccxt/coinbase.py +21 -10
- ccxt/delta.py +65 -51
- ccxt/deribit.py +2 -2
- ccxt/gate.py +3 -2
- ccxt/htx.py +34 -27
- ccxt/hyperliquid.py +7 -5
- ccxt/kraken.py +8 -8
- ccxt/kucoin.py +192 -5
- ccxt/okcoin.py +27 -1
- ccxt/okx.py +20 -2
- ccxt/pro/__init__.py +1 -1
- ccxt/pro/ascendex.py +1 -1
- ccxt/pro/bitvavo.py +1 -1
- ccxt/pro/coinex.py +20 -14
- ccxt/pro/deribit.py +1 -1
- ccxt/pro/exmo.py +1 -1
- ccxt/pro/krakenfutures.py +1 -1
- ccxt/pro/phemex.py +1 -1
- ccxt/pro/poloniex.py +1 -1
- ccxt/pro/probit.py +1 -1
- ccxt/pro/woo.py +50 -6
- ccxt/test/test_async.py +9 -16
- ccxt/test/test_sync.py +9 -16
- ccxt/woo.py +62 -3
- {ccxt-4.2.76.dist-info → ccxt-4.2.78.dist-info}/METADATA +4 -4
- {ccxt-4.2.76.dist-info → ccxt-4.2.78.dist-info}/RECORD +57 -57
- {ccxt-4.2.76.dist-info → ccxt-4.2.78.dist-info}/WHEEL +0 -0
- {ccxt-4.2.76.dist-info → ccxt-4.2.78.dist-info}/top_level.txt +0 -0
ccxt/pro/woo.py
CHANGED
@@ -62,6 +62,13 @@ class woo(ccxt.async_support.woo):
|
|
62
62
|
'ping': self.ping,
|
63
63
|
'keepAlive': 10000,
|
64
64
|
},
|
65
|
+
'exceptions': {
|
66
|
+
'ws': {
|
67
|
+
'exact': {
|
68
|
+
'Auth is needed.': AuthenticationError,
|
69
|
+
},
|
70
|
+
},
|
71
|
+
},
|
65
72
|
})
|
66
73
|
|
67
74
|
def request_id(self, url):
|
@@ -413,8 +420,9 @@ class woo(ccxt.async_support.woo):
|
|
413
420
|
client = self.client(url)
|
414
421
|
messageHash = 'authenticated'
|
415
422
|
event = 'auth'
|
416
|
-
future =
|
417
|
-
|
423
|
+
future = client.future(messageHash)
|
424
|
+
authenticated = self.safe_value(client.subscriptions, messageHash)
|
425
|
+
if authenticated is None:
|
418
426
|
ts = str(self.nonce())
|
419
427
|
auth = '|' + ts
|
420
428
|
signature = self.hmac(self.encode(auth), self.encode(self.secret), hashlib.sha256)
|
@@ -427,9 +435,8 @@ class woo(ccxt.async_support.woo):
|
|
427
435
|
},
|
428
436
|
}
|
429
437
|
message = self.extend(request, params)
|
430
|
-
|
431
|
-
|
432
|
-
return future
|
438
|
+
self.watch(url, messageHash, message, messageHash)
|
439
|
+
return await future
|
433
440
|
|
434
441
|
async def watch_private(self, messageHash, message, params={}):
|
435
442
|
await self.authenticate(params)
|
@@ -442,6 +449,14 @@ class woo(ccxt.async_support.woo):
|
|
442
449
|
return await self.watch(url, messageHash, request, messageHash, subscribe)
|
443
450
|
|
444
451
|
async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
452
|
+
"""
|
453
|
+
watches information on multiple orders made by the user
|
454
|
+
:param str symbol: unified market symbol of the market orders were made in
|
455
|
+
:param int [since]: the earliest time in ms to fetch orders for
|
456
|
+
:param int [limit]: the maximum number of order structures to retrieve
|
457
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
458
|
+
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
459
|
+
"""
|
445
460
|
await self.load_markets()
|
446
461
|
topic = 'executionreport'
|
447
462
|
messageHash = topic
|
@@ -768,7 +783,34 @@ class woo(ccxt.async_support.woo):
|
|
768
783
|
self.balance = self.safe_balance(self.balance)
|
769
784
|
client.resolve(self.balance, 'balance')
|
770
785
|
|
786
|
+
def handle_error_message(self, client: Client, message):
|
787
|
+
#
|
788
|
+
# {"id":"1","event":"subscribe","success":false,"ts":1710780997216,"errorMsg":"Auth is needed."}
|
789
|
+
#
|
790
|
+
if not ('success' in message):
|
791
|
+
return False
|
792
|
+
success = self.safe_bool(message, 'success')
|
793
|
+
if success:
|
794
|
+
return False
|
795
|
+
errorMessage = self.safe_string(message, 'errorMsg')
|
796
|
+
try:
|
797
|
+
if errorMessage is not None:
|
798
|
+
feedback = self.id + ' ' + self.json(message)
|
799
|
+
self.throw_exactly_matched_exception(self.exceptions['exact'], errorMessage, feedback)
|
800
|
+
return False
|
801
|
+
except Exception as error:
|
802
|
+
if isinstance(error, AuthenticationError):
|
803
|
+
messageHash = 'authenticated'
|
804
|
+
client.reject(error, messageHash)
|
805
|
+
if messageHash in client.subscriptions:
|
806
|
+
del client.subscriptions[messageHash]
|
807
|
+
else:
|
808
|
+
client.reject(error)
|
809
|
+
return True
|
810
|
+
|
771
811
|
def handle_message(self, client: Client, message):
|
812
|
+
if self.handle_error_message(client, message):
|
813
|
+
return
|
772
814
|
methods = {
|
773
815
|
'ping': self.handle_ping,
|
774
816
|
'pong': self.handle_pong,
|
@@ -844,7 +886,9 @@ class woo(ccxt.async_support.woo):
|
|
844
886
|
messageHash = 'authenticated'
|
845
887
|
success = self.safe_value(message, 'success')
|
846
888
|
if success:
|
847
|
-
client.resolve(message, messageHash)
|
889
|
+
# client.resolve(message, messageHash)
|
890
|
+
future = self.safe_value(client.futures, 'authenticated')
|
891
|
+
future.resolve(True)
|
848
892
|
else:
|
849
893
|
error = AuthenticationError(self.json(message))
|
850
894
|
client.reject(error, messageHash)
|
ccxt/test/test_async.py
CHANGED
@@ -1326,11 +1326,10 @@ class testMainClass(baseMainTestClass):
|
|
1326
1326
|
async def test_kucoin(self):
|
1327
1327
|
exchange = self.init_offline_exchange('kucoin')
|
1328
1328
|
req_headers = None
|
1329
|
-
options_string = str(exchange.options)
|
1330
1329
|
spot_id = exchange.options['partner']['spot']['id']
|
1331
1330
|
spot_key = exchange.options['partner']['spot']['key']
|
1332
|
-
assert spot_id == 'ccxt', 'kucoin - id: ' + spot_id + ' not in options
|
1333
|
-
assert spot_key == '9e58cc35-5b5e-4133-92ec-166e3f077cb8', 'kucoin - key: ' + spot_key + ' not in options
|
1331
|
+
assert spot_id == 'ccxt', 'kucoin - id: ' + spot_id + ' not in options'
|
1332
|
+
assert spot_key == '9e58cc35-5b5e-4133-92ec-166e3f077cb8', 'kucoin - key: ' + spot_key + ' not in options.'
|
1334
1333
|
try:
|
1335
1334
|
await exchange.create_order('BTC/USDT', 'limit', 'buy', 1, 20000)
|
1336
1335
|
except Exception as e:
|
@@ -1345,11 +1344,10 @@ class testMainClass(baseMainTestClass):
|
|
1345
1344
|
exchange = self.init_offline_exchange('kucoinfutures')
|
1346
1345
|
req_headers = None
|
1347
1346
|
id = 'ccxtfutures'
|
1348
|
-
options_string = str(exchange.options['partner']['future'])
|
1349
1347
|
future_id = exchange.options['partner']['future']['id']
|
1350
1348
|
future_key = exchange.options['partner']['future']['key']
|
1351
|
-
assert future_id == id, 'kucoinfutures - id: ' + future_id + ' not in options
|
1352
|
-
assert future_key == '1b327198-f30c-4f14-a0ac-918871282f15', 'kucoinfutures - key: ' + future_key + ' not in options
|
1349
|
+
assert future_id == id, 'kucoinfutures - id: ' + future_id + ' not in options.'
|
1350
|
+
assert future_key == '1b327198-f30c-4f14-a0ac-918871282f15', 'kucoinfutures - key: ' + future_key + ' not in options.'
|
1353
1351
|
try:
|
1354
1352
|
await exchange.create_order('BTC/USDT:USDT', 'limit', 'buy', 1, 20000)
|
1355
1353
|
except Exception as e:
|
@@ -1362,8 +1360,7 @@ class testMainClass(baseMainTestClass):
|
|
1362
1360
|
exchange = self.init_offline_exchange('bitget')
|
1363
1361
|
req_headers = None
|
1364
1362
|
id = 'p4sve'
|
1365
|
-
|
1366
|
-
assert exchange.options['broker'] == id, 'bitget - id: ' + id + ' not in options: ' + options_string
|
1363
|
+
assert exchange.options['broker'] == id, 'bitget - id: ' + id + ' not in options'
|
1367
1364
|
try:
|
1368
1365
|
await exchange.create_order('BTC/USDT', 'limit', 'buy', 1, 20000)
|
1369
1366
|
except Exception as e:
|
@@ -1376,15 +1373,13 @@ class testMainClass(baseMainTestClass):
|
|
1376
1373
|
exchange = self.init_offline_exchange('mexc')
|
1377
1374
|
req_headers = None
|
1378
1375
|
id = 'CCXT'
|
1379
|
-
|
1380
|
-
assert exchange.options['broker'] == id, 'mexc - id: ' + id + ' not in options: ' + options_string
|
1376
|
+
assert exchange.options['broker'] == id, 'mexc - id: ' + id + ' not in options'
|
1381
1377
|
await exchange.load_markets()
|
1382
1378
|
try:
|
1383
1379
|
await exchange.create_order('BTC/USDT', 'limit', 'buy', 1, 20000)
|
1384
1380
|
except Exception as e:
|
1385
1381
|
req_headers = exchange.last_request_headers
|
1386
|
-
|
1387
|
-
assert req_headers['source'] == id, 'mexc - id: ' + id + ' not in headers: ' + req_headers_string
|
1382
|
+
assert req_headers['source'] == id, 'mexc - id: ' + id + ' not in headers.'
|
1388
1383
|
await close(exchange)
|
1389
1384
|
return True
|
1390
1385
|
|
@@ -1476,15 +1471,13 @@ class testMainClass(baseMainTestClass):
|
|
1476
1471
|
exchange = self.init_offline_exchange('bingx')
|
1477
1472
|
req_headers = None
|
1478
1473
|
id = 'CCXT'
|
1479
|
-
|
1480
|
-
assert exchange.options['broker'] == id, 'bingx - id: ' + id + ' not in options: ' + options_string
|
1474
|
+
assert exchange.options['broker'] == id, 'bingx - id: ' + id + ' not in options'
|
1481
1475
|
try:
|
1482
1476
|
await exchange.create_order('BTC/USDT', 'limit', 'buy', 1, 20000)
|
1483
1477
|
except Exception as e:
|
1484
1478
|
# we expect an error here, we're only interested in the headers
|
1485
1479
|
req_headers = exchange.last_request_headers
|
1486
|
-
|
1487
|
-
assert req_headers['X-SOURCE-KEY'] == id, 'bingx - id: ' + id + ' not in headers: ' + req_headers_string
|
1480
|
+
assert req_headers['X-SOURCE-KEY'] == id, 'bingx - id: ' + id + ' not in headers.'
|
1488
1481
|
await close(exchange)
|
1489
1482
|
|
1490
1483
|
async def test_phemex(self):
|
ccxt/test/test_sync.py
CHANGED
@@ -1325,11 +1325,10 @@ class testMainClass(baseMainTestClass):
|
|
1325
1325
|
def test_kucoin(self):
|
1326
1326
|
exchange = self.init_offline_exchange('kucoin')
|
1327
1327
|
req_headers = None
|
1328
|
-
options_string = str(exchange.options)
|
1329
1328
|
spot_id = exchange.options['partner']['spot']['id']
|
1330
1329
|
spot_key = exchange.options['partner']['spot']['key']
|
1331
|
-
assert spot_id == 'ccxt', 'kucoin - id: ' + spot_id + ' not in options
|
1332
|
-
assert spot_key == '9e58cc35-5b5e-4133-92ec-166e3f077cb8', 'kucoin - key: ' + spot_key + ' not in options
|
1330
|
+
assert spot_id == 'ccxt', 'kucoin - id: ' + spot_id + ' not in options'
|
1331
|
+
assert spot_key == '9e58cc35-5b5e-4133-92ec-166e3f077cb8', 'kucoin - key: ' + spot_key + ' not in options.'
|
1333
1332
|
try:
|
1334
1333
|
exchange.create_order('BTC/USDT', 'limit', 'buy', 1, 20000)
|
1335
1334
|
except Exception as e:
|
@@ -1344,11 +1343,10 @@ class testMainClass(baseMainTestClass):
|
|
1344
1343
|
exchange = self.init_offline_exchange('kucoinfutures')
|
1345
1344
|
req_headers = None
|
1346
1345
|
id = 'ccxtfutures'
|
1347
|
-
options_string = str(exchange.options['partner']['future'])
|
1348
1346
|
future_id = exchange.options['partner']['future']['id']
|
1349
1347
|
future_key = exchange.options['partner']['future']['key']
|
1350
|
-
assert future_id == id, 'kucoinfutures - id: ' + future_id + ' not in options
|
1351
|
-
assert future_key == '1b327198-f30c-4f14-a0ac-918871282f15', 'kucoinfutures - key: ' + future_key + ' not in options
|
1348
|
+
assert future_id == id, 'kucoinfutures - id: ' + future_id + ' not in options.'
|
1349
|
+
assert future_key == '1b327198-f30c-4f14-a0ac-918871282f15', 'kucoinfutures - key: ' + future_key + ' not in options.'
|
1352
1350
|
try:
|
1353
1351
|
exchange.create_order('BTC/USDT:USDT', 'limit', 'buy', 1, 20000)
|
1354
1352
|
except Exception as e:
|
@@ -1361,8 +1359,7 @@ class testMainClass(baseMainTestClass):
|
|
1361
1359
|
exchange = self.init_offline_exchange('bitget')
|
1362
1360
|
req_headers = None
|
1363
1361
|
id = 'p4sve'
|
1364
|
-
|
1365
|
-
assert exchange.options['broker'] == id, 'bitget - id: ' + id + ' not in options: ' + options_string
|
1362
|
+
assert exchange.options['broker'] == id, 'bitget - id: ' + id + ' not in options'
|
1366
1363
|
try:
|
1367
1364
|
exchange.create_order('BTC/USDT', 'limit', 'buy', 1, 20000)
|
1368
1365
|
except Exception as e:
|
@@ -1375,15 +1372,13 @@ class testMainClass(baseMainTestClass):
|
|
1375
1372
|
exchange = self.init_offline_exchange('mexc')
|
1376
1373
|
req_headers = None
|
1377
1374
|
id = 'CCXT'
|
1378
|
-
|
1379
|
-
assert exchange.options['broker'] == id, 'mexc - id: ' + id + ' not in options: ' + options_string
|
1375
|
+
assert exchange.options['broker'] == id, 'mexc - id: ' + id + ' not in options'
|
1380
1376
|
exchange.load_markets()
|
1381
1377
|
try:
|
1382
1378
|
exchange.create_order('BTC/USDT', 'limit', 'buy', 1, 20000)
|
1383
1379
|
except Exception as e:
|
1384
1380
|
req_headers = exchange.last_request_headers
|
1385
|
-
|
1386
|
-
assert req_headers['source'] == id, 'mexc - id: ' + id + ' not in headers: ' + req_headers_string
|
1381
|
+
assert req_headers['source'] == id, 'mexc - id: ' + id + ' not in headers.'
|
1387
1382
|
close(exchange)
|
1388
1383
|
return True
|
1389
1384
|
|
@@ -1475,15 +1470,13 @@ class testMainClass(baseMainTestClass):
|
|
1475
1470
|
exchange = self.init_offline_exchange('bingx')
|
1476
1471
|
req_headers = None
|
1477
1472
|
id = 'CCXT'
|
1478
|
-
|
1479
|
-
assert exchange.options['broker'] == id, 'bingx - id: ' + id + ' not in options: ' + options_string
|
1473
|
+
assert exchange.options['broker'] == id, 'bingx - id: ' + id + ' not in options'
|
1480
1474
|
try:
|
1481
1475
|
exchange.create_order('BTC/USDT', 'limit', 'buy', 1, 20000)
|
1482
1476
|
except Exception as e:
|
1483
1477
|
# we expect an error here, we're only interested in the headers
|
1484
1478
|
req_headers = exchange.last_request_headers
|
1485
|
-
|
1486
|
-
assert req_headers['X-SOURCE-KEY'] == id, 'bingx - id: ' + id + ' not in headers: ' + req_headers_string
|
1479
|
+
assert req_headers['X-SOURCE-KEY'] == id, 'bingx - id: ' + id + ' not in headers.'
|
1487
1480
|
close(exchange)
|
1488
1481
|
|
1489
1482
|
def test_phemex(self):
|
ccxt/woo.py
CHANGED
@@ -65,7 +65,7 @@ class woo(Exchange, ImplicitAPI):
|
|
65
65
|
'fetchBalance': True,
|
66
66
|
'fetchCanceledOrders': False,
|
67
67
|
'fetchClosedOrder': False,
|
68
|
-
'fetchClosedOrders':
|
68
|
+
'fetchClosedOrders': True,
|
69
69
|
'fetchCurrencies': True,
|
70
70
|
'fetchDepositAddress': True,
|
71
71
|
'fetchDeposits': True,
|
@@ -84,7 +84,7 @@ class woo(Exchange, ImplicitAPI):
|
|
84
84
|
'fetchOHLCV': True,
|
85
85
|
'fetchOpenInterestHistory': False,
|
86
86
|
'fetchOpenOrder': False,
|
87
|
-
'fetchOpenOrders':
|
87
|
+
'fetchOpenOrders': True,
|
88
88
|
'fetchOrder': True,
|
89
89
|
'fetchOrderBook': True,
|
90
90
|
'fetchOrders': True,
|
@@ -1274,9 +1274,14 @@ class woo(Exchange, ImplicitAPI):
|
|
1274
1274
|
:param boolean [params.isTriggered]: whether the order has been triggered(False by default)
|
1275
1275
|
:param str [params.side]: 'buy' or 'sell'
|
1276
1276
|
:param boolean [params.trailing]: set to True if you want to fetch trailing orders
|
1277
|
+
:param boolean [params.paginate]: set to True if you want to fetch orders with pagination
|
1277
1278
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1278
1279
|
"""
|
1279
1280
|
self.load_markets()
|
1281
|
+
paginate = False
|
1282
|
+
paginate, params = self.handle_option_and_params(params, 'fetchOrders', 'paginate')
|
1283
|
+
if paginate:
|
1284
|
+
return self.fetch_paginated_call_incremental('fetchOrders', symbol, since, limit, params, 'page', 500)
|
1280
1285
|
request = {}
|
1281
1286
|
market: Market = None
|
1282
1287
|
stop = self.safe_bool_2(params, 'stop', 'trigger')
|
@@ -1290,6 +1295,10 @@ class woo(Exchange, ImplicitAPI):
|
|
1290
1295
|
request['createdTimeStart'] = since
|
1291
1296
|
else:
|
1292
1297
|
request['start_t'] = since
|
1298
|
+
if limit is not None:
|
1299
|
+
request['size'] = limit
|
1300
|
+
else:
|
1301
|
+
request['size'] = 500
|
1293
1302
|
if stop:
|
1294
1303
|
request['algoType'] = 'stop'
|
1295
1304
|
elif trailing:
|
@@ -1332,7 +1341,47 @@ class woo(Exchange, ImplicitAPI):
|
|
1332
1341
|
#
|
1333
1342
|
data = self.safe_value(response, 'data', response)
|
1334
1343
|
orders = self.safe_list(data, 'rows')
|
1335
|
-
return self.parse_orders(orders, market, since, limit
|
1344
|
+
return self.parse_orders(orders, market, since, limit)
|
1345
|
+
|
1346
|
+
def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1347
|
+
"""
|
1348
|
+
fetches information on multiple orders made by the user
|
1349
|
+
:see: https://docs.woo.org/#get-orders
|
1350
|
+
:see: https://docs.woo.org/#get-algo-orders
|
1351
|
+
:param str symbol: unified market symbol of the market orders were made in
|
1352
|
+
:param int [since]: the earliest time in ms to fetch orders for
|
1353
|
+
:param int [limit]: the maximum number of order structures to retrieve
|
1354
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1355
|
+
:param boolean [params.stop]: whether the order is a stop/algo order
|
1356
|
+
:param boolean [params.isTriggered]: whether the order has been triggered(False by default)
|
1357
|
+
:param str [params.side]: 'buy' or 'sell'
|
1358
|
+
:param boolean [params.trailing]: set to True if you want to fetch trailing orders
|
1359
|
+
:param boolean [params.paginate]: set to True if you want to fetch orders with pagination
|
1360
|
+
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1361
|
+
"""
|
1362
|
+
self.load_markets()
|
1363
|
+
extendedParams = self.extend(params, {'status': 'INCOMPLETE'})
|
1364
|
+
return self.fetch_orders(symbol, since, limit, extendedParams)
|
1365
|
+
|
1366
|
+
def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1367
|
+
"""
|
1368
|
+
fetches information on multiple orders made by the user
|
1369
|
+
:see: https://docs.woo.org/#get-orders
|
1370
|
+
:see: https://docs.woo.org/#get-algo-orders
|
1371
|
+
:param str symbol: unified market symbol of the market orders were made in
|
1372
|
+
:param int [since]: the earliest time in ms to fetch orders for
|
1373
|
+
:param int [limit]: the maximum number of order structures to retrieve
|
1374
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1375
|
+
:param boolean [params.stop]: whether the order is a stop/algo order
|
1376
|
+
:param boolean [params.isTriggered]: whether the order has been triggered(False by default)
|
1377
|
+
:param str [params.side]: 'buy' or 'sell'
|
1378
|
+
:param boolean [params.trailing]: set to True if you want to fetch trailing orders
|
1379
|
+
:param boolean [params.paginate]: set to True if you want to fetch orders with pagination
|
1380
|
+
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1381
|
+
"""
|
1382
|
+
self.load_markets()
|
1383
|
+
extendedParams = self.extend(params, {'status': 'COMPLETED'})
|
1384
|
+
return self.fetch_orders(symbol, since, limit, extendedParams)
|
1336
1385
|
|
1337
1386
|
def parse_time_in_force(self, timeInForce):
|
1338
1387
|
timeInForces = {
|
@@ -1633,14 +1682,20 @@ class woo(Exchange, ImplicitAPI):
|
|
1633
1682
|
|
1634
1683
|
def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
1635
1684
|
"""
|
1685
|
+
:see: https://docs.woo.org/#get-trades
|
1636
1686
|
fetch all trades made by the user
|
1637
1687
|
:param str symbol: unified market symbol
|
1638
1688
|
:param int [since]: the earliest time in ms to fetch trades for
|
1639
1689
|
:param int [limit]: the maximum number of trades structures to retrieve
|
1640
1690
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1691
|
+
:param boolean [params.paginate]: set to True if you want to fetch trades with pagination
|
1641
1692
|
:returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
1642
1693
|
"""
|
1643
1694
|
self.load_markets()
|
1695
|
+
paginate = False
|
1696
|
+
paginate, params = self.handle_option_and_params(params, 'fetchMyTrades', 'paginate')
|
1697
|
+
if paginate:
|
1698
|
+
return self.fetch_paginated_call_incremental('fetchMyTrades', symbol, since, limit, params, 'page', 500)
|
1644
1699
|
request = {}
|
1645
1700
|
market: Market = None
|
1646
1701
|
if symbol is not None:
|
@@ -1648,6 +1703,10 @@ class woo(Exchange, ImplicitAPI):
|
|
1648
1703
|
request['symbol'] = market['id']
|
1649
1704
|
if since is not None:
|
1650
1705
|
request['start_t'] = since
|
1706
|
+
if limit is not None:
|
1707
|
+
request['size'] = limit
|
1708
|
+
else:
|
1709
|
+
request['size'] = 500
|
1651
1710
|
response = self.v1PrivateGetClientTrades(self.extend(request, params))
|
1652
1711
|
# {
|
1653
1712
|
# "success": True,
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ccxt
|
3
|
-
Version: 4.2.
|
3
|
+
Version: 4.2.78
|
4
4
|
Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
|
5
5
|
Home-page: https://ccxt.com
|
6
6
|
Author: Igor Kroitor
|
@@ -262,13 +262,13 @@ console.log(version, Object.keys(exchanges));
|
|
262
262
|
|
263
263
|
All-in-one browser bundle (dependencies included), served from a CDN of your choice:
|
264
264
|
|
265
|
-
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.
|
266
|
-
* unpkg: https://unpkg.com/ccxt@4.2.
|
265
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.78/dist/ccxt.browser.js
|
266
|
+
* unpkg: https://unpkg.com/ccxt@4.2.78/dist/ccxt.browser.js
|
267
267
|
|
268
268
|
CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
|
269
269
|
|
270
270
|
```HTML
|
271
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.
|
271
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.78/dist/ccxt.browser.js"></script>
|
272
272
|
```
|
273
273
|
|
274
274
|
Creates a global `ccxt` object:
|