ccxt 4.4.32 → 4.4.34
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 +8 -7
- package/dist/ccxt.browser.min.js +6 -6
- package/dist/cjs/ccxt.js +4 -1
- package/dist/cjs/src/abstract/ellipx.js +9 -0
- package/dist/cjs/src/alpaca.js +2 -0
- package/dist/cjs/src/base/Exchange.js +116 -1
- package/dist/cjs/src/binance.js +164 -6
- package/dist/cjs/src/bingx.js +156 -9
- package/dist/cjs/src/bitbank.js +5 -0
- package/dist/cjs/src/bitbns.js +2 -0
- package/dist/cjs/src/bitfinex2.js +2 -1
- package/dist/cjs/src/bitget.js +177 -44
- package/dist/cjs/src/bitmex.js +2 -0
- package/dist/cjs/src/bitopro.js +3 -0
- package/dist/cjs/src/bitrue.js +1 -0
- package/dist/cjs/src/btcmarkets.js +2 -0
- package/dist/cjs/src/bybit.js +148 -13
- package/dist/cjs/src/cex.js +16 -6
- package/dist/cjs/src/coinbase.js +5 -24
- package/dist/cjs/src/coinbaseexchange.js +2 -1
- package/dist/cjs/src/coinex.js +2 -0
- package/dist/cjs/src/coinone.js +7 -7
- package/dist/cjs/src/coinsph.js +7 -7
- package/dist/cjs/src/coinspot.js +39 -39
- package/dist/cjs/src/cryptocom.js +36 -34
- package/dist/cjs/src/ellipx.js +1871 -0
- package/dist/cjs/src/gate.js +2 -1
- package/dist/cjs/src/hyperliquid.js +16 -2
- package/dist/cjs/src/kraken.js +1 -0
- package/dist/cjs/src/krakenfutures.js +3 -1
- package/dist/cjs/src/kucoinfutures.js +1 -1
- package/dist/cjs/src/lbank.js +1 -0
- package/dist/cjs/src/okcoin.js +2 -0
- package/dist/cjs/src/okx.js +104 -9
- package/dist/cjs/src/onetrading.js +14 -1
- package/dist/cjs/src/paradex.js +2 -0
- package/dist/cjs/src/phemex.js +35 -7
- package/dist/cjs/src/poloniex.js +3 -1
- package/dist/cjs/src/poloniexfutures.js +3 -1
- package/dist/cjs/src/pro/idex.js +5 -0
- package/dist/cjs/src/pro/okx.js +11 -1
- package/dist/cjs/src/pro/probit.js +4 -2
- package/dist/cjs/src/pro/woo.js +15 -15
- package/dist/cjs/src/vertex.js +2 -0
- package/dist/cjs/src/woo.js +69 -69
- package/examples/js/cli.js +1 -1
- package/js/ccxt.d.ts +5 -2
- package/js/ccxt.js +4 -2
- package/js/src/abstract/bingx.d.ts +16 -0
- package/js/src/abstract/bitbank.d.ts +5 -0
- package/js/src/abstract/bitfinex2.d.ts +1 -0
- package/js/src/abstract/coinbaseexchange.d.ts +1 -0
- package/js/src/abstract/ellipx.d.ts +28 -0
- package/js/src/abstract/ellipx.js +11 -0
- package/js/src/abstract/kraken.d.ts +1 -0
- package/js/src/alpaca.js +2 -0
- package/js/src/base/Exchange.d.ts +11 -0
- package/js/src/base/Exchange.js +116 -1
- package/js/src/binance.js +164 -6
- package/js/src/bingx.d.ts +3 -1
- package/js/src/bingx.js +156 -9
- package/js/src/bitbank.js +5 -0
- package/js/src/bitbns.js +2 -0
- package/js/src/bitfinex2.js +2 -1
- package/js/src/bitget.d.ts +4 -4
- package/js/src/bitget.js +177 -44
- package/js/src/bitmex.js +2 -0
- package/js/src/bitopro.d.ts +1 -0
- package/js/src/bitopro.js +3 -0
- package/js/src/bitrue.js +1 -0
- package/js/src/btcmarkets.d.ts +1 -0
- package/js/src/btcmarkets.js +2 -0
- package/js/src/bybit.d.ts +3 -2
- package/js/src/bybit.js +149 -14
- package/js/src/cex.d.ts +1 -0
- package/js/src/cex.js +17 -7
- package/js/src/coinbase.d.ts +2 -1
- package/js/src/coinbase.js +5 -24
- package/js/src/coinbaseexchange.js +2 -1
- package/js/src/coinex.js +2 -0
- package/js/src/coinone.js +7 -7
- package/js/src/coinsph.js +7 -7
- package/js/src/coinspot.js +39 -39
- package/js/src/cryptocom.d.ts +1 -1
- package/js/src/cryptocom.js +36 -34
- package/js/src/ellipx.d.ts +236 -0
- package/js/src/ellipx.js +1874 -0
- package/js/src/gate.d.ts +2 -2
- package/js/src/gate.js +2 -1
- package/js/src/hyperliquid.d.ts +2 -1
- package/js/src/hyperliquid.js +16 -2
- package/js/src/kraken.js +1 -0
- package/js/src/krakenfutures.js +3 -1
- package/js/src/kucoinfutures.d.ts +1 -1
- package/js/src/kucoinfutures.js +1 -1
- package/js/src/lbank.js +1 -0
- package/js/src/okcoin.js +2 -0
- package/js/src/okx.d.ts +1 -1
- package/js/src/okx.js +104 -9
- package/js/src/onetrading.d.ts +5 -0
- package/js/src/onetrading.js +15 -2
- package/js/src/paradex.js +2 -0
- package/js/src/phemex.d.ts +4 -0
- package/js/src/phemex.js +35 -7
- package/js/src/poloniex.d.ts +1 -1
- package/js/src/poloniex.js +3 -1
- package/js/src/poloniexfutures.d.ts +1 -1
- package/js/src/poloniexfutures.js +3 -1
- package/js/src/pro/idex.d.ts +5 -0
- package/js/src/pro/idex.js +5 -0
- package/js/src/pro/okx.js +11 -1
- package/js/src/pro/probit.js +4 -2
- package/js/src/pro/woo.d.ts +11 -11
- package/js/src/pro/woo.js +15 -15
- package/js/src/vertex.js +2 -0
- package/js/src/woo.d.ts +60 -60
- package/js/src/woo.js +69 -69
- package/package.json +3 -3
package/dist/cjs/ccxt.js
CHANGED
|
@@ -67,6 +67,7 @@ var currencycom = require('./src/currencycom.js');
|
|
|
67
67
|
var delta = require('./src/delta.js');
|
|
68
68
|
var deribit = require('./src/deribit.js');
|
|
69
69
|
var digifinex = require('./src/digifinex.js');
|
|
70
|
+
var ellipx = require('./src/ellipx.js');
|
|
70
71
|
var exmo = require('./src/exmo.js');
|
|
71
72
|
var fmfwio = require('./src/fmfwio.js');
|
|
72
73
|
var gate = require('./src/gate.js');
|
|
@@ -197,7 +198,7 @@ var xt$1 = require('./src/pro/xt.js');
|
|
|
197
198
|
|
|
198
199
|
//-----------------------------------------------------------------------------
|
|
199
200
|
// this is updated by vss.js when building
|
|
200
|
-
const version = '4.4.
|
|
201
|
+
const version = '4.4.34';
|
|
201
202
|
Exchange["default"].ccxtVersion = version;
|
|
202
203
|
const exchanges = {
|
|
203
204
|
'ace': ace,
|
|
@@ -255,6 +256,7 @@ const exchanges = {
|
|
|
255
256
|
'delta': delta,
|
|
256
257
|
'deribit': deribit,
|
|
257
258
|
'digifinex': digifinex,
|
|
259
|
+
'ellipx': ellipx,
|
|
258
260
|
'exmo': exmo,
|
|
259
261
|
'fmfwio': fmfwio,
|
|
260
262
|
'gate': gate,
|
|
@@ -490,6 +492,7 @@ exports.currencycom = currencycom;
|
|
|
490
492
|
exports.delta = delta;
|
|
491
493
|
exports.deribit = deribit;
|
|
492
494
|
exports.digifinex = digifinex;
|
|
495
|
+
exports.ellipx = ellipx;
|
|
493
496
|
exports.exmo = exmo;
|
|
494
497
|
exports.fmfwio = fmfwio;
|
|
495
498
|
exports.gate = gate;
|
package/dist/cjs/src/alpaca.js
CHANGED
|
@@ -116,6 +116,7 @@ class Exchange {
|
|
|
116
116
|
this.last_request_path = undefined;
|
|
117
117
|
this.id = 'Exchange';
|
|
118
118
|
this.markets = undefined;
|
|
119
|
+
this.features = undefined;
|
|
119
120
|
this.status = undefined;
|
|
120
121
|
this.rateLimit = undefined; // milliseconds
|
|
121
122
|
this.tokenBucket = undefined;
|
|
@@ -1960,7 +1961,7 @@ class Exchange {
|
|
|
1960
1961
|
const entryFiledEqualValue = entry[field] === value;
|
|
1961
1962
|
const firstCondition = valueIsDefined ? entryFiledEqualValue : true;
|
|
1962
1963
|
const entryKeyValue = this.safeValue(entry, key);
|
|
1963
|
-
const entryKeyGESince = (entryKeyValue) && since && (entryKeyValue >= since);
|
|
1964
|
+
const entryKeyGESince = (entryKeyValue) && (since !== undefined) && (entryKeyValue >= since);
|
|
1964
1965
|
const secondCondition = sinceIsDefined ? entryKeyGESince : true;
|
|
1965
1966
|
if (firstCondition && secondCondition) {
|
|
1966
1967
|
result.push(entry);
|
|
@@ -1972,6 +1973,12 @@ class Exchange {
|
|
|
1972
1973
|
}
|
|
1973
1974
|
return this.filterByLimit(result, limit, key, sinceIsDefined);
|
|
1974
1975
|
}
|
|
1976
|
+
/**
|
|
1977
|
+
* @method
|
|
1978
|
+
* @name Exchange#setSandboxMode
|
|
1979
|
+
* @description set the sandbox mode for the exchange
|
|
1980
|
+
* @param {boolean} enabled true to enable sandbox mode, false to disable it
|
|
1981
|
+
*/
|
|
1975
1982
|
setSandboxMode(enabled) {
|
|
1976
1983
|
if (enabled) {
|
|
1977
1984
|
if ('test' in this.urls) {
|
|
@@ -2316,6 +2323,94 @@ class Exchange {
|
|
|
2316
2323
|
}
|
|
2317
2324
|
afterConstruct() {
|
|
2318
2325
|
this.createNetworksByIdObject();
|
|
2326
|
+
this.featuresGenerator();
|
|
2327
|
+
}
|
|
2328
|
+
featuresGenerator() {
|
|
2329
|
+
//
|
|
2330
|
+
// the exchange-specific features can be something like this, where we support 'string' aliases too:
|
|
2331
|
+
//
|
|
2332
|
+
// {
|
|
2333
|
+
// 'myItem' : {
|
|
2334
|
+
// 'createOrder' : {...},
|
|
2335
|
+
// 'fetchOrders' : {...},
|
|
2336
|
+
// },
|
|
2337
|
+
// 'swap': {
|
|
2338
|
+
// 'linear': 'myItem',
|
|
2339
|
+
// 'inverse': 'myItem',
|
|
2340
|
+
// },
|
|
2341
|
+
// 'future': {
|
|
2342
|
+
// 'linear': 'myItem',
|
|
2343
|
+
// 'inverse': 'myItem',
|
|
2344
|
+
// }
|
|
2345
|
+
// }
|
|
2346
|
+
//
|
|
2347
|
+
//
|
|
2348
|
+
//
|
|
2349
|
+
// this method would regenerate the blank features tree, eg:
|
|
2350
|
+
//
|
|
2351
|
+
// {
|
|
2352
|
+
// "spot": {
|
|
2353
|
+
// "createOrder": undefined,
|
|
2354
|
+
// "fetchBalance": undefined,
|
|
2355
|
+
// ...
|
|
2356
|
+
// },
|
|
2357
|
+
// "swap": {
|
|
2358
|
+
// ...
|
|
2359
|
+
// }
|
|
2360
|
+
// }
|
|
2361
|
+
//
|
|
2362
|
+
if (this.features === undefined) {
|
|
2363
|
+
return;
|
|
2364
|
+
}
|
|
2365
|
+
// reconstruct
|
|
2366
|
+
const initialFeatures = this.features;
|
|
2367
|
+
this.features = {};
|
|
2368
|
+
const unifiedMarketTypes = ['spot', 'swap', 'future', 'option'];
|
|
2369
|
+
const subTypes = ['linear', 'inverse'];
|
|
2370
|
+
// atm only support basic methods, eg: 'createOrder', 'fetchOrder', 'fetchOrders', 'fetchMyTrades'
|
|
2371
|
+
for (let i = 0; i < unifiedMarketTypes.length; i++) {
|
|
2372
|
+
const marketType = unifiedMarketTypes[i];
|
|
2373
|
+
// if marketType is not filled for this exchange, don't add that in `features`
|
|
2374
|
+
if (!(marketType in initialFeatures)) {
|
|
2375
|
+
this.features[marketType] = undefined;
|
|
2376
|
+
}
|
|
2377
|
+
else {
|
|
2378
|
+
if (marketType === 'spot') {
|
|
2379
|
+
this.features[marketType] = this.featuresMapper(initialFeatures, marketType, undefined);
|
|
2380
|
+
}
|
|
2381
|
+
else {
|
|
2382
|
+
this.features[marketType] = {};
|
|
2383
|
+
for (let j = 0; j < subTypes.length; j++) {
|
|
2384
|
+
const subType = subTypes[j];
|
|
2385
|
+
this.features[marketType][subType] = this.featuresMapper(initialFeatures, marketType, subType);
|
|
2386
|
+
}
|
|
2387
|
+
}
|
|
2388
|
+
}
|
|
2389
|
+
}
|
|
2390
|
+
}
|
|
2391
|
+
featuresMapper(initialFeatures, marketType, subType = undefined) {
|
|
2392
|
+
let featuresObj = (subType !== undefined) ? initialFeatures[marketType][subType] : initialFeatures[marketType];
|
|
2393
|
+
const extendsStr = this.safeString(featuresObj, 'extends');
|
|
2394
|
+
if (extendsStr !== undefined) {
|
|
2395
|
+
featuresObj = this.omit(featuresObj, 'extends');
|
|
2396
|
+
const extendObj = this.featuresMapper(initialFeatures, extendsStr);
|
|
2397
|
+
featuresObj = this.deepExtend(extendObj, featuresObj);
|
|
2398
|
+
}
|
|
2399
|
+
//
|
|
2400
|
+
// corrections
|
|
2401
|
+
//
|
|
2402
|
+
if ('createOrder' in featuresObj) {
|
|
2403
|
+
const value = this.safeDict(featuresObj['createOrder'], 'attachedStopLossTakeProfit');
|
|
2404
|
+
if (value !== undefined) {
|
|
2405
|
+
featuresObj['createOrder']['stopLoss'] = value;
|
|
2406
|
+
featuresObj['createOrder']['takeProfit'] = value;
|
|
2407
|
+
}
|
|
2408
|
+
// false 'hedged' for spot
|
|
2409
|
+
if (marketType === 'spot') {
|
|
2410
|
+
featuresObj['createOrder']['hedged'] = false;
|
|
2411
|
+
}
|
|
2412
|
+
}
|
|
2413
|
+
return featuresObj;
|
|
2319
2414
|
}
|
|
2320
2415
|
orderbookChecksumMessage(symbol) {
|
|
2321
2416
|
return symbol + ' : ' + 'orderbook data checksum validation failed. You can reconnect by calling watchOrderBook again or you can mute the error by setting exchange.options["watchOrderBook"]["checksum"] = false';
|
|
@@ -3421,6 +3516,16 @@ class Exchange {
|
|
|
3421
3516
|
}
|
|
3422
3517
|
return result;
|
|
3423
3518
|
}
|
|
3519
|
+
currencyIds(codes = undefined) {
|
|
3520
|
+
if (codes === undefined) {
|
|
3521
|
+
return codes;
|
|
3522
|
+
}
|
|
3523
|
+
const result = [];
|
|
3524
|
+
for (let i = 0; i < codes.length; i++) {
|
|
3525
|
+
result.push(this.currencyId(codes[i]));
|
|
3526
|
+
}
|
|
3527
|
+
return result;
|
|
3528
|
+
}
|
|
3424
3529
|
marketsForSymbols(symbols = undefined) {
|
|
3425
3530
|
if (symbols === undefined) {
|
|
3426
3531
|
return symbols;
|
|
@@ -3847,6 +3952,16 @@ class Exchange {
|
|
|
3847
3952
|
setHeaders(headers) {
|
|
3848
3953
|
return headers;
|
|
3849
3954
|
}
|
|
3955
|
+
currencyId(code) {
|
|
3956
|
+
let currency = this.safeDict(this.currencies, code);
|
|
3957
|
+
if (currency === undefined) {
|
|
3958
|
+
currency = this.safeCurrency(code);
|
|
3959
|
+
}
|
|
3960
|
+
if (currency !== undefined) {
|
|
3961
|
+
return currency['id'];
|
|
3962
|
+
}
|
|
3963
|
+
return code;
|
|
3964
|
+
}
|
|
3850
3965
|
marketId(symbol) {
|
|
3851
3966
|
const market = this.market(symbol);
|
|
3852
3967
|
if (market !== undefined) {
|
package/dist/cjs/src/binance.js
CHANGED
|
@@ -1555,6 +1555,159 @@ class binance extends binance$1 {
|
|
|
1555
1555
|
'BUSD': 'USD',
|
|
1556
1556
|
},
|
|
1557
1557
|
},
|
|
1558
|
+
'features': {
|
|
1559
|
+
// https://developers.binance.com/docs/binance-spot-api-docs/rest-api#:~:text=quoteOrderQty
|
|
1560
|
+
'spot': {
|
|
1561
|
+
'sandbox': true,
|
|
1562
|
+
'createOrder': {
|
|
1563
|
+
'marginMode': true,
|
|
1564
|
+
'triggerPrice': true,
|
|
1565
|
+
'triggerPriceType': undefined,
|
|
1566
|
+
'triggerDirection': false,
|
|
1567
|
+
'stopLossPrice': true,
|
|
1568
|
+
'takeProfitPrice': true,
|
|
1569
|
+
'attachedStopLossTakeProfit': undefined,
|
|
1570
|
+
'timeInForce': {
|
|
1571
|
+
'GTC': true,
|
|
1572
|
+
'IOC': true,
|
|
1573
|
+
'FOK': true,
|
|
1574
|
+
'PO': true,
|
|
1575
|
+
'GTD': false,
|
|
1576
|
+
},
|
|
1577
|
+
'hedged': true,
|
|
1578
|
+
// exchange-supported features
|
|
1579
|
+
'selfTradePrevention': true,
|
|
1580
|
+
'trailing': true,
|
|
1581
|
+
'twap': false,
|
|
1582
|
+
'iceberg': true,
|
|
1583
|
+
'oco': false,
|
|
1584
|
+
},
|
|
1585
|
+
'createOrders': undefined,
|
|
1586
|
+
'fetchMyTrades': {
|
|
1587
|
+
'marginMode': false,
|
|
1588
|
+
'limit': 1000,
|
|
1589
|
+
'daysBack': undefined,
|
|
1590
|
+
'untilDays': 1, // days between start-end
|
|
1591
|
+
},
|
|
1592
|
+
'fetchOrder': {
|
|
1593
|
+
'marginMode': true,
|
|
1594
|
+
'trigger': false,
|
|
1595
|
+
'trailing': false,
|
|
1596
|
+
},
|
|
1597
|
+
'fetchOpenOrders': {
|
|
1598
|
+
'marginMode': true,
|
|
1599
|
+
'limit': undefined,
|
|
1600
|
+
'trigger': false,
|
|
1601
|
+
'trailing': false,
|
|
1602
|
+
},
|
|
1603
|
+
'fetchOrders': {
|
|
1604
|
+
'marginMode': true,
|
|
1605
|
+
'limit': 1000,
|
|
1606
|
+
'daysBack': undefined,
|
|
1607
|
+
'untilDays': 10000,
|
|
1608
|
+
'trigger': false,
|
|
1609
|
+
'trailing': false,
|
|
1610
|
+
},
|
|
1611
|
+
'fetchClosedOrders': {
|
|
1612
|
+
'marginMode': true,
|
|
1613
|
+
'limit': 1000,
|
|
1614
|
+
'daysBackClosed': undefined,
|
|
1615
|
+
'daysBackCanceled': undefined,
|
|
1616
|
+
'untilDays': 10000,
|
|
1617
|
+
'trigger': false,
|
|
1618
|
+
'trailing': false,
|
|
1619
|
+
},
|
|
1620
|
+
'fetchOHLCV': {
|
|
1621
|
+
'limit': 1000,
|
|
1622
|
+
},
|
|
1623
|
+
},
|
|
1624
|
+
'default': {
|
|
1625
|
+
'sandbox': true,
|
|
1626
|
+
'createOrder': {
|
|
1627
|
+
'marginMode': false,
|
|
1628
|
+
'triggerPrice': true,
|
|
1629
|
+
'triggerPriceType': {
|
|
1630
|
+
'mark': true,
|
|
1631
|
+
'last': true,
|
|
1632
|
+
'index': false,
|
|
1633
|
+
},
|
|
1634
|
+
'stopLossPrice': true,
|
|
1635
|
+
'takeProfitPrice': true,
|
|
1636
|
+
'attachedStopLossTakeProfit': undefined,
|
|
1637
|
+
'timeInForce': {
|
|
1638
|
+
'GTC': true,
|
|
1639
|
+
'IOC': true,
|
|
1640
|
+
'FOK': true,
|
|
1641
|
+
'PO': true,
|
|
1642
|
+
'GTD': true,
|
|
1643
|
+
// 'GTX': true,
|
|
1644
|
+
},
|
|
1645
|
+
'hedged': true,
|
|
1646
|
+
// exchange-supported features
|
|
1647
|
+
'selfTradePrevention': true,
|
|
1648
|
+
'trailing': true,
|
|
1649
|
+
'twap': false,
|
|
1650
|
+
'iceberg': false,
|
|
1651
|
+
'oco': false,
|
|
1652
|
+
},
|
|
1653
|
+
'createOrders': {
|
|
1654
|
+
'max': 5,
|
|
1655
|
+
},
|
|
1656
|
+
'fetchMyTrades': {
|
|
1657
|
+
'marginMode': false,
|
|
1658
|
+
'daysBack': undefined,
|
|
1659
|
+
'limit': 1000,
|
|
1660
|
+
'untilDays': 7,
|
|
1661
|
+
},
|
|
1662
|
+
'fetchOrder': {
|
|
1663
|
+
'marginMode': false,
|
|
1664
|
+
'trigger': false,
|
|
1665
|
+
'trailing': false,
|
|
1666
|
+
},
|
|
1667
|
+
'fetchOpenOrders': {
|
|
1668
|
+
'marginMode': true,
|
|
1669
|
+
'limit': 500,
|
|
1670
|
+
'trigger': false,
|
|
1671
|
+
'trailing': false,
|
|
1672
|
+
},
|
|
1673
|
+
'fetchOrders': {
|
|
1674
|
+
'marginMode': true,
|
|
1675
|
+
'limit': 1000,
|
|
1676
|
+
'daysBack': 90,
|
|
1677
|
+
'untilDays': 7,
|
|
1678
|
+
'trigger': false,
|
|
1679
|
+
'trailing': false,
|
|
1680
|
+
},
|
|
1681
|
+
'fetchClosedOrders': {
|
|
1682
|
+
'marginMode': true,
|
|
1683
|
+
'limit': 1000,
|
|
1684
|
+
'daysBackClosed': 90,
|
|
1685
|
+
'daysBackCanceled': 3,
|
|
1686
|
+
'untilDays': 7,
|
|
1687
|
+
'trigger': false,
|
|
1688
|
+
'trailing': false,
|
|
1689
|
+
},
|
|
1690
|
+
'fetchOHLCV': {
|
|
1691
|
+
'limit': 1500,
|
|
1692
|
+
},
|
|
1693
|
+
},
|
|
1694
|
+
'swap': {
|
|
1695
|
+
'linear': {
|
|
1696
|
+
'extends': 'default',
|
|
1697
|
+
},
|
|
1698
|
+
'inverse': {
|
|
1699
|
+
'extends': 'default',
|
|
1700
|
+
},
|
|
1701
|
+
},
|
|
1702
|
+
'future': {
|
|
1703
|
+
'linear': {
|
|
1704
|
+
'extends': 'default',
|
|
1705
|
+
},
|
|
1706
|
+
'inverse': {
|
|
1707
|
+
'extends': 'default',
|
|
1708
|
+
},
|
|
1709
|
+
},
|
|
1710
|
+
},
|
|
1558
1711
|
'exceptions': {
|
|
1559
1712
|
'spot': {
|
|
1560
1713
|
'exact': {
|
|
@@ -1950,12 +2103,15 @@ class binance extends binance$1 {
|
|
|
1950
2103
|
'-4088': errors.PermissionDenied,
|
|
1951
2104
|
'-4114': errors.BadRequest,
|
|
1952
2105
|
'-4115': errors.BadRequest,
|
|
2106
|
+
'-4116': errors.InvalidOrder,
|
|
2107
|
+
'-4117': errors.OperationRejected,
|
|
1953
2108
|
'-4118': errors.OperationRejected,
|
|
1954
2109
|
'-4131': errors.OperationRejected,
|
|
1955
2110
|
'-4140': errors.BadRequest,
|
|
1956
2111
|
'-4141': errors.OperationRejected,
|
|
1957
2112
|
'-4144': errors.BadSymbol,
|
|
1958
2113
|
'-4164': errors.InvalidOrder,
|
|
2114
|
+
'-4136': errors.InvalidOrder,
|
|
1959
2115
|
'-4165': errors.BadRequest,
|
|
1960
2116
|
'-4167': errors.BadRequest,
|
|
1961
2117
|
'-4168': errors.BadRequest,
|
|
@@ -6234,6 +6390,7 @@ class binance extends binance$1 {
|
|
|
6234
6390
|
const typeRequest = isPortfolioMarginConditional ? 'strategyType' : 'type';
|
|
6235
6391
|
request[typeRequest] = uppercaseType;
|
|
6236
6392
|
// additional required fields depending on the order type
|
|
6393
|
+
const closePosition = this.safeBool(params, 'closePosition', false);
|
|
6237
6394
|
let timeInForceIsRequired = false;
|
|
6238
6395
|
let priceIsRequired = false;
|
|
6239
6396
|
let stopPriceIsRequired = false;
|
|
@@ -6313,14 +6470,15 @@ class binance extends binance$1 {
|
|
|
6313
6470
|
priceIsRequired = true;
|
|
6314
6471
|
}
|
|
6315
6472
|
else if ((uppercaseType === 'STOP_MARKET') || (uppercaseType === 'TAKE_PROFIT_MARKET')) {
|
|
6316
|
-
|
|
6317
|
-
if (closePosition === undefined) {
|
|
6473
|
+
if (!closePosition) {
|
|
6318
6474
|
quantityIsRequired = true;
|
|
6319
6475
|
}
|
|
6320
6476
|
stopPriceIsRequired = true;
|
|
6321
6477
|
}
|
|
6322
6478
|
else if (uppercaseType === 'TRAILING_STOP_MARKET') {
|
|
6323
|
-
|
|
6479
|
+
if (!closePosition) {
|
|
6480
|
+
quantityIsRequired = true;
|
|
6481
|
+
}
|
|
6324
6482
|
if (trailingPercent === undefined) {
|
|
6325
6483
|
throw new errors.InvalidOrder(this.id + ' createOrder() requires a trailingPercent param for a ' + type + ' order');
|
|
6326
6484
|
}
|
|
@@ -11771,13 +11929,13 @@ class binance extends binance$1 {
|
|
|
11771
11929
|
getExceptionsByUrl(url, exactOrBroad) {
|
|
11772
11930
|
let marketType = undefined;
|
|
11773
11931
|
const hostname = (this.hostname !== undefined) ? this.hostname : 'binance.com';
|
|
11774
|
-
if (url.startsWith('https://api.' + hostname + '/')) {
|
|
11932
|
+
if (url.startsWith('https://api.' + hostname + '/') || url.startsWith('https://testnet.binance.vision')) {
|
|
11775
11933
|
marketType = 'spot';
|
|
11776
11934
|
}
|
|
11777
|
-
else if (url.startsWith('https://dapi.' + hostname + '/')) {
|
|
11935
|
+
else if (url.startsWith('https://dapi.' + hostname + '/') || url.startsWith('https://testnet.binancefuture.com/dapi')) {
|
|
11778
11936
|
marketType = 'inverse';
|
|
11779
11937
|
}
|
|
11780
|
-
else if (url.startsWith('https://fapi.' + hostname + '/')) {
|
|
11938
|
+
else if (url.startsWith('https://fapi.' + hostname + '/') || url.startsWith('https://testnet.binancefuture.com/fapi')) {
|
|
11781
11939
|
marketType = 'linear';
|
|
11782
11940
|
}
|
|
11783
11941
|
else if (url.startsWith('https://eapi.' + hostname + '/')) {
|