ccxt 4.4.48__py2.py3-none-any.whl → 4.4.49__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/async_support/__init__.py +1 -1
  3. ccxt/async_support/base/exchange.py +1 -1
  4. ccxt/async_support/bingx.py +73 -29
  5. ccxt/async_support/bitget.py +12 -10
  6. ccxt/async_support/coinsph.py +17 -8
  7. ccxt/async_support/deribit.py +82 -0
  8. ccxt/async_support/digifinex.py +125 -10
  9. ccxt/async_support/ellipx.py +61 -0
  10. ccxt/async_support/exmo.py +58 -0
  11. ccxt/async_support/hitbtc.py +99 -0
  12. ccxt/async_support/hollaex.py +73 -0
  13. ccxt/async_support/huobijp.py +73 -0
  14. ccxt/async_support/hyperliquid.py +22 -1
  15. ccxt/async_support/idex.py +71 -0
  16. ccxt/async_support/independentreserve.py +64 -0
  17. ccxt/async_support/indodax.py +61 -0
  18. ccxt/async_support/kuna.py +60 -1
  19. ccxt/async_support/latoken.py +64 -0
  20. ccxt/async_support/lbank.py +70 -0
  21. ccxt/async_support/luno.py +73 -0
  22. ccxt/async_support/lykke.py +64 -0
  23. ccxt/async_support/mercado.py +65 -0
  24. ccxt/async_support/mexc.py +1 -1
  25. ccxt/async_support/myokx.py +10 -0
  26. ccxt/async_support/ndax.py +71 -0
  27. ccxt/async_support/novadax.py +74 -0
  28. ccxt/async_support/oceanex.py +69 -0
  29. ccxt/async_support/okcoin.py +79 -2
  30. ccxt/async_support/onetrading.py +66 -0
  31. ccxt/async_support/oxfun.py +66 -0
  32. ccxt/async_support/p2b.py +63 -1
  33. ccxt/async_support/paradex.py +68 -0
  34. ccxt/base/exchange.py +1 -1
  35. ccxt/bingx.py +73 -29
  36. ccxt/bitget.py +12 -10
  37. ccxt/coinsph.py +17 -8
  38. ccxt/deribit.py +82 -0
  39. ccxt/digifinex.py +125 -10
  40. ccxt/ellipx.py +61 -0
  41. ccxt/exmo.py +58 -0
  42. ccxt/hitbtc.py +99 -0
  43. ccxt/hollaex.py +73 -0
  44. ccxt/huobijp.py +73 -0
  45. ccxt/hyperliquid.py +22 -1
  46. ccxt/idex.py +71 -0
  47. ccxt/independentreserve.py +64 -0
  48. ccxt/indodax.py +61 -0
  49. ccxt/kuna.py +60 -1
  50. ccxt/latoken.py +64 -0
  51. ccxt/lbank.py +70 -0
  52. ccxt/luno.py +73 -0
  53. ccxt/lykke.py +64 -0
  54. ccxt/mercado.py +65 -0
  55. ccxt/mexc.py +1 -1
  56. ccxt/myokx.py +10 -0
  57. ccxt/ndax.py +71 -0
  58. ccxt/novadax.py +74 -0
  59. ccxt/oceanex.py +69 -0
  60. ccxt/okcoin.py +79 -2
  61. ccxt/onetrading.py +66 -0
  62. ccxt/oxfun.py +66 -0
  63. ccxt/p2b.py +63 -1
  64. ccxt/paradex.py +68 -0
  65. ccxt/pro/__init__.py +1 -1
  66. ccxt/pro/bitmart.py +5 -0
  67. {ccxt-4.4.48.dist-info → ccxt-4.4.49.dist-info}/METADATA +4 -4
  68. {ccxt-4.4.48.dist-info → ccxt-4.4.49.dist-info}/RECORD +71 -71
  69. {ccxt-4.4.48.dist-info → ccxt-4.4.49.dist-info}/LICENSE.txt +0 -0
  70. {ccxt-4.4.48.dist-info → ccxt-4.4.49.dist-info}/WHEEL +0 -0
  71. {ccxt-4.4.48.dist-info → ccxt-4.4.49.dist-info}/top_level.txt +0 -0
ccxt/lykke.py CHANGED
@@ -192,6 +192,70 @@ class lykke(Exchange, ImplicitAPI):
192
192
  },
193
193
  'commonCurrencies': {
194
194
  },
195
+ 'features': {
196
+ 'spot': {
197
+ 'sandbox': False,
198
+ 'createOrder': {
199
+ 'marginMode': False,
200
+ 'triggerPrice': False,
201
+ 'triggerPriceType': None,
202
+ 'triggerDirection': False,
203
+ 'stopLossPrice': False,
204
+ 'takeProfitPrice': False,
205
+ 'attachedStopLossTakeProfit': None,
206
+ 'timeInForce': {
207
+ 'IOC': False,
208
+ 'FOK': False,
209
+ 'PO': False,
210
+ 'GTD': False,
211
+ },
212
+ 'hedged': False,
213
+ 'trailing': False,
214
+ 'leverage': False,
215
+ 'marketBuyByCost': False,
216
+ 'marketBuyRequiresPrice': False,
217
+ 'selfTradePrevention': False,
218
+ 'iceberg': False,
219
+ },
220
+ 'createOrders': None,
221
+ 'fetchMyTrades': {
222
+ 'marginMode': False,
223
+ 'limit': 1000,
224
+ 'daysBack': 100000, # todo
225
+ 'untilDays': 100000, # todo
226
+ },
227
+ 'fetchOrder': {
228
+ 'marginMode': False,
229
+ 'trigger': False,
230
+ 'trailing': False,
231
+ },
232
+ 'fetchOpenOrders': {
233
+ 'marginMode': False,
234
+ 'limit': 1000,
235
+ 'trigger': False,
236
+ 'trailing': False,
237
+ },
238
+ 'fetchOrders': None,
239
+ 'fetchClosedOrders': {
240
+ 'marginMode': False,
241
+ 'limit': 1000,
242
+ 'daysBack': None,
243
+ 'daysBackCanceled': None,
244
+ 'untilDays': None,
245
+ 'trigger': False,
246
+ 'trailing': False,
247
+ },
248
+ 'fetchOHLCV': None,
249
+ },
250
+ 'swap': {
251
+ 'linear': None,
252
+ 'inverse': None,
253
+ },
254
+ 'future': {
255
+ 'linear': None,
256
+ 'inverse': None,
257
+ },
258
+ },
195
259
  })
196
260
 
197
261
  def fetch_currencies(self, params={}) -> Currencies:
ccxt/mercado.py CHANGED
@@ -162,6 +162,71 @@ class mercado(Exchange, ImplicitAPI):
162
162
  'XRP': 0.1,
163
163
  },
164
164
  },
165
+ 'features': {
166
+ 'spot': {
167
+ 'sandbox': False,
168
+ 'createOrder': {
169
+ 'marginMode': False,
170
+ 'triggerPrice': False,
171
+ 'triggerPriceType': None,
172
+ 'triggerDirection': False,
173
+ 'stopLossPrice': False,
174
+ 'takeProfitPrice': False,
175
+ 'attachedStopLossTakeProfit': None,
176
+ 'timeInForce': {
177
+ 'IOC': False,
178
+ 'FOK': False,
179
+ 'PO': True, # todo
180
+ 'GTD': False,
181
+ },
182
+ 'hedged': False,
183
+ 'trailing': False,
184
+ 'leverage': False,
185
+ 'marketBuyByCost': True, # todo
186
+ 'marketBuyRequiresPrice': True,
187
+ 'selfTradePrevention': False,
188
+ 'iceberg': False,
189
+ },
190
+ 'createOrders': None,
191
+ 'fetchMyTrades': {
192
+ 'marginMode': False,
193
+ 'limit': None, # todo
194
+ 'daysBack': 100000, # todo
195
+ 'untilDays': 100000, # todo
196
+ },
197
+ 'fetchOrder': {
198
+ 'marginMode': False,
199
+ 'trigger': False,
200
+ 'trailing': False,
201
+ },
202
+ 'fetchOpenOrders': {
203
+ 'marginMode': False,
204
+ 'limit': None,
205
+ 'trigger': False,
206
+ 'trailing': False,
207
+ },
208
+ 'fetchOrders': {
209
+ 'marginMode': False,
210
+ 'limit': 500,
211
+ 'daysBack': 100000,
212
+ 'untilDays': 100000,
213
+ 'trigger': False,
214
+ 'trailing': False,
215
+ },
216
+ 'fetchClosedOrders': None,
217
+ 'fetchOHLCV': {
218
+ 'limit': 1000,
219
+ },
220
+ },
221
+ 'swap': {
222
+ 'linear': None,
223
+ 'inverse': None,
224
+ },
225
+ 'future': {
226
+ 'linear': None,
227
+ 'inverse': None,
228
+ },
229
+ },
165
230
  'precisionMode': TICK_SIZE,
166
231
  })
167
232
 
ccxt/mexc.py CHANGED
@@ -4474,7 +4474,7 @@ class mexc(Exchange, ImplicitAPI):
4474
4474
  return {
4475
4475
  'info': depositAddress,
4476
4476
  'currency': self.safe_currency_code(currencyId, currency),
4477
- 'network': self.network_id_to_code(networkId),
4477
+ 'network': self.network_id_to_code(networkId, currencyId),
4478
4478
  'address': address,
4479
4479
  'tag': self.safe_string(depositAddress, 'memo'),
4480
4480
  }
ccxt/myokx.py CHANGED
@@ -40,4 +40,14 @@ class myokx(okx, ImplicitAPI):
40
40
  'future': False,
41
41
  'option': False,
42
42
  },
43
+ 'features': {
44
+ 'swap': {
45
+ 'linear': None,
46
+ 'inverse': None,
47
+ },
48
+ 'future': {
49
+ 'linear': None,
50
+ 'inverse': None,
51
+ },
52
+ },
43
53
  })
ccxt/ndax.py CHANGED
@@ -264,6 +264,77 @@ class ndax(Exchange, ImplicitAPI):
264
264
  },
265
265
  },
266
266
  },
267
+ 'features': {
268
+ 'spot': {
269
+ 'sandbox': True,
270
+ 'createOrder': {
271
+ 'marginMode': False,
272
+ 'triggerPrice': True,
273
+ 'triggerDirection': False,
274
+ 'triggerPriceType': {
275
+ 'last': True,
276
+ 'mark': False,
277
+ 'index': False,
278
+ # bid & ask
279
+ },
280
+ 'stopLossPrice': False, # todo
281
+ 'takeProfitPrice': False, # todo
282
+ 'attachedStopLossTakeProfit': None,
283
+ # todo
284
+ 'timeInForce': {
285
+ 'IOC': True,
286
+ 'FOK': True,
287
+ 'PO': True,
288
+ 'GTD': False,
289
+ },
290
+ 'hedged': False,
291
+ 'trailing': False,
292
+ 'leverage': False,
293
+ 'marketBuyByCost': False,
294
+ 'marketBuyRequiresPrice': False,
295
+ 'selfTradePrevention': False,
296
+ 'iceberg': True, # todo
297
+ },
298
+ 'createOrders': None,
299
+ 'fetchMyTrades': {
300
+ 'marginMode': False,
301
+ 'limit': 100, # todo
302
+ 'daysBack': 100000, # todo
303
+ 'untilDays': 100000, # todo
304
+ },
305
+ 'fetchOrder': {
306
+ 'marginMode': False,
307
+ 'trigger': False,
308
+ 'trailing': False,
309
+ },
310
+ 'fetchOpenOrders': {
311
+ 'marginMode': False,
312
+ 'limit': None,
313
+ 'trigger': False,
314
+ 'trailing': False,
315
+ },
316
+ 'fetchOrders': {
317
+ 'marginMode': False,
318
+ 'limit': None,
319
+ 'daysBack': None,
320
+ 'untilDays': None,
321
+ 'trigger': False,
322
+ 'trailing': False,
323
+ },
324
+ 'fetchClosedOrders': None,
325
+ 'fetchOHLCV': {
326
+ 'limit': None,
327
+ },
328
+ },
329
+ 'swap': {
330
+ 'linear': None,
331
+ 'inverse': None,
332
+ },
333
+ 'future': {
334
+ 'linear': None,
335
+ 'inverse': None,
336
+ },
337
+ },
267
338
  'fees': {
268
339
  'trading': {
269
340
  'tierBased': False,
ccxt/novadax.py CHANGED
@@ -223,6 +223,80 @@ class novadax(Exchange, ImplicitAPI):
223
223
  'fillResponseFromRequest': True,
224
224
  },
225
225
  },
226
+ 'features': {
227
+ 'spot': {
228
+ 'sandbox': False,
229
+ 'createOrder': {
230
+ 'marginMode': False,
231
+ 'triggerPrice': True,
232
+ 'triggerDirection': True, # todo
233
+ 'triggerPriceType': None,
234
+ 'stopLossPrice': False, # todo
235
+ 'takeProfitPrice': False, # todo
236
+ 'attachedStopLossTakeProfit': None,
237
+ # todo
238
+ 'timeInForce': {
239
+ 'IOC': False,
240
+ 'FOK': False,
241
+ 'PO': False,
242
+ 'GTD': False,
243
+ },
244
+ 'hedged': False,
245
+ 'trailing': False,
246
+ 'leverage': False,
247
+ 'marketBuyByCost': True,
248
+ 'marketBuyRequiresPrice': False,
249
+ 'selfTradePrevention': False,
250
+ 'iceberg': True, # todo
251
+ },
252
+ 'createOrders': None, # todo: add implementation
253
+ 'fetchMyTrades': {
254
+ 'marginMode': False,
255
+ 'limit': 100,
256
+ 'daysBack': 100000, # todo
257
+ 'untilDays': 100000, # todo
258
+ },
259
+ 'fetchOrder': {
260
+ 'marginMode': False,
261
+ 'trigger': False,
262
+ 'trailing': False,
263
+ },
264
+ 'fetchOpenOrders': {
265
+ 'marginMode': False,
266
+ 'limit': None,
267
+ 'trigger': False,
268
+ 'trailing': False,
269
+ },
270
+ 'fetchOrders': {
271
+ 'marginMode': False,
272
+ 'limit': 100,
273
+ 'daysBack': 100000, # todo
274
+ 'untilDays': 100000, # todo
275
+ 'trigger': False,
276
+ 'trailing': False,
277
+ },
278
+ 'fetchClosedOrders': {
279
+ 'marginMode': False,
280
+ 'limit': 100,
281
+ 'daysBack': 100000, # todo
282
+ 'daysBackCanceled': 1, # todo
283
+ 'untilDays': 100000, # todo
284
+ 'trigger': False,
285
+ 'trailing': False,
286
+ },
287
+ 'fetchOHLCV': {
288
+ 'limit': None, # todo max 3000
289
+ },
290
+ },
291
+ 'swap': {
292
+ 'linear': None,
293
+ 'inverse': None,
294
+ },
295
+ 'future': {
296
+ 'linear': None,
297
+ 'inverse': None,
298
+ },
299
+ },
226
300
  })
227
301
 
228
302
  def fetch_time(self, params={}):
ccxt/oceanex.py CHANGED
@@ -139,6 +139,75 @@ class oceanex(Exchange, ImplicitAPI):
139
139
  'PLA': 'Plair',
140
140
  },
141
141
  'precisionMode': TICK_SIZE,
142
+ 'features': {
143
+ 'spot': {
144
+ 'sandbox': False,
145
+ 'createOrder': {
146
+ 'marginMode': False,
147
+ 'triggerPrice': True, # todo
148
+ 'triggerDirection': True, # todo
149
+ 'triggerPriceType': None,
150
+ 'stopLossPrice': False, # todo
151
+ 'takeProfitPrice': False, # todo
152
+ 'attachedStopLossTakeProfit': None,
153
+ 'timeInForce': {
154
+ 'IOC': False,
155
+ 'FOK': False,
156
+ 'PO': False,
157
+ 'GTD': False,
158
+ },
159
+ 'hedged': False,
160
+ 'trailing': False,
161
+ 'leverage': False,
162
+ 'marketBuyByCost': False,
163
+ 'marketBuyRequiresPrice': False,
164
+ 'selfTradePrevention': False,
165
+ 'iceberg': False,
166
+ },
167
+ 'createOrders': None,
168
+ 'fetchMyTrades': None,
169
+ 'fetchOrder': {
170
+ 'marginMode': False,
171
+ 'trigger': False,
172
+ 'trailing': False,
173
+ },
174
+ 'fetchOpenOrders': {
175
+ 'marginMode': False,
176
+ 'limit': 100, # todo: max unknown
177
+ 'trigger': False,
178
+ 'trailing': False,
179
+ },
180
+ 'fetchOrders': {
181
+ 'marginMode': False,
182
+ 'limit': 100,
183
+ 'daysBack': 100000, # todo
184
+ 'untilDays': 100000, # todo
185
+ 'trigger': False,
186
+ 'trailing': False,
187
+ },
188
+ 'fetchClosedOrders': {
189
+ 'marginMode': False,
190
+ 'limit': 100,
191
+ 'daysBack': 100000, # todo
192
+ 'daysBackCanceled': 1, # todo
193
+ 'untilDays': 100000, # todo
194
+ 'trigger': False,
195
+ 'trailing': False,
196
+ },
197
+ 'fetchOHLCV': {
198
+ 'limit': 100,
199
+ },
200
+ },
201
+ # todo implement swap
202
+ 'swap': {
203
+ 'linear': None,
204
+ 'inverse': None,
205
+ },
206
+ 'future': {
207
+ 'linear': None,
208
+ 'inverse': None,
209
+ },
210
+ },
142
211
  'exceptions': {
143
212
  'codes': {
144
213
  '-1': BadRequest,
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,
@@ -1470,7 +1547,7 @@ class okcoin(Exchange, ImplicitAPI):
1470
1547
  if stopLossDefined:
1471
1548
  stopLossTriggerPrice = self.safe_value_n(stopLoss, ['triggerPrice', 'stopPrice', 'slTriggerPx'])
1472
1549
  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')
1550
+ raise InvalidOrder(self.id + ' createOrder() requires a trigger price in params["stopLoss"]["triggerPrice"] for a stop loss order')
1474
1551
  request['slTriggerPx'] = self.price_to_precision(symbol, stopLossTriggerPrice)
1475
1552
  stopLossLimitPrice = self.safe_value_n(stopLoss, ['price', 'stopLossPrice', 'slOrdPx'])
1476
1553
  stopLossOrderType = self.safe_string(stopLoss, 'type')
@@ -1481,7 +1558,7 @@ class okcoin(Exchange, ImplicitAPI):
1481
1558
  raise InvalidOrder(self.id + ' createOrder() params["stopLoss"]["type"] must be either "limit" or "market"')
1482
1559
  elif stopLossLimitOrderType:
1483
1560
  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')
1561
+ raise InvalidOrder(self.id + ' createOrder() requires a limit price in params["stopLoss"]["price"] for a stop loss limit order')
1485
1562
  else:
1486
1563
  request['slOrdPx'] = self.price_to_precision(symbol, stopLossLimitPrice)
1487
1564
  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