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
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
Copyright (c) 2011, Yahoo! Inc. All rights reserved.
|
|
3
|
+
Code licensed under the BSD License:
|
|
4
|
+
http://developer.yahoo.com/yui/license.html
|
|
5
|
+
version: 2.9.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
9
|
+
|
|
10
|
+
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
11
|
+
|
|
12
|
+
/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
package/dist/cjs/ccxt.js
CHANGED
|
@@ -185,7 +185,7 @@ var woofipro$1 = require('./src/pro/woofipro.js');
|
|
|
185
185
|
|
|
186
186
|
//-----------------------------------------------------------------------------
|
|
187
187
|
// this is updated by vss.js when building
|
|
188
|
-
const version = '4.3.
|
|
188
|
+
const version = '4.3.29';
|
|
189
189
|
Exchange["default"].ccxtVersion = version;
|
|
190
190
|
const exchanges = {
|
|
191
191
|
'ace': ace,
|
package/dist/cjs/src/ascendex.js
CHANGED
|
@@ -1403,7 +1403,7 @@ class ascendex extends ascendex$1 {
|
|
|
1403
1403
|
'currency': feeCurrencyCode,
|
|
1404
1404
|
};
|
|
1405
1405
|
}
|
|
1406
|
-
const stopPrice = this.
|
|
1406
|
+
const stopPrice = this.omitZero(this.safeString(order, 'stopPrice'));
|
|
1407
1407
|
let reduceOnly = undefined;
|
|
1408
1408
|
const execInst = this.safeString(order, 'execInst');
|
|
1409
1409
|
if (execInst === 'reduceOnly') {
|
|
@@ -2506,6 +2506,7 @@ class Exchange {
|
|
|
2506
2506
|
const shouldParseFees = parseFee || parseFees;
|
|
2507
2507
|
const fees = this.safeList(order, 'fees', []);
|
|
2508
2508
|
let trades = [];
|
|
2509
|
+
const isTriggerOrSLTpOrder = ((this.safeString(order, 'triggerPrice') !== undefined || (this.safeString(order, 'stopLossPrice') !== undefined)) || (this.safeString(order, 'takeProfitPrice') !== undefined));
|
|
2509
2510
|
if (parseFilled || parseCost || shouldParseFees) {
|
|
2510
2511
|
const rawTrades = this.safeValue(order, 'trades', trades);
|
|
2511
2512
|
const oldNumber = this.number;
|
|
@@ -2708,7 +2709,7 @@ class Exchange {
|
|
|
2708
2709
|
let postOnly = this.safeValue(order, 'postOnly');
|
|
2709
2710
|
// timeInForceHandling
|
|
2710
2711
|
if (timeInForce === undefined) {
|
|
2711
|
-
if (this.safeString(order, 'type') === 'market') {
|
|
2712
|
+
if (!isTriggerOrSLTpOrder && (this.safeString(order, 'type') === 'market')) {
|
|
2712
2713
|
timeInForce = 'IOC';
|
|
2713
2714
|
}
|
|
2714
2715
|
// allow postOnly override
|
|
@@ -99,8 +99,8 @@ class OrderBookSide extends Array {
|
|
|
99
99
|
// or deletes price levels based on order counts (3rd value in a bidask delta)
|
|
100
100
|
// this class stores vector arrays of values indexed by price
|
|
101
101
|
class CountedOrderBookSide extends OrderBookSide {
|
|
102
|
-
store(price, size
|
|
103
|
-
|
|
102
|
+
store(price, size) {
|
|
103
|
+
throw new Error('CountedOrderBookSide.store() is not supported, use storeArray([price, size, count]) instead');
|
|
104
104
|
}
|
|
105
105
|
storeArray(delta) {
|
|
106
106
|
const price = delta[0];
|
|
@@ -164,8 +164,8 @@ class IndexedOrderBookSide extends Array {
|
|
|
164
164
|
this.storeArray(deltas[i].slice()); // slice is muy importante
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
|
-
store(price, size
|
|
168
|
-
|
|
167
|
+
store(price, size) {
|
|
168
|
+
throw new Error('IndexedOrderBook.store() is not supported, use storeArray([price, size, id]) instead');
|
|
169
169
|
}
|
|
170
170
|
storeArray(delta) {
|
|
171
171
|
const price = delta[0];
|
package/dist/cjs/src/bingx.js
CHANGED
|
@@ -18,8 +18,7 @@ class bingx extends bingx$1 {
|
|
|
18
18
|
'id': 'bingx',
|
|
19
19
|
'name': 'BingX',
|
|
20
20
|
'countries': ['US'],
|
|
21
|
-
|
|
22
|
-
'rateLimit': 1000,
|
|
21
|
+
'rateLimit': 100,
|
|
23
22
|
'version': 'v1',
|
|
24
23
|
'certified': true,
|
|
25
24
|
'pro': true,
|
|
@@ -132,44 +131,54 @@ class bingx extends bingx$1 {
|
|
|
132
131
|
'v1': {
|
|
133
132
|
'public': {
|
|
134
133
|
'get': {
|
|
135
|
-
'server/time':
|
|
136
|
-
'common/symbols':
|
|
137
|
-
'market/trades':
|
|
138
|
-
'market/depth':
|
|
139
|
-
'market/kline':
|
|
134
|
+
'server/time': 1,
|
|
135
|
+
'common/symbols': 1,
|
|
136
|
+
'market/trades': 1,
|
|
137
|
+
'market/depth': 1,
|
|
138
|
+
'market/kline': 1,
|
|
140
139
|
'ticker/24hr': 1,
|
|
140
|
+
'ticker/price': 1,
|
|
141
|
+
'ticker/bookTicker': 1,
|
|
141
142
|
},
|
|
142
143
|
},
|
|
143
144
|
'private': {
|
|
144
145
|
'get': {
|
|
145
|
-
'trade/query':
|
|
146
|
-
'trade/openOrders':
|
|
147
|
-
'trade/historyOrders':
|
|
148
|
-
'trade/myTrades':
|
|
149
|
-
'user/commissionRate':
|
|
150
|
-
'account/balance':
|
|
146
|
+
'trade/query': 1,
|
|
147
|
+
'trade/openOrders': 1,
|
|
148
|
+
'trade/historyOrders': 1,
|
|
149
|
+
'trade/myTrades': 2,
|
|
150
|
+
'user/commissionRate': 5,
|
|
151
|
+
'account/balance': 2,
|
|
151
152
|
},
|
|
152
153
|
'post': {
|
|
153
|
-
'trade/order':
|
|
154
|
-
'trade/cancel':
|
|
155
|
-
'trade/batchOrders':
|
|
156
|
-
'trade/order/cancelReplace':
|
|
157
|
-
'trade/cancelOrders':
|
|
158
|
-
'trade/cancelOpenOrders':
|
|
159
|
-
'trade/cancelAllAfter':
|
|
154
|
+
'trade/order': 2,
|
|
155
|
+
'trade/cancel': 2,
|
|
156
|
+
'trade/batchOrders': 5,
|
|
157
|
+
'trade/order/cancelReplace': 5,
|
|
158
|
+
'trade/cancelOrders': 5,
|
|
159
|
+
'trade/cancelOpenOrders': 5,
|
|
160
|
+
'trade/cancelAllAfter': 5,
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
'v2': {
|
|
165
|
+
'public': {
|
|
166
|
+
'get': {
|
|
167
|
+
'market/depth': 1,
|
|
168
|
+
'market/kline': 1,
|
|
160
169
|
},
|
|
161
170
|
},
|
|
162
171
|
},
|
|
163
172
|
'v3': {
|
|
164
173
|
'private': {
|
|
165
174
|
'get': {
|
|
166
|
-
'get/asset/transfer':
|
|
167
|
-
'asset/transfer':
|
|
168
|
-
'capital/deposit/hisrec':
|
|
169
|
-
'capital/withdraw/history':
|
|
175
|
+
'get/asset/transfer': 1,
|
|
176
|
+
'asset/transfer': 1,
|
|
177
|
+
'capital/deposit/hisrec': 1,
|
|
178
|
+
'capital/withdraw/history': 1,
|
|
170
179
|
},
|
|
171
180
|
'post': {
|
|
172
|
-
'post/asset/transfer':
|
|
181
|
+
'post/asset/transfer': 5,
|
|
173
182
|
},
|
|
174
183
|
},
|
|
175
184
|
},
|
|
@@ -179,26 +188,27 @@ class bingx extends bingx$1 {
|
|
|
179
188
|
'public': {
|
|
180
189
|
'get': {
|
|
181
190
|
'ticker/price': 1,
|
|
191
|
+
'market/historicalTrades': 1,
|
|
182
192
|
},
|
|
183
193
|
},
|
|
184
194
|
'private': {
|
|
185
195
|
'get': {
|
|
186
|
-
'positionSide/dual':
|
|
196
|
+
'positionSide/dual': 5,
|
|
187
197
|
'market/markPriceKlines': 1,
|
|
188
|
-
'trade/batchCancelReplace':
|
|
189
|
-
'trade/fullOrder':
|
|
198
|
+
'trade/batchCancelReplace': 5,
|
|
199
|
+
'trade/fullOrder': 2,
|
|
190
200
|
},
|
|
191
201
|
'post': {
|
|
192
|
-
'trade/cancelReplace':
|
|
193
|
-
'positionSide/dual':
|
|
194
|
-
'trade/closePosition':
|
|
202
|
+
'trade/cancelReplace': 2,
|
|
203
|
+
'positionSide/dual': 5,
|
|
204
|
+
'trade/closePosition': 2,
|
|
195
205
|
},
|
|
196
206
|
},
|
|
197
207
|
},
|
|
198
208
|
'v2': {
|
|
199
209
|
'public': {
|
|
200
210
|
'get': {
|
|
201
|
-
'server/time':
|
|
211
|
+
'server/time': 1,
|
|
202
212
|
'quote/contracts': 1,
|
|
203
213
|
'quote/price': 1,
|
|
204
214
|
'quote/depth': 1,
|
|
@@ -213,35 +223,35 @@ class bingx extends bingx$1 {
|
|
|
213
223
|
},
|
|
214
224
|
'private': {
|
|
215
225
|
'get': {
|
|
216
|
-
'user/balance':
|
|
217
|
-
'user/positions':
|
|
218
|
-
'user/income':
|
|
219
|
-
'trade/openOrders':
|
|
220
|
-
'trade/openOrder':
|
|
221
|
-
'trade/order':
|
|
222
|
-
'trade/marginType':
|
|
223
|
-
'trade/leverage':
|
|
224
|
-
'trade/forceOrders':
|
|
225
|
-
'trade/allOrders':
|
|
226
|
-
'trade/allFillOrders':
|
|
227
|
-
'user/income/export':
|
|
228
|
-
'user/commissionRate':
|
|
229
|
-
'quote/bookTicker':
|
|
226
|
+
'user/balance': 2,
|
|
227
|
+
'user/positions': 2,
|
|
228
|
+
'user/income': 2,
|
|
229
|
+
'trade/openOrders': 2,
|
|
230
|
+
'trade/openOrder': 2,
|
|
231
|
+
'trade/order': 2,
|
|
232
|
+
'trade/marginType': 5,
|
|
233
|
+
'trade/leverage': 2,
|
|
234
|
+
'trade/forceOrders': 1,
|
|
235
|
+
'trade/allOrders': 2,
|
|
236
|
+
'trade/allFillOrders': 2,
|
|
237
|
+
'user/income/export': 2,
|
|
238
|
+
'user/commissionRate': 2,
|
|
239
|
+
'quote/bookTicker': 1,
|
|
230
240
|
},
|
|
231
241
|
'post': {
|
|
232
|
-
'trade/order':
|
|
233
|
-
'trade/batchOrders':
|
|
234
|
-
'trade/closeAllPositions':
|
|
235
|
-
'trade/cancelAllAfter':
|
|
236
|
-
'trade/marginType':
|
|
237
|
-
'trade/leverage':
|
|
238
|
-
'trade/positionMargin':
|
|
239
|
-
'trade/order/test':
|
|
242
|
+
'trade/order': 2,
|
|
243
|
+
'trade/batchOrders': 2,
|
|
244
|
+
'trade/closeAllPositions': 2,
|
|
245
|
+
'trade/cancelAllAfter': 5,
|
|
246
|
+
'trade/marginType': 5,
|
|
247
|
+
'trade/leverage': 5,
|
|
248
|
+
'trade/positionMargin': 5,
|
|
249
|
+
'trade/order/test': 2,
|
|
240
250
|
},
|
|
241
251
|
'delete': {
|
|
242
|
-
'trade/order':
|
|
243
|
-
'trade/batchOrders':
|
|
244
|
-
'trade/allOpenOrders':
|
|
252
|
+
'trade/order': 2,
|
|
253
|
+
'trade/batchOrders': 2,
|
|
254
|
+
'trade/allOpenOrders': 2,
|
|
245
255
|
},
|
|
246
256
|
},
|
|
247
257
|
},
|
|
@@ -257,9 +267,9 @@ class bingx extends bingx$1 {
|
|
|
257
267
|
'v1': {
|
|
258
268
|
'private': {
|
|
259
269
|
'get': {
|
|
260
|
-
'allPosition':
|
|
261
|
-
'allOrders':
|
|
262
|
-
'balance':
|
|
270
|
+
'allPosition': 2,
|
|
271
|
+
'allOrders': 2,
|
|
272
|
+
'balance': 2,
|
|
263
273
|
},
|
|
264
274
|
},
|
|
265
275
|
},
|
|
@@ -268,18 +278,19 @@ class bingx extends bingx$1 {
|
|
|
268
278
|
'v1': {
|
|
269
279
|
'private': {
|
|
270
280
|
'get': {
|
|
271
|
-
'capital/config/getall':
|
|
272
|
-
'capital/deposit/address':
|
|
281
|
+
'capital/config/getall': 5,
|
|
282
|
+
'capital/deposit/address': 5,
|
|
273
283
|
'capital/innerTransfer/records': 1,
|
|
274
|
-
'capital/subAccount/deposit/address':
|
|
275
|
-
'capital/deposit/subHisrec':
|
|
284
|
+
'capital/subAccount/deposit/address': 5,
|
|
285
|
+
'capital/deposit/subHisrec': 2,
|
|
276
286
|
'capital/subAccount/innerTransfer/records': 1,
|
|
287
|
+
'capital/deposit/riskRecords': 5,
|
|
277
288
|
},
|
|
278
289
|
'post': {
|
|
279
|
-
'capital/withdraw/apply':
|
|
280
|
-
'capital/innerTransfer/apply':
|
|
281
|
-
'capital/subAccountInnerTransfer/apply':
|
|
282
|
-
'capital/deposit/createSubAddress':
|
|
290
|
+
'capital/withdraw/apply': 5,
|
|
291
|
+
'capital/innerTransfer/apply': 5,
|
|
292
|
+
'capital/subAccountInnerTransfer/apply': 2,
|
|
293
|
+
'capital/deposit/createSubAddress': 2,
|
|
283
294
|
},
|
|
284
295
|
},
|
|
285
296
|
},
|
|
@@ -288,15 +299,15 @@ class bingx extends bingx$1 {
|
|
|
288
299
|
'v1': {
|
|
289
300
|
'private': {
|
|
290
301
|
'get': {
|
|
291
|
-
'list':
|
|
292
|
-
'assets':
|
|
302
|
+
'list': 10,
|
|
303
|
+
'assets': 2,
|
|
293
304
|
},
|
|
294
305
|
'post': {
|
|
295
|
-
'create':
|
|
296
|
-
'apiKey/create':
|
|
297
|
-
'apiKey/edit':
|
|
298
|
-
'apiKey/del':
|
|
299
|
-
'updateStatus':
|
|
306
|
+
'create': 10,
|
|
307
|
+
'apiKey/create': 2,
|
|
308
|
+
'apiKey/edit': 2,
|
|
309
|
+
'apiKey/del': 2,
|
|
310
|
+
'updateStatus': 10,
|
|
300
311
|
},
|
|
301
312
|
},
|
|
302
313
|
},
|
|
@@ -306,10 +317,10 @@ class bingx extends bingx$1 {
|
|
|
306
317
|
'private': {
|
|
307
318
|
'get': {
|
|
308
319
|
'uid': 1,
|
|
309
|
-
'apiKey/query':
|
|
320
|
+
'apiKey/query': 2,
|
|
310
321
|
},
|
|
311
322
|
'post': {
|
|
312
|
-
'innerTransfer/authorizeSubAccount':
|
|
323
|
+
'innerTransfer/authorizeSubAccount': 1,
|
|
313
324
|
},
|
|
314
325
|
},
|
|
315
326
|
},
|
|
@@ -318,10 +329,13 @@ class bingx extends bingx$1 {
|
|
|
318
329
|
'auth': {
|
|
319
330
|
'private': {
|
|
320
331
|
'post': {
|
|
321
|
-
'userDataStream':
|
|
332
|
+
'userDataStream': 2,
|
|
322
333
|
},
|
|
323
334
|
'put': {
|
|
324
|
-
'userDataStream':
|
|
335
|
+
'userDataStream': 2,
|
|
336
|
+
},
|
|
337
|
+
'delete': {
|
|
338
|
+
'userDataStream': 2,
|
|
325
339
|
},
|
|
326
340
|
},
|
|
327
341
|
},
|
|
@@ -330,12 +344,12 @@ class bingx extends bingx$1 {
|
|
|
330
344
|
'v1': {
|
|
331
345
|
'private': {
|
|
332
346
|
'get': {
|
|
333
|
-
'swap/trace/currentTrack':
|
|
347
|
+
'swap/trace/currentTrack': 2,
|
|
334
348
|
},
|
|
335
349
|
'post': {
|
|
336
|
-
'swap/trace/closeTrackOrder':
|
|
337
|
-
'swap/trace/setTPSL':
|
|
338
|
-
'spot/trader/sellOrder':
|
|
350
|
+
'swap/trace/closeTrackOrder': 2,
|
|
351
|
+
'swap/trace/setTPSL': 2,
|
|
352
|
+
'spot/trader/sellOrder': 10,
|
|
339
353
|
},
|
|
340
354
|
},
|
|
341
355
|
},
|
|
@@ -2214,6 +2228,10 @@ class bingx extends bingx$1 {
|
|
|
2214
2228
|
const types = {
|
|
2215
2229
|
'trigger_market': 'market',
|
|
2216
2230
|
'trigger_limit': 'limit',
|
|
2231
|
+
'stop_limit': 'limit',
|
|
2232
|
+
'stop_market': 'market',
|
|
2233
|
+
'take_profit_market': 'market',
|
|
2234
|
+
'stop': 'limit',
|
|
2217
2235
|
};
|
|
2218
2236
|
return this.safeString(types, type, type);
|
|
2219
2237
|
}
|
|
@@ -2417,6 +2435,25 @@ class bingx extends bingx$1 {
|
|
|
2417
2435
|
// side: 'SELL'
|
|
2418
2436
|
// }
|
|
2419
2437
|
// }
|
|
2438
|
+
// stop loss order
|
|
2439
|
+
// {
|
|
2440
|
+
// "symbol": "ETH-USDT",
|
|
2441
|
+
// "orderId": "1792461744476422144",
|
|
2442
|
+
// "price": "2775.65",
|
|
2443
|
+
// "StopPrice": "2778.42",
|
|
2444
|
+
// "origQty": "0.032359",
|
|
2445
|
+
// "executedQty": "0",
|
|
2446
|
+
// "cummulativeQuoteQty": "0",
|
|
2447
|
+
// "status": "NEW",
|
|
2448
|
+
// "type": "TAKE_STOP_LIMIT",
|
|
2449
|
+
// "side": "SELL",
|
|
2450
|
+
// "time": "1716191156868",
|
|
2451
|
+
// "updateTime": "1716191156868",
|
|
2452
|
+
// "origQuoteOrderQty": "0",
|
|
2453
|
+
// "fee": "0",
|
|
2454
|
+
// "feeAsset": "USDT",
|
|
2455
|
+
// "clientOrderID": ""
|
|
2456
|
+
// }
|
|
2420
2457
|
//
|
|
2421
2458
|
const info = order;
|
|
2422
2459
|
const newOrder = this.safeDict2(order, 'newOrderResponse', 'orderOpenResponse');
|
|
@@ -2451,26 +2488,39 @@ class bingx extends bingx$1 {
|
|
|
2451
2488
|
let stopLoss = this.safeValue(order, 'stopLoss');
|
|
2452
2489
|
let stopLossPrice = undefined;
|
|
2453
2490
|
if ((stopLoss !== undefined) && (stopLoss !== '')) {
|
|
2454
|
-
stopLossPrice = this.
|
|
2491
|
+
stopLossPrice = this.omitZero(this.safeString(stopLoss, 'stopLoss'));
|
|
2455
2492
|
}
|
|
2456
2493
|
if ((stopLoss !== undefined) && (typeof stopLoss !== 'number') && (stopLoss !== '')) {
|
|
2457
2494
|
// stopLoss: '{"stopPrice":50,"workingType":"MARK_PRICE","type":"STOP_MARKET","quantity":1}',
|
|
2458
2495
|
if (typeof stopLoss === 'string') {
|
|
2459
2496
|
stopLoss = this.parseJson(stopLoss);
|
|
2460
2497
|
}
|
|
2461
|
-
stopLossPrice = this.
|
|
2498
|
+
stopLossPrice = this.omitZero(this.safeString(stopLoss, 'stopPrice'));
|
|
2462
2499
|
}
|
|
2463
2500
|
let takeProfit = this.safeValue(order, 'takeProfit');
|
|
2464
2501
|
let takeProfitPrice = undefined;
|
|
2465
2502
|
if (takeProfit !== undefined && (takeProfit !== '')) {
|
|
2466
|
-
takeProfitPrice = this.
|
|
2503
|
+
takeProfitPrice = this.omitZero(this.safeString(takeProfit, 'takeProfit'));
|
|
2467
2504
|
}
|
|
2468
2505
|
if ((takeProfit !== undefined) && (typeof takeProfit !== 'number') && (takeProfit !== '')) {
|
|
2469
2506
|
// takeProfit: '{"stopPrice":150,"workingType":"MARK_PRICE","type":"TAKE_PROFIT_MARKET","quantity":1}',
|
|
2470
2507
|
if (typeof takeProfit === 'string') {
|
|
2471
2508
|
takeProfit = this.parseJson(takeProfit);
|
|
2472
2509
|
}
|
|
2473
|
-
takeProfitPrice = this.
|
|
2510
|
+
takeProfitPrice = this.omitZero(this.safeString(takeProfit, 'stopPrice'));
|
|
2511
|
+
}
|
|
2512
|
+
const rawType = this.safeStringLower2(order, 'type', 'o');
|
|
2513
|
+
const stopPrice = this.omitZero(this.safeString2(order, 'StopPrice', 'stopPrice'));
|
|
2514
|
+
let triggerPrice = stopPrice;
|
|
2515
|
+
if (stopPrice !== undefined) {
|
|
2516
|
+
if ((rawType.indexOf('stop') > -1) && (stopLossPrice === undefined)) {
|
|
2517
|
+
stopLossPrice = stopPrice;
|
|
2518
|
+
triggerPrice = undefined;
|
|
2519
|
+
}
|
|
2520
|
+
if ((rawType.indexOf('take') > -1) && (takeProfitPrice === undefined)) {
|
|
2521
|
+
takeProfitPrice = stopPrice;
|
|
2522
|
+
triggerPrice = undefined;
|
|
2523
|
+
}
|
|
2474
2524
|
}
|
|
2475
2525
|
return this.safeOrder({
|
|
2476
2526
|
'info': info,
|
|
@@ -2481,13 +2531,13 @@ class bingx extends bingx$1 {
|
|
|
2481
2531
|
'datetime': this.iso8601(timestamp),
|
|
2482
2532
|
'lastTradeTimestamp': lastTradeTimestamp,
|
|
2483
2533
|
'lastUpdateTimestamp': this.safeInteger(order, 'updateTime'),
|
|
2484
|
-
'type': this.parseOrderType(
|
|
2534
|
+
'type': this.parseOrderType(rawType),
|
|
2485
2535
|
'timeInForce': this.safeString(order, 'timeInForce'),
|
|
2486
2536
|
'postOnly': undefined,
|
|
2487
2537
|
'side': this.parseOrderSide(side),
|
|
2488
2538
|
'price': this.safeString2(order, 'price', 'p'),
|
|
2489
|
-
'stopPrice':
|
|
2490
|
-
'triggerPrice':
|
|
2539
|
+
'stopPrice': triggerPrice,
|
|
2540
|
+
'triggerPrice': triggerPrice,
|
|
2491
2541
|
'stopLossPrice': stopLossPrice,
|
|
2492
2542
|
'takeProfitPrice': takeProfitPrice,
|
|
2493
2543
|
'average': this.safeString2(order, 'avgPrice', 'ap'),
|
package/dist/cjs/src/bitget.js
CHANGED
package/dist/cjs/src/bitmart.js
CHANGED
|
@@ -35,11 +35,12 @@ class bitmart extends bitmart$1 {
|
|
|
35
35
|
'borrowIsolatedMargin': true,
|
|
36
36
|
'cancelAllOrders': true,
|
|
37
37
|
'cancelOrder': true,
|
|
38
|
-
'cancelOrders':
|
|
38
|
+
'cancelOrders': true,
|
|
39
39
|
'createMarketBuyOrderWithCost': true,
|
|
40
40
|
'createMarketOrderWithCost': false,
|
|
41
41
|
'createMarketSellOrderWithCost': false,
|
|
42
42
|
'createOrder': true,
|
|
43
|
+
'createOrders': true,
|
|
43
44
|
'createPostOnlyOrder': true,
|
|
44
45
|
'createStopLimitOrder': false,
|
|
45
46
|
'createStopMarketOrder': false,
|
|
@@ -179,7 +180,7 @@ class bitmart extends bitmart$1 {
|
|
|
179
180
|
'spot/v2/orders': 5,
|
|
180
181
|
'spot/v1/trades': 5,
|
|
181
182
|
// newer order endpoint
|
|
182
|
-
'spot/v2/trades':
|
|
183
|
+
'spot/v2/trades': 4,
|
|
183
184
|
'spot/v3/orders': 5,
|
|
184
185
|
'spot/v2/order_detail': 1,
|
|
185
186
|
// margin
|
|
@@ -223,6 +224,8 @@ class bitmart extends bitmart$1 {
|
|
|
223
224
|
'spot/v4/query/history-orders': 5,
|
|
224
225
|
'spot/v4/query/trades': 5,
|
|
225
226
|
'spot/v4/query/order-trades': 5,
|
|
227
|
+
'spot/v4/cancel_orders': 3,
|
|
228
|
+
'spot/v4/batch_orders': 3,
|
|
226
229
|
// newer endpoint
|
|
227
230
|
'spot/v3/cancel_order': 1,
|
|
228
231
|
'spot/v2/batch_orders': 1,
|
|
@@ -2390,6 +2393,76 @@ class bitmart extends bitmart$1 {
|
|
|
2390
2393
|
order['price'] = price;
|
|
2391
2394
|
return order;
|
|
2392
2395
|
}
|
|
2396
|
+
async createOrders(orders, params = {}) {
|
|
2397
|
+
/**
|
|
2398
|
+
* @method
|
|
2399
|
+
* @name bitmart#createOrders
|
|
2400
|
+
* @description create a list of trade orders
|
|
2401
|
+
* @see https://developer-pro.bitmart.com/en/spot/#new-batch-order-v4-signed
|
|
2402
|
+
* @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
|
|
2403
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2404
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
2405
|
+
*/
|
|
2406
|
+
await this.loadMarkets();
|
|
2407
|
+
const ordersRequests = [];
|
|
2408
|
+
let symbol = undefined;
|
|
2409
|
+
let market = undefined;
|
|
2410
|
+
for (let i = 0; i < orders.length; i++) {
|
|
2411
|
+
const rawOrder = orders[i];
|
|
2412
|
+
const marketId = this.safeString(rawOrder, 'symbol');
|
|
2413
|
+
market = this.market(marketId);
|
|
2414
|
+
if (!market['spot']) {
|
|
2415
|
+
throw new errors.NotSupported(this.id + ' createOrders() supports spot orders only');
|
|
2416
|
+
}
|
|
2417
|
+
if (symbol === undefined) {
|
|
2418
|
+
symbol = marketId;
|
|
2419
|
+
}
|
|
2420
|
+
else {
|
|
2421
|
+
if (symbol !== marketId) {
|
|
2422
|
+
throw new errors.BadRequest(this.id + ' createOrders() requires all orders to have the same symbol');
|
|
2423
|
+
}
|
|
2424
|
+
}
|
|
2425
|
+
const type = this.safeString(rawOrder, 'type');
|
|
2426
|
+
const side = this.safeString(rawOrder, 'side');
|
|
2427
|
+
const amount = this.safeValue(rawOrder, 'amount');
|
|
2428
|
+
const price = this.safeValue(rawOrder, 'price');
|
|
2429
|
+
const orderParams = this.safeDict(rawOrder, 'params', {});
|
|
2430
|
+
let orderRequest = this.createSpotOrderRequest(marketId, type, side, amount, price, orderParams);
|
|
2431
|
+
orderRequest = this.omit(orderRequest, ['symbol']); // not needed because it goes in the outter object
|
|
2432
|
+
ordersRequests.push(orderRequest);
|
|
2433
|
+
}
|
|
2434
|
+
const request = {
|
|
2435
|
+
'symbol': market['id'],
|
|
2436
|
+
'orderParams': ordersRequests,
|
|
2437
|
+
};
|
|
2438
|
+
const response = await this.privatePostSpotV4BatchOrders(request);
|
|
2439
|
+
//
|
|
2440
|
+
// {
|
|
2441
|
+
// "message": "OK",
|
|
2442
|
+
// "code": 1000,
|
|
2443
|
+
// "trace": "5fc697fb817a4b5396284786a9b2609a.263.17022620476480263",
|
|
2444
|
+
// "data": {
|
|
2445
|
+
// "code": 0,
|
|
2446
|
+
// "msg": "success",
|
|
2447
|
+
// "data": {
|
|
2448
|
+
// "orderIds": [
|
|
2449
|
+
// "212751308355553320"
|
|
2450
|
+
// ]
|
|
2451
|
+
// }
|
|
2452
|
+
// }
|
|
2453
|
+
// }
|
|
2454
|
+
//
|
|
2455
|
+
const data = this.safeDict(response, 'data', {});
|
|
2456
|
+
const innderData = this.safeDict(data, 'data', {});
|
|
2457
|
+
const orderIds = this.safeList(innderData, 'orderIds', []);
|
|
2458
|
+
const parsedOrders = [];
|
|
2459
|
+
for (let i = 0; i < orderIds.length; i++) {
|
|
2460
|
+
const orderId = orderIds[i];
|
|
2461
|
+
const order = this.safeOrder({ 'id': orderId }, market);
|
|
2462
|
+
parsedOrders.push(order);
|
|
2463
|
+
}
|
|
2464
|
+
return parsedOrders;
|
|
2465
|
+
}
|
|
2393
2466
|
createSwapOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
|
|
2394
2467
|
/**
|
|
2395
2468
|
* @method
|
|
@@ -2672,6 +2745,68 @@ class bitmart extends bitmart$1 {
|
|
|
2672
2745
|
const order = this.parseOrder(id, market);
|
|
2673
2746
|
return this.extend(order, { 'id': id });
|
|
2674
2747
|
}
|
|
2748
|
+
async cancelOrders(ids, symbol = undefined, params = {}) {
|
|
2749
|
+
/**
|
|
2750
|
+
* @method
|
|
2751
|
+
* @name bitmart#cancelOrders
|
|
2752
|
+
* @description cancel multiple orders
|
|
2753
|
+
* @see https://developer-pro.bitmart.com/en/spot/#cancel-batch-order-v4-signed
|
|
2754
|
+
* @param {string[]} ids order ids
|
|
2755
|
+
* @param {string} symbol unified symbol of the market the order was made in
|
|
2756
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2757
|
+
* @param {string[]} [params.clientOrderIds] client order ids
|
|
2758
|
+
* @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
2759
|
+
*/
|
|
2760
|
+
if (symbol === undefined) {
|
|
2761
|
+
throw new errors.ArgumentsRequired(this.id + ' cancelOrders() requires a symbol argument');
|
|
2762
|
+
}
|
|
2763
|
+
await this.loadMarkets();
|
|
2764
|
+
const market = this.market(symbol);
|
|
2765
|
+
if (!market['spot']) {
|
|
2766
|
+
throw new errors.NotSupported(this.id + ' cancelOrders() does not support ' + market['type'] + ' orders, only spot orders are accepted');
|
|
2767
|
+
}
|
|
2768
|
+
const clientOrderIds = this.safeList(params, 'clientOrderIds');
|
|
2769
|
+
params = this.omit(params, ['clientOrderIds']);
|
|
2770
|
+
const request = {
|
|
2771
|
+
'symbol': market['id'],
|
|
2772
|
+
};
|
|
2773
|
+
if (clientOrderIds !== undefined) {
|
|
2774
|
+
request['clientOrderIds'] = clientOrderIds;
|
|
2775
|
+
}
|
|
2776
|
+
else {
|
|
2777
|
+
request['orderIds'] = ids;
|
|
2778
|
+
}
|
|
2779
|
+
const response = await this.privatePostSpotV4CancelOrders(this.extend(request, params));
|
|
2780
|
+
//
|
|
2781
|
+
// {
|
|
2782
|
+
// "message": "OK",
|
|
2783
|
+
// "code": 1000,
|
|
2784
|
+
// "trace": "c4edbce860164203954f7c3c81d60fc6.309.17022669632770001",
|
|
2785
|
+
// "data": {
|
|
2786
|
+
// "successIds": [
|
|
2787
|
+
// "213055379155243012"
|
|
2788
|
+
// ],
|
|
2789
|
+
// "failIds": [],
|
|
2790
|
+
// "totalCount": 1,
|
|
2791
|
+
// "successCount": 1,
|
|
2792
|
+
// "failedCount": 0
|
|
2793
|
+
// }
|
|
2794
|
+
// }
|
|
2795
|
+
//
|
|
2796
|
+
const data = this.safeDict(response, 'data', {});
|
|
2797
|
+
const allOrders = [];
|
|
2798
|
+
const successIds = this.safeList(data, 'successIds', []);
|
|
2799
|
+
for (let i = 0; i < successIds.length; i++) {
|
|
2800
|
+
const id = successIds[i];
|
|
2801
|
+
allOrders.push(this.safeOrder({ 'id': id, 'status': 'canceled' }, market));
|
|
2802
|
+
}
|
|
2803
|
+
const failIds = this.safeList(data, 'failIds', []);
|
|
2804
|
+
for (let i = 0; i < failIds.length; i++) {
|
|
2805
|
+
const id = failIds[i];
|
|
2806
|
+
allOrders.push(this.safeOrder({ 'id': id, 'status': 'failed' }, market));
|
|
2807
|
+
}
|
|
2808
|
+
return allOrders;
|
|
2809
|
+
}
|
|
2675
2810
|
async cancelAllOrders(symbol = undefined, params = {}) {
|
|
2676
2811
|
/**
|
|
2677
2812
|
* @method
|