ccxt 4.3.27 → 4.3.29
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.
- package/README.md +3 -3
- package/dist/ccxt.browser.min.js +30 -0
- package/dist/ccxt.browser.min.js.LICENSE.txt +12 -0
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/ascendex.js +1 -1
- package/dist/cjs/src/base/Exchange.js +2 -1
- package/dist/cjs/src/base/ws/OrderBookSide.js +4 -4
- package/dist/cjs/src/bingx.js +140 -90
- package/dist/cjs/src/bitget.js +1 -0
- package/dist/cjs/src/bitmart.js +137 -2
- package/dist/cjs/src/bybit.js +3 -3
- package/dist/cjs/src/coinbase.js +1 -1
- package/dist/cjs/src/krakenfutures.js +1 -1
- package/dist/cjs/src/kucoin.js +1 -0
- package/dist/cjs/src/pro/bitfinex.js +4 -4
- package/dist/cjs/src/pro/bitfinex2.js +2 -2
- package/dist/cjs/src/pro/bitmex.js +3 -3
- package/dist/cjs/src/pro/blockchaincom.js +2 -2
- package/dist/cjs/src/pro/coinbase.js +5 -1
- package/dist/cjs/src/pro/cryptocom.js +4 -4
- package/dist/cjs/src/pro/deribit.js +9 -9
- package/dist/cjs/src/pro/idex.js +1 -1
- package/dist/cjs/src/pro/luno.js +4 -5
- package/dist/cjs/src/pro/mexc.js +2 -2
- package/dist/cjs/src/whitebit.js +1 -1
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/bingx.d.ts +7 -0
- package/js/src/abstract/bitget.d.ts +1 -0
- package/js/src/abstract/bitmart.d.ts +2 -0
- package/js/src/ascendex.js +1 -1
- package/js/src/base/Exchange.js +2 -1
- package/js/src/base/ws/Cache.d.ts +1 -1
- package/js/src/base/ws/OrderBookSide.d.ts +4 -5
- package/js/src/base/ws/OrderBookSide.js +4 -4
- package/js/src/bingx.js +140 -90
- package/js/src/bitget.js +1 -0
- package/js/src/bitmart.d.ts +3 -1
- package/js/src/bitmart.js +137 -2
- package/js/src/bybit.js +3 -3
- package/js/src/coinbase.js +1 -1
- package/js/src/krakenfutures.js +1 -1
- package/js/src/kucoin.js +1 -0
- package/js/src/pro/bitfinex.js +4 -4
- package/js/src/pro/bitfinex2.js +2 -2
- package/js/src/pro/bitmex.js +3 -3
- package/js/src/pro/blockchaincom.js +2 -2
- package/js/src/pro/coinbase.js +5 -1
- package/js/src/pro/cryptocom.js +4 -4
- package/js/src/pro/deribit.js +9 -9
- package/js/src/pro/idex.js +1 -1
- package/js/src/pro/luno.js +4 -5
- package/js/src/pro/mexc.js +2 -2
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +1 -1
- package/js/src/whitebit.js +1 -1
- package/package.json +2 -2
package/js/src/bingx.js
CHANGED
|
@@ -21,8 +21,7 @@ export default class bingx extends Exchange {
|
|
|
21
21
|
'id': 'bingx',
|
|
22
22
|
'name': 'BingX',
|
|
23
23
|
'countries': ['US'],
|
|
24
|
-
|
|
25
|
-
'rateLimit': 1000,
|
|
24
|
+
'rateLimit': 100,
|
|
26
25
|
'version': 'v1',
|
|
27
26
|
'certified': true,
|
|
28
27
|
'pro': true,
|
|
@@ -135,44 +134,54 @@ export default class bingx extends Exchange {
|
|
|
135
134
|
'v1': {
|
|
136
135
|
'public': {
|
|
137
136
|
'get': {
|
|
138
|
-
'server/time':
|
|
139
|
-
'common/symbols':
|
|
140
|
-
'market/trades':
|
|
141
|
-
'market/depth':
|
|
142
|
-
'market/kline':
|
|
137
|
+
'server/time': 1,
|
|
138
|
+
'common/symbols': 1,
|
|
139
|
+
'market/trades': 1,
|
|
140
|
+
'market/depth': 1,
|
|
141
|
+
'market/kline': 1,
|
|
143
142
|
'ticker/24hr': 1,
|
|
143
|
+
'ticker/price': 1,
|
|
144
|
+
'ticker/bookTicker': 1,
|
|
144
145
|
},
|
|
145
146
|
},
|
|
146
147
|
'private': {
|
|
147
148
|
'get': {
|
|
148
|
-
'trade/query':
|
|
149
|
-
'trade/openOrders':
|
|
150
|
-
'trade/historyOrders':
|
|
151
|
-
'trade/myTrades':
|
|
152
|
-
'user/commissionRate':
|
|
153
|
-
'account/balance':
|
|
149
|
+
'trade/query': 1,
|
|
150
|
+
'trade/openOrders': 1,
|
|
151
|
+
'trade/historyOrders': 1,
|
|
152
|
+
'trade/myTrades': 2,
|
|
153
|
+
'user/commissionRate': 5,
|
|
154
|
+
'account/balance': 2,
|
|
154
155
|
},
|
|
155
156
|
'post': {
|
|
156
|
-
'trade/order':
|
|
157
|
-
'trade/cancel':
|
|
158
|
-
'trade/batchOrders':
|
|
159
|
-
'trade/order/cancelReplace':
|
|
160
|
-
'trade/cancelOrders':
|
|
161
|
-
'trade/cancelOpenOrders':
|
|
162
|
-
'trade/cancelAllAfter':
|
|
157
|
+
'trade/order': 2,
|
|
158
|
+
'trade/cancel': 2,
|
|
159
|
+
'trade/batchOrders': 5,
|
|
160
|
+
'trade/order/cancelReplace': 5,
|
|
161
|
+
'trade/cancelOrders': 5,
|
|
162
|
+
'trade/cancelOpenOrders': 5,
|
|
163
|
+
'trade/cancelAllAfter': 5,
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
'v2': {
|
|
168
|
+
'public': {
|
|
169
|
+
'get': {
|
|
170
|
+
'market/depth': 1,
|
|
171
|
+
'market/kline': 1,
|
|
163
172
|
},
|
|
164
173
|
},
|
|
165
174
|
},
|
|
166
175
|
'v3': {
|
|
167
176
|
'private': {
|
|
168
177
|
'get': {
|
|
169
|
-
'get/asset/transfer':
|
|
170
|
-
'asset/transfer':
|
|
171
|
-
'capital/deposit/hisrec':
|
|
172
|
-
'capital/withdraw/history':
|
|
178
|
+
'get/asset/transfer': 1,
|
|
179
|
+
'asset/transfer': 1,
|
|
180
|
+
'capital/deposit/hisrec': 1,
|
|
181
|
+
'capital/withdraw/history': 1,
|
|
173
182
|
},
|
|
174
183
|
'post': {
|
|
175
|
-
'post/asset/transfer':
|
|
184
|
+
'post/asset/transfer': 5,
|
|
176
185
|
},
|
|
177
186
|
},
|
|
178
187
|
},
|
|
@@ -182,26 +191,27 @@ export default class bingx extends Exchange {
|
|
|
182
191
|
'public': {
|
|
183
192
|
'get': {
|
|
184
193
|
'ticker/price': 1,
|
|
194
|
+
'market/historicalTrades': 1,
|
|
185
195
|
},
|
|
186
196
|
},
|
|
187
197
|
'private': {
|
|
188
198
|
'get': {
|
|
189
|
-
'positionSide/dual':
|
|
199
|
+
'positionSide/dual': 5,
|
|
190
200
|
'market/markPriceKlines': 1,
|
|
191
|
-
'trade/batchCancelReplace':
|
|
192
|
-
'trade/fullOrder':
|
|
201
|
+
'trade/batchCancelReplace': 5,
|
|
202
|
+
'trade/fullOrder': 2,
|
|
193
203
|
},
|
|
194
204
|
'post': {
|
|
195
|
-
'trade/cancelReplace':
|
|
196
|
-
'positionSide/dual':
|
|
197
|
-
'trade/closePosition':
|
|
205
|
+
'trade/cancelReplace': 2,
|
|
206
|
+
'positionSide/dual': 5,
|
|
207
|
+
'trade/closePosition': 2,
|
|
198
208
|
},
|
|
199
209
|
},
|
|
200
210
|
},
|
|
201
211
|
'v2': {
|
|
202
212
|
'public': {
|
|
203
213
|
'get': {
|
|
204
|
-
'server/time':
|
|
214
|
+
'server/time': 1,
|
|
205
215
|
'quote/contracts': 1,
|
|
206
216
|
'quote/price': 1,
|
|
207
217
|
'quote/depth': 1,
|
|
@@ -216,35 +226,35 @@ export default class bingx extends Exchange {
|
|
|
216
226
|
},
|
|
217
227
|
'private': {
|
|
218
228
|
'get': {
|
|
219
|
-
'user/balance':
|
|
220
|
-
'user/positions':
|
|
221
|
-
'user/income':
|
|
222
|
-
'trade/openOrders':
|
|
223
|
-
'trade/openOrder':
|
|
224
|
-
'trade/order':
|
|
225
|
-
'trade/marginType':
|
|
226
|
-
'trade/leverage':
|
|
227
|
-
'trade/forceOrders':
|
|
228
|
-
'trade/allOrders':
|
|
229
|
-
'trade/allFillOrders':
|
|
230
|
-
'user/income/export':
|
|
231
|
-
'user/commissionRate':
|
|
232
|
-
'quote/bookTicker':
|
|
229
|
+
'user/balance': 2,
|
|
230
|
+
'user/positions': 2,
|
|
231
|
+
'user/income': 2,
|
|
232
|
+
'trade/openOrders': 2,
|
|
233
|
+
'trade/openOrder': 2,
|
|
234
|
+
'trade/order': 2,
|
|
235
|
+
'trade/marginType': 5,
|
|
236
|
+
'trade/leverage': 2,
|
|
237
|
+
'trade/forceOrders': 1,
|
|
238
|
+
'trade/allOrders': 2,
|
|
239
|
+
'trade/allFillOrders': 2,
|
|
240
|
+
'user/income/export': 2,
|
|
241
|
+
'user/commissionRate': 2,
|
|
242
|
+
'quote/bookTicker': 1,
|
|
233
243
|
},
|
|
234
244
|
'post': {
|
|
235
|
-
'trade/order':
|
|
236
|
-
'trade/batchOrders':
|
|
237
|
-
'trade/closeAllPositions':
|
|
238
|
-
'trade/cancelAllAfter':
|
|
239
|
-
'trade/marginType':
|
|
240
|
-
'trade/leverage':
|
|
241
|
-
'trade/positionMargin':
|
|
242
|
-
'trade/order/test':
|
|
245
|
+
'trade/order': 2,
|
|
246
|
+
'trade/batchOrders': 2,
|
|
247
|
+
'trade/closeAllPositions': 2,
|
|
248
|
+
'trade/cancelAllAfter': 5,
|
|
249
|
+
'trade/marginType': 5,
|
|
250
|
+
'trade/leverage': 5,
|
|
251
|
+
'trade/positionMargin': 5,
|
|
252
|
+
'trade/order/test': 2,
|
|
243
253
|
},
|
|
244
254
|
'delete': {
|
|
245
|
-
'trade/order':
|
|
246
|
-
'trade/batchOrders':
|
|
247
|
-
'trade/allOpenOrders':
|
|
255
|
+
'trade/order': 2,
|
|
256
|
+
'trade/batchOrders': 2,
|
|
257
|
+
'trade/allOpenOrders': 2,
|
|
248
258
|
},
|
|
249
259
|
},
|
|
250
260
|
},
|
|
@@ -260,9 +270,9 @@ export default class bingx extends Exchange {
|
|
|
260
270
|
'v1': {
|
|
261
271
|
'private': {
|
|
262
272
|
'get': {
|
|
263
|
-
'allPosition':
|
|
264
|
-
'allOrders':
|
|
265
|
-
'balance':
|
|
273
|
+
'allPosition': 2,
|
|
274
|
+
'allOrders': 2,
|
|
275
|
+
'balance': 2,
|
|
266
276
|
},
|
|
267
277
|
},
|
|
268
278
|
},
|
|
@@ -271,18 +281,19 @@ export default class bingx extends Exchange {
|
|
|
271
281
|
'v1': {
|
|
272
282
|
'private': {
|
|
273
283
|
'get': {
|
|
274
|
-
'capital/config/getall':
|
|
275
|
-
'capital/deposit/address':
|
|
284
|
+
'capital/config/getall': 5,
|
|
285
|
+
'capital/deposit/address': 5,
|
|
276
286
|
'capital/innerTransfer/records': 1,
|
|
277
|
-
'capital/subAccount/deposit/address':
|
|
278
|
-
'capital/deposit/subHisrec':
|
|
287
|
+
'capital/subAccount/deposit/address': 5,
|
|
288
|
+
'capital/deposit/subHisrec': 2,
|
|
279
289
|
'capital/subAccount/innerTransfer/records': 1,
|
|
290
|
+
'capital/deposit/riskRecords': 5,
|
|
280
291
|
},
|
|
281
292
|
'post': {
|
|
282
|
-
'capital/withdraw/apply':
|
|
283
|
-
'capital/innerTransfer/apply':
|
|
284
|
-
'capital/subAccountInnerTransfer/apply':
|
|
285
|
-
'capital/deposit/createSubAddress':
|
|
293
|
+
'capital/withdraw/apply': 5,
|
|
294
|
+
'capital/innerTransfer/apply': 5,
|
|
295
|
+
'capital/subAccountInnerTransfer/apply': 2,
|
|
296
|
+
'capital/deposit/createSubAddress': 2,
|
|
286
297
|
},
|
|
287
298
|
},
|
|
288
299
|
},
|
|
@@ -291,15 +302,15 @@ export default class bingx extends Exchange {
|
|
|
291
302
|
'v1': {
|
|
292
303
|
'private': {
|
|
293
304
|
'get': {
|
|
294
|
-
'list':
|
|
295
|
-
'assets':
|
|
305
|
+
'list': 10,
|
|
306
|
+
'assets': 2,
|
|
296
307
|
},
|
|
297
308
|
'post': {
|
|
298
|
-
'create':
|
|
299
|
-
'apiKey/create':
|
|
300
|
-
'apiKey/edit':
|
|
301
|
-
'apiKey/del':
|
|
302
|
-
'updateStatus':
|
|
309
|
+
'create': 10,
|
|
310
|
+
'apiKey/create': 2,
|
|
311
|
+
'apiKey/edit': 2,
|
|
312
|
+
'apiKey/del': 2,
|
|
313
|
+
'updateStatus': 10,
|
|
303
314
|
},
|
|
304
315
|
},
|
|
305
316
|
},
|
|
@@ -309,10 +320,10 @@ export default class bingx extends Exchange {
|
|
|
309
320
|
'private': {
|
|
310
321
|
'get': {
|
|
311
322
|
'uid': 1,
|
|
312
|
-
'apiKey/query':
|
|
323
|
+
'apiKey/query': 2,
|
|
313
324
|
},
|
|
314
325
|
'post': {
|
|
315
|
-
'innerTransfer/authorizeSubAccount':
|
|
326
|
+
'innerTransfer/authorizeSubAccount': 1,
|
|
316
327
|
},
|
|
317
328
|
},
|
|
318
329
|
},
|
|
@@ -321,10 +332,13 @@ export default class bingx extends Exchange {
|
|
|
321
332
|
'auth': {
|
|
322
333
|
'private': {
|
|
323
334
|
'post': {
|
|
324
|
-
'userDataStream':
|
|
335
|
+
'userDataStream': 2,
|
|
325
336
|
},
|
|
326
337
|
'put': {
|
|
327
|
-
'userDataStream':
|
|
338
|
+
'userDataStream': 2,
|
|
339
|
+
},
|
|
340
|
+
'delete': {
|
|
341
|
+
'userDataStream': 2,
|
|
328
342
|
},
|
|
329
343
|
},
|
|
330
344
|
},
|
|
@@ -333,12 +347,12 @@ export default class bingx extends Exchange {
|
|
|
333
347
|
'v1': {
|
|
334
348
|
'private': {
|
|
335
349
|
'get': {
|
|
336
|
-
'swap/trace/currentTrack':
|
|
350
|
+
'swap/trace/currentTrack': 2,
|
|
337
351
|
},
|
|
338
352
|
'post': {
|
|
339
|
-
'swap/trace/closeTrackOrder':
|
|
340
|
-
'swap/trace/setTPSL':
|
|
341
|
-
'spot/trader/sellOrder':
|
|
353
|
+
'swap/trace/closeTrackOrder': 2,
|
|
354
|
+
'swap/trace/setTPSL': 2,
|
|
355
|
+
'spot/trader/sellOrder': 10,
|
|
342
356
|
},
|
|
343
357
|
},
|
|
344
358
|
},
|
|
@@ -2217,6 +2231,10 @@ export default class bingx extends Exchange {
|
|
|
2217
2231
|
const types = {
|
|
2218
2232
|
'trigger_market': 'market',
|
|
2219
2233
|
'trigger_limit': 'limit',
|
|
2234
|
+
'stop_limit': 'limit',
|
|
2235
|
+
'stop_market': 'market',
|
|
2236
|
+
'take_profit_market': 'market',
|
|
2237
|
+
'stop': 'limit',
|
|
2220
2238
|
};
|
|
2221
2239
|
return this.safeString(types, type, type);
|
|
2222
2240
|
}
|
|
@@ -2420,6 +2438,25 @@ export default class bingx extends Exchange {
|
|
|
2420
2438
|
// side: 'SELL'
|
|
2421
2439
|
// }
|
|
2422
2440
|
// }
|
|
2441
|
+
// stop loss order
|
|
2442
|
+
// {
|
|
2443
|
+
// "symbol": "ETH-USDT",
|
|
2444
|
+
// "orderId": "1792461744476422144",
|
|
2445
|
+
// "price": "2775.65",
|
|
2446
|
+
// "StopPrice": "2778.42",
|
|
2447
|
+
// "origQty": "0.032359",
|
|
2448
|
+
// "executedQty": "0",
|
|
2449
|
+
// "cummulativeQuoteQty": "0",
|
|
2450
|
+
// "status": "NEW",
|
|
2451
|
+
// "type": "TAKE_STOP_LIMIT",
|
|
2452
|
+
// "side": "SELL",
|
|
2453
|
+
// "time": "1716191156868",
|
|
2454
|
+
// "updateTime": "1716191156868",
|
|
2455
|
+
// "origQuoteOrderQty": "0",
|
|
2456
|
+
// "fee": "0",
|
|
2457
|
+
// "feeAsset": "USDT",
|
|
2458
|
+
// "clientOrderID": ""
|
|
2459
|
+
// }
|
|
2423
2460
|
//
|
|
2424
2461
|
const info = order;
|
|
2425
2462
|
const newOrder = this.safeDict2(order, 'newOrderResponse', 'orderOpenResponse');
|
|
@@ -2454,26 +2491,39 @@ export default class bingx extends Exchange {
|
|
|
2454
2491
|
let stopLoss = this.safeValue(order, 'stopLoss');
|
|
2455
2492
|
let stopLossPrice = undefined;
|
|
2456
2493
|
if ((stopLoss !== undefined) && (stopLoss !== '')) {
|
|
2457
|
-
stopLossPrice = this.
|
|
2494
|
+
stopLossPrice = this.omitZero(this.safeString(stopLoss, 'stopLoss'));
|
|
2458
2495
|
}
|
|
2459
2496
|
if ((stopLoss !== undefined) && (typeof stopLoss !== 'number') && (stopLoss !== '')) {
|
|
2460
2497
|
// stopLoss: '{"stopPrice":50,"workingType":"MARK_PRICE","type":"STOP_MARKET","quantity":1}',
|
|
2461
2498
|
if (typeof stopLoss === 'string') {
|
|
2462
2499
|
stopLoss = this.parseJson(stopLoss);
|
|
2463
2500
|
}
|
|
2464
|
-
stopLossPrice = this.
|
|
2501
|
+
stopLossPrice = this.omitZero(this.safeString(stopLoss, 'stopPrice'));
|
|
2465
2502
|
}
|
|
2466
2503
|
let takeProfit = this.safeValue(order, 'takeProfit');
|
|
2467
2504
|
let takeProfitPrice = undefined;
|
|
2468
2505
|
if (takeProfit !== undefined && (takeProfit !== '')) {
|
|
2469
|
-
takeProfitPrice = this.
|
|
2506
|
+
takeProfitPrice = this.omitZero(this.safeString(takeProfit, 'takeProfit'));
|
|
2470
2507
|
}
|
|
2471
2508
|
if ((takeProfit !== undefined) && (typeof takeProfit !== 'number') && (takeProfit !== '')) {
|
|
2472
2509
|
// takeProfit: '{"stopPrice":150,"workingType":"MARK_PRICE","type":"TAKE_PROFIT_MARKET","quantity":1}',
|
|
2473
2510
|
if (typeof takeProfit === 'string') {
|
|
2474
2511
|
takeProfit = this.parseJson(takeProfit);
|
|
2475
2512
|
}
|
|
2476
|
-
takeProfitPrice = this.
|
|
2513
|
+
takeProfitPrice = this.omitZero(this.safeString(takeProfit, 'stopPrice'));
|
|
2514
|
+
}
|
|
2515
|
+
const rawType = this.safeStringLower2(order, 'type', 'o');
|
|
2516
|
+
const stopPrice = this.omitZero(this.safeString2(order, 'StopPrice', 'stopPrice'));
|
|
2517
|
+
let triggerPrice = stopPrice;
|
|
2518
|
+
if (stopPrice !== undefined) {
|
|
2519
|
+
if ((rawType.indexOf('stop') > -1) && (stopLossPrice === undefined)) {
|
|
2520
|
+
stopLossPrice = stopPrice;
|
|
2521
|
+
triggerPrice = undefined;
|
|
2522
|
+
}
|
|
2523
|
+
if ((rawType.indexOf('take') > -1) && (takeProfitPrice === undefined)) {
|
|
2524
|
+
takeProfitPrice = stopPrice;
|
|
2525
|
+
triggerPrice = undefined;
|
|
2526
|
+
}
|
|
2477
2527
|
}
|
|
2478
2528
|
return this.safeOrder({
|
|
2479
2529
|
'info': info,
|
|
@@ -2484,13 +2534,13 @@ export default class bingx extends Exchange {
|
|
|
2484
2534
|
'datetime': this.iso8601(timestamp),
|
|
2485
2535
|
'lastTradeTimestamp': lastTradeTimestamp,
|
|
2486
2536
|
'lastUpdateTimestamp': this.safeInteger(order, 'updateTime'),
|
|
2487
|
-
'type': this.parseOrderType(
|
|
2537
|
+
'type': this.parseOrderType(rawType),
|
|
2488
2538
|
'timeInForce': this.safeString(order, 'timeInForce'),
|
|
2489
2539
|
'postOnly': undefined,
|
|
2490
2540
|
'side': this.parseOrderSide(side),
|
|
2491
2541
|
'price': this.safeString2(order, 'price', 'p'),
|
|
2492
|
-
'stopPrice':
|
|
2493
|
-
'triggerPrice':
|
|
2542
|
+
'stopPrice': triggerPrice,
|
|
2543
|
+
'triggerPrice': triggerPrice,
|
|
2494
2544
|
'stopLossPrice': stopLossPrice,
|
|
2495
2545
|
'takeProfitPrice': takeProfitPrice,
|
|
2496
2546
|
'average': this.safeString2(order, 'avgPrice', 'ap'),
|
package/js/src/bitget.js
CHANGED
package/js/src/bitmart.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/bitmart.js';
|
|
2
|
-
import type { Int, OrderSide, Balances, OrderType, OHLCV, Order, Str, Trade, Transaction, Ticker, OrderBook, Tickers, Strings, Currency, Market, TransferEntry, Num, TradingFeeInterface, Currencies, IsolatedBorrowRates, IsolatedBorrowRate, Dict, TransferEntries } from './base/types.js';
|
|
2
|
+
import type { Int, OrderSide, Balances, OrderType, OHLCV, Order, Str, Trade, Transaction, Ticker, OrderBook, Tickers, Strings, Currency, Market, TransferEntry, Num, TradingFeeInterface, Currencies, IsolatedBorrowRates, IsolatedBorrowRate, Dict, TransferEntries, OrderRequest } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class bitmart
|
|
5
5
|
* @augments Exchange
|
|
@@ -56,9 +56,11 @@ export default class bitmart extends Exchange {
|
|
|
56
56
|
parseOrderStatusByType(type: any, status: any): string;
|
|
57
57
|
createMarketBuyOrderWithCost(symbol: string, cost: number, params?: {}): Promise<Order>;
|
|
58
58
|
createOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
|
|
59
|
+
createOrders(orders: OrderRequest[], params?: {}): Promise<Order[]>;
|
|
59
60
|
createSwapOrderRequest(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): any;
|
|
60
61
|
createSpotOrderRequest(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): any;
|
|
61
62
|
cancelOrder(id: string, symbol?: Str, params?: {}): Promise<any>;
|
|
63
|
+
cancelOrders(ids: string[], symbol?: Str, params?: {}): Promise<any[]>;
|
|
62
64
|
cancelAllOrders(symbol?: Str, params?: {}): Promise<any>;
|
|
63
65
|
fetchOrdersByStatus(status: any, symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
|
|
64
66
|
fetchOpenOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
|
package/js/src/bitmart.js
CHANGED
|
@@ -38,11 +38,12 @@ export default class bitmart extends Exchange {
|
|
|
38
38
|
'borrowIsolatedMargin': true,
|
|
39
39
|
'cancelAllOrders': true,
|
|
40
40
|
'cancelOrder': true,
|
|
41
|
-
'cancelOrders':
|
|
41
|
+
'cancelOrders': true,
|
|
42
42
|
'createMarketBuyOrderWithCost': true,
|
|
43
43
|
'createMarketOrderWithCost': false,
|
|
44
44
|
'createMarketSellOrderWithCost': false,
|
|
45
45
|
'createOrder': true,
|
|
46
|
+
'createOrders': true,
|
|
46
47
|
'createPostOnlyOrder': true,
|
|
47
48
|
'createStopLimitOrder': false,
|
|
48
49
|
'createStopMarketOrder': false,
|
|
@@ -182,7 +183,7 @@ export default class bitmart extends Exchange {
|
|
|
182
183
|
'spot/v2/orders': 5,
|
|
183
184
|
'spot/v1/trades': 5,
|
|
184
185
|
// newer order endpoint
|
|
185
|
-
'spot/v2/trades':
|
|
186
|
+
'spot/v2/trades': 4,
|
|
186
187
|
'spot/v3/orders': 5,
|
|
187
188
|
'spot/v2/order_detail': 1,
|
|
188
189
|
// margin
|
|
@@ -226,6 +227,8 @@ export default class bitmart extends Exchange {
|
|
|
226
227
|
'spot/v4/query/history-orders': 5,
|
|
227
228
|
'spot/v4/query/trades': 5,
|
|
228
229
|
'spot/v4/query/order-trades': 5,
|
|
230
|
+
'spot/v4/cancel_orders': 3,
|
|
231
|
+
'spot/v4/batch_orders': 3,
|
|
229
232
|
// newer endpoint
|
|
230
233
|
'spot/v3/cancel_order': 1,
|
|
231
234
|
'spot/v2/batch_orders': 1,
|
|
@@ -2393,6 +2396,76 @@ export default class bitmart extends Exchange {
|
|
|
2393
2396
|
order['price'] = price;
|
|
2394
2397
|
return order;
|
|
2395
2398
|
}
|
|
2399
|
+
async createOrders(orders, params = {}) {
|
|
2400
|
+
/**
|
|
2401
|
+
* @method
|
|
2402
|
+
* @name bitmart#createOrders
|
|
2403
|
+
* @description create a list of trade orders
|
|
2404
|
+
* @see https://developer-pro.bitmart.com/en/spot/#new-batch-order-v4-signed
|
|
2405
|
+
* @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params
|
|
2406
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2407
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
2408
|
+
*/
|
|
2409
|
+
await this.loadMarkets();
|
|
2410
|
+
const ordersRequests = [];
|
|
2411
|
+
let symbol = undefined;
|
|
2412
|
+
let market = undefined;
|
|
2413
|
+
for (let i = 0; i < orders.length; i++) {
|
|
2414
|
+
const rawOrder = orders[i];
|
|
2415
|
+
const marketId = this.safeString(rawOrder, 'symbol');
|
|
2416
|
+
market = this.market(marketId);
|
|
2417
|
+
if (!market['spot']) {
|
|
2418
|
+
throw new NotSupported(this.id + ' createOrders() supports spot orders only');
|
|
2419
|
+
}
|
|
2420
|
+
if (symbol === undefined) {
|
|
2421
|
+
symbol = marketId;
|
|
2422
|
+
}
|
|
2423
|
+
else {
|
|
2424
|
+
if (symbol !== marketId) {
|
|
2425
|
+
throw new BadRequest(this.id + ' createOrders() requires all orders to have the same symbol');
|
|
2426
|
+
}
|
|
2427
|
+
}
|
|
2428
|
+
const type = this.safeString(rawOrder, 'type');
|
|
2429
|
+
const side = this.safeString(rawOrder, 'side');
|
|
2430
|
+
const amount = this.safeValue(rawOrder, 'amount');
|
|
2431
|
+
const price = this.safeValue(rawOrder, 'price');
|
|
2432
|
+
const orderParams = this.safeDict(rawOrder, 'params', {});
|
|
2433
|
+
let orderRequest = this.createSpotOrderRequest(marketId, type, side, amount, price, orderParams);
|
|
2434
|
+
orderRequest = this.omit(orderRequest, ['symbol']); // not needed because it goes in the outter object
|
|
2435
|
+
ordersRequests.push(orderRequest);
|
|
2436
|
+
}
|
|
2437
|
+
const request = {
|
|
2438
|
+
'symbol': market['id'],
|
|
2439
|
+
'orderParams': ordersRequests,
|
|
2440
|
+
};
|
|
2441
|
+
const response = await this.privatePostSpotV4BatchOrders(request);
|
|
2442
|
+
//
|
|
2443
|
+
// {
|
|
2444
|
+
// "message": "OK",
|
|
2445
|
+
// "code": 1000,
|
|
2446
|
+
// "trace": "5fc697fb817a4b5396284786a9b2609a.263.17022620476480263",
|
|
2447
|
+
// "data": {
|
|
2448
|
+
// "code": 0,
|
|
2449
|
+
// "msg": "success",
|
|
2450
|
+
// "data": {
|
|
2451
|
+
// "orderIds": [
|
|
2452
|
+
// "212751308355553320"
|
|
2453
|
+
// ]
|
|
2454
|
+
// }
|
|
2455
|
+
// }
|
|
2456
|
+
// }
|
|
2457
|
+
//
|
|
2458
|
+
const data = this.safeDict(response, 'data', {});
|
|
2459
|
+
const innderData = this.safeDict(data, 'data', {});
|
|
2460
|
+
const orderIds = this.safeList(innderData, 'orderIds', []);
|
|
2461
|
+
const parsedOrders = [];
|
|
2462
|
+
for (let i = 0; i < orderIds.length; i++) {
|
|
2463
|
+
const orderId = orderIds[i];
|
|
2464
|
+
const order = this.safeOrder({ 'id': orderId }, market);
|
|
2465
|
+
parsedOrders.push(order);
|
|
2466
|
+
}
|
|
2467
|
+
return parsedOrders;
|
|
2468
|
+
}
|
|
2396
2469
|
createSwapOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
|
|
2397
2470
|
/**
|
|
2398
2471
|
* @method
|
|
@@ -2675,6 +2748,68 @@ export default class bitmart extends Exchange {
|
|
|
2675
2748
|
const order = this.parseOrder(id, market);
|
|
2676
2749
|
return this.extend(order, { 'id': id });
|
|
2677
2750
|
}
|
|
2751
|
+
async cancelOrders(ids, symbol = undefined, params = {}) {
|
|
2752
|
+
/**
|
|
2753
|
+
* @method
|
|
2754
|
+
* @name bitmart#cancelOrders
|
|
2755
|
+
* @description cancel multiple orders
|
|
2756
|
+
* @see https://developer-pro.bitmart.com/en/spot/#cancel-batch-order-v4-signed
|
|
2757
|
+
* @param {string[]} ids order ids
|
|
2758
|
+
* @param {string} symbol unified symbol of the market the order was made in
|
|
2759
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2760
|
+
* @param {string[]} [params.clientOrderIds] client order ids
|
|
2761
|
+
* @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
2762
|
+
*/
|
|
2763
|
+
if (symbol === undefined) {
|
|
2764
|
+
throw new ArgumentsRequired(this.id + ' cancelOrders() requires a symbol argument');
|
|
2765
|
+
}
|
|
2766
|
+
await this.loadMarkets();
|
|
2767
|
+
const market = this.market(symbol);
|
|
2768
|
+
if (!market['spot']) {
|
|
2769
|
+
throw new NotSupported(this.id + ' cancelOrders() does not support ' + market['type'] + ' orders, only spot orders are accepted');
|
|
2770
|
+
}
|
|
2771
|
+
const clientOrderIds = this.safeList(params, 'clientOrderIds');
|
|
2772
|
+
params = this.omit(params, ['clientOrderIds']);
|
|
2773
|
+
const request = {
|
|
2774
|
+
'symbol': market['id'],
|
|
2775
|
+
};
|
|
2776
|
+
if (clientOrderIds !== undefined) {
|
|
2777
|
+
request['clientOrderIds'] = clientOrderIds;
|
|
2778
|
+
}
|
|
2779
|
+
else {
|
|
2780
|
+
request['orderIds'] = ids;
|
|
2781
|
+
}
|
|
2782
|
+
const response = await this.privatePostSpotV4CancelOrders(this.extend(request, params));
|
|
2783
|
+
//
|
|
2784
|
+
// {
|
|
2785
|
+
// "message": "OK",
|
|
2786
|
+
// "code": 1000,
|
|
2787
|
+
// "trace": "c4edbce860164203954f7c3c81d60fc6.309.17022669632770001",
|
|
2788
|
+
// "data": {
|
|
2789
|
+
// "successIds": [
|
|
2790
|
+
// "213055379155243012"
|
|
2791
|
+
// ],
|
|
2792
|
+
// "failIds": [],
|
|
2793
|
+
// "totalCount": 1,
|
|
2794
|
+
// "successCount": 1,
|
|
2795
|
+
// "failedCount": 0
|
|
2796
|
+
// }
|
|
2797
|
+
// }
|
|
2798
|
+
//
|
|
2799
|
+
const data = this.safeDict(response, 'data', {});
|
|
2800
|
+
const allOrders = [];
|
|
2801
|
+
const successIds = this.safeList(data, 'successIds', []);
|
|
2802
|
+
for (let i = 0; i < successIds.length; i++) {
|
|
2803
|
+
const id = successIds[i];
|
|
2804
|
+
allOrders.push(this.safeOrder({ 'id': id, 'status': 'canceled' }, market));
|
|
2805
|
+
}
|
|
2806
|
+
const failIds = this.safeList(data, 'failIds', []);
|
|
2807
|
+
for (let i = 0; i < failIds.length; i++) {
|
|
2808
|
+
const id = failIds[i];
|
|
2809
|
+
allOrders.push(this.safeOrder({ 'id': id, 'status': 'failed' }, market));
|
|
2810
|
+
}
|
|
2811
|
+
return allOrders;
|
|
2812
|
+
}
|
|
2678
2813
|
async cancelAllOrders(symbol = undefined, params = {}) {
|
|
2679
2814
|
/**
|
|
2680
2815
|
* @method
|
package/js/src/bybit.js
CHANGED
|
@@ -2489,14 +2489,14 @@ export default class bybit extends Exchange {
|
|
|
2489
2489
|
throw new ArgumentsRequired(this.id + ' fetchFundingRateHistory() requires a symbol argument');
|
|
2490
2490
|
}
|
|
2491
2491
|
await this.loadMarkets();
|
|
2492
|
-
if (limit === undefined) {
|
|
2493
|
-
limit = 200;
|
|
2494
|
-
}
|
|
2495
2492
|
let paginate = false;
|
|
2496
2493
|
[paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
|
|
2497
2494
|
if (paginate) {
|
|
2498
2495
|
return await this.fetchPaginatedCallDeterministic('fetchFundingRateHistory', symbol, since, limit, '8h', params, 200);
|
|
2499
2496
|
}
|
|
2497
|
+
if (limit === undefined) {
|
|
2498
|
+
limit = 200;
|
|
2499
|
+
}
|
|
2500
2500
|
const request = {
|
|
2501
2501
|
// 'category': '', // Product type. linear,inverse
|
|
2502
2502
|
// 'symbol': '', // Symbol name
|
package/js/src/coinbase.js
CHANGED
|
@@ -2981,7 +2981,7 @@ export default class coinbase extends Exchange {
|
|
|
2981
2981
|
const marketId = this.safeString(order, 'product_id');
|
|
2982
2982
|
const symbol = this.safeSymbol(marketId, market, '-');
|
|
2983
2983
|
if (symbol !== undefined) {
|
|
2984
|
-
market = this.
|
|
2984
|
+
market = this.safeMarket(symbol, market);
|
|
2985
2985
|
}
|
|
2986
2986
|
const orderConfiguration = this.safeDict(order, 'order_configuration', {});
|
|
2987
2987
|
const limitGTC = this.safeDict(orderConfiguration, 'limit_limit_gtc');
|
package/js/src/krakenfutures.js
CHANGED
|
@@ -2240,7 +2240,7 @@ export default class krakenfutures extends Exchange {
|
|
|
2240
2240
|
/**
|
|
2241
2241
|
* @method
|
|
2242
2242
|
* @name krakenfutures#fetchPositions
|
|
2243
|
-
* @see https://docs.futures.kraken.com/#
|
|
2243
|
+
* @see https://docs.futures.kraken.com/#http-api-trading-v3-api-account-information-get-open-positions
|
|
2244
2244
|
* @description Fetches current contract trading positions
|
|
2245
2245
|
* @param {string[]} symbols List of unified symbols
|
|
2246
2246
|
* @param {object} [params] Not used by krakenfutures
|
package/js/src/kucoin.js
CHANGED
|
@@ -430,6 +430,7 @@ export default class kucoin extends Exchange {
|
|
|
430
430
|
'The withdrawal amount is below the minimum requirement.': ExchangeError,
|
|
431
431
|
'Unsuccessful! Exceeded the max. funds out-transfer limit': InsufficientFunds,
|
|
432
432
|
'The amount increment is invalid.': BadRequest,
|
|
433
|
+
'The quantity is below the minimum requirement.': InvalidOrder,
|
|
433
434
|
'400': BadRequest,
|
|
434
435
|
'401': AuthenticationError,
|
|
435
436
|
'403': NotSupported,
|