ccxt 4.4.82__py2.py3-none-any.whl → 4.4.86__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 +3 -9
- ccxt/abstract/blofin.py +8 -0
- ccxt/abstract/btcbox.py +1 -0
- ccxt/abstract/myokx.py +2 -0
- ccxt/abstract/okx.py +2 -0
- ccxt/apex.py +2 -1
- ccxt/ascendex.py +187 -151
- ccxt/async_support/__init__.py +3 -9
- ccxt/async_support/apex.py +2 -1
- ccxt/async_support/ascendex.py +187 -151
- ccxt/async_support/base/exchange.py +51 -24
- ccxt/async_support/base/ws/cache.py +6 -1
- ccxt/async_support/bequant.py +1 -1
- ccxt/async_support/bitget.py +5 -6
- ccxt/async_support/bitmart.py +1 -1
- ccxt/async_support/bitrue.py +14 -32
- ccxt/async_support/bitso.py +33 -0
- ccxt/async_support/bitstamp.py +33 -0
- ccxt/async_support/{huobijp.py → bittrade.py} +11 -11
- ccxt/async_support/blofin.py +145 -14
- ccxt/async_support/btcbox.py +25 -5
- ccxt/async_support/bybit.py +16 -37
- ccxt/async_support/cex.py +2 -4
- ccxt/async_support/coinbase.py +58 -47
- ccxt/async_support/coinbaseexchange.py +141 -32
- ccxt/async_support/coincatch.py +14 -67
- ccxt/async_support/coinex.py +28 -29
- ccxt/async_support/coinlist.py +17 -16
- ccxt/async_support/coinmetro.py +20 -11
- ccxt/async_support/coinone.py +8 -10
- ccxt/async_support/coinsph.py +124 -2
- ccxt/async_support/cryptocom.py +109 -2
- ccxt/async_support/cryptomus.py +42 -80
- ccxt/async_support/delta.py +75 -36
- ccxt/async_support/deribit.py +4 -5
- ccxt/async_support/derive.py +46 -10
- ccxt/async_support/ellipx.py +175 -77
- ccxt/async_support/gate.py +1 -1
- ccxt/async_support/gemini.py +3 -4
- ccxt/async_support/hitbtc.py +56 -65
- ccxt/async_support/hollaex.py +106 -49
- ccxt/async_support/htx.py +20 -43
- ccxt/async_support/hyperliquid.py +6 -6
- ccxt/async_support/kraken.py +27 -23
- ccxt/async_support/kucoinfutures.py +5 -0
- ccxt/async_support/lbank.py +1 -1
- ccxt/async_support/mexc.py +2 -2
- ccxt/async_support/ndax.py +25 -24
- ccxt/async_support/okcoin.py +12 -29
- ccxt/async_support/okx.py +9 -0
- ccxt/async_support/onetrading.py +10 -7
- ccxt/async_support/oxfun.py +40 -110
- ccxt/async_support/paradex.py +123 -4
- ccxt/base/exchange.py +21 -2
- ccxt/base/types.py +3 -0
- ccxt/bequant.py +1 -1
- ccxt/bitget.py +5 -6
- ccxt/bitmart.py +1 -1
- ccxt/bitrue.py +14 -32
- ccxt/bitso.py +33 -0
- ccxt/bitstamp.py +33 -0
- ccxt/{huobijp.py → bittrade.py} +11 -11
- ccxt/blofin.py +145 -14
- ccxt/btcbox.py +24 -5
- ccxt/bybit.py +16 -37
- ccxt/cex.py +2 -4
- ccxt/coinbase.py +58 -47
- ccxt/coinbaseexchange.py +141 -32
- ccxt/coincatch.py +14 -67
- ccxt/coinex.py +28 -29
- ccxt/coinlist.py +17 -16
- ccxt/coinmetro.py +20 -11
- ccxt/coinone.py +8 -10
- ccxt/coinsph.py +124 -2
- ccxt/cryptocom.py +109 -2
- ccxt/cryptomus.py +42 -80
- ccxt/delta.py +75 -36
- ccxt/deribit.py +4 -5
- ccxt/derive.py +46 -10
- ccxt/ellipx.py +175 -77
- ccxt/gate.py +1 -1
- ccxt/gemini.py +3 -4
- ccxt/hitbtc.py +56 -65
- ccxt/hollaex.py +106 -49
- ccxt/htx.py +20 -43
- ccxt/hyperliquid.py +6 -6
- ccxt/kraken.py +27 -23
- ccxt/kucoinfutures.py +5 -0
- ccxt/lbank.py +1 -1
- ccxt/mexc.py +2 -2
- ccxt/ndax.py +25 -24
- ccxt/okcoin.py +12 -29
- ccxt/okx.py +9 -0
- ccxt/onetrading.py +10 -7
- ccxt/oxfun.py +40 -110
- ccxt/paradex.py +123 -4
- ccxt/pro/__init__.py +109 -5
- ccxt/pro/binance.py +32 -33
- ccxt/pro/bithumb.py +5 -3
- ccxt/pro/{huobijp.py → bittrade.py} +3 -3
- ccxt/pro/kraken.py +249 -79
- ccxt/pro/luno.py +6 -5
- ccxt/pro/mexc.py +254 -7
- ccxt/pro/poloniex.py +6 -2
- {ccxt-4.4.82.dist-info → ccxt-4.4.86.dist-info}/METADATA +8 -11
- {ccxt-4.4.82.dist-info → ccxt-4.4.86.dist-info}/RECORD +110 -121
- ccxt/abstract/bl3p.py +0 -19
- ccxt/abstract/idex.py +0 -26
- ccxt/abstract/kuna.py +0 -182
- ccxt/async_support/base/ws/fast_client.py +0 -97
- ccxt/async_support/bl3p.py +0 -543
- ccxt/async_support/idex.py +0 -1889
- ccxt/async_support/kuna.py +0 -1935
- ccxt/bl3p.py +0 -543
- ccxt/idex.py +0 -1889
- ccxt/kuna.py +0 -1935
- ccxt/pro/idex.py +0 -687
- /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
- {ccxt-4.4.82.dist-info → ccxt-4.4.86.dist-info}/LICENSE.txt +0 -0
- {ccxt-4.4.82.dist-info → ccxt-4.4.86.dist-info}/WHEEL +0 -0
- {ccxt-4.4.82.dist-info → ccxt-4.4.86.dist-info}/top_level.txt +0 -0
ccxt/hollaex.py
CHANGED
@@ -292,6 +292,14 @@ class hollaex(Exchange, ImplicitAPI):
|
|
292
292
|
'BNB': 'bnb',
|
293
293
|
'MATIC': 'matic',
|
294
294
|
},
|
295
|
+
'networksById': {
|
296
|
+
'eth': 'ERC20',
|
297
|
+
'ETH': 'ERC20',
|
298
|
+
'ERC20': 'ERC20',
|
299
|
+
'trx': 'TRC20',
|
300
|
+
'TRX': 'TRC20',
|
301
|
+
'TRC20': 'TRC20',
|
302
|
+
},
|
295
303
|
},
|
296
304
|
})
|
297
305
|
|
@@ -421,66 +429,115 @@ class hollaex(Exchange, ImplicitAPI):
|
|
421
429
|
"""
|
422
430
|
response = self.publicGetConstants(params)
|
423
431
|
#
|
424
|
-
#
|
425
|
-
#
|
426
|
-
#
|
427
|
-
#
|
428
|
-
#
|
429
|
-
#
|
430
|
-
#
|
431
|
-
#
|
432
|
-
#
|
433
|
-
#
|
434
|
-
#
|
435
|
-
#
|
436
|
-
#
|
437
|
-
#
|
438
|
-
#
|
439
|
-
#
|
440
|
-
#
|
441
|
-
#
|
442
|
-
#
|
443
|
-
#
|
444
|
-
#
|
445
|
-
#
|
446
|
-
#
|
447
|
-
#
|
448
|
-
#
|
449
|
-
#
|
450
|
-
#
|
451
|
-
#
|
452
|
-
#
|
453
|
-
#
|
432
|
+
# {
|
433
|
+
# "coins": {
|
434
|
+
# "usdt": {
|
435
|
+
# "id": "6",
|
436
|
+
# "fullname": "USD Tether",
|
437
|
+
# "symbol": "usdt",
|
438
|
+
# "active": True,
|
439
|
+
# "verified": True,
|
440
|
+
# "allow_deposit": True,
|
441
|
+
# "allow_withdrawal": True,
|
442
|
+
# "withdrawal_fee": "20",
|
443
|
+
# "min": "1",
|
444
|
+
# "max": "10000000",
|
445
|
+
# "increment_unit": "0.0001",
|
446
|
+
# "logo": "https://hollaex-resources.s3.ap-southeast-1.amazonaws.com/icons/usdt.svg",
|
447
|
+
# "code": "usdt",
|
448
|
+
# "is_public": True,
|
449
|
+
# "meta": {
|
450
|
+
# "color": "#27a17a",
|
451
|
+
# "website": "https://tether.to",
|
452
|
+
# "explorer": "https://blockchair.com/tether",
|
453
|
+
# "decimal_points": "6"
|
454
|
+
# },
|
455
|
+
# "estimated_price": "1",
|
456
|
+
# "description": "<p>Tether(USDT) is a stablecoin pegged 1:1 to the US dollar. It is a digital currency that aims to maintain its value while allowing for fast and secure transfer of funds. It was the first stablecoin, and is the most widely used due stablecoin due to its stability and low volatility compared to other cryptocurrencies. It was launched in 2014 by Tether Limited.</p>",
|
457
|
+
# "type": "blockchain",
|
458
|
+
# "network": "eth,trx,bnb,matic",
|
459
|
+
# "standard": "",
|
460
|
+
# "issuer": "HollaEx",
|
461
|
+
# "withdrawal_fees": {
|
462
|
+
# "bnb": {
|
463
|
+
# "value": "0.8",
|
464
|
+
# "active": True,
|
465
|
+
# "symbol": "usdt"
|
466
|
+
# },
|
467
|
+
# "eth": {
|
468
|
+
# "value": "1.5",
|
469
|
+
# "active": True,
|
470
|
+
# "symbol": "usdt"
|
471
|
+
# },
|
472
|
+
# "trx": {
|
473
|
+
# "value": "4",
|
474
|
+
# "active": True,
|
475
|
+
# "symbol": "usdt"
|
476
|
+
# },
|
477
|
+
# "matic": {
|
478
|
+
# "value": "0.3",
|
479
|
+
# "active": True,
|
480
|
+
# "symbol": "usdt"
|
481
|
+
# }
|
482
|
+
# },
|
483
|
+
# "display_name": null,
|
484
|
+
# "deposit_fees": null,
|
485
|
+
# "is_risky": False,
|
486
|
+
# "market_cap": "144568098696.29",
|
487
|
+
# "category": "stable",
|
488
|
+
# "created_at": "2019-08-09T10:45:43.367Z",
|
489
|
+
# "updated_at": "2025-03-25T17:12:37.970Z",
|
490
|
+
# "created_by": "168",
|
491
|
+
# "owner_id": "1"
|
492
|
+
# },
|
454
493
|
# },
|
455
494
|
# "network":"https://api.hollaex.network"
|
456
495
|
# }
|
457
496
|
#
|
458
|
-
coins = self.
|
497
|
+
coins = self.safe_dict(response, 'coins', {})
|
459
498
|
keys = list(coins.keys())
|
460
499
|
result: dict = {}
|
461
500
|
for i in range(0, len(keys)):
|
462
501
|
key = keys[i]
|
463
502
|
currency = coins[key]
|
464
503
|
id = self.safe_string(currency, 'symbol')
|
465
|
-
numericId = self.safe_integer(currency, 'id')
|
466
504
|
code = self.safe_currency_code(id)
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
505
|
+
withdrawalLimits = self.safe_list(currency, 'withdrawal_limits', [])
|
506
|
+
rawType = self.safe_string(currency, 'type')
|
507
|
+
type = 'crypto' if (rawType == 'blockchain') else 'other'
|
508
|
+
rawNetworks = self.safe_dict(currency, 'withdrawal_fees', {})
|
509
|
+
networks = {}
|
510
|
+
networkIds = list(rawNetworks.keys())
|
511
|
+
for j in range(0, len(networkIds)):
|
512
|
+
networkId = networkIds[j]
|
513
|
+
networkEntry = self.safe_dict(rawNetworks, networkId)
|
514
|
+
networkCode = self.network_id_to_code(networkId)
|
515
|
+
networks[networkCode] = {
|
516
|
+
'id': networkId,
|
517
|
+
'network': networkCode,
|
518
|
+
'active': self.safe_bool(networkEntry, 'active'),
|
519
|
+
'deposit': None,
|
520
|
+
'withdraw': None,
|
521
|
+
'fee': self.safe_number(networkEntry, 'value'),
|
522
|
+
'precision': None,
|
523
|
+
'limits': {
|
524
|
+
'withdraw': {
|
525
|
+
'min': None,
|
526
|
+
'max': None,
|
527
|
+
},
|
528
|
+
},
|
529
|
+
'info': networkEntry,
|
530
|
+
}
|
531
|
+
result[code] = self.safe_currency_structure({
|
475
532
|
'id': id,
|
476
|
-
'numericId':
|
533
|
+
'numericId': self.safe_integer(currency, 'id'),
|
477
534
|
'code': code,
|
478
535
|
'info': currency,
|
479
|
-
'name':
|
480
|
-
'active': active,
|
481
|
-
'deposit':
|
482
|
-
'withdraw':
|
483
|
-
'fee':
|
536
|
+
'name': self.safe_string(currency, 'fullname'),
|
537
|
+
'active': self.safe_bool(currency, 'active'),
|
538
|
+
'deposit': self.safe_bool(currency, 'allow_deposit'),
|
539
|
+
'withdraw': self.safe_bool(currency, 'allow_withdrawal'),
|
540
|
+
'fee': self.safe_number(currency, 'withdrawal_fee'),
|
484
541
|
'precision': self.safe_number(currency, 'increment_unit'),
|
485
542
|
'limits': {
|
486
543
|
'amount': {
|
@@ -492,9 +549,9 @@ class hollaex(Exchange, ImplicitAPI):
|
|
492
549
|
'max': self.safe_value(withdrawalLimits, 0),
|
493
550
|
},
|
494
551
|
},
|
495
|
-
'networks':
|
496
|
-
'type':
|
497
|
-
}
|
552
|
+
'networks': networks,
|
553
|
+
'type': type,
|
554
|
+
})
|
498
555
|
return result
|
499
556
|
|
500
557
|
def fetch_order_books(self, symbols: Strings = None, limit: Int = None, params={}) -> OrderBooks:
|
ccxt/htx.py
CHANGED
@@ -3280,9 +3280,8 @@ class htx(Exchange, ImplicitAPI):
|
|
3280
3280
|
# }
|
3281
3281
|
# ]
|
3282
3282
|
# }
|
3283
|
-
# }
|
3284
3283
|
#
|
3285
|
-
data = self.
|
3284
|
+
data = self.safe_list(response, 'data', [])
|
3286
3285
|
result: dict = {}
|
3287
3286
|
self.options['networkChainIdsByNames'] = {}
|
3288
3287
|
self.options['networkNamesByChainIds'] = {}
|
@@ -3290,19 +3289,11 @@ class htx(Exchange, ImplicitAPI):
|
|
3290
3289
|
entry = data[i]
|
3291
3290
|
currencyId = self.safe_string(entry, 'currency')
|
3292
3291
|
code = self.safe_currency_code(currencyId)
|
3293
|
-
self.options['networkChainIdsByNames'][code] = {}
|
3294
|
-
chains = self.safe_value(entry, 'chains', [])
|
3295
|
-
networks: dict = {}
|
3296
|
-
instStatus = self.safe_string(entry, 'instStatus')
|
3297
3292
|
assetType = self.safe_string(entry, 'assetType')
|
3298
3293
|
type = assetType == 'crypto' if '1' else 'fiat'
|
3299
|
-
|
3300
|
-
|
3301
|
-
|
3302
|
-
minWithdraw = None
|
3303
|
-
maxWithdraw = None
|
3304
|
-
deposit = False
|
3305
|
-
withdraw = False
|
3294
|
+
self.options['networkChainIdsByNames'][code] = {}
|
3295
|
+
chains = self.safe_list(entry, 'chains', [])
|
3296
|
+
networks: dict = {}
|
3306
3297
|
for j in range(0, len(chains)):
|
3307
3298
|
chainEntry = chains[j]
|
3308
3299
|
uniqueChainId = self.safe_string(chainEntry, 'chain') # i.e. usdterc20, trc20usdt ...
|
@@ -3310,47 +3301,33 @@ class htx(Exchange, ImplicitAPI):
|
|
3310
3301
|
self.options['networkChainIdsByNames'][code][title] = uniqueChainId
|
3311
3302
|
self.options['networkNamesByChainIds'][uniqueChainId] = title
|
3312
3303
|
networkCode = self.network_id_to_code(uniqueChainId)
|
3313
|
-
minDeposit = self.safe_number(chainEntry, 'minDepositAmt')
|
3314
|
-
minWithdraw = self.safe_number(chainEntry, 'minWithdrawAmt')
|
3315
|
-
maxWithdraw = self.safe_number(chainEntry, 'maxWithdrawAmt')
|
3316
|
-
withdrawStatus = self.safe_string(chainEntry, 'withdrawStatus')
|
3317
|
-
depositStatus = self.safe_string(chainEntry, 'depositStatus')
|
3318
|
-
withdrawEnabled = (withdrawStatus == 'allowed')
|
3319
|
-
depositEnabled = (depositStatus == 'allowed')
|
3320
|
-
withdraw = withdrawEnabled if (withdrawEnabled) else withdraw
|
3321
|
-
deposit = depositEnabled if (depositEnabled) else deposit
|
3322
|
-
active = withdrawEnabled and depositEnabled
|
3323
|
-
precision = self.parse_precision(self.safe_string(chainEntry, 'withdrawPrecision'))
|
3324
|
-
if precision is not None:
|
3325
|
-
minPrecision = precision if (minPrecision is None) else Precise.string_min(precision, minPrecision)
|
3326
|
-
fee = self.safe_number(chainEntry, 'transactFeeWithdraw')
|
3327
3304
|
networks[networkCode] = {
|
3328
3305
|
'info': chainEntry,
|
3329
3306
|
'id': uniqueChainId,
|
3330
3307
|
'network': networkCode,
|
3331
3308
|
'limits': {
|
3332
3309
|
'deposit': {
|
3333
|
-
'min':
|
3310
|
+
'min': self.safe_number(chainEntry, 'minDepositAmt'),
|
3334
3311
|
'max': None,
|
3335
3312
|
},
|
3336
3313
|
'withdraw': {
|
3337
|
-
'min':
|
3338
|
-
'max':
|
3314
|
+
'min': self.safe_number(chainEntry, 'minWithdrawAmt'),
|
3315
|
+
'max': self.safe_number(chainEntry, 'maxWithdrawAmt'),
|
3339
3316
|
},
|
3340
3317
|
},
|
3341
|
-
'active':
|
3342
|
-
'deposit':
|
3343
|
-
'withdraw':
|
3344
|
-
'fee':
|
3345
|
-
'precision': self.parse_number(
|
3318
|
+
'active': None,
|
3319
|
+
'deposit': self.safe_string(chainEntry, 'depositStatus') == 'allowed',
|
3320
|
+
'withdraw': self.safe_string(chainEntry, 'withdrawStatus') == 'allowed',
|
3321
|
+
'fee': self.safe_number(chainEntry, 'transactFeeWithdraw'),
|
3322
|
+
'precision': self.parse_number(self.parse_precision(self.safe_string(chainEntry, 'withdrawPrecision'))),
|
3346
3323
|
}
|
3347
|
-
result[code] = {
|
3324
|
+
result[code] = self.safe_currency_structure({
|
3348
3325
|
'info': entry,
|
3349
3326
|
'code': code,
|
3350
3327
|
'id': currencyId,
|
3351
|
-
'active':
|
3352
|
-
'deposit':
|
3353
|
-
'withdraw':
|
3328
|
+
'active': self.safe_string(entry, 'instStatus') == 'normal',
|
3329
|
+
'deposit': None,
|
3330
|
+
'withdraw': None,
|
3354
3331
|
'fee': None,
|
3355
3332
|
'name': None,
|
3356
3333
|
'type': type,
|
@@ -3360,17 +3337,17 @@ class htx(Exchange, ImplicitAPI):
|
|
3360
3337
|
'max': None,
|
3361
3338
|
},
|
3362
3339
|
'withdraw': {
|
3363
|
-
'min':
|
3364
|
-
'max':
|
3340
|
+
'min': None,
|
3341
|
+
'max': None,
|
3365
3342
|
},
|
3366
3343
|
'deposit': {
|
3367
3344
|
'min': None,
|
3368
3345
|
'max': None,
|
3369
3346
|
},
|
3370
3347
|
},
|
3371
|
-
'precision':
|
3348
|
+
'precision': None,
|
3372
3349
|
'networks': networks,
|
3373
|
-
}
|
3350
|
+
})
|
3374
3351
|
return result
|
3375
3352
|
|
3376
3353
|
def network_id_to_code(self, networkId: Str = None, currencyCode: Str = None):
|
ccxt/hyperliquid.py
CHANGED
@@ -184,12 +184,12 @@ class hyperliquid(Exchange, ImplicitAPI):
|
|
184
184
|
},
|
185
185
|
'fees': {
|
186
186
|
'swap': {
|
187
|
-
'taker': self.parse_number('0.
|
188
|
-
'maker': self.parse_number('0.
|
187
|
+
'taker': self.parse_number('0.00045'),
|
188
|
+
'maker': self.parse_number('0.00015'),
|
189
189
|
},
|
190
190
|
'spot': {
|
191
|
-
'taker': self.parse_number('0.
|
192
|
-
'maker': self.parse_number('0.
|
191
|
+
'taker': self.parse_number('0.0007'),
|
192
|
+
'maker': self.parse_number('0.0004'),
|
193
193
|
},
|
194
194
|
},
|
195
195
|
'requiredCredentials': {
|
@@ -368,7 +368,7 @@ class hyperliquid(Exchange, ImplicitAPI):
|
|
368
368
|
id = i
|
369
369
|
name = self.safe_string(data, 'name')
|
370
370
|
code = self.safe_currency_code(name)
|
371
|
-
result[code] = {
|
371
|
+
result[code] = self.safe_currency_structure({
|
372
372
|
'id': id,
|
373
373
|
'name': name,
|
374
374
|
'code': code,
|
@@ -390,7 +390,7 @@ class hyperliquid(Exchange, ImplicitAPI):
|
|
390
390
|
'max': None,
|
391
391
|
},
|
392
392
|
},
|
393
|
-
}
|
393
|
+
})
|
394
394
|
return result
|
395
395
|
|
396
396
|
def fetch_markets(self, params={}) -> List[Market]:
|
ccxt/kraken.py
CHANGED
@@ -1616,6 +1616,8 @@ class kraken(Exchange, ImplicitAPI):
|
|
1616
1616
|
'volume': self.amount_to_precision(symbol, amount),
|
1617
1617
|
}
|
1618
1618
|
orderRequest = self.order_request('createOrder', symbol, type, request, amount, price, params)
|
1619
|
+
flags = self.safe_string(orderRequest[0], 'oflags', '')
|
1620
|
+
isUsingCost = flags.find('viqc') > -1
|
1619
1621
|
response = self.privatePostAddOrder(self.extend(orderRequest[0], orderRequest[1]))
|
1620
1622
|
#
|
1621
1623
|
# {
|
@@ -1627,6 +1629,10 @@ class kraken(Exchange, ImplicitAPI):
|
|
1627
1629
|
# }
|
1628
1630
|
#
|
1629
1631
|
result = self.safe_dict(response, 'result')
|
1632
|
+
result['usingCost'] = isUsingCost
|
1633
|
+
# it's impossible to know if the order was created using cost or base currency
|
1634
|
+
# becuase kraken only returns something like self: {order: 'buy 10.00000000 LTCUSD @ market'}
|
1635
|
+
# self usingCost flag is used to help the parsing but omited from the order
|
1630
1636
|
return self.parse_order(result)
|
1631
1637
|
|
1632
1638
|
def find_market_by_altname_or_id(self, id):
|
@@ -1713,22 +1719,15 @@ class kraken(Exchange, ImplicitAPI):
|
|
1713
1719
|
# }
|
1714
1720
|
#
|
1715
1721
|
# ws - createOrder
|
1716
|
-
#
|
1717
|
-
#
|
1718
|
-
#
|
1719
|
-
#
|
1720
|
-
# "status": 'ok',
|
1721
|
-
# "txid": 'OAVXZH-XIE54-JCYYDG'
|
1722
|
-
# }
|
1722
|
+
# {
|
1723
|
+
# "order_id": "OXM2QD-EALR2-YBAVEU"
|
1724
|
+
# }
|
1725
|
+
#
|
1723
1726
|
# ws - editOrder
|
1724
|
-
#
|
1725
|
-
#
|
1726
|
-
#
|
1727
|
-
#
|
1728
|
-
# "reqid": 3,
|
1729
|
-
# "status": "ok",
|
1730
|
-
# "txid": "OTI672-HJFAO-XOIPPK"
|
1731
|
-
# }
|
1727
|
+
# {
|
1728
|
+
# "amend_id": "TJSMEH-AA67V-YUSQ6O",
|
1729
|
+
# "order_id": "OXM2QD-EALR2-YBAVEU"
|
1730
|
+
# }
|
1732
1731
|
#
|
1733
1732
|
# {
|
1734
1733
|
# "error": [],
|
@@ -1796,6 +1795,8 @@ class kraken(Exchange, ImplicitAPI):
|
|
1796
1795
|
# "oflags": "fciq"
|
1797
1796
|
# }
|
1798
1797
|
#
|
1798
|
+
isUsingCost = self.safe_bool(order, 'usingCost', False)
|
1799
|
+
order = self.omit(order, 'usingCost')
|
1799
1800
|
description = self.safe_dict(order, 'descr', {})
|
1800
1801
|
orderDescriptionObj = self.safe_dict(order, 'descr') # can be null
|
1801
1802
|
orderDescription = None
|
@@ -1808,11 +1809,15 @@ class kraken(Exchange, ImplicitAPI):
|
|
1808
1809
|
marketId = None
|
1809
1810
|
price = None
|
1810
1811
|
amount = None
|
1812
|
+
cost = None
|
1811
1813
|
triggerPrice = None
|
1812
1814
|
if orderDescription is not None:
|
1813
1815
|
parts = orderDescription.split(' ')
|
1814
1816
|
side = self.safe_string(parts, 0)
|
1815
|
-
|
1817
|
+
if not isUsingCost:
|
1818
|
+
amount = self.safe_string(parts, 1)
|
1819
|
+
else:
|
1820
|
+
cost = self.safe_string(parts, 1)
|
1816
1821
|
marketId = self.safe_string(parts, 2)
|
1817
1822
|
part4 = self.safe_string(parts, 4)
|
1818
1823
|
part5 = self.safe_string(parts, 5)
|
@@ -1842,13 +1847,12 @@ class kraken(Exchange, ImplicitAPI):
|
|
1842
1847
|
# kraken truncates the cost in the api response so we will ignore it and calculate it from average & filled
|
1843
1848
|
# cost = self.safe_string(order, 'cost')
|
1844
1849
|
price = self.safe_string(description, 'price', price)
|
1845
|
-
# when type =
|
1846
|
-
if (price is not None) and price.endswith('%'):
|
1850
|
+
# when type = trailing stop returns price = '+50.0000%'
|
1851
|
+
if (price is not None) and (price.endswith('%') or Precise.string_equals(price, '0.00000') or Precise.string_equals(price, '0')):
|
1847
1852
|
price = None # self is not the price we want
|
1848
|
-
if
|
1853
|
+
if price is None:
|
1849
1854
|
price = self.safe_string(description, 'price2')
|
1850
|
-
|
1851
|
-
price = self.safe_string(order, 'price', price)
|
1855
|
+
price = self.safe_string_2(order, 'limitprice', 'price', price)
|
1852
1856
|
flags = self.safe_string(order, 'oflags', '')
|
1853
1857
|
isPostOnly = flags.find('post') > -1
|
1854
1858
|
average = self.safe_number(order, 'price')
|
@@ -1865,7 +1869,7 @@ class kraken(Exchange, ImplicitAPI):
|
|
1865
1869
|
elif flags.find('fcib') >= 0:
|
1866
1870
|
fee['currency'] = market['base']
|
1867
1871
|
status = self.parse_order_status(self.safe_string(order, 'status'))
|
1868
|
-
id = self.safe_string_n(order, ['id', 'txid', 'amend_id'])
|
1872
|
+
id = self.safe_string_n(order, ['id', 'txid', 'order_id', 'amend_id'])
|
1869
1873
|
if (id is None) or (id.startswith('[')):
|
1870
1874
|
txid = self.safe_list(order, 'txid')
|
1871
1875
|
id = self.safe_string(txid, 0)
|
@@ -1922,7 +1926,7 @@ class kraken(Exchange, ImplicitAPI):
|
|
1922
1926
|
'triggerPrice': triggerPrice,
|
1923
1927
|
'takeProfitPrice': takeProfitPrice,
|
1924
1928
|
'stopLossPrice': stopLossPrice,
|
1925
|
-
'cost':
|
1929
|
+
'cost': cost,
|
1926
1930
|
'amount': amount,
|
1927
1931
|
'filled': filled,
|
1928
1932
|
'average': average,
|
ccxt/kucoinfutures.py
CHANGED
@@ -1510,6 +1510,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
|
|
1510
1510
|
:param str [params.timeInForce]: GTC, GTT, IOC, or FOK, default is GTC, limit orders only
|
1511
1511
|
:param str [params.postOnly]: Post only flag, invalid when timeInForce is IOC or FOK
|
1512
1512
|
:param float [params.cost]: the cost of the order in units of USDT
|
1513
|
+
:param str [params.marginMode]: 'cross' or 'isolated', default is 'isolated'
|
1513
1514
|
----------------- Exchange Specific Parameters -----------------
|
1514
1515
|
:param float [params.leverage]: Leverage size of the order(mandatory param in request, default is 1)
|
1515
1516
|
:param str [params.clientOid]: client order id, defaults to uuid if not passed
|
@@ -1607,6 +1608,10 @@ class kucoinfutures(kucoin, ImplicitAPI):
|
|
1607
1608
|
'type': type, # limit or market
|
1608
1609
|
'leverage': 1,
|
1609
1610
|
}
|
1611
|
+
marginModeUpper = self.safe_string_upper(params, 'marginMode')
|
1612
|
+
if marginModeUpper is not None:
|
1613
|
+
params = self.omit(params, 'marginMode')
|
1614
|
+
request['marginMode'] = marginModeUpper
|
1610
1615
|
cost = self.safe_string(params, 'cost')
|
1611
1616
|
params = self.omit(params, 'cost')
|
1612
1617
|
if cost is not None:
|
ccxt/lbank.py
CHANGED
@@ -875,7 +875,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
875
875
|
timestamp = self.milliseconds()
|
876
876
|
if market['swap']:
|
877
877
|
return self.parse_order_book(orderbook, market['symbol'], timestamp, 'bids', 'asks', 'price', 'volume')
|
878
|
-
return self.parse_order_book(orderbook, market['symbol'], timestamp)
|
878
|
+
return self.parse_order_book(orderbook, market['symbol'], timestamp, 'bids', 'asks', 1, 0)
|
879
879
|
|
880
880
|
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
881
881
|
#
|
ccxt/mexc.py
CHANGED
@@ -1096,7 +1096,6 @@ class mexc(Exchange, ImplicitAPI):
|
|
1096
1096
|
currency = response[i]
|
1097
1097
|
id = self.safe_string(currency, 'coin')
|
1098
1098
|
code = self.safe_currency_code(id)
|
1099
|
-
name = self.safe_string(currency, 'name')
|
1100
1099
|
networks: dict = {}
|
1101
1100
|
chains = self.safe_value(currency, 'networkList', [])
|
1102
1101
|
for j in range(0, len(chains)):
|
@@ -1118,12 +1117,13 @@ class mexc(Exchange, ImplicitAPI):
|
|
1118
1117
|
'max': self.safe_string(chain, 'withdrawMax'),
|
1119
1118
|
},
|
1120
1119
|
},
|
1120
|
+
'contract': self.safe_string(chain, 'contract'),
|
1121
1121
|
}
|
1122
1122
|
result[code] = self.safe_currency_structure({
|
1123
1123
|
'info': currency,
|
1124
1124
|
'id': id,
|
1125
1125
|
'code': code,
|
1126
|
-
'name': name,
|
1126
|
+
'name': self.safe_string(currency, 'name'),
|
1127
1127
|
'active': None,
|
1128
1128
|
'deposit': None,
|
1129
1129
|
'withdraw': None,
|
ccxt/ndax.py
CHANGED
@@ -454,44 +454,44 @@ class ndax(Exchange, ImplicitAPI):
|
|
454
454
|
}
|
455
455
|
response = self.publicGetGetProducts(self.extend(request, params))
|
456
456
|
#
|
457
|
-
#
|
458
|
-
#
|
459
|
-
#
|
460
|
-
#
|
461
|
-
#
|
462
|
-
#
|
463
|
-
#
|
464
|
-
#
|
465
|
-
#
|
466
|
-
#
|
467
|
-
#
|
468
|
-
#
|
469
|
-
#
|
470
|
-
#
|
457
|
+
# [
|
458
|
+
# {
|
459
|
+
# "OMSId": "1",
|
460
|
+
# "ProductId": "1",
|
461
|
+
# "Product": "BTC",
|
462
|
+
# "ProductFullName": "Bitcoin",
|
463
|
+
# "MasterDataUniqueProductSymbol": "",
|
464
|
+
# "ProductType": "CryptoCurrency",
|
465
|
+
# "DecimalPlaces": "8",
|
466
|
+
# "TickSize": "0.0000000100000000000000000000",
|
467
|
+
# "DepositEnabled": True,
|
468
|
+
# "WithdrawEnabled": True,
|
469
|
+
# "NoFees": False,
|
470
|
+
# "IsDisabled": False,
|
471
|
+
# "MarginEnabled": False
|
472
|
+
# },
|
473
|
+
# ...
|
471
474
|
#
|
472
475
|
result: dict = {}
|
473
476
|
for i in range(0, len(response)):
|
474
477
|
currency = response[i]
|
475
478
|
id = self.safe_string(currency, 'ProductId')
|
476
|
-
|
479
|
+
code = self.safe_currency_code(self.safe_string(currency, 'Product'))
|
477
480
|
ProductType = self.safe_string(currency, 'ProductType')
|
478
481
|
type = 'fiat' if (ProductType == 'NationalCurrency') else 'crypto'
|
479
482
|
if ProductType == 'Unknown':
|
480
483
|
# such currency is just a blanket entry
|
481
484
|
type = 'other'
|
482
|
-
code = self.
|
483
|
-
isDisabled = self.safe_value(currency, 'IsDisabled')
|
484
|
-
active = not isDisabled
|
485
|
-
result[code] = {
|
485
|
+
result[code] = self.safe_currency_structure({
|
486
486
|
'id': id,
|
487
|
-
'name':
|
487
|
+
'name': self.safe_string(currency, 'ProductFullName'),
|
488
488
|
'code': code,
|
489
489
|
'type': type,
|
490
490
|
'precision': self.safe_number(currency, 'TickSize'),
|
491
491
|
'info': currency,
|
492
|
-
'active':
|
493
|
-
'deposit':
|
494
|
-
'withdraw':
|
492
|
+
'active': not self.safe_bool(currency, 'IsDisabled'),
|
493
|
+
'deposit': self.safe_bool(currency, 'DepositEnabled'),
|
494
|
+
'withdraw': self.safe_bool(currency, 'WithdrawEnabled'),
|
495
495
|
'fee': None,
|
496
496
|
'limits': {
|
497
497
|
'amount': {
|
@@ -504,7 +504,8 @@ class ndax(Exchange, ImplicitAPI):
|
|
504
504
|
},
|
505
505
|
},
|
506
506
|
'networks': {},
|
507
|
-
|
507
|
+
'margin': self.safe_bool(currency, 'MarginEnabled'),
|
508
|
+
})
|
508
509
|
return result
|
509
510
|
|
510
511
|
def fetch_markets(self, params={}) -> List[Market]:
|