ccxt 4.4.47 → 4.4.49

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 (135) hide show
  1. package/README.md +3 -3
  2. package/dist/ccxt.browser.min.js +16 -16
  3. package/dist/cjs/ccxt.js +1 -1
  4. package/dist/cjs/src/ace.js +1 -1
  5. package/dist/cjs/src/binance.js +18 -14
  6. package/dist/cjs/src/bingx.js +88 -30
  7. package/dist/cjs/src/bitget.js +16 -12
  8. package/dist/cjs/src/bitmart.js +7 -2
  9. package/dist/cjs/src/bitmex.js +8 -5
  10. package/dist/cjs/src/bybit.js +7 -2
  11. package/dist/cjs/src/coinbase.js +11 -1
  12. package/dist/cjs/src/coincatch.js +86 -2
  13. package/dist/cjs/src/coincheck.js +52 -0
  14. package/dist/cjs/src/coinlist.js +77 -0
  15. package/dist/cjs/src/coinmate.js +63 -0
  16. package/dist/cjs/src/coinmetro.js +68 -0
  17. package/dist/cjs/src/coinone.js +56 -0
  18. package/dist/cjs/src/coinsph.js +85 -10
  19. package/dist/cjs/src/coinspot.js +47 -0
  20. package/dist/cjs/src/currencycom.js +72 -0
  21. package/dist/cjs/src/defx.js +93 -6
  22. package/dist/cjs/src/delta.js +83 -1
  23. package/dist/cjs/src/deribit.js +82 -0
  24. package/dist/cjs/src/digifinex.js +131 -11
  25. package/dist/cjs/src/ellipx.js +61 -0
  26. package/dist/cjs/src/exmo.js +58 -0
  27. package/dist/cjs/src/gate.js +10 -1
  28. package/dist/cjs/src/hitbtc.js +99 -0
  29. package/dist/cjs/src/hollaex.js +73 -0
  30. package/dist/cjs/src/htx.js +10 -2
  31. package/dist/cjs/src/huobijp.js +73 -0
  32. package/dist/cjs/src/hyperliquid.js +28 -2
  33. package/dist/cjs/src/idex.js +71 -0
  34. package/dist/cjs/src/independentreserve.js +124 -0
  35. package/dist/cjs/src/indodax.js +61 -0
  36. package/dist/cjs/src/kraken.js +1 -1
  37. package/dist/cjs/src/krakenfutures.js +4 -4
  38. package/dist/cjs/src/kuna.js +60 -1
  39. package/dist/cjs/src/latoken.js +64 -0
  40. package/dist/cjs/src/lbank.js +70 -0
  41. package/dist/cjs/src/luno.js +73 -0
  42. package/dist/cjs/src/lykke.js +64 -0
  43. package/dist/cjs/src/mercado.js +65 -0
  44. package/dist/cjs/src/mexc.js +1 -1
  45. package/dist/cjs/src/myokx.js +10 -0
  46. package/dist/cjs/src/ndax.js +71 -0
  47. package/dist/cjs/src/novadax.js +74 -0
  48. package/dist/cjs/src/oceanex.js +69 -0
  49. package/dist/cjs/src/okcoin.js +79 -2
  50. package/dist/cjs/src/okx.js +9 -1
  51. package/dist/cjs/src/onetrading.js +66 -0
  52. package/dist/cjs/src/oxfun.js +66 -0
  53. package/dist/cjs/src/p2b.js +63 -1
  54. package/dist/cjs/src/paradex.js +73 -2
  55. package/dist/cjs/src/phemex.js +103 -0
  56. package/dist/cjs/src/poloniex.js +61 -0
  57. package/dist/cjs/src/poloniexfutures.js +74 -0
  58. package/dist/cjs/src/pro/bitmart.js +6 -0
  59. package/dist/cjs/src/upbit.js +61 -0
  60. package/dist/cjs/src/woo.js +6 -1
  61. package/js/ccxt.d.ts +1 -1
  62. package/js/ccxt.js +1 -1
  63. package/js/src/abstract/independentreserve.d.ts +6 -0
  64. package/js/src/ace.js +1 -1
  65. package/js/src/binance.d.ts +7 -0
  66. package/js/src/binance.js +18 -14
  67. package/js/src/bingx.d.ts +8 -0
  68. package/js/src/bingx.js +88 -30
  69. package/js/src/bitget.d.ts +1 -0
  70. package/js/src/bitget.js +16 -12
  71. package/js/src/bitmart.js +7 -2
  72. package/js/src/bitmex.js +8 -5
  73. package/js/src/bybit.d.ts +1 -1
  74. package/js/src/bybit.js +7 -2
  75. package/js/src/coinbase.d.ts +1 -0
  76. package/js/src/coinbase.js +11 -1
  77. package/js/src/coincatch.d.ts +1 -2
  78. package/js/src/coincatch.js +86 -2
  79. package/js/src/coincheck.js +52 -0
  80. package/js/src/coinlist.js +77 -0
  81. package/js/src/coinmate.js +63 -0
  82. package/js/src/coinmetro.js +68 -0
  83. package/js/src/coinone.js +56 -0
  84. package/js/src/coinsph.d.ts +2 -1
  85. package/js/src/coinsph.js +85 -10
  86. package/js/src/coinspot.js +47 -0
  87. package/js/src/currencycom.js +72 -0
  88. package/js/src/defx.js +93 -6
  89. package/js/src/delta.js +83 -1
  90. package/js/src/deribit.js +82 -0
  91. package/js/src/digifinex.d.ts +1 -0
  92. package/js/src/digifinex.js +131 -11
  93. package/js/src/ellipx.d.ts +1 -0
  94. package/js/src/ellipx.js +61 -0
  95. package/js/src/exmo.js +58 -0
  96. package/js/src/gate.d.ts +1 -0
  97. package/js/src/gate.js +10 -1
  98. package/js/src/hitbtc.js +99 -0
  99. package/js/src/hollaex.js +73 -0
  100. package/js/src/htx.d.ts +1 -0
  101. package/js/src/htx.js +10 -2
  102. package/js/src/huobijp.js +73 -0
  103. package/js/src/hyperliquid.d.ts +1 -0
  104. package/js/src/hyperliquid.js +28 -2
  105. package/js/src/idex.js +71 -0
  106. package/js/src/independentreserve.js +124 -0
  107. package/js/src/indodax.js +61 -0
  108. package/js/src/kraken.js +1 -1
  109. package/js/src/krakenfutures.js +4 -4
  110. package/js/src/kuna.js +60 -1
  111. package/js/src/latoken.js +64 -0
  112. package/js/src/lbank.js +70 -0
  113. package/js/src/luno.js +73 -0
  114. package/js/src/lykke.js +64 -0
  115. package/js/src/mercado.js +65 -0
  116. package/js/src/mexc.js +1 -1
  117. package/js/src/myokx.js +10 -0
  118. package/js/src/ndax.js +71 -0
  119. package/js/src/novadax.js +74 -0
  120. package/js/src/oceanex.js +69 -0
  121. package/js/src/okcoin.js +79 -2
  122. package/js/src/okx.d.ts +1 -0
  123. package/js/src/okx.js +9 -1
  124. package/js/src/onetrading.js +66 -0
  125. package/js/src/oxfun.js +66 -0
  126. package/js/src/p2b.js +63 -1
  127. package/js/src/paradex.js +73 -2
  128. package/js/src/phemex.js +103 -0
  129. package/js/src/poloniex.js +61 -0
  130. package/js/src/poloniexfutures.js +74 -0
  131. package/js/src/pro/bitmart.d.ts +1 -0
  132. package/js/src/pro/bitmart.js +6 -0
  133. package/js/src/upbit.js +61 -0
  134. package/js/src/woo.js +6 -1
  135. package/package.json +2 -2
@@ -132,6 +132,75 @@ class oceanex extends oceanex$1 {
132
132
  'PLA': 'Plair',
133
133
  },
134
134
  'precisionMode': number.TICK_SIZE,
135
+ 'features': {
136
+ 'spot': {
137
+ 'sandbox': false,
138
+ 'createOrder': {
139
+ 'marginMode': false,
140
+ 'triggerPrice': true,
141
+ 'triggerDirection': true,
142
+ 'triggerPriceType': undefined,
143
+ 'stopLossPrice': false,
144
+ 'takeProfitPrice': false,
145
+ 'attachedStopLossTakeProfit': undefined,
146
+ 'timeInForce': {
147
+ 'IOC': false,
148
+ 'FOK': false,
149
+ 'PO': false,
150
+ 'GTD': false,
151
+ },
152
+ 'hedged': false,
153
+ 'trailing': false,
154
+ 'leverage': false,
155
+ 'marketBuyByCost': false,
156
+ 'marketBuyRequiresPrice': false,
157
+ 'selfTradePrevention': false,
158
+ 'iceberg': false,
159
+ },
160
+ 'createOrders': undefined,
161
+ 'fetchMyTrades': undefined,
162
+ 'fetchOrder': {
163
+ 'marginMode': false,
164
+ 'trigger': false,
165
+ 'trailing': false,
166
+ },
167
+ 'fetchOpenOrders': {
168
+ 'marginMode': false,
169
+ 'limit': 100,
170
+ 'trigger': false,
171
+ 'trailing': false,
172
+ },
173
+ 'fetchOrders': {
174
+ 'marginMode': false,
175
+ 'limit': 100,
176
+ 'daysBack': 100000,
177
+ 'untilDays': 100000,
178
+ 'trigger': false,
179
+ 'trailing': false,
180
+ },
181
+ 'fetchClosedOrders': {
182
+ 'marginMode': false,
183
+ 'limit': 100,
184
+ 'daysBack': 100000,
185
+ 'daysBackCanceled': 1,
186
+ 'untilDays': 100000,
187
+ 'trigger': false,
188
+ 'trailing': false,
189
+ },
190
+ 'fetchOHLCV': {
191
+ 'limit': 100,
192
+ },
193
+ },
194
+ // todo implement swap
195
+ 'swap': {
196
+ 'linear': undefined,
197
+ 'inverse': undefined,
198
+ },
199
+ 'future': {
200
+ 'linear': undefined,
201
+ 'inverse': undefined,
202
+ },
203
+ },
135
204
  'exceptions': {
136
205
  'codes': {
137
206
  '-1': errors.BadRequest,
@@ -201,6 +201,83 @@ class okcoin extends okcoin$1 {
201
201
  },
202
202
  },
203
203
  },
204
+ 'features': {
205
+ 'spot': {
206
+ 'sandbox': false,
207
+ 'createOrder': {
208
+ 'marginMode': true,
209
+ 'triggerPrice': true,
210
+ 'triggerDirection': true,
211
+ 'triggerPriceType': {
212
+ 'last': true,
213
+ 'mark': false,
214
+ 'index': false,
215
+ },
216
+ 'stopLossPrice': true,
217
+ 'takeProfitPrice': true,
218
+ 'attachedStopLossTakeProfit': {
219
+ 'triggerPriceType': {
220
+ 'last': true,
221
+ 'mark': false,
222
+ 'index': false,
223
+ },
224
+ 'price': true,
225
+ },
226
+ 'timeInForce': {
227
+ 'IOC': true,
228
+ 'FOK': true,
229
+ 'PO': true,
230
+ 'GTD': false,
231
+ },
232
+ 'hedged': false,
233
+ 'trailing': true,
234
+ 'leverage': false,
235
+ 'marketBuyByCost': true,
236
+ 'marketBuyRequiresPrice': true,
237
+ 'selfTradePrevention': false,
238
+ 'iceberg': true, // todo
239
+ },
240
+ 'createOrders': undefined,
241
+ 'fetchMyTrades': {
242
+ 'marginMode': false,
243
+ 'limit': 100,
244
+ 'daysBack': 90,
245
+ 'untilDays': 90, // todo
246
+ },
247
+ 'fetchOrder': {
248
+ 'marginMode': false,
249
+ 'trigger': true,
250
+ 'trailing': true, // todo
251
+ },
252
+ 'fetchOpenOrders': {
253
+ 'marginMode': false,
254
+ 'limit': 100,
255
+ 'trigger': true,
256
+ 'trailing': true,
257
+ },
258
+ 'fetchOrders': undefined,
259
+ 'fetchClosedOrders': {
260
+ 'marginMode': false,
261
+ 'limit': 100,
262
+ 'daysBack': 90,
263
+ 'daysBackCanceled': 1 / 12,
264
+ 'untilDays': 90,
265
+ 'trigger': true,
266
+ 'trailing': true,
267
+ },
268
+ 'fetchOHLCV': {
269
+ 'limit': 100, // 300 is only possible for 'recent' 1440 candles, which does not make much sense
270
+ },
271
+ },
272
+ 'swap': {
273
+ 'linear': undefined,
274
+ 'inverse': undefined,
275
+ },
276
+ 'future': {
277
+ 'linear': undefined,
278
+ 'inverse': undefined,
279
+ },
280
+ },
204
281
  'fees': {
205
282
  'trading': {
206
283
  'taker': 0.002,
@@ -1510,7 +1587,7 @@ class okcoin extends okcoin$1 {
1510
1587
  if (stopLossDefined) {
1511
1588
  const stopLossTriggerPrice = this.safeValueN(stopLoss, ['triggerPrice', 'stopPrice', 'slTriggerPx']);
1512
1589
  if (stopLossTriggerPrice === undefined) {
1513
- throw new errors.InvalidOrder(this.id + ' createOrder() requires a trigger price in params["stopLoss"]["triggerPrice"], or params["stopLoss"]["stopPrice"], or params["stopLoss"]["slTriggerPx"] for a stop loss order');
1590
+ throw new errors.InvalidOrder(this.id + ' createOrder() requires a trigger price in params["stopLoss"]["triggerPrice"] for a stop loss order');
1514
1591
  }
1515
1592
  request['slTriggerPx'] = this.priceToPrecision(symbol, stopLossTriggerPrice);
1516
1593
  const stopLossLimitPrice = this.safeValueN(stopLoss, ['price', 'stopLossPrice', 'slOrdPx']);
@@ -1523,7 +1600,7 @@ class okcoin extends okcoin$1 {
1523
1600
  }
1524
1601
  else if (stopLossLimitOrderType) {
1525
1602
  if (stopLossLimitPrice === undefined) {
1526
- throw new errors.InvalidOrder(this.id + ' createOrder() requires a limit price in params["stopLoss"]["price"] or params["stopLoss"]["slOrdPx"] for a stop loss limit order');
1603
+ throw new errors.InvalidOrder(this.id + ' createOrder() requires a limit price in params["stopLoss"]["price"] for a stop loss limit order');
1527
1604
  }
1528
1605
  else {
1529
1606
  request['slOrdPx'] = this.priceToPrecision(symbol, stopLossLimitPrice);
@@ -1113,6 +1113,8 @@ class okx extends okx$1 {
1113
1113
  'createOrder': 'privatePostTradeBatchOrders',
1114
1114
  'createMarketBuyOrderRequiresPrice': false,
1115
1115
  'fetchMarkets': ['spot', 'future', 'swap', 'option'],
1116
+ 'timeDifference': 0,
1117
+ 'adjustForTimeDifference': false,
1116
1118
  'defaultType': 'spot',
1117
1119
  // 'fetchBalance': {
1118
1120
  // 'type': 'spot', // 'funding', 'trading', 'spot'
@@ -1487,6 +1489,9 @@ class okx extends okx$1 {
1487
1489
  }
1488
1490
  return result;
1489
1491
  }
1492
+ nonce() {
1493
+ return this.milliseconds() - this.options['timeDifference'];
1494
+ }
1490
1495
  /**
1491
1496
  * @method
1492
1497
  * @name okx#fetchMarkets
@@ -1496,6 +1501,9 @@ class okx extends okx$1 {
1496
1501
  * @returns {object[]} an array of objects representing market data
1497
1502
  */
1498
1503
  async fetchMarkets(params = {}) {
1504
+ if (this.options['adjustForTimeDifference']) {
1505
+ await this.loadTimeDifference();
1506
+ }
1499
1507
  const types = this.safeList(this.options, 'fetchMarkets', []);
1500
1508
  let promises = [];
1501
1509
  let result = [];
@@ -6179,7 +6187,7 @@ class okx extends okx$1 {
6179
6187
  }
6180
6188
  }
6181
6189
  }
6182
- const timestamp = this.iso8601(this.milliseconds());
6190
+ const timestamp = this.iso8601(this.nonce());
6183
6191
  headers = {
6184
6192
  'OK-ACCESS-KEY': this.apiKey,
6185
6193
  'OK-ACCESS-PASSPHRASE': this.password,
@@ -289,6 +289,72 @@ class onetrading extends onetrading$1 {
289
289
  },
290
290
  'fiat': ['EUR', 'CHF'],
291
291
  },
292
+ 'features': {
293
+ 'spot': {
294
+ 'sandbox': false,
295
+ 'createOrder': {
296
+ 'marginMode': false,
297
+ 'triggerPrice': false,
298
+ 'triggerDirection': false,
299
+ 'triggerPriceType': undefined,
300
+ 'stopLossPrice': false,
301
+ 'takeProfitPrice': false,
302
+ 'attachedStopLossTakeProfit': undefined,
303
+ 'timeInForce': {
304
+ 'IOC': true,
305
+ 'FOK': true,
306
+ 'PO': true,
307
+ 'GTD': false,
308
+ },
309
+ 'hedged': false,
310
+ 'trailing': false,
311
+ 'leverage': false,
312
+ 'marketBuyByCost': false,
313
+ 'marketBuyRequiresPrice': false,
314
+ 'selfTradePrevention': false,
315
+ 'iceberg': false,
316
+ },
317
+ 'createOrders': undefined,
318
+ 'fetchMyTrades': {
319
+ 'marginMode': false,
320
+ 'limit': 100,
321
+ 'daysBack': 100000,
322
+ 'untilDays': 100000, // todo
323
+ },
324
+ 'fetchOrder': {
325
+ 'marginMode': false,
326
+ 'trigger': false,
327
+ 'trailing': false,
328
+ },
329
+ 'fetchOpenOrders': {
330
+ 'marginMode': false,
331
+ 'limit': 100,
332
+ 'trigger': false,
333
+ 'trailing': false,
334
+ },
335
+ 'fetchOrders': undefined,
336
+ 'fetchClosedOrders': {
337
+ 'marginMode': false,
338
+ 'limit': 100,
339
+ 'daysBack': 100000,
340
+ 'daysBackCanceled': 1 / 12,
341
+ 'untilDays': 100000,
342
+ 'trigger': false,
343
+ 'trailing': false,
344
+ },
345
+ 'fetchOHLCV': {
346
+ 'limit': 5000,
347
+ },
348
+ },
349
+ 'swap': {
350
+ 'linear': undefined,
351
+ 'inverse': undefined,
352
+ },
353
+ 'future': {
354
+ 'linear': undefined,
355
+ 'inverse': undefined,
356
+ },
357
+ },
292
358
  });
293
359
  }
294
360
  /**
@@ -116,6 +116,7 @@ class oxfun extends oxfun$1 {
116
116
  'reduceMargin': false,
117
117
  'repayCrossMargin': false,
118
118
  'repayIsolatedMargin': false,
119
+ 'sandbox': true,
119
120
  'setLeverage': false,
120
121
  'setMargin': false,
121
122
  'setMarginMode': false,
@@ -242,6 +243,71 @@ class oxfun extends oxfun$1 {
242
243
  'Optimism': 'OPTIMISM',
243
244
  },
244
245
  },
246
+ 'features': {
247
+ 'default': {
248
+ 'sandbox': true,
249
+ 'createOrder': {
250
+ 'marginMode': false,
251
+ 'triggerPrice': true,
252
+ 'triggerDirection': false,
253
+ 'triggerPriceType': undefined,
254
+ 'stopLossPrice': false,
255
+ 'takeProfitPrice': false,
256
+ 'attachedStopLossTakeProfit': undefined,
257
+ 'timeInForce': {
258
+ 'IOC': true,
259
+ 'FOK': true,
260
+ 'PO': true,
261
+ 'GTD': false,
262
+ },
263
+ 'hedged': false,
264
+ 'trailing': false,
265
+ 'leverage': false,
266
+ 'marketBuyByCost': true,
267
+ 'marketBuyRequiresPrice': false,
268
+ 'selfTradePrevention': true,
269
+ 'iceberg': true, // todo
270
+ },
271
+ 'createOrders': {
272
+ 'max': 10, // todo
273
+ },
274
+ 'fetchMyTrades': {
275
+ 'marginMode': false,
276
+ 'limit': 500,
277
+ 'daysBack': 100000,
278
+ 'untilDays': 7,
279
+ },
280
+ 'fetchOrder': {
281
+ 'marginMode': false,
282
+ 'trigger': false,
283
+ 'trailing': false,
284
+ },
285
+ 'fetchOpenOrders': {
286
+ 'marginMode': false,
287
+ 'limit': undefined,
288
+ 'trigger': false,
289
+ 'trailing': false,
290
+ },
291
+ 'fetchOrders': undefined,
292
+ 'fetchClosedOrders': undefined,
293
+ 'fetchOHLCV': {
294
+ 'limit': 500,
295
+ },
296
+ },
297
+ 'spot': {
298
+ 'extends': 'default',
299
+ },
300
+ 'swap': {
301
+ 'linear': {
302
+ 'extends': 'default',
303
+ },
304
+ 'inverse': undefined,
305
+ },
306
+ 'future': {
307
+ 'linear': undefined,
308
+ 'inverse': undefined,
309
+ },
310
+ },
245
311
  'exceptions': {
246
312
  'exact': {
247
313
  '-0010': errors.OperationFailed,
@@ -75,7 +75,7 @@ class p2b extends p2b$1 {
75
75
  'fetchOpenOrders': true,
76
76
  'fetchOrderBook': true,
77
77
  'fetchOrderBooks': false,
78
- 'fetchOrders': true,
78
+ 'fetchOrders': false,
79
79
  'fetchOrderTrades': true,
80
80
  'fetchPosition': false,
81
81
  'fetchPositionHistory': false,
@@ -182,6 +182,68 @@ class p2b extends p2b$1 {
182
182
  ],
183
183
  },
184
184
  },
185
+ 'features': {
186
+ 'spot': {
187
+ 'sandbox': false,
188
+ 'createOrder': {
189
+ 'marginMode': false,
190
+ 'triggerPrice': false,
191
+ 'triggerDirection': false,
192
+ 'triggerPriceType': undefined,
193
+ 'stopLossPrice': false,
194
+ 'takeProfitPrice': false,
195
+ 'attachedStopLossTakeProfit': undefined,
196
+ 'timeInForce': {
197
+ 'IOC': true,
198
+ 'FOK': true,
199
+ 'PO': true,
200
+ 'GTD': false,
201
+ },
202
+ 'hedged': false,
203
+ 'trailing': false,
204
+ 'leverage': false,
205
+ 'marketBuyByCost': false,
206
+ 'marketBuyRequiresPrice': false,
207
+ 'selfTradePrevention': false,
208
+ 'iceberg': false,
209
+ },
210
+ 'createOrders': undefined,
211
+ 'fetchMyTrades': {
212
+ 'marginMode': false,
213
+ 'limit': 100,
214
+ 'daysBack': 100000,
215
+ 'untilDays': 1,
216
+ },
217
+ 'fetchOrder': undefined,
218
+ 'fetchOpenOrders': {
219
+ 'marginMode': false,
220
+ 'limit': 100,
221
+ 'trigger': false,
222
+ 'trailing': false,
223
+ },
224
+ 'fetchOrders': undefined,
225
+ 'fetchClosedOrders': {
226
+ 'marginMode': false,
227
+ 'limit': 100,
228
+ 'daysBack': 100000,
229
+ 'daysBackCanceled': 1 / 12,
230
+ 'untilDays': 1,
231
+ 'trigger': false,
232
+ 'trailing': false,
233
+ },
234
+ 'fetchOHLCV': {
235
+ 'limit': 500,
236
+ },
237
+ },
238
+ 'swap': {
239
+ 'linear': undefined,
240
+ 'inverse': undefined,
241
+ },
242
+ 'future': {
243
+ 'linear': undefined,
244
+ 'inverse': undefined,
245
+ },
246
+ },
185
247
  'commonCurrencies': {},
186
248
  'precisionMode': number.TICK_SIZE,
187
249
  'exceptions': {
@@ -266,7 +266,9 @@ class paradex extends paradex$1 {
266
266
  '40111': errors.AuthenticationError,
267
267
  '40112': errors.PermissionDenied, // Geo IP blocked
268
268
  },
269
- 'broad': {},
269
+ 'broad': {
270
+ 'missing or malformed jwt': errors.AuthenticationError,
271
+ },
270
272
  },
271
273
  'precisionMode': number.TICK_SIZE,
272
274
  'commonCurrencies': {},
@@ -274,6 +276,74 @@ class paradex extends paradex$1 {
274
276
  'paradexAccount': undefined,
275
277
  'broker': 'CCXT',
276
278
  },
279
+ 'features': {
280
+ 'spot': undefined,
281
+ 'forSwap': {
282
+ 'sandbox': true,
283
+ 'createOrder': {
284
+ 'marginMode': false,
285
+ 'triggerPrice': true,
286
+ 'triggerDirection': true,
287
+ 'triggerPriceType': undefined,
288
+ 'stopLossPrice': false,
289
+ 'takeProfitPrice': false,
290
+ 'attachedStopLossTakeProfit': undefined,
291
+ 'timeInForce': {
292
+ 'IOC': true,
293
+ 'FOK': false,
294
+ 'PO': true,
295
+ 'GTD': false,
296
+ },
297
+ 'hedged': false,
298
+ 'trailing': false,
299
+ 'leverage': false,
300
+ 'marketBuyByCost': false,
301
+ 'marketBuyRequiresPrice': false,
302
+ 'selfTradePrevention': true,
303
+ 'iceberg': false,
304
+ },
305
+ 'createOrders': undefined,
306
+ 'fetchMyTrades': {
307
+ 'marginMode': false,
308
+ 'limit': 100,
309
+ 'daysBack': 100000,
310
+ 'untilDays': 100000, // todo
311
+ },
312
+ 'fetchOrder': {
313
+ 'marginMode': false,
314
+ 'trigger': false,
315
+ 'trailing': false,
316
+ },
317
+ 'fetchOpenOrders': {
318
+ 'marginMode': false,
319
+ 'limit': 100,
320
+ 'trigger': false,
321
+ 'trailing': false,
322
+ },
323
+ 'fetchOrders': {
324
+ 'marginMode': false,
325
+ 'limit': 100,
326
+ 'daysBack': 100000,
327
+ 'untilDays': 100000,
328
+ 'trigger': false,
329
+ 'trailing': false,
330
+ },
331
+ 'fetchClosedOrders': undefined,
332
+ 'fetchOHLCV': {
333
+ 'limit': undefined, // todo by from/to
334
+ },
335
+ },
336
+ 'swap': {
337
+ 'linear': {
338
+ 'extends': 'forSwap',
339
+ },
340
+ 'inverse': undefined,
341
+ },
342
+ 'future': {
343
+ 'linear': undefined,
344
+ 'inverse': undefined,
345
+ },
346
+ },
277
347
  });
278
348
  }
279
349
  /**
@@ -1029,7 +1099,8 @@ class paradex extends paradex$1 {
1029
1099
  }
1030
1100
  }
1031
1101
  const account = await this.retrieveAccount();
1032
- const expires = now + 86400 * 7;
1102
+ // https://docs.paradex.trade/api-reference/general-information/authentication
1103
+ const expires = now + 180;
1033
1104
  const req = {
1034
1105
  'method': 'POST',
1035
1106
  'path': '/v1/auth',
@@ -290,6 +290,109 @@ class phemex extends phemex$1 {
290
290
  'maker': this.parseNumber('0.001'),
291
291
  },
292
292
  },
293
+ 'features': {
294
+ 'default': {
295
+ 'sandbox': true,
296
+ 'createOrder': {
297
+ 'marginMode': false,
298
+ 'triggerPrice': true,
299
+ // todo
300
+ 'triggerPriceType': {
301
+ 'mark': true,
302
+ 'last': true,
303
+ 'index': true,
304
+ },
305
+ 'triggerDirection': false,
306
+ 'stopLossPrice': false,
307
+ 'takeProfitPrice': false,
308
+ 'attachedStopLossTakeProfit': undefined,
309
+ 'timeInForce': {
310
+ 'IOC': true,
311
+ 'FOK': true,
312
+ 'PO': true,
313
+ 'GTD': false,
314
+ },
315
+ 'hedged': false,
316
+ 'leverage': false,
317
+ 'marketBuyByCost': true,
318
+ 'marketBuyRequiresPrice': false,
319
+ 'selfTradePrevention': false,
320
+ 'trailing': false,
321
+ 'iceberg': false,
322
+ },
323
+ 'createOrders': undefined,
324
+ 'fetchMyTrades': {
325
+ 'marginMode': false,
326
+ 'limit': 200,
327
+ 'daysBack': 100000,
328
+ 'untilDays': 2, // todo implement
329
+ },
330
+ 'fetchOrder': {
331
+ 'marginMode': false,
332
+ 'trigger': false,
333
+ 'trailing': false,
334
+ },
335
+ 'fetchOpenOrders': {
336
+ 'marginMode': false,
337
+ 'limit': undefined,
338
+ 'trigger': false,
339
+ 'trailing': false,
340
+ },
341
+ 'fetchOrders': {
342
+ 'marginMode': false,
343
+ 'limit': undefined,
344
+ 'daysBack': undefined,
345
+ 'untilDays': undefined,
346
+ 'trigger': false,
347
+ 'trailing': false,
348
+ },
349
+ 'fetchClosedOrders': {
350
+ 'marginMode': false,
351
+ 'limit': 200,
352
+ 'daysBack': 100000,
353
+ 'daysBackCanceled': 100000,
354
+ 'untilDays': 2,
355
+ 'trigger': false,
356
+ 'trailing': false,
357
+ },
358
+ 'fetchOHLCV': {
359
+ 'limit': 1000,
360
+ },
361
+ },
362
+ 'spot': {
363
+ 'extends': 'default',
364
+ },
365
+ 'forDerivatives': {
366
+ 'extends': 'default',
367
+ 'createOrder': {
368
+ 'triggerDirection': true,
369
+ 'attachedStopLossTakeProfit': {
370
+ 'triggerPriceType': {
371
+ 'mark': true,
372
+ 'last': true,
373
+ 'index': true,
374
+ },
375
+ 'price': true,
376
+ },
377
+ 'hedged': true,
378
+ },
379
+ 'fetchOHLCV': {
380
+ 'limit': 2000,
381
+ },
382
+ },
383
+ 'swap': {
384
+ 'linear': {
385
+ 'extends': 'forDerivatives',
386
+ },
387
+ 'inverse': {
388
+ 'extends': 'forDerivatives',
389
+ },
390
+ },
391
+ 'future': {
392
+ 'linear': undefined,
393
+ 'inverse': undefined,
394
+ },
395
+ },
293
396
  'requiredCredentials': {
294
397
  'apiKey': true,
295
398
  'secret': true,