ccxt 4.4.45__py2.py3-none-any.whl → 4.4.47__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.
Files changed (118) hide show
  1. ccxt/__init__.py +1 -1
  2. ccxt/abstract/binance.py +1 -0
  3. ccxt/abstract/binancecoinm.py +1 -0
  4. ccxt/abstract/binanceus.py +1 -0
  5. ccxt/abstract/binanceusdm.py +1 -0
  6. ccxt/abstract/bybit.py +1 -0
  7. ccxt/ace.py +58 -0
  8. ccxt/alpaca.py +80 -0
  9. ccxt/ascendex.py +110 -3
  10. ccxt/async_support/__init__.py +1 -1
  11. ccxt/async_support/ace.py +58 -0
  12. ccxt/async_support/alpaca.py +80 -0
  13. ccxt/async_support/ascendex.py +110 -3
  14. ccxt/async_support/base/exchange.py +1 -1
  15. ccxt/async_support/bigone.py +113 -4
  16. ccxt/async_support/binance.py +4 -5
  17. ccxt/async_support/binanceus.py +10 -0
  18. ccxt/async_support/bingx.py +1 -2
  19. ccxt/async_support/bit2c.py +56 -0
  20. ccxt/async_support/bitbank.py +58 -0
  21. ccxt/async_support/bitbns.py +60 -0
  22. ccxt/async_support/bitfinex.py +2 -3
  23. ccxt/async_support/bitfinex1.py +8 -0
  24. ccxt/async_support/bitflyer.py +71 -0
  25. ccxt/async_support/bitget.py +103 -40
  26. ccxt/async_support/bithumb.py +54 -0
  27. ccxt/async_support/bitmex.py +1 -2
  28. ccxt/async_support/bitopro.py +74 -0
  29. ccxt/async_support/bitrue.py +97 -17
  30. ccxt/async_support/bitso.py +59 -0
  31. ccxt/async_support/bitteam.py +73 -0
  32. ccxt/async_support/bitvavo.py +70 -2
  33. ccxt/async_support/bl3p.py +42 -0
  34. ccxt/async_support/blockchaincom.py +66 -2
  35. ccxt/async_support/blofin.py +87 -1
  36. ccxt/async_support/btcalpha.py +73 -0
  37. ccxt/async_support/btcbox.py +58 -0
  38. ccxt/async_support/btcmarkets.py +73 -0
  39. ccxt/async_support/btcturk.py +61 -0
  40. ccxt/async_support/bybit.py +87 -39
  41. ccxt/async_support/cex.py +57 -0
  42. ccxt/async_support/coinbase.py +1 -1
  43. ccxt/async_support/coinbaseexchange.py +76 -0
  44. ccxt/async_support/coinex.py +1 -2
  45. ccxt/async_support/delta.py +10 -6
  46. ccxt/async_support/gate.py +3 -4
  47. ccxt/async_support/hashkey.py +1 -2
  48. ccxt/async_support/hollaex.py +1 -1
  49. ccxt/async_support/htx.py +2 -4
  50. ccxt/async_support/hyperliquid.py +6 -7
  51. ccxt/async_support/krakenfutures.py +2 -0
  52. ccxt/async_support/lbank.py +1 -2
  53. ccxt/async_support/mexc.py +1 -0
  54. ccxt/async_support/okx.py +13 -9
  55. ccxt/async_support/onetrading.py +18 -3
  56. ccxt/async_support/oxfun.py +1 -2
  57. ccxt/async_support/whitebit.py +2 -2
  58. ccxt/async_support/woo.py +1 -2
  59. ccxt/async_support/woofipro.py +1 -2
  60. ccxt/base/errors.py +6 -0
  61. ccxt/base/exchange.py +16 -14
  62. ccxt/bigone.py +113 -4
  63. ccxt/binance.py +4 -5
  64. ccxt/binanceus.py +10 -0
  65. ccxt/bingx.py +1 -2
  66. ccxt/bit2c.py +56 -0
  67. ccxt/bitbank.py +58 -0
  68. ccxt/bitbns.py +60 -0
  69. ccxt/bitfinex.py +2 -3
  70. ccxt/bitfinex1.py +8 -0
  71. ccxt/bitflyer.py +71 -0
  72. ccxt/bitget.py +103 -40
  73. ccxt/bithumb.py +54 -0
  74. ccxt/bitmex.py +1 -2
  75. ccxt/bitopro.py +74 -0
  76. ccxt/bitrue.py +97 -17
  77. ccxt/bitso.py +59 -0
  78. ccxt/bitteam.py +73 -0
  79. ccxt/bitvavo.py +70 -2
  80. ccxt/bl3p.py +42 -0
  81. ccxt/blockchaincom.py +66 -2
  82. ccxt/blofin.py +87 -1
  83. ccxt/btcalpha.py +73 -0
  84. ccxt/btcbox.py +58 -0
  85. ccxt/btcmarkets.py +73 -0
  86. ccxt/btcturk.py +61 -0
  87. ccxt/bybit.py +87 -39
  88. ccxt/cex.py +57 -0
  89. ccxt/coinbase.py +1 -1
  90. ccxt/coinbaseexchange.py +76 -0
  91. ccxt/coinex.py +1 -2
  92. ccxt/delta.py +10 -6
  93. ccxt/gate.py +3 -4
  94. ccxt/hashkey.py +1 -2
  95. ccxt/hollaex.py +1 -1
  96. ccxt/htx.py +2 -4
  97. ccxt/hyperliquid.py +6 -7
  98. ccxt/krakenfutures.py +2 -0
  99. ccxt/lbank.py +1 -2
  100. ccxt/mexc.py +1 -0
  101. ccxt/okx.py +13 -9
  102. ccxt/onetrading.py +18 -3
  103. ccxt/oxfun.py +1 -2
  104. ccxt/pro/__init__.py +1 -1
  105. ccxt/pro/bingx.py +3 -5
  106. ccxt/pro/bitget.py +2 -4
  107. ccxt/pro/coinex.py +1 -1
  108. ccxt/pro/xt.py +1 -1
  109. ccxt/test/tests_async.py +2 -0
  110. ccxt/test/tests_sync.py +2 -0
  111. ccxt/whitebit.py +2 -2
  112. ccxt/woo.py +1 -2
  113. ccxt/woofipro.py +1 -2
  114. {ccxt-4.4.45.dist-info → ccxt-4.4.47.dist-info}/METADATA +4 -5
  115. {ccxt-4.4.45.dist-info → ccxt-4.4.47.dist-info}/RECORD +118 -118
  116. {ccxt-4.4.45.dist-info → ccxt-4.4.47.dist-info}/LICENSE.txt +0 -0
  117. {ccxt-4.4.45.dist-info → ccxt-4.4.47.dist-info}/WHEEL +0 -0
  118. {ccxt-4.4.45.dist-info → ccxt-4.4.47.dist-info}/top_level.txt +0 -0
@@ -1445,16 +1445,102 @@ class bitget(Exchange, ImplicitAPI):
1445
1445
  },
1446
1446
  'sandboxMode': False,
1447
1447
  'networks': {
1448
+ # 'TRX': 'TRX', # different code for mainnet
1448
1449
  'TRC20': 'TRC20',
1450
+ # 'ETH': 'ETH', # different code for mainnet
1449
1451
  'ERC20': 'ERC20',
1450
1452
  'BEP20': 'BSC',
1451
- 'ARB': 'ArbitrumOne',
1452
- 'ZKSYNC': 'zkSyncEra',
1453
- 'STARKNET': 'Starknet',
1453
+ # 'BEP20': 'BEP20', # different for BEP20
1454
+ 'BSC': 'BEP20',
1455
+ 'ATOM': 'ATOM',
1456
+ 'ACA': 'AcalaToken',
1454
1457
  'APT': 'Aptos',
1458
+ 'ARBONE': 'ArbitrumOne',
1459
+ 'ARBNOVA': 'ArbitrumNova',
1460
+ 'AVAXC': 'C-Chain',
1461
+ 'AVAXX': 'X-Chain',
1462
+ 'AR': 'Arweave',
1463
+ 'BCH': 'BCH',
1464
+ 'BCHA': 'BCHA',
1465
+ 'BITCI': 'BITCI',
1466
+ 'BTC': 'BTC',
1467
+ 'CELO': 'CELO',
1468
+ 'CSPR': 'CSPR',
1469
+ 'ADA': 'Cardano',
1470
+ 'CHZ': 'ChilizChain',
1471
+ 'CRC20': 'CronosChain',
1472
+ 'DOGE': 'DOGE',
1473
+ 'DOT': 'DOT',
1474
+ 'EOS': 'EOS',
1475
+ 'ETHF': 'ETHFAIR',
1476
+ 'ETHW': 'ETHW',
1477
+ 'ETC': 'ETC',
1478
+ 'EGLD': 'Elrond',
1479
+ 'FIL': 'FIL',
1480
+ 'FIO': 'FIO',
1481
+ 'FTM': 'Fantom',
1482
+ 'HRC20': 'HECO',
1483
+ 'ONE': 'Harmony',
1484
+ 'HNT': 'Helium',
1485
+ 'ICP': 'ICP',
1486
+ 'IOTX': 'IoTeX',
1487
+ 'KARDIA': 'KAI',
1488
+ 'KAVA': 'KAVA',
1489
+ 'KDA': 'KDA',
1490
+ 'KLAY': 'Klaytn',
1491
+ 'KSM': 'Kusama',
1492
+ 'LAT': 'LAT',
1493
+ 'LTC': 'LTC',
1494
+ 'MINA': 'MINA',
1495
+ 'MOVR': 'MOVR',
1496
+ 'METIS': 'MetisToken',
1497
+ 'GLMR': 'Moonbeam',
1498
+ 'NEAR': 'NEARProtocol',
1499
+ 'NULS': 'NULS',
1500
+ 'OASYS': 'OASYS',
1501
+ 'OASIS': 'ROSE',
1502
+ 'OMNI': 'OMNI',
1503
+ 'ONT': 'Ontology',
1504
+ 'OPTIMISM': 'Optimism',
1505
+ 'OSMO': 'Osmosis',
1506
+ 'POKT': 'PocketNetwork',
1455
1507
  'MATIC': 'Polygon',
1508
+ 'QTUM': 'QTUM',
1509
+ 'REEF': 'REEF',
1510
+ 'SOL': 'SOL',
1511
+ 'SYS': 'SYS', # SyscoinNEVM is different
1512
+ 'SXP': 'Solar',
1513
+ 'XYM': 'Symbol',
1514
+ 'TON': 'TON',
1515
+ 'TT': 'TT',
1516
+ 'TLOS': 'Telos',
1517
+ 'THETA': 'ThetaToken',
1518
+ 'VITE': 'VITE',
1519
+ 'WAVES': 'WAVES',
1520
+ 'WAX': 'WAXP',
1521
+ 'WEMIX': 'WEMIXMainnet',
1522
+ 'XDC': 'XDCNetworkXDC',
1523
+ 'XRP': 'XRP',
1524
+ 'FET': 'FETCH',
1525
+ 'NEM': 'NEM',
1526
+ 'REI': 'REINetwork',
1527
+ 'ZIL': 'ZIL',
1528
+ 'ABBC': 'ABBCCoin',
1529
+ 'RSK': 'RSK',
1530
+ 'AZERO': 'AZERO',
1531
+ 'TRC10': 'TRC10',
1532
+ 'JUNO': 'JUNO',
1533
+ # undetected: USDSP, more info at https://www.bitget.com/v1/spot/public/coinChainList
1534
+ # todo: uncomment below after unification
1535
+ # 'TERRACLASSIC': 'Terra', # tbd, that network id is also assigned to TERRANEW network
1536
+ # 'CUBENETWORK': 'CUBE',
1537
+ # 'CADUCEUS': 'CMP',
1538
+ # 'CONFLUX': 'CFX', # CFXeSpace is different
1539
+ # 'CERE': 'CERE',
1540
+ # 'CANTO': 'CANTO',
1541
+ 'ZKSYNC': 'zkSyncEra',
1542
+ 'STARKNET': 'Starknet',
1456
1543
  'VIC': 'VICTION',
1457
- 'AVAXC': 'C-Chain',
1458
1544
  },
1459
1545
  'networksById': {
1460
1546
  },
@@ -2304,13 +2390,13 @@ class bitget(Exchange, ImplicitAPI):
2304
2390
  :returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
2305
2391
  """
2306
2392
  self.check_address(address)
2307
- chain = self.safe_string_2(params, 'chain', 'network')
2308
- params = self.omit(params, 'network')
2309
- if chain is None:
2310
- raise ArgumentsRequired(self.id + ' withdraw() requires a chain parameter or a network parameter')
2393
+ networkCode = None
2394
+ networkCode, params = self.handle_network_code_and_params(params)
2395
+ if networkCode is None:
2396
+ raise ArgumentsRequired(self.id + ' withdraw() requires a "network" parameter')
2311
2397
  await self.load_markets()
2312
2398
  currency = self.currency(code)
2313
- networkId = self.network_code_to_id(chain)
2399
+ networkId = self.network_code_to_id(networkCode)
2314
2400
  request: dict = {
2315
2401
  'coin': currency['id'],
2316
2402
  'address': address,
@@ -2333,27 +2419,8 @@ class bitget(Exchange, ImplicitAPI):
2333
2419
  # }
2334
2420
  #
2335
2421
  data = self.safe_value(response, 'data', {})
2336
- result: dict = {
2337
- 'id': self.safe_string(data, 'orderId'),
2338
- 'info': response,
2339
- 'txid': None,
2340
- 'timestamp': None,
2341
- 'datetime': None,
2342
- 'network': None,
2343
- 'addressFrom': None,
2344
- 'address': None,
2345
- 'addressTo': None,
2346
- 'amount': None,
2347
- 'type': 'withdrawal',
2348
- 'currency': None,
2349
- 'status': None,
2350
- 'updated': None,
2351
- 'tagFrom': None,
2352
- 'tag': None,
2353
- 'tagTo': None,
2354
- 'comment': None,
2355
- 'fee': None,
2356
- }
2422
+ result = self.parse_transaction(data, currency)
2423
+ result['type'] = 'withdrawal'
2357
2424
  withdrawOptions = self.safe_value(self.options, 'withdraw', {})
2358
2425
  fillResponseFromRequest = self.safe_bool(withdrawOptions, 'fillResponseFromRequest', True)
2359
2426
  if fillResponseFromRequest:
@@ -2364,7 +2431,7 @@ class bitget(Exchange, ImplicitAPI):
2364
2431
  result['tag'] = tag
2365
2432
  result['address'] = address
2366
2433
  result['addressTo'] = address
2367
- result['network'] = chain
2434
+ result['network'] = networkCode
2368
2435
  return result
2369
2436
 
2370
2437
  async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
@@ -2526,17 +2593,14 @@ class bitget(Exchange, ImplicitAPI):
2526
2593
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
2527
2594
  """
2528
2595
  await self.load_markets()
2529
- networkCode = self.safe_string_2(params, 'chain', 'network')
2530
- params = self.omit(params, 'network')
2531
- networkId = None
2532
- if networkCode is not None:
2533
- networkId = self.network_code_to_id(networkCode, code)
2596
+ networkCode = None
2597
+ networkCode, params = self.handle_network_code_and_params(params)
2534
2598
  currency = self.currency(code)
2535
2599
  request: dict = {
2536
2600
  'coin': currency['id'],
2537
2601
  }
2538
- if networkId is not None:
2539
- request['chain'] = networkId
2602
+ if networkCode is not None:
2603
+ request['chain'] = self.network_code_to_id(networkCode, code)
2540
2604
  response = await self.privateSpotGetV2SpotWalletDepositAddress(self.extend(request, params))
2541
2605
  #
2542
2606
  # {
@@ -6616,8 +6680,7 @@ class bitget(Exchange, ImplicitAPI):
6616
6680
  # }
6617
6681
  symbols = self.market_symbols(symbols)
6618
6682
  data = self.safe_list(response, 'data', [])
6619
- result = self.parse_funding_rates(data, market)
6620
- return self.filter_by_array(result, 'symbol', symbols)
6683
+ return self.parse_funding_rates(data, symbols)
6621
6684
 
6622
6685
  def parse_funding_rate(self, contract, market: Market = None) -> FundingRate:
6623
6686
  #
@@ -142,6 +142,60 @@ class bithumb(Exchange, ImplicitAPI):
142
142
  },
143
143
  },
144
144
  'precisionMode': SIGNIFICANT_DIGITS,
145
+ # todo: update to v2 apis
146
+ 'features': {
147
+ 'spot': {
148
+ 'sandbox': False,
149
+ 'createOrder': {
150
+ 'marginMode': False,
151
+ 'triggerPrice': False,
152
+ 'triggerPriceType': None,
153
+ 'triggerDirection': False,
154
+ 'stopLossPrice': False,
155
+ 'takeProfitPrice': False,
156
+ 'attachedStopLossTakeProfit': None,
157
+ 'timeInForce': {
158
+ 'IOC': False,
159
+ 'FOK': False,
160
+ 'PO': False,
161
+ 'GTD': False,
162
+ },
163
+ 'hedged': False,
164
+ 'trailing': False,
165
+ 'leverage': False,
166
+ 'marketBuyRequiresPrice': False,
167
+ 'marketBuyByCost': False,
168
+ 'selfTradePrevention': False,
169
+ 'iceberg': False,
170
+ },
171
+ 'createOrders': None,
172
+ 'fetchMyTrades': None,
173
+ 'fetchOrder': {
174
+ 'marginMode': False,
175
+ 'trigger': False,
176
+ 'trailing': False,
177
+ },
178
+ 'fetchOpenOrders': {
179
+ 'marginMode': False,
180
+ 'limit': 1000,
181
+ 'trigger': False,
182
+ 'trailing': False,
183
+ },
184
+ 'fetchOrders': None,
185
+ 'fetchClosedOrders': None,
186
+ 'fetchOHLCV': {
187
+ 'limit': 1000,
188
+ },
189
+ },
190
+ 'swap': {
191
+ 'linear': None,
192
+ 'inverse': None,
193
+ },
194
+ 'future': {
195
+ 'linear': None,
196
+ 'inverse': None,
197
+ },
198
+ },
145
199
  'exceptions': {
146
200
  'Bad Request(SSL)': BadRequest,
147
201
  'Bad Request(Bad Method)': BadRequest,
@@ -2502,8 +2502,7 @@ class bitmex(Exchange, ImplicitAPI):
2502
2502
  if swap:
2503
2503
  filteredResponse.append(item)
2504
2504
  symbols = self.market_symbols(symbols)
2505
- result = self.parse_funding_rates(filteredResponse)
2506
- return self.filter_by_array(result, 'symbol', symbols)
2505
+ return self.parse_funding_rates(filteredResponse, symbols)
2507
2506
 
2508
2507
  def parse_funding_rate(self, contract, market: Market = None) -> FundingRate:
2509
2508
  # see response sample under "fetchMarkets" because same endpoint is being used here
@@ -208,6 +208,80 @@ class bitopro(Exchange, ImplicitAPI):
208
208
  'BSC': 'BSC',
209
209
  },
210
210
  },
211
+ 'features': {
212
+ 'spot': {
213
+ 'sandbox': False,
214
+ 'createOrder': {
215
+ 'marginMode': False,
216
+ 'triggerPrice': True,
217
+ 'triggerPriceType': None,
218
+ 'triggerDirection': True, # todo implement
219
+ 'stopLossPrice': False,
220
+ 'takeProfitPrice': False,
221
+ 'attachedStopLossTakeProfit': None,
222
+ 'timeInForce': {
223
+ 'IOC': False,
224
+ 'FOK': False,
225
+ 'PO': True,
226
+ 'GTD': False,
227
+ },
228
+ 'hedged': False,
229
+ 'trailing': False,
230
+ 'leverage': False,
231
+ 'marketBuyRequiresPrice': False,
232
+ 'marketBuyByCost': False,
233
+ 'selfTradePrevention': False,
234
+ 'iceberg': False,
235
+ },
236
+ 'createOrders': None,
237
+ 'fetchMyTrades': {
238
+ 'marginMode': False,
239
+ 'limit': 1000,
240
+ 'daysBack': 100000,
241
+ 'untilDays': 100000,
242
+ },
243
+ 'fetchOrder': {
244
+ 'marginMode': False,
245
+ 'trigger': False,
246
+ 'trailing': False,
247
+ },
248
+ # todo: implement through fetchOrders
249
+ 'fetchOpenOrders': {
250
+ 'marginMode': False,
251
+ 'limit': None,
252
+ 'trigger': False,
253
+ 'trailing': False,
254
+ },
255
+ 'fetchOrders': {
256
+ 'marginMode': False,
257
+ 'limit': 1000,
258
+ 'daysBack': 100000,
259
+ 'untilDays': 100000,
260
+ 'trigger': False,
261
+ 'trailing': False,
262
+ },
263
+ 'fetchClosedOrders': {
264
+ 'marginMode': False,
265
+ 'limit': 1000,
266
+ 'daysBack': 100000,
267
+ 'daysBackCanceled': 1,
268
+ 'untilDays': 10000,
269
+ 'trigger': False,
270
+ 'trailing': False,
271
+ },
272
+ 'fetchOHLCV': {
273
+ 'limit': 1000,
274
+ },
275
+ },
276
+ 'swap': {
277
+ 'linear': None,
278
+ 'inverse': None,
279
+ },
280
+ 'future': {
281
+ 'linear': None,
282
+ 'inverse': None,
283
+ },
284
+ },
211
285
  'precisionMode': TICK_SIZE,
212
286
  'exceptions': {
213
287
  'exact': {
@@ -460,7 +460,92 @@ class bitrue(Exchange, ImplicitAPI):
460
460
  'MIM': 'MIM Swarm',
461
461
  },
462
462
  'precisionMode': TICK_SIZE,
463
- # https://binance-docs.github.io/apidocs/spot/en/#error-codes-2
463
+ 'features': {
464
+ 'default': {
465
+ 'sandbox': False,
466
+ 'createOrder': {
467
+ 'marginMode': False,
468
+ 'triggerPrice': True,
469
+ 'triggerPriceType': None,
470
+ 'triggerDirection': None,
471
+ 'stopLossPrice': False, # todo
472
+ 'takeProfitPrice': False, # todo
473
+ 'attachedStopLossTakeProfit': None,
474
+ 'timeInForce': {
475
+ 'IOC': True,
476
+ 'FOK': True,
477
+ 'PO': True,
478
+ 'GTD': False,
479
+ },
480
+ 'hedged': False,
481
+ 'trailing': False,
482
+ 'leverage': False,
483
+ 'marketBuyRequiresPrice': True, # todo revise
484
+ 'marketBuyByCost': True,
485
+ 'selfTradePrevention': False,
486
+ 'iceberg': True, # todo implement
487
+ },
488
+ 'createOrders': None,
489
+ 'fetchMyTrades': {
490
+ 'marginMode': False,
491
+ 'limit': 1000,
492
+ 'daysBack': 100000,
493
+ 'untilDays': 100000,
494
+ },
495
+ 'fetchOrder': {
496
+ 'marginMode': False,
497
+ 'trigger': False,
498
+ 'trailing': False,
499
+ },
500
+ 'fetchOpenOrders': {
501
+ 'marginMode': False,
502
+ 'limit': None,
503
+ 'trigger': False,
504
+ 'trailing': False,
505
+ },
506
+ 'fetchOrders': None,
507
+ 'fetchClosedOrders': {
508
+ 'marginMode': False,
509
+ 'limit': 1000,
510
+ 'daysBack': 90,
511
+ 'daysBackCanceled': 1,
512
+ 'untilDays': 90,
513
+ 'trigger': False,
514
+ 'trailing': False,
515
+ },
516
+ 'fetchOHLCV': {
517
+ 'limit': 1440,
518
+ },
519
+ },
520
+ 'spot': {
521
+ 'extends': 'default',
522
+ },
523
+ 'forDerivatives': {
524
+ 'extends': 'default',
525
+ 'createOrder': {
526
+ 'marginMode': True,
527
+ 'leverage': True,
528
+ 'marketBuyRequiresPrice': False,
529
+ 'marketBuyByCost': False,
530
+ },
531
+ 'fetchOHLCV': {
532
+ 'limit': 300,
533
+ },
534
+ 'fetchClosedOrders': None,
535
+ },
536
+ 'swap': {
537
+ 'linear': {
538
+ 'extends': 'forDerivatives',
539
+ },
540
+ 'inverse': {
541
+ 'extends': 'forDerivatives',
542
+ },
543
+ },
544
+ 'future': {
545
+ 'linear': None,
546
+ 'inverse': None,
547
+ },
548
+ },
464
549
  'exceptions': {
465
550
  'exact': {
466
551
  'System is under maintenance.': OnMaintenance, # {"code":1,"msg":"System is under maintenance."}
@@ -1289,9 +1374,8 @@ class bitrue(Exchange, ImplicitAPI):
1289
1374
  """
1290
1375
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1291
1376
 
1292
- https://github.com/Bitrue-exchange/Spot-official-api-docs#kline-data
1293
- https://www.bitrue.com/api-docs#kline-candlestick-data
1294
- https://www.bitrue.com/api_docs_includes_file/delivery.html#kline-candlestick-data
1377
+ https://www.bitrue.com/api_docs_includes_file/spot/index.html#kline-data
1378
+ https://www.bitrue.com/api_docs_includes_file/futures/index.html#kline-candlestick-data
1295
1379
 
1296
1380
  :param str symbol: unified symbol of the market to fetch OHLCV data for
1297
1381
  :param str timeframe: the length of time each candle represents
@@ -1826,9 +1910,8 @@ class bitrue(Exchange, ImplicitAPI):
1826
1910
  """
1827
1911
  create a trade order
1828
1912
 
1829
- https://github.com/Bitrue-exchange/Spot-official-api-docs#recent-trades-list
1830
- https://www.bitrue.com/api-docs#new-order-trade-hmac-sha256
1831
- https://www.bitrue.com/api_docs_includes_file/delivery.html#new-order-trade-hmac-sha256
1913
+ https://www.bitrue.com/api_docs_includes_file/spot/index.html#new-order-trade
1914
+ https://www.bitrue.com/api_docs_includes_file/futures/index.html#new-order-trade-hmac-sha256
1832
1915
 
1833
1916
  :param str symbol: unified symbol of the market to create an order in
1834
1917
  :param str type: 'market' or 'limit'
@@ -1950,9 +2033,8 @@ class bitrue(Exchange, ImplicitAPI):
1950
2033
  """
1951
2034
  fetches information on an order made by the user
1952
2035
 
1953
- https://github.com/Bitrue-exchange/Spot-official-api-docs#query-order-user_data
1954
- https://www.bitrue.com/api-docs#query-order-user_data-hmac-sha256
1955
- https://www.bitrue.com/api_docs_includes_file/delivery.html#query-order-user_data-hmac-sha256
2036
+ https://www.bitrue.com/api_docs_includes_file/spot/index.html#query-order-user_data
2037
+ https://www.bitrue.com/api_docs_includes_file/futures/index.html#query-order-user_data-hmac-sha256
1956
2038
 
1957
2039
  :param str id: the order id
1958
2040
  :param str symbol: unified symbol of the market the order was made in
@@ -2038,7 +2120,7 @@ class bitrue(Exchange, ImplicitAPI):
2038
2120
  """
2039
2121
  fetches information on multiple closed orders made by the user
2040
2122
 
2041
- https://github.com/Bitrue-exchange/Spot-official-api-docs#all-orders-user_data
2123
+ https://www.bitrue.com/api_docs_includes_file/spot/index.html#all-orders-user_data
2042
2124
 
2043
2125
  :param str symbol: unified market symbol of the market orders were made in
2044
2126
  :param int [since]: the earliest time in ms to fetch orders for
@@ -2092,9 +2174,8 @@ class bitrue(Exchange, ImplicitAPI):
2092
2174
  """
2093
2175
  fetch all unfilled currently open orders
2094
2176
 
2095
- https://github.com/Bitrue-exchange/Spot-official-api-docs#current-open-orders-user_data
2096
- https://www.bitrue.com/api-docs#current-all-open-orders-user_data-hmac-sha256
2097
- https://www.bitrue.com/api_docs_includes_file/delivery.html#current-all-open-orders-user_data-hmac-sha256
2177
+ https://www.bitrue.com/api_docs_includes_file/spot/index.html#current-open-orders-user_data
2178
+ https://www.bitrue.com/api_docs_includes_file/futures/index.html#cancel-all-open-orders-trade-hmac-sha256
2098
2179
 
2099
2180
  :param str symbol: unified market symbol
2100
2181
  :param int [since]: the earliest time in ms to fetch open orders for
@@ -2276,9 +2357,8 @@ class bitrue(Exchange, ImplicitAPI):
2276
2357
  """
2277
2358
  fetch all trades made by the user
2278
2359
 
2279
- https://github.com/Bitrue-exchange/Spot-official-api-docs#account-trade-list-user_data
2280
- https://www.bitrue.com/api-docs#account-trade-list-user_data-hmac-sha256
2281
- https://www.bitrue.com/api_docs_includes_file/delivery.html#account-trade-list-user_data-hmac-sha256
2360
+ https://www.bitrue.com/api_docs_includes_file/spot/index.html#account-trade-list-user_data
2361
+ https://www.bitrue.com/api_docs_includes_file/futures/index.html#account-trade-list-user_data-hmac-sha256
2282
2362
 
2283
2363
  :param str symbol: unified market symbol
2284
2364
  :param int [since]: the earliest time in ms to fetch trades for
@@ -195,6 +195,65 @@ class bitso(Exchange, ImplicitAPI):
195
195
  ],
196
196
  },
197
197
  },
198
+ 'features': {
199
+ 'spot': {
200
+ 'sandbox': False,
201
+ 'createOrder': {
202
+ 'marginMode': False,
203
+ 'triggerPrice': True, # todo implementation
204
+ 'triggerPriceType': None,
205
+ 'triggerDirection': None,
206
+ 'stopLossPrice': False, # todo
207
+ 'takeProfitPrice': False, # todo
208
+ 'attachedStopLossTakeProfit': None,
209
+ # todo: implementation for TIF
210
+ 'timeInForce': {
211
+ 'IOC': True,
212
+ 'FOK': True,
213
+ 'PO': True,
214
+ 'GTD': False,
215
+ },
216
+ 'hedged': False,
217
+ 'trailing': False,
218
+ 'leverage': False,
219
+ 'marketBuyRequiresPrice': False,
220
+ 'marketBuyByCost': False,
221
+ 'selfTradePrevention': False,
222
+ 'iceberg': False,
223
+ },
224
+ 'createOrders': None,
225
+ 'fetchMyTrades': {
226
+ 'marginMode': False,
227
+ 'limit': 100,
228
+ 'daysBack': None,
229
+ 'untilDays': None,
230
+ },
231
+ 'fetchOrder': {
232
+ 'marginMode': False,
233
+ 'trigger': False,
234
+ 'trailing': False,
235
+ },
236
+ 'fetchOpenOrders': {
237
+ 'marginMode': False,
238
+ 'limit': 500,
239
+ 'trigger': False,
240
+ 'trailing': False,
241
+ },
242
+ 'fetchOrders': None,
243
+ 'fetchClosedOrders': None,
244
+ 'fetchOHLCV': {
245
+ 'limit': 300,
246
+ },
247
+ },
248
+ 'swap': {
249
+ 'linear': None,
250
+ 'inverse': None,
251
+ },
252
+ 'future': {
253
+ 'linear': None,
254
+ 'inverse': None,
255
+ },
256
+ },
198
257
  'exceptions': {
199
258
  '0201': AuthenticationError, # Invalid Nonce or Invalid Credentials
200
259
  '104': InvalidNonce, # Cannot perform request - nonce must be higher than 1520307203724237
@@ -227,6 +227,79 @@ class bitteam(Exchange, ImplicitAPI):
227
227
  'BUSD': True,
228
228
  },
229
229
  },
230
+ 'features': {
231
+ 'spot': {
232
+ 'sandbox': False,
233
+ 'createOrder': {
234
+ 'marginMode': False,
235
+ 'triggerPrice': False,
236
+ 'triggerPriceType': None,
237
+ 'triggerDirection': None,
238
+ 'stopLossPrice': False,
239
+ 'takeProfitPrice': False,
240
+ 'attachedStopLossTakeProfit': None,
241
+ 'timeInForce': {
242
+ 'IOC': False,
243
+ 'FOK': False,
244
+ 'PO': False,
245
+ 'GTD': False,
246
+ },
247
+ 'hedged': False,
248
+ 'trailing': False,
249
+ 'leverage': False,
250
+ 'marketBuyRequiresPrice': False,
251
+ 'marketBuyByCost': False,
252
+ 'selfTradePrevention': False,
253
+ 'iceberg': False,
254
+ },
255
+ 'createOrders': None,
256
+ 'fetchMyTrades': {
257
+ 'marginMode': False,
258
+ 'limit': 100,
259
+ 'daysBack': 100000,
260
+ 'untilDays': 100000,
261
+ },
262
+ 'fetchOrder': {
263
+ 'marginMode': False,
264
+ 'trigger': False,
265
+ 'trailing': False,
266
+ },
267
+ 'fetchOpenOrders': {
268
+ 'marginMode': False,
269
+ 'limit': 100,
270
+ 'trigger': False,
271
+ 'trailing': False,
272
+ },
273
+ 'fetchOrders': {
274
+ 'marginMode': True,
275
+ 'limit': 100,
276
+ 'daysBack': None,
277
+ 'untilDays': None,
278
+ 'trigger': False,
279
+ 'trailing': False,
280
+ },
281
+ 'fetchClosedOrders': {
282
+ 'marginMode': False,
283
+ 'limit': 100,
284
+ 'daysBack': None,
285
+ 'daysBackCanceled': None,
286
+ 'untilDays': None,
287
+ 'trigger': False,
288
+ 'trailing': False,
289
+ },
290
+ 'fetchOHLCV': {
291
+ 'limit': 1000,
292
+ },
293
+ },
294
+ 'swap': {
295
+ 'linear': None,
296
+ 'inverse': None,
297
+ },
298
+ 'future': {
299
+ 'linear': None,
300
+ 'inverse': None,
301
+ },
302
+ },
230
303
  'exceptions': {
231
304
  'exact': {
232
305
  '400002': BadSymbol, # {"ok":false,"code":400002,"message":"An order cannot be created on a deactivated pair"}