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
package/js/src/coinone.js CHANGED
@@ -193,6 +193,62 @@ export default class coinone extends Exchange {
193
193
  'maker': 0.002,
194
194
  },
195
195
  },
196
+ 'features': {
197
+ 'spot': {
198
+ 'sandbox': false,
199
+ 'createOrder': {
200
+ 'marginMode': false,
201
+ 'triggerPrice': false,
202
+ 'triggerPriceType': undefined,
203
+ 'triggerDirection': false,
204
+ 'stopLossPrice': false,
205
+ 'takeProfitPrice': false,
206
+ 'attachedStopLossTakeProfit': undefined,
207
+ 'timeInForce': {
208
+ 'IOC': false,
209
+ 'FOK': false,
210
+ 'PO': false,
211
+ 'GTD': false,
212
+ },
213
+ 'hedged': false,
214
+ 'trailing': false,
215
+ 'leverage': false,
216
+ 'marketBuyByCost': false,
217
+ 'marketBuyRequiresPrice': false,
218
+ 'selfTradePrevention': false,
219
+ 'iceberg': false,
220
+ },
221
+ 'createOrders': undefined,
222
+ 'fetchMyTrades': {
223
+ 'marginMode': false,
224
+ 'limit': 100,
225
+ 'daysBack': 100000,
226
+ 'untilDays': 100000, // todo implement
227
+ },
228
+ 'fetchOrder': {
229
+ 'marginMode': false,
230
+ 'trigger': false,
231
+ 'trailing': false,
232
+ },
233
+ 'fetchOpenOrders': {
234
+ 'marginMode': false,
235
+ 'limit': undefined,
236
+ 'trigger': false,
237
+ 'trailing': false,
238
+ },
239
+ 'fetchOrders': undefined,
240
+ 'fetchClosedOrders': undefined,
241
+ 'fetchOHLCV': undefined, // todo implement
242
+ },
243
+ 'swap': {
244
+ 'linear': undefined,
245
+ 'inverse': undefined,
246
+ },
247
+ 'future': {
248
+ 'linear': undefined,
249
+ 'inverse': undefined,
250
+ },
251
+ },
196
252
  'precisionMode': TICK_SIZE,
197
253
  'exceptions': {
198
254
  '104': OrderNotFound,
@@ -86,6 +86,7 @@ export default class coinsph extends Exchange {
86
86
  * @param {int} [since] timestamp in ms of the earliest candle to fetch
87
87
  * @param {int} [limit] the maximum amount of candles to fetch (default 500, max 1000)
88
88
  * @param {object} [params] extra parameters specific to the exchange API endpoint
89
+ * @param {int} [params.until] timestamp in ms of the latest candle to fetch
89
90
  * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
90
91
  */
91
92
  fetchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
@@ -169,7 +170,7 @@ export default class coinsph extends Exchange {
169
170
  * @method
170
171
  * @name coinsph#fetchOpenOrders
171
172
  * @description fetch all unfilled currently open orders
172
- * @see https://coins-docs.github.io/rest-api/#query-order-user_data
173
+ * @see https://coins-docs.github.io/rest-api/#current-open-orders-user_data
173
174
  * @param {string} symbol unified market symbol
174
175
  * @param {int} [since] the earliest time in ms to fetch open orders for
175
176
  * @param {int} [limit] the maximum number of open orders structures to retrieve
package/js/src/coinsph.js CHANGED
@@ -297,6 +297,72 @@ export default class coinsph extends Exchange {
297
297
  'ARB': 'ARBITRUM',
298
298
  },
299
299
  },
300
+ 'features': {
301
+ 'spot': {
302
+ 'sandbox': false,
303
+ 'createOrder': {
304
+ 'marginMode': false,
305
+ 'triggerPrice': true,
306
+ 'triggerPriceType': undefined,
307
+ 'triggerDirection': false,
308
+ 'stopLossPrice': false,
309
+ 'takeProfitPrice': false,
310
+ 'attachedStopLossTakeProfit': undefined,
311
+ 'timeInForce': {
312
+ 'IOC': true,
313
+ 'FOK': true,
314
+ 'PO': false,
315
+ 'GTD': false,
316
+ },
317
+ 'hedged': false,
318
+ 'trailing': false,
319
+ 'leverage': false,
320
+ 'marketBuyByCost': true,
321
+ 'marketBuyRequiresPrice': false,
322
+ 'selfTradePrevention': true,
323
+ 'iceberg': false,
324
+ },
325
+ 'createOrders': undefined,
326
+ 'fetchMyTrades': {
327
+ 'marginMode': false,
328
+ 'limit': 1000,
329
+ 'daysBack': 100000,
330
+ 'untilDays': 100000, // todo implement
331
+ },
332
+ 'fetchOrder': {
333
+ 'marginMode': false,
334
+ 'trigger': false,
335
+ 'trailing': false,
336
+ },
337
+ 'fetchOpenOrders': {
338
+ 'marginMode': false,
339
+ 'limit': undefined,
340
+ 'trigger': false,
341
+ 'trailing': false,
342
+ },
343
+ 'fetchOrders': undefined,
344
+ 'fetchClosedOrders': {
345
+ 'marginMode': false,
346
+ 'limit': 1000,
347
+ 'daysBack': 100000,
348
+ 'daysBackCanceled': 1,
349
+ 'untilDays': 100000,
350
+ 'trigger': false,
351
+ 'trailing': false,
352
+ },
353
+ 'fetchOHLCV': {
354
+ 'limit': 1000,
355
+ },
356
+ },
357
+ 'swap': {
358
+ 'linear': undefined,
359
+ 'inverse': undefined,
360
+ },
361
+ 'future': {
362
+ 'linear': undefined,
363
+ 'inverse': undefined,
364
+ },
365
+ },
300
366
  // https://coins-docs.github.io/errors/
301
367
  'exceptions': {
302
368
  'exact': {
@@ -810,33 +876,42 @@ export default class coinsph extends Exchange {
810
876
  * @param {int} [since] timestamp in ms of the earliest candle to fetch
811
877
  * @param {int} [limit] the maximum amount of candles to fetch (default 500, max 1000)
812
878
  * @param {object} [params] extra parameters specific to the exchange API endpoint
879
+ * @param {int} [params.until] timestamp in ms of the latest candle to fetch
813
880
  * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
814
881
  */
815
882
  async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
816
883
  await this.loadMarkets();
817
884
  const market = this.market(symbol);
818
885
  const interval = this.safeString(this.timeframes, timeframe);
886
+ const until = this.safeInteger(params, 'until');
819
887
  const request = {
820
888
  'symbol': market['id'],
821
889
  'interval': interval,
822
890
  };
891
+ if (limit === undefined) {
892
+ limit = 1000;
893
+ }
823
894
  if (since !== undefined) {
824
895
  request['startTime'] = since;
825
- request['limit'] = 1000;
826
896
  // since work properly only when it is "younger" than last "limit" candle
827
- if (limit !== undefined) {
828
- const duration = this.parseTimeframe(timeframe) * 1000;
829
- request['endTime'] = this.sum(since, duration * (limit - 1));
897
+ if (until !== undefined) {
898
+ request['endTime'] = until;
830
899
  }
831
900
  else {
832
- request['endTime'] = this.milliseconds();
901
+ const duration = this.parseTimeframe(timeframe) * 1000;
902
+ const endTimeByLimit = this.sum(since, duration * (limit - 1));
903
+ const now = this.milliseconds();
904
+ request['endTime'] = Math.min(endTimeByLimit, now);
833
905
  }
834
906
  }
835
- else {
836
- if (limit !== undefined) {
837
- request['limit'] = limit;
838
- }
907
+ else if (until !== undefined) {
908
+ request['endTime'] = until;
909
+ // since work properly only when it is "younger" than last "limit" candle
910
+ const duration = this.parseTimeframe(timeframe) * 1000;
911
+ request['startTime'] = until - (duration * (limit - 1));
839
912
  }
913
+ request['limit'] = limit;
914
+ params = this.omit(params, 'until');
840
915
  const response = await this.publicGetOpenapiQuoteV1Klines(this.extend(request, params));
841
916
  //
842
917
  // [
@@ -1248,7 +1323,7 @@ export default class coinsph extends Exchange {
1248
1323
  * @method
1249
1324
  * @name coinsph#fetchOpenOrders
1250
1325
  * @description fetch all unfilled currently open orders
1251
- * @see https://coins-docs.github.io/rest-api/#query-order-user_data
1326
+ * @see https://coins-docs.github.io/rest-api/#current-open-orders-user_data
1252
1327
  * @param {string} symbol unified market symbol
1253
1328
  * @param {int} [since] the earliest time in ms to fetch open orders for
1254
1329
  * @param {int} [limit] the maximum number of open orders structures to retrieve
@@ -144,6 +144,53 @@ export default class coinspot extends Exchange {
144
144
  'options': {
145
145
  'fetchBalance': 'private_post_my_balances',
146
146
  },
147
+ 'features': {
148
+ 'spot': {
149
+ 'sandbox': false,
150
+ 'createOrder': {
151
+ 'marginMode': false,
152
+ 'triggerPrice': false,
153
+ 'triggerPriceType': undefined,
154
+ 'triggerDirection': false,
155
+ 'stopLossPrice': false,
156
+ 'takeProfitPrice': false,
157
+ 'attachedStopLossTakeProfit': undefined,
158
+ 'timeInForce': {
159
+ 'IOC': false,
160
+ 'FOK': false,
161
+ 'PO': false,
162
+ 'GTD': false,
163
+ },
164
+ 'hedged': false,
165
+ 'trailing': false,
166
+ 'leverage': false,
167
+ 'marketBuyByCost': false,
168
+ 'marketBuyRequiresPrice': false,
169
+ 'selfTradePrevention': false,
170
+ 'iceberg': false,
171
+ },
172
+ 'createOrders': undefined,
173
+ 'fetchMyTrades': {
174
+ 'marginMode': false,
175
+ 'limit': undefined,
176
+ 'daysBack': 100000,
177
+ 'untilDays': 100000, // todo implement
178
+ },
179
+ 'fetchOrder': undefined,
180
+ 'fetchOpenOrders': undefined,
181
+ 'fetchOrders': undefined,
182
+ 'fetchClosedOrders': undefined,
183
+ 'fetchOHLCV': undefined,
184
+ },
185
+ 'swap': {
186
+ 'linear': undefined,
187
+ 'inverse': undefined,
188
+ },
189
+ 'future': {
190
+ 'linear': undefined,
191
+ 'inverse': undefined,
192
+ },
193
+ },
147
194
  'precisionMode': TICK_SIZE,
148
195
  });
149
196
  }
@@ -251,6 +251,78 @@ export default class currencycom extends Exchange {
251
251
  'leverage_markets_suffix': '_LEVERAGE',
252
252
  'collateralCurrencies': ['USD', 'EUR', 'USDT'],
253
253
  },
254
+ 'features': {
255
+ 'default': {
256
+ 'sandbox': true,
257
+ 'createOrder': {
258
+ 'marginMode': true,
259
+ 'triggerPrice': true,
260
+ 'triggerPriceType': undefined,
261
+ 'triggerDirection': false,
262
+ 'stopLossPrice': false,
263
+ 'takeProfitPrice': false,
264
+ 'attachedStopLossTakeProfit': {
265
+ 'triggerPriceType': undefined,
266
+ 'price': false,
267
+ },
268
+ 'timeInForce': {
269
+ 'IOC': true,
270
+ 'FOK': true,
271
+ 'PO': false,
272
+ 'GTD': true,
273
+ },
274
+ 'hedged': false,
275
+ 'selfTradePrevention': false,
276
+ 'trailing': false,
277
+ 'iceberg': false,
278
+ 'leverage': true,
279
+ 'marketBuyByCost': false,
280
+ 'marketBuyRequiresPrice': false,
281
+ },
282
+ 'createOrders': undefined,
283
+ 'fetchMyTrades': {
284
+ 'marginMode': false,
285
+ 'limit': 500,
286
+ 'daysBack': 100000,
287
+ 'untilDays': 100000, // todo implementation
288
+ },
289
+ 'fetchOrder': {
290
+ 'marginMode': false,
291
+ 'trigger': false,
292
+ 'trailing': false,
293
+ },
294
+ 'fetchOpenOrders': {
295
+ 'marginMode': true,
296
+ 'limit': 100,
297
+ 'trigger': false,
298
+ 'trailing': false,
299
+ },
300
+ 'fetchOrders': undefined,
301
+ 'fetchClosedOrders': undefined,
302
+ 'fetchOHLCV': {
303
+ 'limit': 1000,
304
+ },
305
+ },
306
+ 'spot': {
307
+ 'extends': 'default',
308
+ },
309
+ 'swap': {
310
+ 'linear': {
311
+ 'extends': 'default',
312
+ },
313
+ 'inverse': {
314
+ 'extends': 'default',
315
+ },
316
+ },
317
+ 'future': {
318
+ 'linear': {
319
+ 'extends': 'default',
320
+ },
321
+ 'inverse': {
322
+ 'extends': 'default',
323
+ },
324
+ },
325
+ },
254
326
  'exceptions': {
255
327
  'broad': {
256
328
  'FIELD_VALIDATION_ERROR Cancel is available only for LIMIT order': InvalidOrder,
package/js/src/defx.js CHANGED
@@ -253,6 +253,87 @@ export default class defx extends Exchange {
253
253
  'options': {
254
254
  'sandboxMode': false,
255
255
  },
256
+ 'features': {
257
+ 'spot': undefined,
258
+ 'forDerivatives': {
259
+ 'sandbox': true,
260
+ 'createOrder': {
261
+ 'marginMode': false,
262
+ 'triggerPrice': true,
263
+ // todo implement
264
+ 'triggerPriceType': {
265
+ 'last': true,
266
+ 'mark': true,
267
+ 'index': false,
268
+ },
269
+ 'triggerDirection': false,
270
+ 'stopLossPrice': false,
271
+ 'takeProfitPrice': false,
272
+ 'attachedStopLossTakeProfit': undefined,
273
+ 'timeInForce': {
274
+ 'IOC': true,
275
+ 'FOK': true,
276
+ 'PO': true,
277
+ 'GTD': false,
278
+ },
279
+ 'hedged': false,
280
+ 'selfTradePrevention': false,
281
+ 'trailing': false,
282
+ 'iceberg': false,
283
+ 'leverage': false,
284
+ 'marketBuyByCost': false,
285
+ 'marketBuyRequiresPrice': false,
286
+ },
287
+ 'createOrders': undefined,
288
+ 'fetchMyTrades': {
289
+ 'marginMode': false,
290
+ 'limit': 1000,
291
+ 'daysBack': undefined,
292
+ 'untilDays': undefined,
293
+ },
294
+ 'fetchOrder': {
295
+ 'marginMode': false,
296
+ 'trigger': false,
297
+ 'trailing': false,
298
+ },
299
+ 'fetchOpenOrders': {
300
+ 'marginMode': true,
301
+ 'limit': 100,
302
+ 'trigger': false,
303
+ 'trailing': false,
304
+ },
305
+ 'fetchOrders': {
306
+ 'marginMode': false,
307
+ 'limit': 500,
308
+ 'daysBack': 100000,
309
+ 'untilDays': 100000,
310
+ 'trigger': false,
311
+ 'trailing': false,
312
+ },
313
+ 'fetchClosedOrders': {
314
+ 'marginMode': false,
315
+ 'limit': 500,
316
+ 'daysBack': 100000,
317
+ 'daysBackCanceled': 1,
318
+ 'untilDays': 100000,
319
+ 'trigger': false,
320
+ 'trailing': false,
321
+ },
322
+ 'fetchOHLCV': {
323
+ 'limit': 1000,
324
+ },
325
+ },
326
+ 'swap': {
327
+ 'linear': {
328
+ 'extends': 'forDerivatives',
329
+ },
330
+ 'inverse': undefined,
331
+ },
332
+ 'future': {
333
+ 'linear': undefined,
334
+ 'inverse': undefined,
335
+ },
336
+ },
256
337
  'commonCurrencies': {},
257
338
  'exceptions': {
258
339
  'exact': {
@@ -1663,8 +1744,10 @@ export default class defx extends Exchange {
1663
1744
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1664
1745
  */
1665
1746
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1666
- params['statuses'] = 'OPEN';
1667
- return await this.fetchOrders(symbol, since, limit, params);
1747
+ const req = {
1748
+ 'statuses': 'OPEN',
1749
+ };
1750
+ return await this.fetchOrders(symbol, since, limit, this.extend(req, params));
1668
1751
  }
1669
1752
  /**
1670
1753
  * @method
@@ -1679,8 +1762,10 @@ export default class defx extends Exchange {
1679
1762
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1680
1763
  */
1681
1764
  async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1682
- params['statuses'] = 'FILLED';
1683
- return await this.fetchOrders(symbol, since, limit, params);
1765
+ const req = {
1766
+ 'statuses': 'FILLED',
1767
+ };
1768
+ return await this.fetchOrders(symbol, since, limit, this.extend(req, params));
1684
1769
  }
1685
1770
  /**
1686
1771
  * @method
@@ -1695,8 +1780,10 @@ export default class defx extends Exchange {
1695
1780
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1696
1781
  */
1697
1782
  async fetchCanceledOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1698
- params['statuses'] = 'CANCELED';
1699
- return await this.fetchOrders(symbol, since, limit, params);
1783
+ const req = {
1784
+ 'statuses': 'CANCELED',
1785
+ };
1786
+ return await this.fetchOrders(symbol, since, limit, this.extend(req, params));
1700
1787
  }
1701
1788
  /**
1702
1789
  * @method
package/js/src/delta.js CHANGED
@@ -222,6 +222,88 @@ export default class delta extends Exchange {
222
222
  'BEP20': 'BEP20(BSC)',
223
223
  },
224
224
  },
225
+ 'features': {
226
+ 'default': {
227
+ 'sandbox': true,
228
+ 'createOrder': {
229
+ 'marginMode': false,
230
+ 'triggerPrice': true,
231
+ // todo implement
232
+ 'triggerPriceType': {
233
+ 'last': true,
234
+ 'mark': true,
235
+ 'index': true,
236
+ },
237
+ 'triggerDirection': false,
238
+ 'stopLossPrice': false,
239
+ 'takeProfitPrice': false,
240
+ 'attachedStopLossTakeProfit': {
241
+ 'triggerPriceType': undefined,
242
+ 'price': true,
243
+ },
244
+ // todo implementation
245
+ 'timeInForce': {
246
+ 'IOC': true,
247
+ 'FOK': true,
248
+ 'PO': true,
249
+ 'GTD': false,
250
+ },
251
+ 'hedged': false,
252
+ 'selfTradePrevention': false,
253
+ 'trailing': false,
254
+ 'iceberg': false,
255
+ 'leverage': false,
256
+ 'marketBuyByCost': false,
257
+ 'marketBuyRequiresPrice': false,
258
+ },
259
+ 'createOrders': undefined,
260
+ 'fetchMyTrades': {
261
+ 'marginMode': false,
262
+ 'limit': 100,
263
+ 'daysBack': 100000,
264
+ 'untilDays': 100000,
265
+ },
266
+ 'fetchOrder': undefined,
267
+ 'fetchOpenOrders': {
268
+ 'marginMode': false,
269
+ 'limit': 100,
270
+ 'trigger': false,
271
+ 'trailing': false,
272
+ },
273
+ 'fetchOrders': undefined,
274
+ 'fetchClosedOrders': {
275
+ 'marginMode': false,
276
+ 'limit': 500,
277
+ 'daysBack': 100000,
278
+ 'daysBackCanceled': 1,
279
+ 'untilDays': 100000,
280
+ 'trigger': false,
281
+ 'trailing': false,
282
+ },
283
+ 'fetchOHLCV': {
284
+ 'limit': 2000, // todo: recheck
285
+ },
286
+ },
287
+ 'spot': {
288
+ 'extends': 'default',
289
+ },
290
+ 'swap': {
291
+ 'linear': {
292
+ 'extends': 'default',
293
+ },
294
+ 'inverse': {
295
+ 'extends': 'default',
296
+ },
297
+ },
298
+ 'future': {
299
+ 'linear': {
300
+ 'extends': 'default',
301
+ },
302
+ 'inverse': {
303
+ 'extends': 'default',
304
+ },
305
+ },
306
+ },
225
307
  'precisionMode': TICK_SIZE,
226
308
  'requiredCredentials': {
227
309
  'apiKey': true,
@@ -3488,7 +3570,7 @@ export default class delta extends Exchange {
3488
3570
  'timestamp': timestamp,
3489
3571
  };
3490
3572
  let auth = method + timestamp + requestPath;
3491
- if ((method === 'GET') || (method === 'DELETE')) {
3573
+ if (method === 'GET') {
3492
3574
  if (Object.keys(query).length) {
3493
3575
  const queryString = '?' + this.urlencode(query);
3494
3576
  auth += queryString;
package/js/src/deribit.js CHANGED
@@ -281,6 +281,88 @@ export default class deribit extends Exchange {
281
281
  },
282
282
  },
283
283
  },
284
+ 'features': {
285
+ 'default': {
286
+ 'sandbox': true,
287
+ 'createOrder': {
288
+ 'marginMode': false,
289
+ 'triggerPrice': true,
290
+ // todo implement
291
+ 'triggerPriceType': {
292
+ 'last': true,
293
+ 'mark': true,
294
+ 'index': true,
295
+ },
296
+ 'triggerDirection': false,
297
+ 'stopLossPrice': false,
298
+ 'takeProfitPrice': false,
299
+ 'attachedStopLossTakeProfit': undefined,
300
+ 'timeInForce': {
301
+ 'IOC': true,
302
+ 'FOK': true,
303
+ 'PO': true,
304
+ 'GTD': true,
305
+ },
306
+ 'hedged': false,
307
+ 'selfTradePrevention': false,
308
+ 'trailing': true,
309
+ 'leverage': false,
310
+ 'marketBuyByCost': true,
311
+ 'marketBuyRequiresPrice': false,
312
+ 'iceberg': true, // todo
313
+ },
314
+ 'createOrders': undefined,
315
+ 'fetchMyTrades': {
316
+ 'marginMode': false,
317
+ 'limit': 100,
318
+ 'daysBack': 100000,
319
+ 'untilDays': 100000,
320
+ },
321
+ 'fetchOrder': {
322
+ 'marginMode': false,
323
+ 'trigger': false,
324
+ 'trailing': false,
325
+ },
326
+ 'fetchOpenOrders': {
327
+ 'marginMode': false,
328
+ 'limit': undefined,
329
+ 'trigger': false,
330
+ 'trailing': false,
331
+ },
332
+ 'fetchOrders': undefined,
333
+ 'fetchClosedOrders': {
334
+ 'marginMode': false,
335
+ 'limit': 100,
336
+ 'daysBack': 100000,
337
+ 'daysBackCanceled': 1,
338
+ 'untilDays': 100000,
339
+ 'trigger': false,
340
+ 'trailing': false,
341
+ },
342
+ 'fetchOHLCV': {
343
+ 'limit': 1000, // todo: recheck
344
+ },
345
+ },
346
+ 'spot': {
347
+ 'extends': 'default',
348
+ },
349
+ 'swap': {
350
+ 'linear': {
351
+ 'extends': 'default',
352
+ },
353
+ 'inverse': {
354
+ 'extends': 'default',
355
+ },
356
+ },
357
+ 'future': {
358
+ 'linear': {
359
+ 'extends': 'default',
360
+ },
361
+ 'inverse': {
362
+ 'extends': 'default',
363
+ },
364
+ },
365
+ },
284
366
  'exceptions': {
285
367
  // 0 or absent Success, No error.
286
368
  '9999': PermissionDenied,
@@ -119,6 +119,7 @@ export default class digifinex extends Exchange {
119
119
  * @param {int} [since] timestamp in ms of the earliest candle to fetch
120
120
  * @param {int} [limit] the maximum amount of candles to fetch
121
121
  * @param {object} [params] extra parameters specific to the exchange API endpoint
122
+ * @param {int} [params.until] timestamp in ms of the latest candle to fetch
122
123
  * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
123
124
  */
124
125
  fetchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;