ccxt 4.4.49__py2.py3-none-any.whl → 4.4.51__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 (71) 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/alpaca.py +63 -2
  7. ccxt/async_support/__init__.py +1 -1
  8. ccxt/async_support/alpaca.py +63 -2
  9. ccxt/async_support/base/exchange.py +1 -1
  10. ccxt/async_support/binance.py +39 -20
  11. ccxt/async_support/blofin.py +5 -1
  12. ccxt/async_support/coinex.py +4 -4
  13. ccxt/async_support/coinmetro.py +16 -3
  14. ccxt/async_support/deribit.py +11 -3
  15. ccxt/async_support/gate.py +1 -1
  16. ccxt/async_support/hollaex.py +14 -17
  17. ccxt/async_support/htx.py +5 -3
  18. ccxt/async_support/kucoin.py +49 -69
  19. ccxt/async_support/mexc.py +24 -8
  20. ccxt/async_support/okcoin.py +13 -5
  21. ccxt/async_support/onetrading.py +1 -1
  22. ccxt/async_support/paradex.py +1 -1
  23. ccxt/async_support/paymium.py +42 -0
  24. ccxt/async_support/probit.py +77 -8
  25. ccxt/async_support/timex.py +67 -0
  26. ccxt/async_support/tokocrypto.py +81 -4
  27. ccxt/async_support/tradeogre.py +58 -1
  28. ccxt/async_support/vertex.py +65 -2
  29. ccxt/async_support/wavesexchange.py +73 -0
  30. ccxt/async_support/wazirx.py +59 -3
  31. ccxt/async_support/whitebit.py +79 -4
  32. ccxt/async_support/xt.py +112 -0
  33. ccxt/async_support/yobit.py +56 -0
  34. ccxt/async_support/zaif.py +55 -0
  35. ccxt/async_support/zonda.py +58 -0
  36. ccxt/base/exchange.py +72 -4
  37. ccxt/binance.py +39 -20
  38. ccxt/blofin.py +5 -1
  39. ccxt/coinex.py +4 -4
  40. ccxt/coinmetro.py +16 -3
  41. ccxt/deribit.py +11 -3
  42. ccxt/gate.py +1 -1
  43. ccxt/hollaex.py +14 -17
  44. ccxt/htx.py +5 -3
  45. ccxt/kucoin.py +49 -69
  46. ccxt/mexc.py +24 -8
  47. ccxt/okcoin.py +13 -5
  48. ccxt/onetrading.py +1 -1
  49. ccxt/paradex.py +1 -1
  50. ccxt/paymium.py +42 -0
  51. ccxt/pro/__init__.py +1 -1
  52. ccxt/pro/binance.py +2 -0
  53. ccxt/pro/blofin.py +8 -0
  54. ccxt/pro/coinex.py +4 -1
  55. ccxt/probit.py +77 -8
  56. ccxt/timex.py +67 -0
  57. ccxt/tokocrypto.py +81 -4
  58. ccxt/tradeogre.py +58 -1
  59. ccxt/vertex.py +65 -2
  60. ccxt/wavesexchange.py +73 -0
  61. ccxt/wazirx.py +59 -3
  62. ccxt/whitebit.py +79 -4
  63. ccxt/xt.py +112 -0
  64. ccxt/yobit.py +56 -0
  65. ccxt/zaif.py +55 -0
  66. ccxt/zonda.py +58 -0
  67. {ccxt-4.4.49.dist-info → ccxt-4.4.51.dist-info}/METADATA +18 -18
  68. {ccxt-4.4.49.dist-info → ccxt-4.4.51.dist-info}/RECORD +71 -71
  69. {ccxt-4.4.49.dist-info → ccxt-4.4.51.dist-info}/WHEEL +1 -1
  70. {ccxt-4.4.49.dist-info → ccxt-4.4.51.dist-info}/LICENSE.txt +0 -0
  71. {ccxt-4.4.49.dist-info → ccxt-4.4.51.dist-info}/top_level.txt +0 -0
ccxt/probit.py CHANGED
@@ -103,7 +103,7 @@ class probit(Exchange, ImplicitAPI):
103
103
  'fetchWithdrawal': False,
104
104
  'fetchWithdrawals': True,
105
105
  'reduceMargin': False,
106
- 'sandbox': True,
106
+ 'sandbox': False,
107
107
  'setLeverage': False,
108
108
  'setMarginMode': False,
109
109
  'setPositionMode': False,
@@ -185,6 +185,73 @@ class probit(Exchange, ImplicitAPI):
185
185
  'taker': self.parse_number('0.002'),
186
186
  },
187
187
  },
188
+ 'features': {
189
+ 'spot': {
190
+ 'sandbox': False,
191
+ 'createOrder': {
192
+ 'marginMode': False,
193
+ 'triggerPrice': False,
194
+ 'triggerDirection': False,
195
+ 'triggerPriceType': None,
196
+ 'stopLossPrice': False,
197
+ 'takeProfitPrice': False,
198
+ 'attachedStopLossTakeProfit': None,
199
+ # todo
200
+ 'timeInForce': {
201
+ 'IOC': True,
202
+ 'FOK': True,
203
+ 'PO': False,
204
+ 'GTD': False,
205
+ },
206
+ 'hedged': False,
207
+ 'trailing': False,
208
+ 'leverage': False,
209
+ 'marketBuyByCost': True,
210
+ 'marketBuyRequiresPrice': False,
211
+ 'selfTradePrevention': False,
212
+ 'iceberg': False,
213
+ },
214
+ 'createOrders': None,
215
+ 'fetchMyTrades': {
216
+ 'marginMode': False,
217
+ 'limit': 1000,
218
+ 'daysBack': 100000, # todo
219
+ 'untilDays': 100000, # todo
220
+ },
221
+ 'fetchOrder': {
222
+ 'marginMode': False,
223
+ 'trigger': False,
224
+ 'trailing': False,
225
+ },
226
+ 'fetchOpenOrders': {
227
+ 'marginMode': False,
228
+ 'limit': None,
229
+ 'trigger': False,
230
+ 'trailing': False,
231
+ },
232
+ 'fetchOrders': None,
233
+ 'fetchClosedOrders': {
234
+ 'marginMode': False,
235
+ 'limit': 1000,
236
+ 'daysBack': 100000, # todo
237
+ 'daysBackCanceled': 1, # todo
238
+ 'untilDays': 90,
239
+ 'trigger': False,
240
+ 'trailing': False,
241
+ },
242
+ 'fetchOHLCV': {
243
+ 'limit': 4000,
244
+ },
245
+ },
246
+ 'swap': {
247
+ 'linear': None,
248
+ 'inverse': None,
249
+ },
250
+ 'future': {
251
+ 'linear': None,
252
+ 'inverse': None,
253
+ },
254
+ },
188
255
  'exceptions': {
189
256
  'exact': {
190
257
  'UNAUTHORIZED': AuthenticationError,
@@ -923,6 +990,7 @@ class probit(Exchange, ImplicitAPI):
923
990
  :param int [since]: timestamp in ms of the earliest candle to fetch
924
991
  :param int [limit]: the maximum amount of candles to fetch
925
992
  :param dict [params]: extra parameters specific to the exchange API endpoint
993
+ :param str [params.until]: timestamp in ms of the earliest candle to fetch
926
994
  :returns int[][]: A list of candles ordered, open, high, low, close, volume
927
995
  """
928
996
  self.load_markets()
@@ -938,18 +1006,19 @@ class probit(Exchange, ImplicitAPI):
938
1006
  'limit': requestLimit, # max 1000
939
1007
  }
940
1008
  now = self.milliseconds()
941
- duration = self.parse_timeframe(timeframe)
1009
+ until = self.safe_integer(params, 'until')
1010
+ durationMilliseconds = self.parse_timeframe(timeframe) * 1000
942
1011
  startTime = since
943
- endTime = now
1012
+ endTime = until - durationMilliseconds if (until is not None) else now
944
1013
  if since is None:
945
1014
  if limit is None:
946
1015
  limit = requestLimit
947
- startTime = now - limit * duration * 1000
1016
+ startLimit = limit - 1
1017
+ startTime = endTime - startLimit * durationMilliseconds
948
1018
  else:
949
- if limit is None:
950
- endTime = now
951
- else:
952
- endTime = self.sum(since, self.sum(limit, 1) * duration * 1000)
1019
+ if limit is not None:
1020
+ endByLimit = self.sum(since, limit * durationMilliseconds)
1021
+ endTime = min(endTime, endByLimit)
953
1022
  startTimeNormalized = self.normalize_ohlcv_timestamp(startTime, timeframe)
954
1023
  endTimeNormalized = self.normalize_ohlcv_timestamp(endTime, timeframe, True)
955
1024
  request['start_time'] = startTimeNormalized
ccxt/timex.py CHANGED
@@ -281,6 +281,73 @@ class timex(Exchange, ImplicitAPI):
281
281
  'defaultSort': 'timestamp,asc',
282
282
  'defaultSortOrders': 'createdAt,asc',
283
283
  },
284
+ 'features': {
285
+ 'spot': {
286
+ 'sandbox': False,
287
+ 'createOrder': {
288
+ 'marginMode': False,
289
+ 'triggerPrice': False,
290
+ 'triggerDirection': False,
291
+ 'triggerPriceType': None,
292
+ 'stopLossPrice': False,
293
+ 'takeProfitPrice': False,
294
+ 'attachedStopLossTakeProfit': None,
295
+ # todo
296
+ 'timeInForce': {
297
+ 'IOC': True,
298
+ 'FOK': True,
299
+ 'PO': False,
300
+ 'GTD': True,
301
+ },
302
+ 'hedged': False,
303
+ 'trailing': False,
304
+ 'leverage': False,
305
+ 'marketBuyByCost': False,
306
+ 'marketBuyRequiresPrice': False,
307
+ 'selfTradePrevention': False,
308
+ 'iceberg': False,
309
+ },
310
+ 'createOrders': None,
311
+ 'fetchMyTrades': {
312
+ 'marginMode': False,
313
+ 'limit': 100, # todo
314
+ 'daysBack': 100000, # todo
315
+ 'untilDays': 100000, # todo
316
+ },
317
+ 'fetchOrder': {
318
+ 'marginMode': False,
319
+ 'trigger': False,
320
+ 'trailing': False,
321
+ },
322
+ 'fetchOpenOrders': {
323
+ 'marginMode': False,
324
+ 'limit': 100, # todo
325
+ 'trigger': False,
326
+ 'trailing': False,
327
+ },
328
+ 'fetchOrders': None, # todo
329
+ 'fetchClosedOrders': {
330
+ 'marginMode': False,
331
+ 'limit': 100, # todo
332
+ 'daysBack': 100000, # todo
333
+ 'daysBackCanceled': 1, # todo
334
+ 'untilDays': 100000, # todo
335
+ 'trigger': False,
336
+ 'trailing': False,
337
+ },
338
+ 'fetchOHLCV': {
339
+ 'limit': None,
340
+ },
341
+ },
342
+ 'swap': {
343
+ 'linear': None,
344
+ 'inverse': None,
345
+ },
346
+ 'future': {
347
+ 'linear': None,
348
+ 'inverse': None,
349
+ },
350
+ },
284
351
  })
285
352
 
286
353
  def fetch_time(self, params={}):
ccxt/tokocrypto.py CHANGED
@@ -619,6 +619,79 @@ class tokocrypto(Exchange, ImplicitAPI):
619
619
  'MAX_POSITION': InvalidOrder, # {"code":-2010,"msg":"Filter failure: MAX_POSITION"}
620
620
  },
621
621
  },
622
+ 'features': {
623
+ 'spot': {
624
+ 'sandbox': False,
625
+ 'createOrder': {
626
+ 'marginMode': False,
627
+ 'triggerPrice': True,
628
+ 'triggerDirection': False,
629
+ 'triggerPriceType': None,
630
+ 'stopLossPrice': False, # todo
631
+ 'takeProfitPrice': False, # todo
632
+ 'attachedStopLossTakeProfit': None,
633
+ 'timeInForce': {
634
+ 'IOC': True,
635
+ 'FOK': True,
636
+ 'PO': True,
637
+ 'GTD': False,
638
+ },
639
+ 'hedged': False,
640
+ 'trailing': False,
641
+ 'leverage': False,
642
+ 'marketBuyByCost': True,
643
+ 'marketBuyRequiresPrice': True,
644
+ 'selfTradePrevention': True, # todo
645
+ 'iceberg': True, # todo
646
+ },
647
+ 'createOrders': None,
648
+ 'fetchMyTrades': {
649
+ 'marginMode': False,
650
+ 'limit': 1000,
651
+ 'daysBack': 100000, # todo
652
+ 'untilDays': 100000, # todo
653
+ },
654
+ 'fetchOrder': {
655
+ 'marginMode': False,
656
+ 'trigger': False,
657
+ 'trailing': False,
658
+ },
659
+ 'fetchOpenOrders': {
660
+ 'marginMode': False,
661
+ 'limit': 1000,
662
+ 'trigger': False,
663
+ 'trailing': False,
664
+ },
665
+ 'fetchOrders': {
666
+ 'marginMode': False,
667
+ 'limit': 1000,
668
+ 'daysBack': 100000,
669
+ 'untilDays': 100000,
670
+ 'trigger': False,
671
+ 'trailing': False,
672
+ },
673
+ 'fetchClosedOrders': {
674
+ 'marginMode': False,
675
+ 'limit': 1000,
676
+ 'daysBack': 100000, # todo
677
+ 'daysBackCanceled': 1, # todo
678
+ 'untilDays': 100000, # todo
679
+ 'trigger': False,
680
+ 'trailing': False,
681
+ },
682
+ 'fetchOHLCV': {
683
+ 'limit': 1000,
684
+ },
685
+ },
686
+ 'swap': {
687
+ 'linear': None,
688
+ 'inverse': None,
689
+ },
690
+ 'future': {
691
+ 'linear': None,
692
+ 'inverse': None,
693
+ },
694
+ },
622
695
  })
623
696
 
624
697
  def nonce(self):
@@ -635,9 +708,14 @@ class tokocrypto(Exchange, ImplicitAPI):
635
708
  """
636
709
  response = self.publicGetOpenV1CommonTime(params)
637
710
  #
711
+ # {
712
+ # "code": 0,
713
+ # "msg": "Success",
714
+ # "data": null,
715
+ # "timestamp": 1737378074159
716
+ # }
638
717
  #
639
- #
640
- return self.safe_integer(response, 'serverTime')
718
+ return self.safe_integer(response, 'timestamp')
641
719
 
642
720
  def fetch_markets(self, params={}) -> List[Market]:
643
721
  """
@@ -1575,7 +1653,6 @@ class tokocrypto(Exchange, ImplicitAPI):
1575
1653
  create a trade order
1576
1654
 
1577
1655
  https://www.tokocrypto.com/apidocs/#new-order--signed
1578
- https://www.tokocrypto.com/apidocs/#account-trade-list-signed
1579
1656
 
1580
1657
  :param str symbol: unified symbol of the market to create an order in
1581
1658
  :param str type: 'market' or 'limit'
@@ -1733,7 +1810,7 @@ class tokocrypto(Exchange, ImplicitAPI):
1733
1810
  def fetch_order(self, id: str, symbol: Str = None, params={}):
1734
1811
  """
1735
1812
 
1736
- https://www.tokocrypto.com/apidocs/#all-orders-signed
1813
+ https://www.tokocrypto.com/apidocs/#query-order-signed
1737
1814
 
1738
1815
  fetches information on an order made by the user
1739
1816
  :param str id: order id
ccxt/tradeogre.py CHANGED
@@ -164,6 +164,57 @@ class tradeogre(Exchange, ImplicitAPI):
164
164
  },
165
165
  'options': {
166
166
  },
167
+ 'features': {
168
+ 'spot': {
169
+ 'sandbox': False,
170
+ 'createOrder': {
171
+ 'marginMode': False,
172
+ 'triggerPrice': False,
173
+ 'triggerDirection': False,
174
+ 'triggerPriceType': None,
175
+ 'stopLossPrice': False,
176
+ 'takeProfitPrice': False,
177
+ 'attachedStopLossTakeProfit': None,
178
+ 'timeInForce': {
179
+ 'IOC': False,
180
+ 'FOK': False,
181
+ 'PO': False,
182
+ 'GTD': False,
183
+ },
184
+ 'hedged': False,
185
+ 'trailing': False,
186
+ 'leverage': False,
187
+ 'marketBuyByCost': False,
188
+ 'marketBuyRequiresPrice': False,
189
+ 'selfTradePrevention': False,
190
+ 'iceberg': False,
191
+ },
192
+ 'createOrders': None,
193
+ 'fetchMyTrades': None,
194
+ 'fetchOrder': {
195
+ 'marginMode': False,
196
+ 'trigger': False,
197
+ 'trailing': False,
198
+ },
199
+ 'fetchOpenOrders': {
200
+ 'marginMode': False,
201
+ 'limit': None,
202
+ 'trigger': False,
203
+ 'trailing': False,
204
+ },
205
+ 'fetchOrders': None,
206
+ 'fetchClosedOrders': None,
207
+ 'fetchOHLCV': None, # todo
208
+ },
209
+ 'swap': {
210
+ 'linear': None,
211
+ 'inverse': None,
212
+ },
213
+ 'future': {
214
+ 'linear': None,
215
+ 'inverse': None,
216
+ },
217
+ },
167
218
  })
168
219
 
169
220
  def fetch_markets(self, params={}) -> List[Market]:
@@ -442,6 +493,9 @@ class tradeogre(Exchange, ImplicitAPI):
442
493
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
443
494
  """
444
495
  create a trade order
496
+
497
+ https://tradeogre.com/help/api#:~:text=u%20%27%7Bpublic%7D%3A%7Bprivate%7D%27-,Submit%20Buy%20Order
498
+
445
499
  :param str symbol: unified symbol of the market to create an order in
446
500
  :param str type: must be 'limit'
447
501
  :param str side: 'buy' or 'sell'
@@ -499,6 +553,9 @@ class tradeogre(Exchange, ImplicitAPI):
499
553
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
500
554
  """
501
555
  fetch all unfilled currently open orders
556
+
557
+ https://tradeogre.com/help/api#:~:text=%7B%22success%22%3Atrue%7D-,Get%20Orders,-Method%20(POST)
558
+
502
559
  :param str symbol: unified market symbol of the market orders were made in
503
560
  :param int [since]: the earliest time in ms to fetch orders for
504
561
  :param int [limit]: the maximum number of order structures to retrieve
@@ -519,7 +576,7 @@ class tradeogre(Exchange, ImplicitAPI):
519
576
  """
520
577
  fetches information on an order made by the user
521
578
 
522
- https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---order-status
579
+ https://tradeogre.com/help/api#:~:text=market%22%3A%22XMR%2DBTC%22%7D%5D-,Get%20Order,-Method%20(GET)
523
580
 
524
581
  :param str id: order id
525
582
  :param str symbol: unified symbol of the market the order was made in
ccxt/vertex.py CHANGED
@@ -330,6 +330,69 @@ class vertex(Exchange, ImplicitAPI):
330
330
  'timeDifference': 0, # the difference between system clock and exchange server clock
331
331
  'brokerId': 5930043274845996,
332
332
  },
333
+ 'features': {
334
+ 'default': {
335
+ 'sandbox': True,
336
+ 'createOrder': {
337
+ 'marginMode': False,
338
+ 'triggerPrice': True, # todo
339
+ 'triggerDirection': False,
340
+ 'triggerPriceType': None,
341
+ 'stopLossPrice': True, # todo
342
+ 'takeProfitPrice': True, # todo
343
+ 'attachedStopLossTakeProfit': None,
344
+ 'timeInForce': {
345
+ 'IOC': False,
346
+ 'FOK': False,
347
+ 'PO': True,
348
+ 'GTD': True,
349
+ },
350
+ 'hedged': False,
351
+ 'trailing': False,
352
+ 'leverage': False,
353
+ 'marketBuyByCost': True, # todo
354
+ 'marketBuyRequiresPrice': True, # todo fix implementation
355
+ 'selfTradePrevention': False,
356
+ 'iceberg': False,
357
+ },
358
+ 'createOrders': None,
359
+ 'fetchMyTrades': {
360
+ 'marginMode': False,
361
+ 'limit': 500,
362
+ 'daysBack': 100000, # todo
363
+ 'untilDays': None,
364
+ },
365
+ 'fetchOrder': {
366
+ 'marginMode': False,
367
+ 'trigger': False,
368
+ 'trailing': False,
369
+ },
370
+ 'fetchOpenOrders': {
371
+ 'marginMode': False,
372
+ 'limit': 500,
373
+ 'trigger': True,
374
+ 'trailing': False,
375
+ },
376
+ 'fetchOrders': None, # todo, only for trigger
377
+ 'fetchClosedOrders': None, # todo through fetchOrders
378
+ 'fetchOHLCV': {
379
+ 'limit': 1000,
380
+ },
381
+ },
382
+ 'spot': {
383
+ 'extends': 'default',
384
+ },
385
+ 'swap': {
386
+ 'linear': {
387
+ 'extends': 'default',
388
+ },
389
+ 'inverse': None,
390
+ },
391
+ 'future': {
392
+ 'linear': None,
393
+ 'inverse': None,
394
+ },
395
+ },
333
396
  })
334
397
 
335
398
  def set_sandbox_mode(self, enabled):
@@ -2104,7 +2167,7 @@ class vertex(Exchange, ImplicitAPI):
2104
2167
  # "product_id": 1,
2105
2168
  # "orders": [
2106
2169
  # {
2107
- # "product_id": 1,
2170
+ # "product_id": 2,
2108
2171
  # "sender": "0x7a5ec2748e9065794491a8d29dcf3f9edb8d7c43000000000000000000000000",
2109
2172
  # "price_x18": "1000000000000000000",
2110
2173
  # "amount": "1000000000000000000",
@@ -2113,7 +2176,7 @@ class vertex(Exchange, ImplicitAPI):
2113
2176
  # "order_type": "default",
2114
2177
  # "unfilled_amount": "1000000000000000000",
2115
2178
  # "digest": "0x0000000000000000000000000000000000000000000000000000000000000000",
2116
- # "placed_at": 1682437739,
2179
+ # "placed_at": 1682437737,
2117
2180
  # "order_type": "ioc"
2118
2181
  # }
2119
2182
  # ]
ccxt/wavesexchange.py CHANGED
@@ -357,6 +357,79 @@ class wavesexchange(Exchange, ImplicitAPI):
357
357
  'BEP20': 'BSC',
358
358
  },
359
359
  },
360
+ 'features': {
361
+ 'spot': {
362
+ 'sandbox': True,
363
+ 'createOrder': {
364
+ 'marginMode': False,
365
+ 'triggerPrice': True, # todo
366
+ 'triggerDirection': False,
367
+ 'triggerPriceType': None,
368
+ 'stopLossPrice': False, # todo
369
+ 'takeProfitPrice': False, # todo
370
+ 'attachedStopLossTakeProfit': None,
371
+ 'timeInForce': {
372
+ 'IOC': False,
373
+ 'FOK': False,
374
+ 'PO': False,
375
+ 'GTD': True, # todo
376
+ },
377
+ 'hedged': False,
378
+ 'trailing': False,
379
+ 'leverage': False,
380
+ 'marketBuyByCost': False, # todo
381
+ 'marketBuyRequiresPrice': True,
382
+ 'selfTradePrevention': False,
383
+ 'iceberg': False,
384
+ },
385
+ 'createOrders': None,
386
+ 'fetchMyTrades': {
387
+ 'marginMode': False,
388
+ 'limit': 100, # todo
389
+ 'daysBack': 100000, # todo
390
+ 'untilDays': 100000, # todo
391
+ },
392
+ 'fetchOrder': {
393
+ 'marginMode': False,
394
+ 'trigger': False,
395
+ 'trailing': False,
396
+ },
397
+ 'fetchOpenOrders': {
398
+ 'marginMode': False,
399
+ 'limit': 100, # todo
400
+ 'trigger': False,
401
+ 'trailing': False,
402
+ },
403
+ 'fetchOrders': {
404
+ 'marginMode': False,
405
+ 'limit': 100, # todo
406
+ 'daysBack': None,
407
+ 'untilDays': None,
408
+ 'trigger': False,
409
+ 'trailing': False,
410
+ }, # todo
411
+ 'fetchClosedOrders': {
412
+ 'marginMode': False,
413
+ 'limit': 100,
414
+ 'daysBack': 100000, # todo
415
+ 'daysBackCanceled': 1, # todo
416
+ 'untilDays': 100000, # todo
417
+ 'trigger': False,
418
+ 'trailing': False,
419
+ },
420
+ 'fetchOHLCV': {
421
+ 'limit': None, # todo
422
+ },
423
+ },
424
+ 'swap': {
425
+ 'linear': None,
426
+ 'inverse': None,
427
+ },
428
+ 'future': {
429
+ 'linear': None,
430
+ 'inverse': None,
431
+ },
432
+ },
360
433
  'commonCurrencies': {
361
434
  'EGG': 'Waves Ducks',
362
435
  },
ccxt/wazirx.py CHANGED
@@ -217,6 +217,62 @@ class wazirx(Exchange, ImplicitAPI):
217
217
  # You can get network from fetchCurrencies
218
218
  },
219
219
  },
220
+ 'features': {
221
+ 'spot': {
222
+ 'sandbox': False,
223
+ 'createOrder': {
224
+ 'marginMode': False,
225
+ 'triggerPrice': True,
226
+ 'triggerDirection': False,
227
+ 'triggerPriceType': None,
228
+ 'stopLossPrice': False, # todo
229
+ 'takeProfitPrice': False, # todo
230
+ 'attachedStopLossTakeProfit': None,
231
+ 'timeInForce': {
232
+ 'IOC': False,
233
+ 'FOK': False,
234
+ 'PO': False,
235
+ 'GTD': False,
236
+ },
237
+ 'hedged': False,
238
+ 'trailing': False,
239
+ 'leverage': False,
240
+ 'marketBuyByCost': False,
241
+ 'marketBuyRequiresPrice': False,
242
+ 'selfTradePrevention': False,
243
+ 'iceberg': False,
244
+ },
245
+ 'createOrders': None,
246
+ 'fetchMyTrades': None,
247
+ 'fetchOrder': None, # todo
248
+ 'fetchOpenOrders': {
249
+ 'marginMode': False,
250
+ 'limit': None,
251
+ 'trigger': False,
252
+ 'trailing': False,
253
+ },
254
+ 'fetchOrders': {
255
+ 'marginMode': False,
256
+ 'limit': 1000,
257
+ 'daysBack': 100000, # todo
258
+ 'untilDays': 100000, # todo
259
+ 'trigger': False,
260
+ 'trailing': False,
261
+ },
262
+ 'fetchClosedOrders': None,
263
+ 'fetchOHLCV': {
264
+ 'limit': 2000,
265
+ },
266
+ },
267
+ 'swap': {
268
+ 'linear': None,
269
+ 'inverse': None,
270
+ },
271
+ 'future': {
272
+ 'linear': None,
273
+ 'inverse': None,
274
+ },
275
+ },
220
276
  })
221
277
 
222
278
  def fetch_markets(self, params={}) -> List[Market]:
@@ -878,10 +934,10 @@ class wazirx(Exchange, ImplicitAPI):
878
934
  'type': 'limit',
879
935
  }
880
936
  request['price'] = self.price_to_precision(symbol, price)
881
- stopPrice = self.safe_string(params, 'stopPrice')
882
- if stopPrice is not None:
937
+ triggerPrice = self.safe_string_2(params, 'triggerPrice', 'stopPrice')
938
+ if triggerPrice is not None:
883
939
  request['type'] = 'stop_limit'
884
- request['stopPrice'] = self.price_to_precision(symbol, stopPrice)
940
+ request['stopPrice'] = self.price_to_precision(symbol, triggerPrice)
885
941
  response = self.privatePostOrder(self.extend(request, params))
886
942
  # {
887
943
  # "id": 28,