ccxt 4.4.48 → 4.4.50

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 (175) hide show
  1. package/README.md +3 -3
  2. package/dist/ccxt.browser.min.js +12 -12
  3. package/dist/cjs/ccxt.js +1 -1
  4. package/dist/cjs/src/alpaca.js +64 -1
  5. package/dist/cjs/src/base/Exchange.js +75 -0
  6. package/dist/cjs/src/binance.js +8 -4
  7. package/dist/cjs/src/bingx.js +88 -30
  8. package/dist/cjs/src/bitfinex1.js +22 -22
  9. package/dist/cjs/src/bitget.js +12 -10
  10. package/dist/cjs/src/blofin.js +2 -2
  11. package/dist/cjs/src/bybit.js +2 -2
  12. package/dist/cjs/src/coinex.js +4 -4
  13. package/dist/cjs/src/coinmetro.js +1 -1
  14. package/dist/cjs/src/coinsph.js +18 -9
  15. package/dist/cjs/src/defx.js +1 -1
  16. package/dist/cjs/src/deribit.js +82 -0
  17. package/dist/cjs/src/digifinex.js +131 -11
  18. package/dist/cjs/src/ellipx.js +62 -0
  19. package/dist/cjs/src/exmo.js +58 -0
  20. package/dist/cjs/src/gate.js +1 -1
  21. package/dist/cjs/src/hitbtc.js +99 -0
  22. package/dist/cjs/src/hollaex.js +86 -19
  23. package/dist/cjs/src/huobijp.js +73 -0
  24. package/dist/cjs/src/hyperliquid.js +26 -5
  25. package/dist/cjs/src/idex.js +71 -0
  26. package/dist/cjs/src/independentreserve.js +64 -0
  27. package/dist/cjs/src/indodax.js +61 -0
  28. package/dist/cjs/src/krakenfutures.js +1 -1
  29. package/dist/cjs/src/kucoin.js +49 -71
  30. package/dist/cjs/src/kuna.js +61 -2
  31. package/dist/cjs/src/latoken.js +64 -0
  32. package/dist/cjs/src/lbank.js +70 -0
  33. package/dist/cjs/src/luno.js +73 -0
  34. package/dist/cjs/src/lykke.js +64 -0
  35. package/dist/cjs/src/mercado.js +65 -0
  36. package/dist/cjs/src/mexc.js +4 -3
  37. package/dist/cjs/src/myokx.js +10 -0
  38. package/dist/cjs/src/ndax.js +71 -0
  39. package/dist/cjs/src/novadax.js +74 -0
  40. package/dist/cjs/src/oceanex.js +69 -0
  41. package/dist/cjs/src/okcoin.js +92 -7
  42. package/dist/cjs/src/okx.js +1 -1
  43. package/dist/cjs/src/onetrading.js +66 -0
  44. package/dist/cjs/src/oxfun.js +66 -0
  45. package/dist/cjs/src/p2b.js +63 -1
  46. package/dist/cjs/src/paradex.js +69 -1
  47. package/dist/cjs/src/paymium.js +42 -0
  48. package/dist/cjs/src/pro/bitfinex1.js +4 -4
  49. package/dist/cjs/src/pro/bitmart.js +6 -0
  50. package/dist/cjs/src/pro/bitvavo.js +1 -1
  51. package/dist/cjs/src/pro/blofin.js +1 -1
  52. package/dist/cjs/src/pro/bybit.js +1 -1
  53. package/dist/cjs/src/pro/coincatch.js +2 -2
  54. package/dist/cjs/src/pro/cryptocom.js +2 -2
  55. package/dist/cjs/src/pro/defx.js +1 -1
  56. package/dist/cjs/src/pro/exmo.js +1 -1
  57. package/dist/cjs/src/pro/gemini.js +1 -1
  58. package/dist/cjs/src/pro/hashkey.js +2 -2
  59. package/dist/cjs/src/pro/hyperliquid.js +2 -2
  60. package/dist/cjs/src/pro/kucoin.js +1 -1
  61. package/dist/cjs/src/pro/okx.js +1 -1
  62. package/dist/cjs/src/pro/oxfun.js +1 -1
  63. package/dist/cjs/src/probit.js +68 -1
  64. package/dist/cjs/src/timex.js +67 -0
  65. package/dist/cjs/src/tokocrypto.js +82 -5
  66. package/dist/cjs/src/tradeogre.js +55 -2
  67. package/dist/cjs/src/whitebit.js +11 -4
  68. package/examples/README.md +6 -0
  69. package/js/ccxt.d.ts +1 -1
  70. package/js/ccxt.js +1 -1
  71. package/js/src/abstract/binance.d.ts +1 -0
  72. package/js/src/abstract/binancecoinm.d.ts +1 -0
  73. package/js/src/abstract/binanceus.d.ts +1 -0
  74. package/js/src/abstract/binanceusdm.d.ts +1 -0
  75. package/js/src/alpaca.d.ts +35 -0
  76. package/js/src/alpaca.js +64 -1
  77. package/js/src/base/Exchange.js +75 -0
  78. package/js/src/binance.d.ts +1 -0
  79. package/js/src/binance.js +8 -4
  80. package/js/src/bingx.d.ts +8 -0
  81. package/js/src/bingx.js +88 -30
  82. package/js/src/bitfinex1.d.ts +22 -22
  83. package/js/src/bitfinex1.js +22 -22
  84. package/js/src/bitget.d.ts +1 -0
  85. package/js/src/bitget.js +12 -10
  86. package/js/src/blofin.d.ts +1 -1
  87. package/js/src/blofin.js +2 -2
  88. package/js/src/bybit.d.ts +2 -2
  89. package/js/src/bybit.js +2 -2
  90. package/js/src/coinex.js +4 -4
  91. package/js/src/coinmetro.d.ts +1 -1
  92. package/js/src/coinmetro.js +1 -1
  93. package/js/src/coinsph.d.ts +1 -0
  94. package/js/src/coinsph.js +18 -9
  95. package/js/src/defx.d.ts +1 -1
  96. package/js/src/defx.js +1 -1
  97. package/js/src/deribit.js +82 -0
  98. package/js/src/digifinex.d.ts +1 -0
  99. package/js/src/digifinex.js +131 -11
  100. package/js/src/ellipx.d.ts +2 -0
  101. package/js/src/ellipx.js +62 -0
  102. package/js/src/exmo.js +58 -0
  103. package/js/src/gate.d.ts +1 -1
  104. package/js/src/gate.js +1 -1
  105. package/js/src/hitbtc.js +99 -0
  106. package/js/src/hollaex.d.ts +2 -1
  107. package/js/src/hollaex.js +86 -19
  108. package/js/src/huobijp.js +73 -0
  109. package/js/src/hyperliquid.d.ts +4 -3
  110. package/js/src/hyperliquid.js +26 -5
  111. package/js/src/idex.js +71 -0
  112. package/js/src/independentreserve.js +64 -0
  113. package/js/src/indodax.js +61 -0
  114. package/js/src/krakenfutures.d.ts +1 -1
  115. package/js/src/krakenfutures.js +1 -1
  116. package/js/src/kucoin.js +49 -71
  117. package/js/src/kuna.d.ts +1 -1
  118. package/js/src/kuna.js +61 -2
  119. package/js/src/latoken.js +64 -0
  120. package/js/src/lbank.js +70 -0
  121. package/js/src/luno.js +73 -0
  122. package/js/src/lykke.js +64 -0
  123. package/js/src/mercado.js +65 -0
  124. package/js/src/mexc.js +4 -3
  125. package/js/src/myokx.js +10 -0
  126. package/js/src/ndax.js +71 -0
  127. package/js/src/novadax.js +74 -0
  128. package/js/src/oceanex.js +69 -0
  129. package/js/src/okcoin.js +92 -7
  130. package/js/src/okx.d.ts +1 -1
  131. package/js/src/okx.js +1 -1
  132. package/js/src/onetrading.js +66 -0
  133. package/js/src/oxfun.js +66 -0
  134. package/js/src/p2b.js +63 -1
  135. package/js/src/paradex.d.ts +1 -1
  136. package/js/src/paradex.js +69 -1
  137. package/js/src/paymium.js +42 -0
  138. package/js/src/pro/bitfinex1.d.ts +4 -4
  139. package/js/src/pro/bitfinex1.js +4 -4
  140. package/js/src/pro/bitmart.d.ts +1 -0
  141. package/js/src/pro/bitmart.js +6 -0
  142. package/js/src/pro/bitvavo.d.ts +1 -1
  143. package/js/src/pro/bitvavo.js +1 -1
  144. package/js/src/pro/blofin.d.ts +1 -1
  145. package/js/src/pro/blofin.js +1 -1
  146. package/js/src/pro/bybit.d.ts +1 -1
  147. package/js/src/pro/bybit.js +1 -1
  148. package/js/src/pro/coincatch.d.ts +2 -2
  149. package/js/src/pro/coincatch.js +2 -2
  150. package/js/src/pro/cryptocom.d.ts +2 -2
  151. package/js/src/pro/cryptocom.js +2 -2
  152. package/js/src/pro/defx.d.ts +1 -1
  153. package/js/src/pro/defx.js +1 -1
  154. package/js/src/pro/exmo.d.ts +1 -1
  155. package/js/src/pro/exmo.js +1 -1
  156. package/js/src/pro/gemini.d.ts +1 -1
  157. package/js/src/pro/gemini.js +1 -1
  158. package/js/src/pro/hashkey.d.ts +2 -2
  159. package/js/src/pro/hashkey.js +2 -2
  160. package/js/src/pro/hyperliquid.d.ts +2 -2
  161. package/js/src/pro/hyperliquid.js +2 -2
  162. package/js/src/pro/kucoin.d.ts +1 -1
  163. package/js/src/pro/kucoin.js +1 -1
  164. package/js/src/pro/okx.d.ts +1 -1
  165. package/js/src/pro/okx.js +1 -1
  166. package/js/src/pro/oxfun.d.ts +1 -1
  167. package/js/src/pro/oxfun.js +1 -1
  168. package/js/src/probit.js +68 -1
  169. package/js/src/timex.js +67 -0
  170. package/js/src/tokocrypto.d.ts +2 -3
  171. package/js/src/tokocrypto.js +82 -5
  172. package/js/src/tradeogre.d.ts +4 -2
  173. package/js/src/tradeogre.js +55 -2
  174. package/js/src/whitebit.js +11 -4
  175. package/package.json +2 -2
@@ -1381,6 +1381,7 @@ class mexc extends mexc$1 {
1381
1381
  const quote = this.safeCurrencyCode(quoteId);
1382
1382
  const settle = this.safeCurrencyCode(settleId);
1383
1383
  const state = this.safeString(market, 'state');
1384
+ const isLinear = quote === settle;
1384
1385
  result.push({
1385
1386
  'id': id,
1386
1387
  'symbol': base + '/' + quote + ':' + settle,
@@ -1398,8 +1399,8 @@ class mexc extends mexc$1 {
1398
1399
  'option': false,
1399
1400
  'active': (state === '0'),
1400
1401
  'contract': true,
1401
- 'linear': true,
1402
- 'inverse': false,
1402
+ 'linear': isLinear,
1403
+ 'inverse': !isLinear,
1403
1404
  'taker': this.safeNumber(market, 'takerFeeRate'),
1404
1405
  'maker': this.safeNumber(market, 'makerFeeRate'),
1405
1406
  'contractSize': this.safeNumber(market, 'contractSize'),
@@ -4694,7 +4695,7 @@ class mexc extends mexc$1 {
4694
4695
  return {
4695
4696
  'info': depositAddress,
4696
4697
  'currency': this.safeCurrencyCode(currencyId, currency),
4697
- 'network': this.networkIdToCode(networkId),
4698
+ 'network': this.networkIdToCode(networkId, currencyId),
4698
4699
  'address': address,
4699
4700
  'tag': this.safeString(depositAddress, 'memo'),
4700
4701
  };
@@ -36,6 +36,16 @@ class myokx extends okx {
36
36
  'future': false,
37
37
  'option': false,
38
38
  },
39
+ 'features': {
40
+ 'swap': {
41
+ 'linear': undefined,
42
+ 'inverse': undefined,
43
+ },
44
+ 'future': {
45
+ 'linear': undefined,
46
+ 'inverse': undefined,
47
+ },
48
+ },
39
49
  });
40
50
  }
41
51
  }
@@ -258,6 +258,77 @@ class ndax extends ndax$1 {
258
258
  },
259
259
  },
260
260
  },
261
+ 'features': {
262
+ 'spot': {
263
+ 'sandbox': true,
264
+ 'createOrder': {
265
+ 'marginMode': false,
266
+ 'triggerPrice': true,
267
+ 'triggerDirection': false,
268
+ 'triggerPriceType': {
269
+ 'last': true,
270
+ 'mark': false,
271
+ 'index': false,
272
+ // bid & ask
273
+ },
274
+ 'stopLossPrice': false,
275
+ 'takeProfitPrice': false,
276
+ 'attachedStopLossTakeProfit': undefined,
277
+ // todo
278
+ 'timeInForce': {
279
+ 'IOC': true,
280
+ 'FOK': true,
281
+ 'PO': true,
282
+ 'GTD': false,
283
+ },
284
+ 'hedged': false,
285
+ 'trailing': false,
286
+ 'leverage': false,
287
+ 'marketBuyByCost': false,
288
+ 'marketBuyRequiresPrice': false,
289
+ 'selfTradePrevention': false,
290
+ 'iceberg': true, // todo
291
+ },
292
+ 'createOrders': undefined,
293
+ 'fetchMyTrades': {
294
+ 'marginMode': false,
295
+ 'limit': 100,
296
+ 'daysBack': 100000,
297
+ 'untilDays': 100000, // todo
298
+ },
299
+ 'fetchOrder': {
300
+ 'marginMode': false,
301
+ 'trigger': false,
302
+ 'trailing': false,
303
+ },
304
+ 'fetchOpenOrders': {
305
+ 'marginMode': false,
306
+ 'limit': undefined,
307
+ 'trigger': false,
308
+ 'trailing': false,
309
+ },
310
+ 'fetchOrders': {
311
+ 'marginMode': false,
312
+ 'limit': undefined,
313
+ 'daysBack': undefined,
314
+ 'untilDays': undefined,
315
+ 'trigger': false,
316
+ 'trailing': false,
317
+ },
318
+ 'fetchClosedOrders': undefined,
319
+ 'fetchOHLCV': {
320
+ 'limit': undefined,
321
+ },
322
+ },
323
+ 'swap': {
324
+ 'linear': undefined,
325
+ 'inverse': undefined,
326
+ },
327
+ 'future': {
328
+ 'linear': undefined,
329
+ 'inverse': undefined,
330
+ },
331
+ },
261
332
  'fees': {
262
333
  'trading': {
263
334
  'tierBased': false,
@@ -208,6 +208,80 @@ class novadax extends novadax$1 {
208
208
  'fillResponseFromRequest': true,
209
209
  },
210
210
  },
211
+ 'features': {
212
+ 'spot': {
213
+ 'sandbox': false,
214
+ 'createOrder': {
215
+ 'marginMode': false,
216
+ 'triggerPrice': true,
217
+ 'triggerDirection': true,
218
+ 'triggerPriceType': undefined,
219
+ 'stopLossPrice': false,
220
+ 'takeProfitPrice': false,
221
+ 'attachedStopLossTakeProfit': undefined,
222
+ // todo
223
+ 'timeInForce': {
224
+ 'IOC': false,
225
+ 'FOK': false,
226
+ 'PO': false,
227
+ 'GTD': false,
228
+ },
229
+ 'hedged': false,
230
+ 'trailing': false,
231
+ 'leverage': false,
232
+ 'marketBuyByCost': true,
233
+ 'marketBuyRequiresPrice': false,
234
+ 'selfTradePrevention': false,
235
+ 'iceberg': true, // todo
236
+ },
237
+ 'createOrders': undefined,
238
+ 'fetchMyTrades': {
239
+ 'marginMode': false,
240
+ 'limit': 100,
241
+ 'daysBack': 100000,
242
+ 'untilDays': 100000, // todo
243
+ },
244
+ 'fetchOrder': {
245
+ 'marginMode': false,
246
+ 'trigger': false,
247
+ 'trailing': false,
248
+ },
249
+ 'fetchOpenOrders': {
250
+ 'marginMode': false,
251
+ 'limit': undefined,
252
+ 'trigger': false,
253
+ 'trailing': false,
254
+ },
255
+ 'fetchOrders': {
256
+ 'marginMode': false,
257
+ 'limit': 100,
258
+ 'daysBack': 100000,
259
+ 'untilDays': 100000,
260
+ 'trigger': false,
261
+ 'trailing': false,
262
+ },
263
+ 'fetchClosedOrders': {
264
+ 'marginMode': false,
265
+ 'limit': 100,
266
+ 'daysBack': 100000,
267
+ 'daysBackCanceled': 1,
268
+ 'untilDays': 100000,
269
+ 'trigger': false,
270
+ 'trailing': false,
271
+ },
272
+ 'fetchOHLCV': {
273
+ 'limit': undefined, // todo max 3000
274
+ },
275
+ },
276
+ 'swap': {
277
+ 'linear': undefined,
278
+ 'inverse': undefined,
279
+ },
280
+ 'future': {
281
+ 'linear': undefined,
282
+ 'inverse': undefined,
283
+ },
284
+ },
211
285
  });
212
286
  }
213
287
  /**
@@ -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,
@@ -611,12 +688,20 @@ class okcoin extends okcoin$1 {
611
688
  async fetchTime(params = {}) {
612
689
  const response = await this.publicGetPublicTime(params);
613
690
  //
614
- // {
615
- // "iso": "2015-01-07T23:47:25.201Z",
616
- // "epoch": 1420674445.201
617
- // }
691
+ // {
692
+ // "code": "0",
693
+ // "data":
694
+ // [
695
+ // {
696
+ // "ts": "1737379360033"
697
+ // }
698
+ // ],
699
+ // "msg": ""
700
+ // }
618
701
  //
619
- return this.parse8601(this.safeString(response, 'iso'));
702
+ const data = this.safeList(response, 'data');
703
+ const timestamp = this.safeDict(data, 0);
704
+ return this.safeInteger(timestamp, 'ts');
620
705
  }
621
706
  /**
622
707
  * @method
@@ -1510,7 +1595,7 @@ class okcoin extends okcoin$1 {
1510
1595
  if (stopLossDefined) {
1511
1596
  const stopLossTriggerPrice = this.safeValueN(stopLoss, ['triggerPrice', 'stopPrice', 'slTriggerPx']);
1512
1597
  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');
1598
+ throw new errors.InvalidOrder(this.id + ' createOrder() requires a trigger price in params["stopLoss"]["triggerPrice"] for a stop loss order');
1514
1599
  }
1515
1600
  request['slTriggerPx'] = this.priceToPrecision(symbol, stopLossTriggerPrice);
1516
1601
  const stopLossLimitPrice = this.safeValueN(stopLoss, ['price', 'stopLossPrice', 'slOrdPx']);
@@ -1523,7 +1608,7 @@ class okcoin extends okcoin$1 {
1523
1608
  }
1524
1609
  else if (stopLossLimitOrderType) {
1525
1610
  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');
1611
+ throw new errors.InvalidOrder(this.id + ' createOrder() requires a limit price in params["stopLoss"]["price"] for a stop loss limit order');
1527
1612
  }
1528
1613
  else {
1529
1614
  request['slOrdPx'] = this.priceToPrecision(symbol, stopLossLimitPrice);
@@ -5730,7 +5730,7 @@ class okx extends okx$1 {
5730
5730
  }
5731
5731
  /**
5732
5732
  * @method
5733
- * @name okx#fetchPositions
5733
+ * @name okx#fetchPositionsForSymbol
5734
5734
  * @see https://www.okx.com/docs-v5/en/#rest-api-account-get-positions
5735
5735
  * @description fetch all open positions for specific symbol
5736
5736
  * @param {string} symbol unified market symbol
@@ -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': {