ccxt 4.4.48__py2.py3-none-any.whl → 4.4.50__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 (97) 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 +62 -1
  7. ccxt/async_support/__init__.py +1 -1
  8. ccxt/async_support/alpaca.py +62 -1
  9. ccxt/async_support/base/exchange.py +1 -1
  10. ccxt/async_support/binance.py +8 -4
  11. ccxt/async_support/bingx.py +73 -29
  12. ccxt/async_support/bitget.py +12 -10
  13. ccxt/async_support/blofin.py +1 -1
  14. ccxt/async_support/coinex.py +3 -3
  15. ccxt/async_support/coinsph.py +17 -8
  16. ccxt/async_support/deribit.py +82 -0
  17. ccxt/async_support/digifinex.py +125 -10
  18. ccxt/async_support/ellipx.py +61 -0
  19. ccxt/async_support/exmo.py +58 -0
  20. ccxt/async_support/hitbtc.py +99 -0
  21. ccxt/async_support/hollaex.py +85 -16
  22. ccxt/async_support/huobijp.py +73 -0
  23. ccxt/async_support/hyperliquid.py +22 -1
  24. ccxt/async_support/idex.py +71 -0
  25. ccxt/async_support/independentreserve.py +64 -0
  26. ccxt/async_support/indodax.py +61 -0
  27. ccxt/async_support/kucoin.py +47 -67
  28. ccxt/async_support/kuna.py +60 -1
  29. ccxt/async_support/latoken.py +64 -0
  30. ccxt/async_support/lbank.py +70 -0
  31. ccxt/async_support/luno.py +73 -0
  32. ccxt/async_support/lykke.py +64 -0
  33. ccxt/async_support/mercado.py +65 -0
  34. ccxt/async_support/mexc.py +4 -3
  35. ccxt/async_support/myokx.py +10 -0
  36. ccxt/async_support/ndax.py +71 -0
  37. ccxt/async_support/novadax.py +74 -0
  38. ccxt/async_support/oceanex.py +69 -0
  39. ccxt/async_support/okcoin.py +92 -7
  40. ccxt/async_support/onetrading.py +66 -0
  41. ccxt/async_support/oxfun.py +66 -0
  42. ccxt/async_support/p2b.py +63 -1
  43. ccxt/async_support/paradex.py +68 -0
  44. ccxt/async_support/paymium.py +42 -0
  45. ccxt/async_support/probit.py +68 -1
  46. ccxt/async_support/timex.py +67 -0
  47. ccxt/async_support/tokocrypto.py +81 -4
  48. ccxt/async_support/tradeogre.py +58 -1
  49. ccxt/async_support/whitebit.py +10 -4
  50. ccxt/base/exchange.py +62 -1
  51. ccxt/binance.py +8 -4
  52. ccxt/bingx.py +73 -29
  53. ccxt/bitget.py +12 -10
  54. ccxt/blofin.py +1 -1
  55. ccxt/coinex.py +3 -3
  56. ccxt/coinsph.py +17 -8
  57. ccxt/deribit.py +82 -0
  58. ccxt/digifinex.py +125 -10
  59. ccxt/ellipx.py +61 -0
  60. ccxt/exmo.py +58 -0
  61. ccxt/hitbtc.py +99 -0
  62. ccxt/hollaex.py +85 -16
  63. ccxt/huobijp.py +73 -0
  64. ccxt/hyperliquid.py +22 -1
  65. ccxt/idex.py +71 -0
  66. ccxt/independentreserve.py +64 -0
  67. ccxt/indodax.py +61 -0
  68. ccxt/kucoin.py +47 -67
  69. ccxt/kuna.py +60 -1
  70. ccxt/latoken.py +64 -0
  71. ccxt/lbank.py +70 -0
  72. ccxt/luno.py +73 -0
  73. ccxt/lykke.py +64 -0
  74. ccxt/mercado.py +65 -0
  75. ccxt/mexc.py +4 -3
  76. ccxt/myokx.py +10 -0
  77. ccxt/ndax.py +71 -0
  78. ccxt/novadax.py +74 -0
  79. ccxt/oceanex.py +69 -0
  80. ccxt/okcoin.py +92 -7
  81. ccxt/onetrading.py +66 -0
  82. ccxt/oxfun.py +66 -0
  83. ccxt/p2b.py +63 -1
  84. ccxt/paradex.py +68 -0
  85. ccxt/paymium.py +42 -0
  86. ccxt/pro/__init__.py +1 -1
  87. ccxt/pro/bitmart.py +5 -0
  88. ccxt/probit.py +68 -1
  89. ccxt/timex.py +67 -0
  90. ccxt/tokocrypto.py +81 -4
  91. ccxt/tradeogre.py +58 -1
  92. ccxt/whitebit.py +10 -4
  93. {ccxt-4.4.48.dist-info → ccxt-4.4.50.dist-info}/METADATA +4 -4
  94. {ccxt-4.4.48.dist-info → ccxt-4.4.50.dist-info}/RECORD +97 -97
  95. {ccxt-4.4.48.dist-info → ccxt-4.4.50.dist-info}/LICENSE.txt +0 -0
  96. {ccxt-4.4.48.dist-info → ccxt-4.4.50.dist-info}/WHEEL +0 -0
  97. {ccxt-4.4.48.dist-info → ccxt-4.4.50.dist-info}/top_level.txt +0 -0
ccxt/okcoin.py CHANGED
@@ -222,6 +222,83 @@ class okcoin(Exchange, ImplicitAPI):
222
222
  },
223
223
  },
224
224
  },
225
+ 'features': {
226
+ 'spot': {
227
+ 'sandbox': False,
228
+ 'createOrder': {
229
+ 'marginMode': True,
230
+ 'triggerPrice': True,
231
+ 'triggerDirection': True, # todo
232
+ 'triggerPriceType': {
233
+ 'last': True,
234
+ 'mark': False,
235
+ 'index': False,
236
+ },
237
+ 'stopLossPrice': True, # todo revise trigger
238
+ 'takeProfitPrice': True, # todo revise trigger
239
+ 'attachedStopLossTakeProfit': {
240
+ 'triggerPriceType': {
241
+ 'last': True,
242
+ 'mark': False,
243
+ 'index': False,
244
+ },
245
+ 'price': True,
246
+ },
247
+ 'timeInForce': {
248
+ 'IOC': True,
249
+ 'FOK': True,
250
+ 'PO': True,
251
+ 'GTD': False,
252
+ },
253
+ 'hedged': False,
254
+ 'trailing': True, # todo
255
+ 'leverage': False,
256
+ 'marketBuyByCost': True,
257
+ 'marketBuyRequiresPrice': True,
258
+ 'selfTradePrevention': False,
259
+ 'iceberg': True, # todo
260
+ },
261
+ 'createOrders': None, # todo
262
+ 'fetchMyTrades': {
263
+ 'marginMode': False,
264
+ 'limit': 100,
265
+ 'daysBack': 90,
266
+ 'untilDays': 90, # todo
267
+ },
268
+ 'fetchOrder': {
269
+ 'marginMode': False,
270
+ 'trigger': True,
271
+ 'trailing': True, # todo
272
+ },
273
+ 'fetchOpenOrders': {
274
+ 'marginMode': False,
275
+ 'limit': 100,
276
+ 'trigger': True,
277
+ 'trailing': True,
278
+ },
279
+ 'fetchOrders': None,
280
+ 'fetchClosedOrders': {
281
+ 'marginMode': False,
282
+ 'limit': 100,
283
+ 'daysBack': 90, # todo
284
+ 'daysBackCanceled': 1 / 12, # todo: possible more with history endpoint
285
+ 'untilDays': 90, # todo
286
+ 'trigger': True,
287
+ 'trailing': True,
288
+ },
289
+ 'fetchOHLCV': {
290
+ 'limit': 100, # 300 is only possible for 'recent' 1440 candles, which does not make much sense
291
+ },
292
+ },
293
+ 'swap': {
294
+ 'linear': None,
295
+ 'inverse': None,
296
+ },
297
+ 'future': {
298
+ 'linear': None,
299
+ 'inverse': None,
300
+ },
301
+ },
225
302
  'fees': {
226
303
  'trading': {
227
304
  'taker': 0.002,
@@ -630,12 +707,20 @@ class okcoin(Exchange, ImplicitAPI):
630
707
  """
631
708
  response = self.publicGetPublicTime(params)
632
709
  #
633
- # {
634
- # "iso": "2015-01-07T23:47:25.201Z",
635
- # "epoch": 1420674445.201
636
- # }
710
+ # {
711
+ # "code": "0",
712
+ # "data":
713
+ # [
714
+ # {
715
+ # "ts": "1737379360033"
716
+ # }
717
+ # ],
718
+ # "msg": ""
719
+ # }
637
720
  #
638
- return self.parse8601(self.safe_string(response, 'iso'))
721
+ data = self.safe_list(response, 'data')
722
+ timestamp = self.safe_dict(data, 0)
723
+ return self.safe_integer(timestamp, 'ts')
639
724
 
640
725
  def fetch_markets(self, params={}) -> List[Market]:
641
726
  """
@@ -1470,7 +1555,7 @@ class okcoin(Exchange, ImplicitAPI):
1470
1555
  if stopLossDefined:
1471
1556
  stopLossTriggerPrice = self.safe_value_n(stopLoss, ['triggerPrice', 'stopPrice', 'slTriggerPx'])
1472
1557
  if stopLossTriggerPrice is None:
1473
- raise InvalidOrder(self.id + ' createOrder() requires a trigger price in params["stopLoss"]["triggerPrice"], or params["stopLoss"]["stopPrice"], or params["stopLoss"]["slTriggerPx"] for a stop loss order')
1558
+ raise InvalidOrder(self.id + ' createOrder() requires a trigger price in params["stopLoss"]["triggerPrice"] for a stop loss order')
1474
1559
  request['slTriggerPx'] = self.price_to_precision(symbol, stopLossTriggerPrice)
1475
1560
  stopLossLimitPrice = self.safe_value_n(stopLoss, ['price', 'stopLossPrice', 'slOrdPx'])
1476
1561
  stopLossOrderType = self.safe_string(stopLoss, 'type')
@@ -1481,7 +1566,7 @@ class okcoin(Exchange, ImplicitAPI):
1481
1566
  raise InvalidOrder(self.id + ' createOrder() params["stopLoss"]["type"] must be either "limit" or "market"')
1482
1567
  elif stopLossLimitOrderType:
1483
1568
  if stopLossLimitPrice is None:
1484
- raise InvalidOrder(self.id + ' createOrder() requires a limit price in params["stopLoss"]["price"] or params["stopLoss"]["slOrdPx"] for a stop loss limit order')
1569
+ raise InvalidOrder(self.id + ' createOrder() requires a limit price in params["stopLoss"]["price"] for a stop loss limit order')
1485
1570
  else:
1486
1571
  request['slOrdPx'] = self.price_to_precision(symbol, stopLossLimitPrice)
1487
1572
  elif stopLossOrderType == 'market':
ccxt/onetrading.py CHANGED
@@ -302,6 +302,72 @@ class onetrading(Exchange, ImplicitAPI):
302
302
  },
303
303
  'fiat': ['EUR', 'CHF'],
304
304
  },
305
+ 'features': {
306
+ 'spot': {
307
+ 'sandbox': False,
308
+ 'createOrder': {
309
+ 'marginMode': False,
310
+ 'triggerPrice': False,
311
+ 'triggerDirection': False,
312
+ 'triggerPriceType': None,
313
+ 'stopLossPrice': False,
314
+ 'takeProfitPrice': False,
315
+ 'attachedStopLossTakeProfit': None,
316
+ 'timeInForce': {
317
+ 'IOC': True,
318
+ 'FOK': True,
319
+ 'PO': True,
320
+ 'GTD': False,
321
+ },
322
+ 'hedged': False,
323
+ 'trailing': False,
324
+ 'leverage': False,
325
+ 'marketBuyByCost': False,
326
+ 'marketBuyRequiresPrice': False,
327
+ 'selfTradePrevention': False,
328
+ 'iceberg': False,
329
+ },
330
+ 'createOrders': None,
331
+ 'fetchMyTrades': {
332
+ 'marginMode': False,
333
+ 'limit': 100,
334
+ 'daysBack': 100000, # todo
335
+ 'untilDays': 100000, # todo
336
+ },
337
+ 'fetchOrder': {
338
+ 'marginMode': False,
339
+ 'trigger': False,
340
+ 'trailing': False,
341
+ },
342
+ 'fetchOpenOrders': {
343
+ 'marginMode': False,
344
+ 'limit': 100,
345
+ 'trigger': False,
346
+ 'trailing': False,
347
+ },
348
+ 'fetchOrders': None, # todo
349
+ 'fetchClosedOrders': {
350
+ 'marginMode': False,
351
+ 'limit': 100,
352
+ 'daysBack': 100000, # todo
353
+ 'daysBackCanceled': 1 / 12, # todo
354
+ 'untilDays': 100000, # todo
355
+ 'trigger': False,
356
+ 'trailing': False,
357
+ },
358
+ 'fetchOHLCV': {
359
+ 'limit': 5000,
360
+ },
361
+ },
362
+ 'swap': {
363
+ 'linear': None,
364
+ 'inverse': None,
365
+ },
366
+ 'future': {
367
+ 'linear': None,
368
+ 'inverse': None,
369
+ },
370
+ },
305
371
  })
306
372
 
307
373
  def fetch_time(self, params={}):
ccxt/oxfun.py CHANGED
@@ -132,6 +132,7 @@ class oxfun(Exchange, ImplicitAPI):
132
132
  'reduceMargin': False,
133
133
  'repayCrossMargin': False,
134
134
  'repayIsolatedMargin': False,
135
+ 'sandbox': True,
135
136
  'setLeverage': False,
136
137
  'setMargin': False,
137
138
  'setMarginMode': False,
@@ -258,6 +259,71 @@ class oxfun(Exchange, ImplicitAPI):
258
259
  'Optimism': 'OPTIMISM',
259
260
  },
260
261
  },
262
+ 'features': {
263
+ 'default': {
264
+ 'sandbox': True,
265
+ 'createOrder': {
266
+ 'marginMode': False,
267
+ 'triggerPrice': True,
268
+ 'triggerDirection': False,
269
+ 'triggerPriceType': None,
270
+ 'stopLossPrice': False, # todo
271
+ 'takeProfitPrice': False, # todo
272
+ 'attachedStopLossTakeProfit': None,
273
+ 'timeInForce': {
274
+ 'IOC': True,
275
+ 'FOK': True,
276
+ 'PO': True,
277
+ 'GTD': False,
278
+ },
279
+ 'hedged': False,
280
+ 'trailing': False,
281
+ 'leverage': False,
282
+ 'marketBuyByCost': True,
283
+ 'marketBuyRequiresPrice': False,
284
+ 'selfTradePrevention': True, # todo
285
+ 'iceberg': True, # todo
286
+ },
287
+ 'createOrders': {
288
+ 'max': 10, # todo
289
+ },
290
+ 'fetchMyTrades': {
291
+ 'marginMode': False,
292
+ 'limit': 500,
293
+ 'daysBack': 100000, # todo
294
+ 'untilDays': 7,
295
+ },
296
+ 'fetchOrder': {
297
+ 'marginMode': False,
298
+ 'trigger': False,
299
+ 'trailing': False,
300
+ },
301
+ 'fetchOpenOrders': {
302
+ 'marginMode': False,
303
+ 'limit': None,
304
+ 'trigger': False,
305
+ 'trailing': False,
306
+ },
307
+ 'fetchOrders': None,
308
+ 'fetchClosedOrders': None, # todo?
309
+ 'fetchOHLCV': {
310
+ 'limit': 500,
311
+ },
312
+ },
313
+ 'spot': {
314
+ 'extends': 'default',
315
+ },
316
+ 'swap': {
317
+ 'linear': {
318
+ 'extends': 'default',
319
+ },
320
+ 'inverse': None,
321
+ },
322
+ 'future': {
323
+ 'linear': None,
324
+ 'inverse': None,
325
+ },
326
+ },
261
327
  'exceptions': {
262
328
  'exact': {
263
329
  '-0010': OperationFailed, # {"event":null,"success":false,"message":"Validation failed","code":"0010","data":null} - failed transfer
ccxt/p2b.py CHANGED
@@ -81,7 +81,7 @@ class p2b(Exchange, ImplicitAPI):
81
81
  'fetchOpenOrders': True,
82
82
  'fetchOrderBook': True,
83
83
  'fetchOrderBooks': False,
84
- 'fetchOrders': True,
84
+ 'fetchOrders': False,
85
85
  'fetchOrderTrades': True,
86
86
  'fetchPosition': False,
87
87
  'fetchPositionHistory': False,
@@ -188,6 +188,68 @@ class p2b(Exchange, ImplicitAPI):
188
188
  ],
189
189
  },
190
190
  },
191
+ 'features': {
192
+ 'spot': {
193
+ 'sandbox': False,
194
+ 'createOrder': {
195
+ 'marginMode': False,
196
+ 'triggerPrice': False,
197
+ 'triggerDirection': False,
198
+ 'triggerPriceType': None,
199
+ 'stopLossPrice': False,
200
+ 'takeProfitPrice': False,
201
+ 'attachedStopLossTakeProfit': None,
202
+ 'timeInForce': {
203
+ 'IOC': True,
204
+ 'FOK': True,
205
+ 'PO': True,
206
+ 'GTD': False,
207
+ },
208
+ 'hedged': False,
209
+ 'trailing': False,
210
+ 'leverage': False,
211
+ 'marketBuyByCost': False,
212
+ 'marketBuyRequiresPrice': False,
213
+ 'selfTradePrevention': False,
214
+ 'iceberg': False,
215
+ },
216
+ 'createOrders': None,
217
+ 'fetchMyTrades': {
218
+ 'marginMode': False,
219
+ 'limit': 100,
220
+ 'daysBack': 100000, # todo
221
+ 'untilDays': 1,
222
+ },
223
+ 'fetchOrder': None, # todo
224
+ 'fetchOpenOrders': {
225
+ 'marginMode': False,
226
+ 'limit': 100,
227
+ 'trigger': False,
228
+ 'trailing': False,
229
+ },
230
+ 'fetchOrders': None, # todo
231
+ 'fetchClosedOrders': {
232
+ 'marginMode': False,
233
+ 'limit': 100,
234
+ 'daysBack': 100000, # todo
235
+ 'daysBackCanceled': 1 / 12, # todo
236
+ 'untilDays': 1,
237
+ 'trigger': False,
238
+ 'trailing': False,
239
+ },
240
+ 'fetchOHLCV': {
241
+ 'limit': 500,
242
+ },
243
+ },
244
+ 'swap': {
245
+ 'linear': None,
246
+ 'inverse': None,
247
+ },
248
+ 'future': {
249
+ 'linear': None,
250
+ 'inverse': None,
251
+ },
252
+ },
191
253
  'commonCurrencies': {
192
254
  },
193
255
  'precisionMode': TICK_SIZE,
ccxt/paradex.py CHANGED
@@ -280,6 +280,74 @@ class paradex(Exchange, ImplicitAPI):
280
280
  'paradexAccount': None, # add {"privateKey": A, "publicKey": B, "address": C}
281
281
  'broker': 'CCXT',
282
282
  },
283
+ 'features': {
284
+ 'spot': None,
285
+ 'forSwap': {
286
+ 'sandbox': True,
287
+ 'createOrder': {
288
+ 'marginMode': False,
289
+ 'triggerPrice': True,
290
+ 'triggerDirection': True, # todo
291
+ 'triggerPriceType': None,
292
+ 'stopLossPrice': False, # todo
293
+ 'takeProfitPrice': False, # todo
294
+ 'attachedStopLossTakeProfit': None,
295
+ 'timeInForce': {
296
+ 'IOC': True,
297
+ 'FOK': False,
298
+ 'PO': True,
299
+ 'GTD': False,
300
+ },
301
+ 'hedged': False,
302
+ 'trailing': False,
303
+ 'leverage': False,
304
+ 'marketBuyByCost': False,
305
+ 'marketBuyRequiresPrice': False,
306
+ 'selfTradePrevention': True, # todo
307
+ 'iceberg': False,
308
+ },
309
+ 'createOrders': None, # todo
310
+ 'fetchMyTrades': {
311
+ 'marginMode': False,
312
+ 'limit': 100, # todo
313
+ 'daysBack': 100000, # todo
314
+ 'untilDays': 100000, # todo
315
+ },
316
+ 'fetchOrder': {
317
+ 'marginMode': False,
318
+ 'trigger': False,
319
+ 'trailing': False,
320
+ },
321
+ 'fetchOpenOrders': {
322
+ 'marginMode': False,
323
+ 'limit': 100, # todo
324
+ 'trigger': False,
325
+ 'trailing': False,
326
+ },
327
+ 'fetchOrders': {
328
+ 'marginMode': False,
329
+ 'limit': 100,
330
+ 'daysBack': 100000, # todo
331
+ 'untilDays': 100000, # todo
332
+ 'trigger': False,
333
+ 'trailing': False,
334
+ },
335
+ 'fetchClosedOrders': None, # todo
336
+ 'fetchOHLCV': {
337
+ 'limit': None, # todo by from/to
338
+ },
339
+ },
340
+ 'swap': {
341
+ 'linear': {
342
+ 'extends': 'forSwap',
343
+ },
344
+ 'inverse': None,
345
+ },
346
+ 'future': {
347
+ 'linear': None,
348
+ 'inverse': None,
349
+ },
350
+ },
283
351
  })
284
352
 
285
353
  def fetch_time(self, params={}):
ccxt/paymium.py CHANGED
@@ -113,6 +113,48 @@ class paymium(Exchange, ImplicitAPI):
113
113
  },
114
114
  },
115
115
  'precisionMode': TICK_SIZE,
116
+ 'features': {
117
+ 'spot': {
118
+ 'sandbox': False,
119
+ 'createOrder': {
120
+ 'marginMode': False,
121
+ 'triggerPrice': False,
122
+ 'triggerDirection': False,
123
+ 'triggerPriceType': None,
124
+ 'stopLossPrice': False,
125
+ 'takeProfitPrice': False,
126
+ 'attachedStopLossTakeProfit': None,
127
+ 'timeInForce': {
128
+ 'IOC': False,
129
+ 'FOK': False,
130
+ 'PO': False,
131
+ 'GTD': False,
132
+ },
133
+ 'hedged': False,
134
+ 'trailing': False,
135
+ 'leverage': False,
136
+ 'marketBuyByCost': True, # todo
137
+ 'marketBuyRequiresPrice': False,
138
+ 'selfTradePrevention': False,
139
+ 'iceberg': False,
140
+ },
141
+ 'createOrders': None,
142
+ 'fetchMyTrades': None,
143
+ 'fetchOrder': None, # todo
144
+ 'fetchOpenOrders': None, # todo
145
+ 'fetchOrders': None, # todo
146
+ 'fetchClosedOrders': None, # todo
147
+ 'fetchOHLCV': None, # todo
148
+ },
149
+ 'swap': {
150
+ 'linear': None,
151
+ 'inverse': None,
152
+ },
153
+ 'future': {
154
+ 'linear': None,
155
+ 'inverse': None,
156
+ },
157
+ },
116
158
  })
117
159
 
118
160
  def parse_balance(self, response) -> Balances:
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.4.48'
7
+ __version__ = '4.4.50'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
ccxt/pro/bitmart.py CHANGED
@@ -108,6 +108,10 @@ class bitmart(ccxt.async_support.bitmart):
108
108
  }
109
109
  else:
110
110
  messageHash = 'futures/' + channel + ':' + market['id']
111
+ speed = self.safe_string(params, 'speed')
112
+ if speed is not None:
113
+ params = self.omit(params, 'speed')
114
+ messageHash += ':' + speed
111
115
  request = {
112
116
  'action': 'subscribe',
113
117
  'args': [messageHash],
@@ -1149,6 +1153,7 @@ class bitmart(ccxt.async_support.bitmart):
1149
1153
  :param str symbol: unified symbol of the market to fetch the order book for
1150
1154
  :param int [limit]: the maximum amount of order book entries to return
1151
1155
  :param dict [params]: extra parameters specific to the exchange API endpoint
1156
+ :param str [params.speed]: *futures only* '100ms' or '200ms'
1152
1157
  :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
1153
1158
  """
1154
1159
  await self.load_markets()
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,
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={}):