ccxt 4.4.27__py2.py3-none-any.whl → 4.4.28__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/binance.py +7 -0
- ccxt/abstract/binancecoinm.py +7 -0
- ccxt/abstract/binanceus.py +7 -0
- ccxt/abstract/binanceusdm.py +7 -0
- ccxt/alpaca.py +44 -40
- ccxt/async_support/__init__.py +1 -1
- ccxt/async_support/alpaca.py +44 -40
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/binance.py +7 -0
- ccxt/async_support/kraken.py +43 -35
- ccxt/async_support/wavesexchange.py +1 -0
- ccxt/base/exchange.py +1 -1
- ccxt/binance.py +7 -0
- ccxt/kraken.py +43 -35
- ccxt/pro/__init__.py +1 -1
- ccxt/pro/binance.py +4 -5
- ccxt/wavesexchange.py +1 -0
- {ccxt-4.4.27.dist-info → ccxt-4.4.28.dist-info}/METADATA +4 -4
- {ccxt-4.4.27.dist-info → ccxt-4.4.28.dist-info}/RECORD +23 -23
- {ccxt-4.4.27.dist-info → ccxt-4.4.28.dist-info}/LICENSE.txt +0 -0
- {ccxt-4.4.27.dist-info → ccxt-4.4.28.dist-info}/WHEEL +0 -0
- {ccxt-4.4.27.dist-info → ccxt-4.4.28.dist-info}/top_level.txt +0 -0
ccxt/__init__.py
CHANGED
ccxt/abstract/binance.py
CHANGED
@@ -587,6 +587,9 @@ class ImplicitAPI:
|
|
587
587
|
eapiprivate_get_mmp = eapiPrivateGetMmp = Entry('mmp', 'eapiPrivate', 'GET', {'cost': 1})
|
588
588
|
eapiprivate_get_countdowncancelall = eapiPrivateGetCountdownCancelAll = Entry('countdownCancelAll', 'eapiPrivate', 'GET', {'cost': 1})
|
589
589
|
eapiprivate_get_order = eapiPrivateGetOrder = Entry('order', 'eapiPrivate', 'GET', {'cost': 1})
|
590
|
+
eapiprivate_get_block_order_orders = eapiPrivateGetBlockOrderOrders = Entry('block/order/orders', 'eapiPrivate', 'GET', {'cost': 5})
|
591
|
+
eapiprivate_get_block_order_execute = eapiPrivateGetBlockOrderExecute = Entry('block/order/execute', 'eapiPrivate', 'GET', {'cost': 5})
|
592
|
+
eapiprivate_get_block_user_trades = eapiPrivateGetBlockUserTrades = Entry('block/user-trades', 'eapiPrivate', 'GET', {'cost': 5})
|
590
593
|
eapiprivate_post_order = eapiPrivatePostOrder = Entry('order', 'eapiPrivate', 'POST', {'cost': 1})
|
591
594
|
eapiprivate_post_batchorders = eapiPrivatePostBatchOrders = Entry('batchOrders', 'eapiPrivate', 'POST', {'cost': 5})
|
592
595
|
eapiprivate_post_listenkey = eapiPrivatePostListenKey = Entry('listenKey', 'eapiPrivate', 'POST', {'cost': 1})
|
@@ -594,12 +597,16 @@ class ImplicitAPI:
|
|
594
597
|
eapiprivate_post_mmpreset = eapiPrivatePostMmpReset = Entry('mmpReset', 'eapiPrivate', 'POST', {'cost': 1})
|
595
598
|
eapiprivate_post_countdowncancelall = eapiPrivatePostCountdownCancelAll = Entry('countdownCancelAll', 'eapiPrivate', 'POST', {'cost': 1})
|
596
599
|
eapiprivate_post_countdowncancelallheartbeat = eapiPrivatePostCountdownCancelAllHeartBeat = Entry('countdownCancelAllHeartBeat', 'eapiPrivate', 'POST', {'cost': 10})
|
600
|
+
eapiprivate_post_block_order_create = eapiPrivatePostBlockOrderCreate = Entry('block/order/create', 'eapiPrivate', 'POST', {'cost': 5})
|
601
|
+
eapiprivate_post_block_order_execute = eapiPrivatePostBlockOrderExecute = Entry('block/order/execute', 'eapiPrivate', 'POST', {'cost': 5})
|
597
602
|
eapiprivate_put_listenkey = eapiPrivatePutListenKey = Entry('listenKey', 'eapiPrivate', 'PUT', {'cost': 1})
|
603
|
+
eapiprivate_put_block_order_create = eapiPrivatePutBlockOrderCreate = Entry('block/order/create', 'eapiPrivate', 'PUT', {'cost': 5})
|
598
604
|
eapiprivate_delete_order = eapiPrivateDeleteOrder = Entry('order', 'eapiPrivate', 'DELETE', {'cost': 1})
|
599
605
|
eapiprivate_delete_batchorders = eapiPrivateDeleteBatchOrders = Entry('batchOrders', 'eapiPrivate', 'DELETE', {'cost': 1})
|
600
606
|
eapiprivate_delete_allopenorders = eapiPrivateDeleteAllOpenOrders = Entry('allOpenOrders', 'eapiPrivate', 'DELETE', {'cost': 1})
|
601
607
|
eapiprivate_delete_allopenordersbyunderlying = eapiPrivateDeleteAllOpenOrdersByUnderlying = Entry('allOpenOrdersByUnderlying', 'eapiPrivate', 'DELETE', {'cost': 1})
|
602
608
|
eapiprivate_delete_listenkey = eapiPrivateDeleteListenKey = Entry('listenKey', 'eapiPrivate', 'DELETE', {'cost': 1})
|
609
|
+
eapiprivate_delete_block_order_create = eapiPrivateDeleteBlockOrderCreate = Entry('block/order/create', 'eapiPrivate', 'DELETE', {'cost': 5})
|
603
610
|
public_get_ping = publicGetPing = Entry('ping', 'public', 'GET', {'cost': 0.2})
|
604
611
|
public_get_time = publicGetTime = Entry('time', 'public', 'GET', {'cost': 0.2})
|
605
612
|
public_get_depth = publicGetDepth = Entry('depth', 'public', 'GET', {'cost': 1, 'byLimit': [[100, 1], [500, 5], [1000, 10], [5000, 50]]})
|
ccxt/abstract/binancecoinm.py
CHANGED
@@ -587,6 +587,9 @@ class ImplicitAPI:
|
|
587
587
|
eapiprivate_get_mmp = eapiPrivateGetMmp = Entry('mmp', 'eapiPrivate', 'GET', {'cost': 1})
|
588
588
|
eapiprivate_get_countdowncancelall = eapiPrivateGetCountdownCancelAll = Entry('countdownCancelAll', 'eapiPrivate', 'GET', {'cost': 1})
|
589
589
|
eapiprivate_get_order = eapiPrivateGetOrder = Entry('order', 'eapiPrivate', 'GET', {'cost': 1})
|
590
|
+
eapiprivate_get_block_order_orders = eapiPrivateGetBlockOrderOrders = Entry('block/order/orders', 'eapiPrivate', 'GET', {'cost': 5})
|
591
|
+
eapiprivate_get_block_order_execute = eapiPrivateGetBlockOrderExecute = Entry('block/order/execute', 'eapiPrivate', 'GET', {'cost': 5})
|
592
|
+
eapiprivate_get_block_user_trades = eapiPrivateGetBlockUserTrades = Entry('block/user-trades', 'eapiPrivate', 'GET', {'cost': 5})
|
590
593
|
eapiprivate_post_order = eapiPrivatePostOrder = Entry('order', 'eapiPrivate', 'POST', {'cost': 1})
|
591
594
|
eapiprivate_post_batchorders = eapiPrivatePostBatchOrders = Entry('batchOrders', 'eapiPrivate', 'POST', {'cost': 5})
|
592
595
|
eapiprivate_post_listenkey = eapiPrivatePostListenKey = Entry('listenKey', 'eapiPrivate', 'POST', {'cost': 1})
|
@@ -594,12 +597,16 @@ class ImplicitAPI:
|
|
594
597
|
eapiprivate_post_mmpreset = eapiPrivatePostMmpReset = Entry('mmpReset', 'eapiPrivate', 'POST', {'cost': 1})
|
595
598
|
eapiprivate_post_countdowncancelall = eapiPrivatePostCountdownCancelAll = Entry('countdownCancelAll', 'eapiPrivate', 'POST', {'cost': 1})
|
596
599
|
eapiprivate_post_countdowncancelallheartbeat = eapiPrivatePostCountdownCancelAllHeartBeat = Entry('countdownCancelAllHeartBeat', 'eapiPrivate', 'POST', {'cost': 10})
|
600
|
+
eapiprivate_post_block_order_create = eapiPrivatePostBlockOrderCreate = Entry('block/order/create', 'eapiPrivate', 'POST', {'cost': 5})
|
601
|
+
eapiprivate_post_block_order_execute = eapiPrivatePostBlockOrderExecute = Entry('block/order/execute', 'eapiPrivate', 'POST', {'cost': 5})
|
597
602
|
eapiprivate_put_listenkey = eapiPrivatePutListenKey = Entry('listenKey', 'eapiPrivate', 'PUT', {'cost': 1})
|
603
|
+
eapiprivate_put_block_order_create = eapiPrivatePutBlockOrderCreate = Entry('block/order/create', 'eapiPrivate', 'PUT', {'cost': 5})
|
598
604
|
eapiprivate_delete_order = eapiPrivateDeleteOrder = Entry('order', 'eapiPrivate', 'DELETE', {'cost': 1})
|
599
605
|
eapiprivate_delete_batchorders = eapiPrivateDeleteBatchOrders = Entry('batchOrders', 'eapiPrivate', 'DELETE', {'cost': 1})
|
600
606
|
eapiprivate_delete_allopenorders = eapiPrivateDeleteAllOpenOrders = Entry('allOpenOrders', 'eapiPrivate', 'DELETE', {'cost': 1})
|
601
607
|
eapiprivate_delete_allopenordersbyunderlying = eapiPrivateDeleteAllOpenOrdersByUnderlying = Entry('allOpenOrdersByUnderlying', 'eapiPrivate', 'DELETE', {'cost': 1})
|
602
608
|
eapiprivate_delete_listenkey = eapiPrivateDeleteListenKey = Entry('listenKey', 'eapiPrivate', 'DELETE', {'cost': 1})
|
609
|
+
eapiprivate_delete_block_order_create = eapiPrivateDeleteBlockOrderCreate = Entry('block/order/create', 'eapiPrivate', 'DELETE', {'cost': 5})
|
603
610
|
public_get_ping = publicGetPing = Entry('ping', 'public', 'GET', {'cost': 0.2})
|
604
611
|
public_get_time = publicGetTime = Entry('time', 'public', 'GET', {'cost': 0.2})
|
605
612
|
public_get_depth = publicGetDepth = Entry('depth', 'public', 'GET', {'cost': 1, 'byLimit': [[100, 1], [500, 5], [1000, 10], [5000, 50]]})
|
ccxt/abstract/binanceus.py
CHANGED
@@ -639,6 +639,9 @@ class ImplicitAPI:
|
|
639
639
|
eapiprivate_get_mmp = eapiPrivateGetMmp = Entry('mmp', 'eapiPrivate', 'GET', {'cost': 1})
|
640
640
|
eapiprivate_get_countdowncancelall = eapiPrivateGetCountdownCancelAll = Entry('countdownCancelAll', 'eapiPrivate', 'GET', {'cost': 1})
|
641
641
|
eapiprivate_get_order = eapiPrivateGetOrder = Entry('order', 'eapiPrivate', 'GET', {'cost': 1})
|
642
|
+
eapiprivate_get_block_order_orders = eapiPrivateGetBlockOrderOrders = Entry('block/order/orders', 'eapiPrivate', 'GET', {'cost': 5})
|
643
|
+
eapiprivate_get_block_order_execute = eapiPrivateGetBlockOrderExecute = Entry('block/order/execute', 'eapiPrivate', 'GET', {'cost': 5})
|
644
|
+
eapiprivate_get_block_user_trades = eapiPrivateGetBlockUserTrades = Entry('block/user-trades', 'eapiPrivate', 'GET', {'cost': 5})
|
642
645
|
eapiprivate_post_order = eapiPrivatePostOrder = Entry('order', 'eapiPrivate', 'POST', {'cost': 1})
|
643
646
|
eapiprivate_post_batchorders = eapiPrivatePostBatchOrders = Entry('batchOrders', 'eapiPrivate', 'POST', {'cost': 5})
|
644
647
|
eapiprivate_post_listenkey = eapiPrivatePostListenKey = Entry('listenKey', 'eapiPrivate', 'POST', {'cost': 1})
|
@@ -646,12 +649,16 @@ class ImplicitAPI:
|
|
646
649
|
eapiprivate_post_mmpreset = eapiPrivatePostMmpReset = Entry('mmpReset', 'eapiPrivate', 'POST', {'cost': 1})
|
647
650
|
eapiprivate_post_countdowncancelall = eapiPrivatePostCountdownCancelAll = Entry('countdownCancelAll', 'eapiPrivate', 'POST', {'cost': 1})
|
648
651
|
eapiprivate_post_countdowncancelallheartbeat = eapiPrivatePostCountdownCancelAllHeartBeat = Entry('countdownCancelAllHeartBeat', 'eapiPrivate', 'POST', {'cost': 10})
|
652
|
+
eapiprivate_post_block_order_create = eapiPrivatePostBlockOrderCreate = Entry('block/order/create', 'eapiPrivate', 'POST', {'cost': 5})
|
653
|
+
eapiprivate_post_block_order_execute = eapiPrivatePostBlockOrderExecute = Entry('block/order/execute', 'eapiPrivate', 'POST', {'cost': 5})
|
649
654
|
eapiprivate_put_listenkey = eapiPrivatePutListenKey = Entry('listenKey', 'eapiPrivate', 'PUT', {'cost': 1})
|
655
|
+
eapiprivate_put_block_order_create = eapiPrivatePutBlockOrderCreate = Entry('block/order/create', 'eapiPrivate', 'PUT', {'cost': 5})
|
650
656
|
eapiprivate_delete_order = eapiPrivateDeleteOrder = Entry('order', 'eapiPrivate', 'DELETE', {'cost': 1})
|
651
657
|
eapiprivate_delete_batchorders = eapiPrivateDeleteBatchOrders = Entry('batchOrders', 'eapiPrivate', 'DELETE', {'cost': 1})
|
652
658
|
eapiprivate_delete_allopenorders = eapiPrivateDeleteAllOpenOrders = Entry('allOpenOrders', 'eapiPrivate', 'DELETE', {'cost': 1})
|
653
659
|
eapiprivate_delete_allopenordersbyunderlying = eapiPrivateDeleteAllOpenOrdersByUnderlying = Entry('allOpenOrdersByUnderlying', 'eapiPrivate', 'DELETE', {'cost': 1})
|
654
660
|
eapiprivate_delete_listenkey = eapiPrivateDeleteListenKey = Entry('listenKey', 'eapiPrivate', 'DELETE', {'cost': 1})
|
661
|
+
eapiprivate_delete_block_order_create = eapiPrivateDeleteBlockOrderCreate = Entry('block/order/create', 'eapiPrivate', 'DELETE', {'cost': 5})
|
655
662
|
public_get_ping = publicGetPing = Entry('ping', 'public', 'GET', {'cost': 1})
|
656
663
|
public_get_time = publicGetTime = Entry('time', 'public', 'GET', {'cost': 1})
|
657
664
|
public_get_depth = publicGetDepth = Entry('depth', 'public', 'GET', {'cost': 1, 'byLimit': [[100, 1], [500, 5], [1000, 10], [5000, 50]]})
|
ccxt/abstract/binanceusdm.py
CHANGED
@@ -587,6 +587,9 @@ class ImplicitAPI:
|
|
587
587
|
eapiprivate_get_mmp = eapiPrivateGetMmp = Entry('mmp', 'eapiPrivate', 'GET', {'cost': 1})
|
588
588
|
eapiprivate_get_countdowncancelall = eapiPrivateGetCountdownCancelAll = Entry('countdownCancelAll', 'eapiPrivate', 'GET', {'cost': 1})
|
589
589
|
eapiprivate_get_order = eapiPrivateGetOrder = Entry('order', 'eapiPrivate', 'GET', {'cost': 1})
|
590
|
+
eapiprivate_get_block_order_orders = eapiPrivateGetBlockOrderOrders = Entry('block/order/orders', 'eapiPrivate', 'GET', {'cost': 5})
|
591
|
+
eapiprivate_get_block_order_execute = eapiPrivateGetBlockOrderExecute = Entry('block/order/execute', 'eapiPrivate', 'GET', {'cost': 5})
|
592
|
+
eapiprivate_get_block_user_trades = eapiPrivateGetBlockUserTrades = Entry('block/user-trades', 'eapiPrivate', 'GET', {'cost': 5})
|
590
593
|
eapiprivate_post_order = eapiPrivatePostOrder = Entry('order', 'eapiPrivate', 'POST', {'cost': 1})
|
591
594
|
eapiprivate_post_batchorders = eapiPrivatePostBatchOrders = Entry('batchOrders', 'eapiPrivate', 'POST', {'cost': 5})
|
592
595
|
eapiprivate_post_listenkey = eapiPrivatePostListenKey = Entry('listenKey', 'eapiPrivate', 'POST', {'cost': 1})
|
@@ -594,12 +597,16 @@ class ImplicitAPI:
|
|
594
597
|
eapiprivate_post_mmpreset = eapiPrivatePostMmpReset = Entry('mmpReset', 'eapiPrivate', 'POST', {'cost': 1})
|
595
598
|
eapiprivate_post_countdowncancelall = eapiPrivatePostCountdownCancelAll = Entry('countdownCancelAll', 'eapiPrivate', 'POST', {'cost': 1})
|
596
599
|
eapiprivate_post_countdowncancelallheartbeat = eapiPrivatePostCountdownCancelAllHeartBeat = Entry('countdownCancelAllHeartBeat', 'eapiPrivate', 'POST', {'cost': 10})
|
600
|
+
eapiprivate_post_block_order_create = eapiPrivatePostBlockOrderCreate = Entry('block/order/create', 'eapiPrivate', 'POST', {'cost': 5})
|
601
|
+
eapiprivate_post_block_order_execute = eapiPrivatePostBlockOrderExecute = Entry('block/order/execute', 'eapiPrivate', 'POST', {'cost': 5})
|
597
602
|
eapiprivate_put_listenkey = eapiPrivatePutListenKey = Entry('listenKey', 'eapiPrivate', 'PUT', {'cost': 1})
|
603
|
+
eapiprivate_put_block_order_create = eapiPrivatePutBlockOrderCreate = Entry('block/order/create', 'eapiPrivate', 'PUT', {'cost': 5})
|
598
604
|
eapiprivate_delete_order = eapiPrivateDeleteOrder = Entry('order', 'eapiPrivate', 'DELETE', {'cost': 1})
|
599
605
|
eapiprivate_delete_batchorders = eapiPrivateDeleteBatchOrders = Entry('batchOrders', 'eapiPrivate', 'DELETE', {'cost': 1})
|
600
606
|
eapiprivate_delete_allopenorders = eapiPrivateDeleteAllOpenOrders = Entry('allOpenOrders', 'eapiPrivate', 'DELETE', {'cost': 1})
|
601
607
|
eapiprivate_delete_allopenordersbyunderlying = eapiPrivateDeleteAllOpenOrdersByUnderlying = Entry('allOpenOrdersByUnderlying', 'eapiPrivate', 'DELETE', {'cost': 1})
|
602
608
|
eapiprivate_delete_listenkey = eapiPrivateDeleteListenKey = Entry('listenKey', 'eapiPrivate', 'DELETE', {'cost': 1})
|
609
|
+
eapiprivate_delete_block_order_create = eapiPrivateDeleteBlockOrderCreate = Entry('block/order/create', 'eapiPrivate', 'DELETE', {'cost': 5})
|
603
610
|
public_get_ping = publicGetPing = Entry('ping', 'public', 'GET', {'cost': 0.2})
|
604
611
|
public_get_time = publicGetTime = Entry('time', 'public', 'GET', {'cost': 0.2})
|
605
612
|
public_get_depth = publicGetDepth = Entry('depth', 'public', 'GET', {'cost': 1, 'byLimit': [[100, 1], [500, 5], [1000, 10], [5000, 50]]})
|
ccxt/alpaca.py
CHANGED
@@ -17,6 +17,7 @@ from ccxt.base.errors import InvalidOrder
|
|
17
17
|
from ccxt.base.errors import NotSupported
|
18
18
|
from ccxt.base.errors import RateLimitExceeded
|
19
19
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
20
|
+
from ccxt.base.precise import Precise
|
20
21
|
|
21
22
|
|
22
23
|
class alpaca(Exchange, ImplicitAPI):
|
@@ -1313,19 +1314,19 @@ class alpaca(Exchange, ImplicitAPI):
|
|
1313
1314
|
response = self.traderPrivatePostV2WalletsTransfers(self.extend(request, params))
|
1314
1315
|
#
|
1315
1316
|
# {
|
1316
|
-
# "id": "
|
1317
|
-
# "tx_hash":
|
1318
|
-
# "direction": "
|
1317
|
+
# "id": "e27b70a6-5610-40d7-8468-a516a284b776",
|
1318
|
+
# "tx_hash": null,
|
1319
|
+
# "direction": "OUTGOING",
|
1320
|
+
# "amount": "20",
|
1321
|
+
# "usd_value": "19.99856",
|
1322
|
+
# "chain": "ETH",
|
1323
|
+
# "asset": "USDT",
|
1324
|
+
# "from_address": "0x123930E4dCA196E070d39B60c644C8Aae02f23",
|
1325
|
+
# "to_address": "0x1232c0925196e4dcf05945f67f690153190fbaab",
|
1319
1326
|
# "status": "PROCESSING",
|
1320
|
-
# "
|
1321
|
-
# "
|
1322
|
-
# "
|
1323
|
-
# "fees": "string",
|
1324
|
-
# "chain": "string",
|
1325
|
-
# "asset": "string",
|
1326
|
-
# "from_address": "string",
|
1327
|
-
# "to_address": "string",
|
1328
|
-
# "created_at": "2024-11-02T07:42:48.402Z"
|
1327
|
+
# "created_at": "2024-11-07T02:39:01.775495Z",
|
1328
|
+
# "network_fee": "4",
|
1329
|
+
# "fees": "0.1"
|
1329
1330
|
# }
|
1330
1331
|
#
|
1331
1332
|
return self.parse_transaction(response, currency)
|
@@ -1338,19 +1339,19 @@ class alpaca(Exchange, ImplicitAPI):
|
|
1338
1339
|
response = self.traderPrivateGetV2WalletsTransfers(params)
|
1339
1340
|
#
|
1340
1341
|
# {
|
1341
|
-
# "id": "
|
1342
|
-
# "tx_hash":
|
1343
|
-
# "direction": "
|
1342
|
+
# "id": "e27b70a6-5610-40d7-8468-a516a284b776",
|
1343
|
+
# "tx_hash": null,
|
1344
|
+
# "direction": "OUTGOING",
|
1345
|
+
# "amount": "20",
|
1346
|
+
# "usd_value": "19.99856",
|
1347
|
+
# "chain": "ETH",
|
1348
|
+
# "asset": "USDT",
|
1349
|
+
# "from_address": "0x123930E4dCA196E070d39B60c644C8Aae02f23",
|
1350
|
+
# "to_address": "0x1232c0925196e4dcf05945f67f690153190fbaab",
|
1344
1351
|
# "status": "PROCESSING",
|
1345
|
-
# "
|
1346
|
-
# "
|
1347
|
-
# "
|
1348
|
-
# "fees": "string",
|
1349
|
-
# "chain": "string",
|
1350
|
-
# "asset": "string",
|
1351
|
-
# "from_address": "string",
|
1352
|
-
# "to_address": "string",
|
1353
|
-
# "created_at": "2024-11-02T07:42:48.402Z"
|
1352
|
+
# "created_at": "2024-11-07T02:39:01.775495Z",
|
1353
|
+
# "network_fee": "4",
|
1354
|
+
# "fees": "0.1"
|
1354
1355
|
# }
|
1355
1356
|
#
|
1356
1357
|
results = []
|
@@ -1359,7 +1360,7 @@ class alpaca(Exchange, ImplicitAPI):
|
|
1359
1360
|
direction = self.safe_string(entry, 'direction')
|
1360
1361
|
if direction == type:
|
1361
1362
|
results.append(entry)
|
1362
|
-
elif
|
1363
|
+
elif type == 'BOTH':
|
1363
1364
|
results.append(entry)
|
1364
1365
|
return self.parse_transactions(results, currency, since, limit, params)
|
1365
1366
|
|
@@ -1402,26 +1403,29 @@ class alpaca(Exchange, ImplicitAPI):
|
|
1402
1403
|
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
1403
1404
|
#
|
1404
1405
|
# {
|
1405
|
-
# "id": "
|
1406
|
-
# "tx_hash":
|
1407
|
-
# "direction": "
|
1406
|
+
# "id": "e27b70a6-5610-40d7-8468-a516a284b776",
|
1407
|
+
# "tx_hash": null,
|
1408
|
+
# "direction": "OUTGOING",
|
1409
|
+
# "amount": "20",
|
1410
|
+
# "usd_value": "19.99856",
|
1411
|
+
# "chain": "ETH",
|
1412
|
+
# "asset": "USDT",
|
1413
|
+
# "from_address": "0x123930E4dCA196E070d39B60c644C8Aae02f23",
|
1414
|
+
# "to_address": "0x1232c0925196e4dcf05945f67f690153190fbaab",
|
1408
1415
|
# "status": "PROCESSING",
|
1409
|
-
# "
|
1410
|
-
# "
|
1411
|
-
# "
|
1412
|
-
# "fees": "string",
|
1413
|
-
# "chain": "string",
|
1414
|
-
# "asset": "string",
|
1415
|
-
# "from_address": "string",
|
1416
|
-
# "to_address": "string",
|
1417
|
-
# "created_at": "2024-11-02T07:42:48.402Z"
|
1416
|
+
# "created_at": "2024-11-07T02:39:01.775495Z",
|
1417
|
+
# "network_fee": "4",
|
1418
|
+
# "fees": "0.1"
|
1418
1419
|
# }
|
1419
1420
|
#
|
1420
1421
|
datetime = self.safe_string(transaction, 'created_at')
|
1421
1422
|
currencyId = self.safe_string(transaction, 'asset')
|
1422
1423
|
code = self.safe_currency_code(currencyId, currency)
|
1424
|
+
fees = self.safe_string(transaction, 'fees')
|
1425
|
+
networkFee = self.safe_string(transaction, 'network_fee')
|
1426
|
+
totalFee = Precise.string_add(fees, networkFee)
|
1423
1427
|
fee = {
|
1424
|
-
'cost': self.
|
1428
|
+
'cost': self.parse_number(totalFee),
|
1425
1429
|
'currency': code,
|
1426
1430
|
}
|
1427
1431
|
return {
|
@@ -1450,8 +1454,8 @@ class alpaca(Exchange, ImplicitAPI):
|
|
1450
1454
|
def parse_transaction_status(self, status: Str):
|
1451
1455
|
statuses: dict = {
|
1452
1456
|
'PROCESSING': 'pending',
|
1453
|
-
|
1454
|
-
|
1457
|
+
'FAILED': 'failed',
|
1458
|
+
'COMPLETE': 'ok',
|
1455
1459
|
}
|
1456
1460
|
return self.safe_string(statuses, status, status)
|
1457
1461
|
|
ccxt/async_support/__init__.py
CHANGED
ccxt/async_support/alpaca.py
CHANGED
@@ -17,6 +17,7 @@ from ccxt.base.errors import InvalidOrder
|
|
17
17
|
from ccxt.base.errors import NotSupported
|
18
18
|
from ccxt.base.errors import RateLimitExceeded
|
19
19
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
20
|
+
from ccxt.base.precise import Precise
|
20
21
|
|
21
22
|
|
22
23
|
class alpaca(Exchange, ImplicitAPI):
|
@@ -1313,19 +1314,19 @@ class alpaca(Exchange, ImplicitAPI):
|
|
1313
1314
|
response = await self.traderPrivatePostV2WalletsTransfers(self.extend(request, params))
|
1314
1315
|
#
|
1315
1316
|
# {
|
1316
|
-
# "id": "
|
1317
|
-
# "tx_hash":
|
1318
|
-
# "direction": "
|
1317
|
+
# "id": "e27b70a6-5610-40d7-8468-a516a284b776",
|
1318
|
+
# "tx_hash": null,
|
1319
|
+
# "direction": "OUTGOING",
|
1320
|
+
# "amount": "20",
|
1321
|
+
# "usd_value": "19.99856",
|
1322
|
+
# "chain": "ETH",
|
1323
|
+
# "asset": "USDT",
|
1324
|
+
# "from_address": "0x123930E4dCA196E070d39B60c644C8Aae02f23",
|
1325
|
+
# "to_address": "0x1232c0925196e4dcf05945f67f690153190fbaab",
|
1319
1326
|
# "status": "PROCESSING",
|
1320
|
-
# "
|
1321
|
-
# "
|
1322
|
-
# "
|
1323
|
-
# "fees": "string",
|
1324
|
-
# "chain": "string",
|
1325
|
-
# "asset": "string",
|
1326
|
-
# "from_address": "string",
|
1327
|
-
# "to_address": "string",
|
1328
|
-
# "created_at": "2024-11-02T07:42:48.402Z"
|
1327
|
+
# "created_at": "2024-11-07T02:39:01.775495Z",
|
1328
|
+
# "network_fee": "4",
|
1329
|
+
# "fees": "0.1"
|
1329
1330
|
# }
|
1330
1331
|
#
|
1331
1332
|
return self.parse_transaction(response, currency)
|
@@ -1338,19 +1339,19 @@ class alpaca(Exchange, ImplicitAPI):
|
|
1338
1339
|
response = await self.traderPrivateGetV2WalletsTransfers(params)
|
1339
1340
|
#
|
1340
1341
|
# {
|
1341
|
-
# "id": "
|
1342
|
-
# "tx_hash":
|
1343
|
-
# "direction": "
|
1342
|
+
# "id": "e27b70a6-5610-40d7-8468-a516a284b776",
|
1343
|
+
# "tx_hash": null,
|
1344
|
+
# "direction": "OUTGOING",
|
1345
|
+
# "amount": "20",
|
1346
|
+
# "usd_value": "19.99856",
|
1347
|
+
# "chain": "ETH",
|
1348
|
+
# "asset": "USDT",
|
1349
|
+
# "from_address": "0x123930E4dCA196E070d39B60c644C8Aae02f23",
|
1350
|
+
# "to_address": "0x1232c0925196e4dcf05945f67f690153190fbaab",
|
1344
1351
|
# "status": "PROCESSING",
|
1345
|
-
# "
|
1346
|
-
# "
|
1347
|
-
# "
|
1348
|
-
# "fees": "string",
|
1349
|
-
# "chain": "string",
|
1350
|
-
# "asset": "string",
|
1351
|
-
# "from_address": "string",
|
1352
|
-
# "to_address": "string",
|
1353
|
-
# "created_at": "2024-11-02T07:42:48.402Z"
|
1352
|
+
# "created_at": "2024-11-07T02:39:01.775495Z",
|
1353
|
+
# "network_fee": "4",
|
1354
|
+
# "fees": "0.1"
|
1354
1355
|
# }
|
1355
1356
|
#
|
1356
1357
|
results = []
|
@@ -1359,7 +1360,7 @@ class alpaca(Exchange, ImplicitAPI):
|
|
1359
1360
|
direction = self.safe_string(entry, 'direction')
|
1360
1361
|
if direction == type:
|
1361
1362
|
results.append(entry)
|
1362
|
-
elif
|
1363
|
+
elif type == 'BOTH':
|
1363
1364
|
results.append(entry)
|
1364
1365
|
return self.parse_transactions(results, currency, since, limit, params)
|
1365
1366
|
|
@@ -1402,26 +1403,29 @@ class alpaca(Exchange, ImplicitAPI):
|
|
1402
1403
|
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
1403
1404
|
#
|
1404
1405
|
# {
|
1405
|
-
# "id": "
|
1406
|
-
# "tx_hash":
|
1407
|
-
# "direction": "
|
1406
|
+
# "id": "e27b70a6-5610-40d7-8468-a516a284b776",
|
1407
|
+
# "tx_hash": null,
|
1408
|
+
# "direction": "OUTGOING",
|
1409
|
+
# "amount": "20",
|
1410
|
+
# "usd_value": "19.99856",
|
1411
|
+
# "chain": "ETH",
|
1412
|
+
# "asset": "USDT",
|
1413
|
+
# "from_address": "0x123930E4dCA196E070d39B60c644C8Aae02f23",
|
1414
|
+
# "to_address": "0x1232c0925196e4dcf05945f67f690153190fbaab",
|
1408
1415
|
# "status": "PROCESSING",
|
1409
|
-
# "
|
1410
|
-
# "
|
1411
|
-
# "
|
1412
|
-
# "fees": "string",
|
1413
|
-
# "chain": "string",
|
1414
|
-
# "asset": "string",
|
1415
|
-
# "from_address": "string",
|
1416
|
-
# "to_address": "string",
|
1417
|
-
# "created_at": "2024-11-02T07:42:48.402Z"
|
1416
|
+
# "created_at": "2024-11-07T02:39:01.775495Z",
|
1417
|
+
# "network_fee": "4",
|
1418
|
+
# "fees": "0.1"
|
1418
1419
|
# }
|
1419
1420
|
#
|
1420
1421
|
datetime = self.safe_string(transaction, 'created_at')
|
1421
1422
|
currencyId = self.safe_string(transaction, 'asset')
|
1422
1423
|
code = self.safe_currency_code(currencyId, currency)
|
1424
|
+
fees = self.safe_string(transaction, 'fees')
|
1425
|
+
networkFee = self.safe_string(transaction, 'network_fee')
|
1426
|
+
totalFee = Precise.string_add(fees, networkFee)
|
1423
1427
|
fee = {
|
1424
|
-
'cost': self.
|
1428
|
+
'cost': self.parse_number(totalFee),
|
1425
1429
|
'currency': code,
|
1426
1430
|
}
|
1427
1431
|
return {
|
@@ -1450,8 +1454,8 @@ class alpaca(Exchange, ImplicitAPI):
|
|
1450
1454
|
def parse_transaction_status(self, status: Str):
|
1451
1455
|
statuses: dict = {
|
1452
1456
|
'PROCESSING': 'pending',
|
1453
|
-
|
1454
|
-
|
1457
|
+
'FAILED': 'failed',
|
1458
|
+
'COMPLETE': 'ok',
|
1455
1459
|
}
|
1456
1460
|
return self.safe_string(statuses, status, status)
|
1457
1461
|
|
ccxt/async_support/binance.py
CHANGED
@@ -974,6 +974,9 @@ class binance(Exchange, ImplicitAPI):
|
|
974
974
|
'mmp': 1,
|
975
975
|
'countdownCancelAll': 1,
|
976
976
|
'order': 1,
|
977
|
+
'block/order/orders': 5,
|
978
|
+
'block/order/execute': 5,
|
979
|
+
'block/user-trades': 5,
|
977
980
|
},
|
978
981
|
'post': {
|
979
982
|
'order': 1,
|
@@ -983,9 +986,12 @@ class binance(Exchange, ImplicitAPI):
|
|
983
986
|
'mmpReset': 1,
|
984
987
|
'countdownCancelAll': 1,
|
985
988
|
'countdownCancelAllHeartBeat': 10,
|
989
|
+
'block/order/create': 5,
|
990
|
+
'block/order/execute': 5,
|
986
991
|
},
|
987
992
|
'put': {
|
988
993
|
'listenKey': 1,
|
994
|
+
'block/order/create': 5,
|
989
995
|
},
|
990
996
|
'delete': {
|
991
997
|
'order': 1,
|
@@ -993,6 +999,7 @@ class binance(Exchange, ImplicitAPI):
|
|
993
999
|
'allOpenOrders': 1,
|
994
1000
|
'allOpenOrdersByUnderlying': 1,
|
995
1001
|
'listenKey': 1,
|
1002
|
+
'block/order/create': 5,
|
996
1003
|
},
|
997
1004
|
},
|
998
1005
|
'public': {
|
ccxt/async_support/kraken.py
CHANGED
@@ -1436,7 +1436,7 @@ class kraken(Exchange, ImplicitAPI):
|
|
1436
1436
|
# {
|
1437
1437
|
# "error": [],
|
1438
1438
|
# "result": {
|
1439
|
-
# "descr": {order: 'buy 0.02100000 ETHUSDT @ limit 330.00'},
|
1439
|
+
# "descr": {order: 'buy 0.02100000 ETHUSDT @ limit 330.00'}, # see more examples in "parseOrder"
|
1440
1440
|
# "txid": ['OEKVV2-IH52O-TPL6GZ']
|
1441
1441
|
# }
|
1442
1442
|
# }
|
@@ -1496,9 +1496,10 @@ class kraken(Exchange, ImplicitAPI):
|
|
1496
1496
|
|
1497
1497
|
def parse_order_type(self, status):
|
1498
1498
|
statuses: dict = {
|
1499
|
+
# we dont add "space" delimited orders here(eg. stop loss) because they need separate parsing
|
1499
1500
|
'take-profit': 'market',
|
1500
|
-
'stop-loss-limit': 'limit',
|
1501
1501
|
'stop-loss': 'market',
|
1502
|
+
'stop-loss-limit': 'limit',
|
1502
1503
|
'take-profit-limit': 'limit',
|
1503
1504
|
'trailing-stop-limit': 'limit',
|
1504
1505
|
}
|
@@ -1506,30 +1507,19 @@ class kraken(Exchange, ImplicitAPI):
|
|
1506
1507
|
|
1507
1508
|
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1508
1509
|
#
|
1509
|
-
# createOrder
|
1510
|
+
# createOrder
|
1510
1511
|
#
|
1511
1512
|
# {
|
1512
|
-
# "descr": {
|
1513
|
+
# "descr": {
|
1514
|
+
# "order": "buy 0.02100000 ETHUSDT @ limit 330.00" # limit orders
|
1515
|
+
# "buy 0.12345678 ETHUSDT @ market" # market order
|
1516
|
+
# "sell 0.28002676 ETHUSDT @ stop loss 0.0123 -> limit 0.0.1222" # stop order
|
1517
|
+
# "sell 0.00100000 ETHUSDT @ stop loss 2677.00 -> limit 2577.00 with 5:1 leverage"
|
1518
|
+
# "buy 0.10000000 LTCUSDT @ take profit 75.00000 -> limit 74.00000"
|
1519
|
+
# "sell 10.00000000 XRPEUR @ trailing stop +50.0000%" # trailing stop
|
1520
|
+
# },
|
1513
1521
|
# "txid": ['OEKVV2-IH52O-TPL6GZ']
|
1514
1522
|
# }
|
1515
|
-
# {
|
1516
|
-
# "txid": ["TX_ID_HERE"],
|
1517
|
-
# "descr": {"order":"buy 0.12345678 ETHEUR @ market"},
|
1518
|
-
# }
|
1519
|
-
#
|
1520
|
-
#
|
1521
|
-
# createOrder for stop orders
|
1522
|
-
#
|
1523
|
-
# {
|
1524
|
-
# "txid":["OSILNC-VQI5Q-775ZDQ"],
|
1525
|
-
# "descr":{"order":"sell 167.28002676 ADAXBT @ stop loss 0.00003280 -> limit 0.00003212"}
|
1526
|
-
# }
|
1527
|
-
#
|
1528
|
-
#
|
1529
|
-
# {
|
1530
|
-
# "txid":["OVHMJV-BZW2V-6NZFWF"],
|
1531
|
-
# "descr":{"order":"sell 0.00100000 ETHUSD @ stop loss 2677.00 -> limit 2577.00 with 5:1 leverage"}
|
1532
|
-
# }
|
1533
1523
|
#
|
1534
1524
|
# editOrder
|
1535
1525
|
#
|
@@ -1607,24 +1597,29 @@ class kraken(Exchange, ImplicitAPI):
|
|
1607
1597
|
else:
|
1608
1598
|
orderDescription = self.safe_string(order, 'descr')
|
1609
1599
|
side = None
|
1610
|
-
|
1600
|
+
rawType = None
|
1611
1601
|
marketId = None
|
1612
1602
|
price = None
|
1613
1603
|
amount = None
|
1614
|
-
|
1604
|
+
triggerPrice = None
|
1615
1605
|
if orderDescription is not None:
|
1616
1606
|
parts = orderDescription.split(' ')
|
1617
1607
|
side = self.safe_string(parts, 0)
|
1618
1608
|
amount = self.safe_string(parts, 1)
|
1619
1609
|
marketId = self.safe_string(parts, 2)
|
1620
|
-
|
1621
|
-
|
1622
|
-
|
1610
|
+
part4 = self.safe_string(parts, 4)
|
1611
|
+
part5 = self.safe_string(parts, 5)
|
1612
|
+
if part4 == 'limit' or part4 == 'market':
|
1613
|
+
rawType = part4 # eg, limit, market
|
1614
|
+
else:
|
1615
|
+
rawType = part4 + ' ' + part5 # eg. stop loss, take profit, trailing stop
|
1616
|
+
if rawType == 'stop loss' or rawType == 'take profit':
|
1617
|
+
triggerPrice = self.safe_string(parts, 6)
|
1623
1618
|
price = self.safe_string(parts, 9)
|
1624
|
-
elif
|
1619
|
+
elif rawType == 'limit':
|
1625
1620
|
price = self.safe_string(parts, 5)
|
1626
1621
|
side = self.safe_string(description, 'type', side)
|
1627
|
-
|
1622
|
+
rawType = self.safe_string(description, 'ordertype', rawType) # orderType has dash, e.g. trailing-stop
|
1628
1623
|
marketId = self.safe_string(description, 'pair', marketId)
|
1629
1624
|
foundMarket = self.find_market_by_altname_or_id(marketId)
|
1630
1625
|
symbol = None
|
@@ -1676,15 +1671,28 @@ class kraken(Exchange, ImplicitAPI):
|
|
1676
1671
|
trades.append(self.safe_trade({'id': rawTrade, 'orderId': id, 'symbol': symbol, 'info': {}}))
|
1677
1672
|
else:
|
1678
1673
|
trades.append(rawTrade)
|
1679
|
-
|
1674
|
+
# in #24192 PR, self field is not something consistent/actual
|
1675
|
+
# triggerPrice = self.omit_zero(self.safe_string(order, 'stopprice', triggerPrice))
|
1680
1676
|
stopLossPrice = None
|
1681
1677
|
takeProfitPrice = None
|
1682
|
-
|
1678
|
+
# the dashed strings are not provided from fields(eg. fetch order)
|
1679
|
+
# while spaced strings from "order" sentence(when other fields not available)
|
1680
|
+
if rawType.startswith('take-profit'):
|
1683
1681
|
takeProfitPrice = self.safe_string(description, 'price')
|
1684
1682
|
price = self.omit_zero(self.safe_string(description, 'price2'))
|
1685
|
-
elif
|
1683
|
+
elif rawType.startswith('stop-loss'):
|
1686
1684
|
stopLossPrice = self.safe_string(description, 'price')
|
1687
1685
|
price = self.omit_zero(self.safe_string(description, 'price2'))
|
1686
|
+
elif rawType == 'take profit':
|
1687
|
+
takeProfitPrice = triggerPrice
|
1688
|
+
elif rawType == 'stop loss':
|
1689
|
+
stopLossPrice = triggerPrice
|
1690
|
+
finalType = self.parse_order_type(rawType)
|
1691
|
+
# unlike from endpoints which provide eg: "take-profit-limit"
|
1692
|
+
# for "space-delimited" orders we dont have market/limit suffixes, their format is
|
1693
|
+
# eg: `stop loss > limit 123`, so we need to parse them manually
|
1694
|
+
if self.in_array(finalType, ['stop loss', 'take profit']):
|
1695
|
+
finalType = 'market' if (price is None) else 'limit'
|
1688
1696
|
return self.safe_order({
|
1689
1697
|
'id': id,
|
1690
1698
|
'clientOrderId': clientOrderId,
|
@@ -1694,13 +1702,13 @@ class kraken(Exchange, ImplicitAPI):
|
|
1694
1702
|
'lastTradeTimestamp': None,
|
1695
1703
|
'status': status,
|
1696
1704
|
'symbol': symbol,
|
1697
|
-
'type':
|
1705
|
+
'type': finalType,
|
1698
1706
|
'timeInForce': None,
|
1699
1707
|
'postOnly': isPostOnly,
|
1700
1708
|
'side': side,
|
1701
1709
|
'price': price,
|
1702
|
-
'stopPrice':
|
1703
|
-
'triggerPrice':
|
1710
|
+
'stopPrice': triggerPrice,
|
1711
|
+
'triggerPrice': triggerPrice,
|
1704
1712
|
'takeProfitPrice': takeProfitPrice,
|
1705
1713
|
'stopLossPrice': stopLossPrice,
|
1706
1714
|
'cost': None,
|
@@ -1443,6 +1443,7 @@ class wavesexchange(Exchange, ImplicitAPI):
|
|
1443
1443
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
1444
1444
|
"""
|
1445
1445
|
fetches information on an order made by the user
|
1446
|
+
:see: https://matcher.waves.exchange/api-docs/index.html#/status/getOrderStatusByPKAndIdWithSig
|
1446
1447
|
:param str symbol: unified symbol of the market the order was made in
|
1447
1448
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1448
1449
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
ccxt/base/exchange.py
CHANGED
ccxt/binance.py
CHANGED
@@ -973,6 +973,9 @@ class binance(Exchange, ImplicitAPI):
|
|
973
973
|
'mmp': 1,
|
974
974
|
'countdownCancelAll': 1,
|
975
975
|
'order': 1,
|
976
|
+
'block/order/orders': 5,
|
977
|
+
'block/order/execute': 5,
|
978
|
+
'block/user-trades': 5,
|
976
979
|
},
|
977
980
|
'post': {
|
978
981
|
'order': 1,
|
@@ -982,9 +985,12 @@ class binance(Exchange, ImplicitAPI):
|
|
982
985
|
'mmpReset': 1,
|
983
986
|
'countdownCancelAll': 1,
|
984
987
|
'countdownCancelAllHeartBeat': 10,
|
988
|
+
'block/order/create': 5,
|
989
|
+
'block/order/execute': 5,
|
985
990
|
},
|
986
991
|
'put': {
|
987
992
|
'listenKey': 1,
|
993
|
+
'block/order/create': 5,
|
988
994
|
},
|
989
995
|
'delete': {
|
990
996
|
'order': 1,
|
@@ -992,6 +998,7 @@ class binance(Exchange, ImplicitAPI):
|
|
992
998
|
'allOpenOrders': 1,
|
993
999
|
'allOpenOrdersByUnderlying': 1,
|
994
1000
|
'listenKey': 1,
|
1001
|
+
'block/order/create': 5,
|
995
1002
|
},
|
996
1003
|
},
|
997
1004
|
'public': {
|
ccxt/kraken.py
CHANGED
@@ -1436,7 +1436,7 @@ class kraken(Exchange, ImplicitAPI):
|
|
1436
1436
|
# {
|
1437
1437
|
# "error": [],
|
1438
1438
|
# "result": {
|
1439
|
-
# "descr": {order: 'buy 0.02100000 ETHUSDT @ limit 330.00'},
|
1439
|
+
# "descr": {order: 'buy 0.02100000 ETHUSDT @ limit 330.00'}, # see more examples in "parseOrder"
|
1440
1440
|
# "txid": ['OEKVV2-IH52O-TPL6GZ']
|
1441
1441
|
# }
|
1442
1442
|
# }
|
@@ -1496,9 +1496,10 @@ class kraken(Exchange, ImplicitAPI):
|
|
1496
1496
|
|
1497
1497
|
def parse_order_type(self, status):
|
1498
1498
|
statuses: dict = {
|
1499
|
+
# we dont add "space" delimited orders here(eg. stop loss) because they need separate parsing
|
1499
1500
|
'take-profit': 'market',
|
1500
|
-
'stop-loss-limit': 'limit',
|
1501
1501
|
'stop-loss': 'market',
|
1502
|
+
'stop-loss-limit': 'limit',
|
1502
1503
|
'take-profit-limit': 'limit',
|
1503
1504
|
'trailing-stop-limit': 'limit',
|
1504
1505
|
}
|
@@ -1506,30 +1507,19 @@ class kraken(Exchange, ImplicitAPI):
|
|
1506
1507
|
|
1507
1508
|
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1508
1509
|
#
|
1509
|
-
# createOrder
|
1510
|
+
# createOrder
|
1510
1511
|
#
|
1511
1512
|
# {
|
1512
|
-
# "descr": {
|
1513
|
+
# "descr": {
|
1514
|
+
# "order": "buy 0.02100000 ETHUSDT @ limit 330.00" # limit orders
|
1515
|
+
# "buy 0.12345678 ETHUSDT @ market" # market order
|
1516
|
+
# "sell 0.28002676 ETHUSDT @ stop loss 0.0123 -> limit 0.0.1222" # stop order
|
1517
|
+
# "sell 0.00100000 ETHUSDT @ stop loss 2677.00 -> limit 2577.00 with 5:1 leverage"
|
1518
|
+
# "buy 0.10000000 LTCUSDT @ take profit 75.00000 -> limit 74.00000"
|
1519
|
+
# "sell 10.00000000 XRPEUR @ trailing stop +50.0000%" # trailing stop
|
1520
|
+
# },
|
1513
1521
|
# "txid": ['OEKVV2-IH52O-TPL6GZ']
|
1514
1522
|
# }
|
1515
|
-
# {
|
1516
|
-
# "txid": ["TX_ID_HERE"],
|
1517
|
-
# "descr": {"order":"buy 0.12345678 ETHEUR @ market"},
|
1518
|
-
# }
|
1519
|
-
#
|
1520
|
-
#
|
1521
|
-
# createOrder for stop orders
|
1522
|
-
#
|
1523
|
-
# {
|
1524
|
-
# "txid":["OSILNC-VQI5Q-775ZDQ"],
|
1525
|
-
# "descr":{"order":"sell 167.28002676 ADAXBT @ stop loss 0.00003280 -> limit 0.00003212"}
|
1526
|
-
# }
|
1527
|
-
#
|
1528
|
-
#
|
1529
|
-
# {
|
1530
|
-
# "txid":["OVHMJV-BZW2V-6NZFWF"],
|
1531
|
-
# "descr":{"order":"sell 0.00100000 ETHUSD @ stop loss 2677.00 -> limit 2577.00 with 5:1 leverage"}
|
1532
|
-
# }
|
1533
1523
|
#
|
1534
1524
|
# editOrder
|
1535
1525
|
#
|
@@ -1607,24 +1597,29 @@ class kraken(Exchange, ImplicitAPI):
|
|
1607
1597
|
else:
|
1608
1598
|
orderDescription = self.safe_string(order, 'descr')
|
1609
1599
|
side = None
|
1610
|
-
|
1600
|
+
rawType = None
|
1611
1601
|
marketId = None
|
1612
1602
|
price = None
|
1613
1603
|
amount = None
|
1614
|
-
|
1604
|
+
triggerPrice = None
|
1615
1605
|
if orderDescription is not None:
|
1616
1606
|
parts = orderDescription.split(' ')
|
1617
1607
|
side = self.safe_string(parts, 0)
|
1618
1608
|
amount = self.safe_string(parts, 1)
|
1619
1609
|
marketId = self.safe_string(parts, 2)
|
1620
|
-
|
1621
|
-
|
1622
|
-
|
1610
|
+
part4 = self.safe_string(parts, 4)
|
1611
|
+
part5 = self.safe_string(parts, 5)
|
1612
|
+
if part4 == 'limit' or part4 == 'market':
|
1613
|
+
rawType = part4 # eg, limit, market
|
1614
|
+
else:
|
1615
|
+
rawType = part4 + ' ' + part5 # eg. stop loss, take profit, trailing stop
|
1616
|
+
if rawType == 'stop loss' or rawType == 'take profit':
|
1617
|
+
triggerPrice = self.safe_string(parts, 6)
|
1623
1618
|
price = self.safe_string(parts, 9)
|
1624
|
-
elif
|
1619
|
+
elif rawType == 'limit':
|
1625
1620
|
price = self.safe_string(parts, 5)
|
1626
1621
|
side = self.safe_string(description, 'type', side)
|
1627
|
-
|
1622
|
+
rawType = self.safe_string(description, 'ordertype', rawType) # orderType has dash, e.g. trailing-stop
|
1628
1623
|
marketId = self.safe_string(description, 'pair', marketId)
|
1629
1624
|
foundMarket = self.find_market_by_altname_or_id(marketId)
|
1630
1625
|
symbol = None
|
@@ -1676,15 +1671,28 @@ class kraken(Exchange, ImplicitAPI):
|
|
1676
1671
|
trades.append(self.safe_trade({'id': rawTrade, 'orderId': id, 'symbol': symbol, 'info': {}}))
|
1677
1672
|
else:
|
1678
1673
|
trades.append(rawTrade)
|
1679
|
-
|
1674
|
+
# in #24192 PR, self field is not something consistent/actual
|
1675
|
+
# triggerPrice = self.omit_zero(self.safe_string(order, 'stopprice', triggerPrice))
|
1680
1676
|
stopLossPrice = None
|
1681
1677
|
takeProfitPrice = None
|
1682
|
-
|
1678
|
+
# the dashed strings are not provided from fields(eg. fetch order)
|
1679
|
+
# while spaced strings from "order" sentence(when other fields not available)
|
1680
|
+
if rawType.startswith('take-profit'):
|
1683
1681
|
takeProfitPrice = self.safe_string(description, 'price')
|
1684
1682
|
price = self.omit_zero(self.safe_string(description, 'price2'))
|
1685
|
-
elif
|
1683
|
+
elif rawType.startswith('stop-loss'):
|
1686
1684
|
stopLossPrice = self.safe_string(description, 'price')
|
1687
1685
|
price = self.omit_zero(self.safe_string(description, 'price2'))
|
1686
|
+
elif rawType == 'take profit':
|
1687
|
+
takeProfitPrice = triggerPrice
|
1688
|
+
elif rawType == 'stop loss':
|
1689
|
+
stopLossPrice = triggerPrice
|
1690
|
+
finalType = self.parse_order_type(rawType)
|
1691
|
+
# unlike from endpoints which provide eg: "take-profit-limit"
|
1692
|
+
# for "space-delimited" orders we dont have market/limit suffixes, their format is
|
1693
|
+
# eg: `stop loss > limit 123`, so we need to parse them manually
|
1694
|
+
if self.in_array(finalType, ['stop loss', 'take profit']):
|
1695
|
+
finalType = 'market' if (price is None) else 'limit'
|
1688
1696
|
return self.safe_order({
|
1689
1697
|
'id': id,
|
1690
1698
|
'clientOrderId': clientOrderId,
|
@@ -1694,13 +1702,13 @@ class kraken(Exchange, ImplicitAPI):
|
|
1694
1702
|
'lastTradeTimestamp': None,
|
1695
1703
|
'status': status,
|
1696
1704
|
'symbol': symbol,
|
1697
|
-
'type':
|
1705
|
+
'type': finalType,
|
1698
1706
|
'timeInForce': None,
|
1699
1707
|
'postOnly': isPostOnly,
|
1700
1708
|
'side': side,
|
1701
1709
|
'price': price,
|
1702
|
-
'stopPrice':
|
1703
|
-
'triggerPrice':
|
1710
|
+
'stopPrice': triggerPrice,
|
1711
|
+
'triggerPrice': triggerPrice,
|
1704
1712
|
'takeProfitPrice': takeProfitPrice,
|
1705
1713
|
'stopLossPrice': stopLossPrice,
|
1706
1714
|
'cost': None,
|
ccxt/pro/__init__.py
CHANGED
ccxt/pro/binance.py
CHANGED
@@ -3410,11 +3410,6 @@ class binance(ccxt.async_support.binance):
|
|
3410
3410
|
if not self.is_empty(symbols):
|
3411
3411
|
market = self.get_market_from_symbols(symbols)
|
3412
3412
|
messageHash = '::' + ','.join(symbols)
|
3413
|
-
marketTypeObject: dict = {}
|
3414
|
-
if market is not None:
|
3415
|
-
marketTypeObject['type'] = market['type']
|
3416
|
-
marketTypeObject['subType'] = market['subType']
|
3417
|
-
await self.authenticate(self.extend(marketTypeObject, params))
|
3418
3413
|
type = None
|
3419
3414
|
type, params = self.handle_market_type_and_params('watchPositions', market, params)
|
3420
3415
|
if type == 'spot' or type == 'margin':
|
@@ -3425,6 +3420,10 @@ class binance(ccxt.async_support.binance):
|
|
3425
3420
|
type = 'future'
|
3426
3421
|
elif self.isInverse(type, subType):
|
3427
3422
|
type = 'delivery'
|
3423
|
+
marketTypeObject: dict = {}
|
3424
|
+
marketTypeObject['type'] = type
|
3425
|
+
marketTypeObject['subType'] = subType
|
3426
|
+
await self.authenticate(self.extend(marketTypeObject, params))
|
3428
3427
|
messageHash = type + ':positions' + messageHash
|
3429
3428
|
isPortfolioMargin = None
|
3430
3429
|
isPortfolioMargin, params = self.handle_option_and_params_2(params, 'watchPositions', 'papi', 'portfolioMargin', False)
|
ccxt/wavesexchange.py
CHANGED
@@ -1442,6 +1442,7 @@ class wavesexchange(Exchange, ImplicitAPI):
|
|
1442
1442
|
def fetch_order(self, id: str, symbol: Str = None, params={}):
|
1443
1443
|
"""
|
1444
1444
|
fetches information on an order made by the user
|
1445
|
+
:see: https://matcher.waves.exchange/api-docs/index.html#/status/getOrderStatusByPKAndIdWithSig
|
1445
1446
|
:param str symbol: unified symbol of the market the order was made in
|
1446
1447
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1447
1448
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ccxt
|
3
|
-
Version: 4.4.
|
3
|
+
Version: 4.4.28
|
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
|
@@ -273,13 +273,13 @@ console.log(version, Object.keys(exchanges));
|
|
273
273
|
|
274
274
|
All-in-one browser bundle (dependencies included), served from a CDN of your choice:
|
275
275
|
|
276
|
-
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.
|
277
|
-
* unpkg: https://unpkg.com/ccxt@4.4.
|
276
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.28/dist/ccxt.browser.min.js
|
277
|
+
* unpkg: https://unpkg.com/ccxt@4.4.28/dist/ccxt.browser.min.js
|
278
278
|
|
279
279
|
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.
|
280
280
|
|
281
281
|
```HTML
|
282
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.
|
282
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.28/dist/ccxt.browser.min.js"></script>
|
283
283
|
```
|
284
284
|
|
285
285
|
Creates a global `ccxt` object:
|
@@ -1,10 +1,10 @@
|
|
1
|
-
ccxt/__init__.py,sha256=
|
1
|
+
ccxt/__init__.py,sha256=m1FFD2XTiPWujL_H7wux5dgcaeUbt-2BZn6R3JuoBjg,16586
|
2
2
|
ccxt/ace.py,sha256=v7aDhXSxYH0Pk76RiuYERYyiApQTmNumxnHCl1gRI80,42398
|
3
|
-
ccxt/alpaca.py,sha256=
|
3
|
+
ccxt/alpaca.py,sha256=uMwc5pHi3uZ9C8P6urK1JFhXLxxccJGHeAxrR65NBrY,66538
|
4
4
|
ccxt/ascendex.py,sha256=no-JhCEx-fQjLiQYHJWkgzqHL7d5WtGYyc1clTMQQVM,151655
|
5
5
|
ccxt/bequant.py,sha256=XePxHZlKFJ-2FwVR9hIpdM-Ng9-ZnIhTjemMnap7H0Q,1154
|
6
6
|
ccxt/bigone.py,sha256=FazMyFHol45Bu9p0bY3CpMIz_SYkf_kk5GStt4UNRiY,91369
|
7
|
-
ccxt/binance.py,sha256=
|
7
|
+
ccxt/binance.py,sha256=pkLESy_086BPc6WCKeFossKH3Y0RR2Cr_0cUP2rUqeQ,661929
|
8
8
|
ccxt/binancecoinm.py,sha256=2nFh2PcLqhqQK1uuQjsZa0eFkP-ew3liJ01ctdHcCd4,1681
|
9
9
|
ccxt/binanceus.py,sha256=IT0iDdiWKzRu2ZCUB56YGfaHxCuFEEV4xi40Tp6Emxc,9182
|
10
10
|
ccxt/binanceusdm.py,sha256=yoCcFvGD4MFYkShMpArxk_eLm8RR2ugyYHLk5e2AV08,2611
|
@@ -71,7 +71,7 @@ ccxt/hyperliquid.py,sha256=eZwjW4Yniel1XnnH9ANVMmNQzXCU_KKaKP5Q8gTIXPM,124612
|
|
71
71
|
ccxt/idex.py,sha256=2yiYt-w39o3gQs3-byp83GQYSD4DSlZTN1Ixieettt0,73307
|
72
72
|
ccxt/independentreserve.py,sha256=q8wUCbDnhxc_JiOTS7xcGsLp_EdmZTMe3QvLVB6oB-0,37899
|
73
73
|
ccxt/indodax.py,sha256=QPH7sQzhqOFwq6g_xCAMcgnrpVVRl49zf_uolywxuX8,54798
|
74
|
-
ccxt/kraken.py,sha256=
|
74
|
+
ccxt/kraken.py,sha256=kiPbHz6XQYsx22uNQDZVpxhOYhYeJwYS7AgVkX6wI84,137132
|
75
75
|
ccxt/krakenfutures.py,sha256=dbreVGrjMD7AY6xai0eazuvnUpTXTD7wLDVT9VDD5Qk,119839
|
76
76
|
ccxt/kucoin.py,sha256=MIwREJHgbZd_l5hfexCmibSj2aIe9LsWmHJMxuaYLFg,229641
|
77
77
|
ccxt/kucoinfutures.py,sha256=I6cladqgxS2lUfcxBPgt8wrbzF7DQjAFnTJJVe4eIFM,139433
|
@@ -101,7 +101,7 @@ ccxt/tokocrypto.py,sha256=Lrw_ZKl9S_XbwapC85rrruHXOvoxFq_-ZKbHEBaGMEo,123226
|
|
101
101
|
ccxt/tradeogre.py,sha256=YoSQQl4jHI2JJShR0k_liI0dCntDdnHDqZmc5a-y7-w,24168
|
102
102
|
ccxt/upbit.py,sha256=JXHH1lG8QCWr7C_E3SWaEaIrk_rpF6NwYDEjcYGHcKE,85546
|
103
103
|
ccxt/vertex.py,sha256=Noyl-spEMawfHqjAboVhDTAya4wrYvDxArY9PU8JKcM,122182
|
104
|
-
ccxt/wavesexchange.py,sha256=
|
104
|
+
ccxt/wavesexchange.py,sha256=nW4A9P-rk_9Dpdf87FCOkGRuCoykTrFiNWwXvryWoho,115712
|
105
105
|
ccxt/wazirx.py,sha256=aNKxEFog4dwFfl9Vwoqn8ta6EfpYwzgLo_CsfRDLKdc,53350
|
106
106
|
ccxt/whitebit.py,sha256=sJj75AG4XYT0hAJFfMe3J_GPsq58UGJ3p8C0wgc5bo8,119634
|
107
107
|
ccxt/woo.py,sha256=oWI8fSNqjASn28rxa2BjQMylxv0GTVQQQh4znYDsDrc,155425
|
@@ -116,10 +116,10 @@ ccxt/abstract/alpaca.py,sha256=1hWhEz1azaNZuSPR1bArGibJ2bB_ilAna7nXDpKtd6k,10797
|
|
116
116
|
ccxt/abstract/ascendex.py,sha256=5A8Zgq77jsdHlEzlTW_2nDybUUVfNVVOu6BgY3TWqRM,11394
|
117
117
|
ccxt/abstract/bequant.py,sha256=OTBtNu3DQeAqAC_Lbi0NePUs-ZQQllcLrVDI2G04nwQ,15601
|
118
118
|
ccxt/abstract/bigone.py,sha256=ChHXrnz1zHqLHJn162SxjfgbO8ocQppy7lXWGsHEtcI,4887
|
119
|
-
ccxt/abstract/binance.py,sha256=
|
120
|
-
ccxt/abstract/binancecoinm.py,sha256=
|
121
|
-
ccxt/abstract/binanceus.py,sha256=
|
122
|
-
ccxt/abstract/binanceusdm.py,sha256=
|
119
|
+
ccxt/abstract/binance.py,sha256=0AP-GY4ojGONFvV5Ge9-s4dDaNj8ZjmvSNVXi2RjCBE,97957
|
120
|
+
ccxt/abstract/binancecoinm.py,sha256=0AP-GY4ojGONFvV5Ge9-s4dDaNj8ZjmvSNVXi2RjCBE,97957
|
121
|
+
ccxt/abstract/binanceus.py,sha256=hKYY9Zc-xLZ-989OjHcq7BddotH3Ew3ZFnYViANW3rs,104619
|
122
|
+
ccxt/abstract/binanceusdm.py,sha256=0AP-GY4ojGONFvV5Ge9-s4dDaNj8ZjmvSNVXi2RjCBE,97957
|
123
123
|
ccxt/abstract/bingx.py,sha256=EdmgcZNDZsycMzn8dbE-aRc-n3i2l_BtdKcYqxwtKA4,20830
|
124
124
|
ccxt/abstract/bit2c.py,sha256=np6i756kSB5dO3Nj6POLKxkWkpYcsGg-4LS8BwPrizI,2830
|
125
125
|
ccxt/abstract/bitbank.py,sha256=hrHsD7Uvtyy2o2lzCHau3-eNq16pnZ3-YDQ6Tq_sxYU,2735
|
@@ -220,13 +220,13 @@ ccxt/abstract/xt.py,sha256=JkWvsic3L2O968BCr9H5Wd5NIbRE9aTT2A-9WbAtl0c,27146
|
|
220
220
|
ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
|
221
221
|
ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
|
222
222
|
ccxt/abstract/zonda.py,sha256=X-hCW0SdX3YKZWixDyW-O2211M58Rno8kKJ6quY7rw4,7183
|
223
|
-
ccxt/async_support/__init__.py,sha256=
|
223
|
+
ccxt/async_support/__init__.py,sha256=hyLK6Hz5vrcRtiU_rgt0fsxHtCeN2WuhXmcqPfO4snA,16399
|
224
224
|
ccxt/async_support/ace.py,sha256=zHojiir0FfcIUH7JzyCW2lQeBqMIlDCKS_BmwC0buxc,42622
|
225
|
-
ccxt/async_support/alpaca.py,sha256=
|
225
|
+
ccxt/async_support/alpaca.py,sha256=kXpQdiqlnZEC6xASULArdOSONGuggOKTOk76nknY0jE,66894
|
226
226
|
ccxt/async_support/ascendex.py,sha256=srOTDYSWlKLd1p_RyIp0E4gZf1zcIDsn308tnqvG0mM,152468
|
227
227
|
ccxt/async_support/bequant.py,sha256=bSsnySbxWEjgt-yH1HtyLfky1ypFpb_xKHf52Ru9h5I,1168
|
228
228
|
ccxt/async_support/bigone.py,sha256=1vG3J6By9iv7ZDA1ar2zeG8bED4q-KI3RqUogpsdwvY,91823
|
229
|
-
ccxt/async_support/binance.py,sha256=
|
229
|
+
ccxt/async_support/binance.py,sha256=yKP2IrqXcVK6S9zsw2GUwimoVKGcZtYGAxs5UOIglx0,664782
|
230
230
|
ccxt/async_support/binancecoinm.py,sha256=9ICnDf1wzSr_SN8HXdjIoheiNmP6isQ8yHT-8a4yQ3Y,1719
|
231
231
|
ccxt/async_support/binanceus.py,sha256=OnMcoIPXyNos7x3Lqerc0wmfPHsGYn7d6nF7tPEscu4,9196
|
232
232
|
ccxt/async_support/binanceusdm.py,sha256=dEN2QxzfmfrQELFE_B8E5sLywnpogUq3R73jENVQMu0,2649
|
@@ -293,7 +293,7 @@ ccxt/async_support/hyperliquid.py,sha256=d6NpQjIScaAnK9pP_n5Z0tiHui5Oh-TUPDQYSe8
|
|
293
293
|
ccxt/async_support/idex.py,sha256=kZiSqurgNeXRJC5CQmc_wyIMXn-6c1oL4lJL1PW1l8U,73783
|
294
294
|
ccxt/async_support/independentreserve.py,sha256=3gzNdxXGdCm5JqGjE1vG6kTSsW2PWvCPE2xBgvqPW6s,38197
|
295
295
|
ccxt/async_support/indodax.py,sha256=_7AbcJJmBSPMQ1E-mqOoQJXTjIXldItRMDFCdwhvFuA,55106
|
296
|
-
ccxt/async_support/kraken.py,sha256=
|
296
|
+
ccxt/async_support/kraken.py,sha256=TW6AndqTeLBxwhc4Apg4UnCpwx2tM-Imffy5rKLOdK8,137788
|
297
297
|
ccxt/async_support/krakenfutures.py,sha256=Wcry7ar4Esbi_3Urp8LcnzPMsThN6KcdU6QN5YMxDCk,120327
|
298
298
|
ccxt/async_support/kucoin.py,sha256=b9wO_v_ZoXspkdKfQ6KfBYReJ6_2kpvAYBvnzLot0u0,230802
|
299
299
|
ccxt/async_support/kucoinfutures.py,sha256=nFgYl7bvdmlFW8KYwD1sR6pOVDQSUMwc1hjkR3R4qVI,140215
|
@@ -323,7 +323,7 @@ ccxt/async_support/tokocrypto.py,sha256=wHqN41XmrFlmy1CpNvb0yZnZvF8WQAZQ98wtwMHa
|
|
323
323
|
ccxt/async_support/tradeogre.py,sha256=2WdZ9y6osj4usU2aF0Go7LzHyVb6MPRMk6p9uJoyjE0,24362
|
324
324
|
ccxt/async_support/upbit.py,sha256=T1UUNP7VyzOZPheoxOnC5f6U_stotJAU_xQczyNrW6c,86028
|
325
325
|
ccxt/async_support/vertex.py,sha256=L3SmnNn1YErT00VE--AWbLUjm7ZobPxgUmrO1dMViwU,122682
|
326
|
-
ccxt/async_support/wavesexchange.py,sha256=
|
326
|
+
ccxt/async_support/wavesexchange.py,sha256=T9QgPFHKMYVQpBc26b91p7HWE7He4h67EW-6ExWn-u0,116262
|
327
327
|
ccxt/async_support/wazirx.py,sha256=ZHahzytYKnpjbqz4BRT8cLngExQ8SChcdajdYHzqGE0,53652
|
328
328
|
ccxt/async_support/whitebit.py,sha256=Wcwr9ksj07DidTTo0D2olNwgJCJC_g2qEaqwJRx7VN8,120284
|
329
329
|
ccxt/async_support/woo.py,sha256=HAIt2USqBNNq4LnYpLjrYpYpxYZvHfFjSC0WeVaY4BA,156405
|
@@ -333,7 +333,7 @@ ccxt/async_support/yobit.py,sha256=gMA6Fy7hbcF6ztNBbuow_pW6cwui5n2TWE8RRKMmls0,5
|
|
333
333
|
ccxt/async_support/zaif.py,sha256=-ZTr8M2JaIRCL90VrbCDXBMAsZwbiwsFChSQ2rWODuQ,29044
|
334
334
|
ccxt/async_support/zonda.py,sha256=Z4gA6o0bF_4MarQ5KiR2Zwi2wpmOuZTHS1JChAtNWjo,83114
|
335
335
|
ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
|
336
|
-
ccxt/async_support/base/exchange.py,sha256=
|
336
|
+
ccxt/async_support/base/exchange.py,sha256=Y0K7lw9N9SojRyXUgj-DVbsj0QV26oFQVn_Bj-AjKXU,115225
|
337
337
|
ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
|
338
338
|
ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
|
339
339
|
ccxt/async_support/base/ws/aiohttp_client.py,sha256=5IEiT0elWI9a7Vr-KV0jgmlbpLJWBzIlrLaCkTKGaqY,5752
|
@@ -347,14 +347,14 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GhnGUt78pJ-AYL_Dq9produGjmB
|
|
347
347
|
ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
|
348
348
|
ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
|
349
349
|
ccxt/base/errors.py,sha256=Pad-6ugvGUwhoYuKUliX-N7FTrcnKCQGFjsaq2tMn0I,4610
|
350
|
-
ccxt/base/exchange.py,sha256=
|
350
|
+
ccxt/base/exchange.py,sha256=yKu30cJRPiQrOcVrpQAjBDKU_K3bXZN8XL53aEuMe-o,304787
|
351
351
|
ccxt/base/precise.py,sha256=koce64Yrp6vFbGijJtUt-QQ6XhJgeGTCksZ871FPp_A,8886
|
352
352
|
ccxt/base/types.py,sha256=qB1o7NbC0Pg4Unmw26pDF5NNreZodEMHtCFQdqpvPJ8,10472
|
353
|
-
ccxt/pro/__init__.py,sha256=
|
353
|
+
ccxt/pro/__init__.py,sha256=Y2pzqUvYAMp5XNQmRG2eZrNXIPeQ5pD4L9Lxrdk-7DQ,7925
|
354
354
|
ccxt/pro/alpaca.py,sha256=xh1yg1Ok-Zh_Mfx-MBjNrfJDs6MUU0exFfEj3GuQPC4,27631
|
355
355
|
ccxt/pro/ascendex.py,sha256=QueLgISoIxgGSOta2W7En4pwAsEXbTP5q5ef4UjpTQQ,37524
|
356
356
|
ccxt/pro/bequant.py,sha256=33OEUWBi4D9-2w8CmkwN3aF1qS-AlLqX3pxrWwNbXPY,1552
|
357
|
-
ccxt/pro/binance.py,sha256=
|
357
|
+
ccxt/pro/binance.py,sha256=pew-WuqewaM8jlOASPjZm6iVu4Mf15q6rPnYZ0F3EF4,200313
|
358
358
|
ccxt/pro/binancecoinm.py,sha256=LlgF4rXHHrsQMaklhTEzSiE6U9V25AjHHg_DRat7Mf0,1036
|
359
359
|
ccxt/pro/binanceus.py,sha256=lcRxvQSJ5sJCx1FqzDI9PVOg_vvpFwwlZs4_8QkoPJ0,1995
|
360
360
|
ccxt/pro/binanceusdm.py,sha256=lLdOv0d-lM-1wfCc_y_POb6GdmVIiX7PFzmKTWsVyNw,1512
|
@@ -655,8 +655,8 @@ ccxt/test/tests_async.py,sha256=8TdpWiswLAVMF85CVBfMRqt8lFByr1Su7w5IgZ_w72w,8620
|
|
655
655
|
ccxt/test/tests_helpers.py,sha256=2MuN95nTNGgQ5fuk5NAJZxL_8ArphcDhIbcUjjazZn8,9854
|
656
656
|
ccxt/test/tests_init.py,sha256=GodMIrJue4KBHHqD4vSPZxokPWpxbZIuEp19UdxlFAg,1166
|
657
657
|
ccxt/test/tests_sync.py,sha256=EEc20Cjl7u-EJ6S-lR0VXJmjpX1ew-oRS7uYceVxQ4A,85249
|
658
|
-
ccxt-4.4.
|
659
|
-
ccxt-4.4.
|
660
|
-
ccxt-4.4.
|
661
|
-
ccxt-4.4.
|
662
|
-
ccxt-4.4.
|
658
|
+
ccxt-4.4.28.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
|
659
|
+
ccxt-4.4.28.dist-info/METADATA,sha256=J8qJIKhSdDuvqQ5neCHX-1NvcC4uCzlR9ZIzIZp5w7c,114509
|
660
|
+
ccxt-4.4.28.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
|
661
|
+
ccxt-4.4.28.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
|
662
|
+
ccxt-4.4.28.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|