ccxt 4.1.95 → 4.1.96
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/build.sh +16 -16
- package/dist/ccxt.browser.js +385 -251
- package/dist/ccxt.browser.min.js +2 -2
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/binance.js +145 -135
- package/dist/cjs/src/bingx.js +8 -7
- package/dist/cjs/src/bit2c.js +2 -3
- package/dist/cjs/src/bitfinex2.js +2 -3
- package/dist/cjs/src/bitmart.js +1 -1
- package/dist/cjs/src/btcbox.js +2 -3
- package/dist/cjs/src/coinbase.js +11 -5
- package/dist/cjs/src/cryptocom.js +2 -1
- package/dist/cjs/src/delta.js +25 -0
- package/dist/cjs/src/gate.js +2 -2
- package/dist/cjs/src/kraken.js +46 -45
- package/dist/cjs/src/krakenfutures.js +53 -26
- package/dist/cjs/src/kucoin.js +73 -3
- package/dist/cjs/src/kucoinfutures.js +1 -1
- package/dist/cjs/src/pro/binance.js +2 -3
- package/dist/cjs/src/pro/bitfinex.js +2 -3
- package/dist/cjs/src/pro/cex.js +1 -1
- package/dist/cjs/src/pro/gate.js +2 -2
- package/dist/cjs/src/pro/kraken.js +2 -3
- package/dist/cjs/src/pro/okx.js +1 -1
- package/dist/cjs/src/pro/woo.js +2 -3
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/kucoin.d.ts +12 -0
- package/js/src/abstract/kucoinfutures.d.ts +12 -1
- package/js/src/binance.js +145 -135
- package/js/src/bingx.js +8 -7
- package/js/src/bit2c.js +2 -3
- package/js/src/bitfinex2.js +2 -3
- package/js/src/bitmart.js +1 -1
- package/js/src/btcbox.js +2 -3
- package/js/src/coinbase.js +11 -5
- package/js/src/cryptocom.js +2 -1
- package/js/src/delta.d.ts +5 -4
- package/js/src/delta.js +25 -0
- package/js/src/gate.js +2 -2
- package/js/src/kraken.js +46 -45
- package/js/src/krakenfutures.js +53 -26
- package/js/src/kucoin.d.ts +3 -0
- package/js/src/kucoin.js +73 -3
- package/js/src/kucoinfutures.js +1 -1
- package/js/src/pro/binance.js +2 -3
- package/js/src/pro/bitfinex.js +2 -3
- package/js/src/pro/cex.js +1 -1
- package/js/src/pro/gate.js +2 -2
- package/js/src/pro/kraken.js +2 -3
- package/js/src/pro/okx.js +1 -1
- package/js/src/pro/woo.js +2 -3
- package/package.json +2 -2
package/js/src/binance.js
CHANGED
|
@@ -2568,24 +2568,23 @@ export default class binance extends Exchange {
|
|
|
2568
2568
|
let type = this.safeString(params, 'type', defaultType);
|
|
2569
2569
|
let subType = undefined;
|
|
2570
2570
|
[subType, params] = this.handleSubTypeAndParams('fetchBalance', undefined, params);
|
|
2571
|
-
|
|
2572
|
-
let
|
|
2571
|
+
let marginMode = undefined;
|
|
2572
|
+
let query = undefined;
|
|
2573
|
+
[marginMode, query] = this.handleMarginModeAndParams('fetchBalance', params);
|
|
2574
|
+
query = this.omit(query, 'type');
|
|
2575
|
+
let response = undefined;
|
|
2573
2576
|
const request = {};
|
|
2574
2577
|
if (this.isLinear(type, subType)) {
|
|
2575
|
-
const options = this.safeValue(this.options, type, {});
|
|
2576
|
-
const fetchBalanceOptions = this.safeValue(options, 'fetchBalance', {});
|
|
2577
|
-
method = this.safeString(fetchBalanceOptions, 'method', 'fapiPrivateV2GetAccount');
|
|
2578
2578
|
type = 'linear';
|
|
2579
|
+
response = await this.fapiPrivateV2GetAccount(this.extend(request, query));
|
|
2579
2580
|
}
|
|
2580
2581
|
else if (this.isInverse(type, subType)) {
|
|
2581
|
-
const options = this.safeValue(this.options, type, {});
|
|
2582
|
-
const fetchBalanceOptions = this.safeValue(options, 'fetchBalance', {});
|
|
2583
|
-
method = this.safeString(fetchBalanceOptions, 'method', 'dapiPrivateGetAccount');
|
|
2584
2582
|
type = 'inverse';
|
|
2583
|
+
response = await this.dapiPrivateGetAccount(this.extend(request, query));
|
|
2585
2584
|
}
|
|
2586
2585
|
else if (marginMode === 'isolated') {
|
|
2587
|
-
method = 'sapiGetMarginIsolatedAccount';
|
|
2588
2586
|
const paramSymbols = this.safeValue(params, 'symbols');
|
|
2587
|
+
query = this.omit(query, 'symbols');
|
|
2589
2588
|
if (paramSymbols !== undefined) {
|
|
2590
2589
|
let symbols = '';
|
|
2591
2590
|
if (Array.isArray(paramSymbols)) {
|
|
@@ -2601,18 +2600,20 @@ export default class binance extends Exchange {
|
|
|
2601
2600
|
}
|
|
2602
2601
|
request['symbols'] = symbols;
|
|
2603
2602
|
}
|
|
2603
|
+
response = await this.sapiGetMarginIsolatedAccount(this.extend(request, query));
|
|
2604
2604
|
}
|
|
2605
2605
|
else if ((type === 'margin') || (marginMode === 'cross')) {
|
|
2606
|
-
|
|
2606
|
+
response = await this.sapiGetMarginAccount(this.extend(request, query));
|
|
2607
2607
|
}
|
|
2608
2608
|
else if (type === 'savings') {
|
|
2609
|
-
|
|
2609
|
+
response = await this.sapiGetLendingUnionAccount(this.extend(request, query));
|
|
2610
2610
|
}
|
|
2611
2611
|
else if (type === 'funding') {
|
|
2612
|
-
|
|
2612
|
+
response = await this.sapiPostAssetGetFundingAsset(this.extend(request, query));
|
|
2613
|
+
}
|
|
2614
|
+
else {
|
|
2615
|
+
response = await this.privateGetAccount(this.extend(request, query));
|
|
2613
2616
|
}
|
|
2614
|
-
const requestParams = this.omit(query, ['type', 'symbols']);
|
|
2615
|
-
const response = await this[method](this.extend(request, requestParams));
|
|
2616
2617
|
//
|
|
2617
2618
|
// spot
|
|
2618
2619
|
//
|
|
@@ -3304,33 +3305,35 @@ export default class binance extends Exchange {
|
|
|
3304
3305
|
if (until !== undefined) {
|
|
3305
3306
|
request['endTime'] = until;
|
|
3306
3307
|
}
|
|
3307
|
-
let
|
|
3308
|
+
let response = undefined;
|
|
3308
3309
|
if (market['option']) {
|
|
3309
|
-
|
|
3310
|
+
response = await this.eapiPublicGetKlines(this.extend(request, params));
|
|
3310
3311
|
}
|
|
3311
3312
|
else if (price === 'mark') {
|
|
3312
3313
|
if (market['inverse']) {
|
|
3313
|
-
|
|
3314
|
+
response = await this.dapiPublicGetMarkPriceKlines(this.extend(request, params));
|
|
3314
3315
|
}
|
|
3315
3316
|
else {
|
|
3316
|
-
|
|
3317
|
+
response = await this.fapiPublicGetMarkPriceKlines(this.extend(request, params));
|
|
3317
3318
|
}
|
|
3318
3319
|
}
|
|
3319
3320
|
else if (price === 'index') {
|
|
3320
3321
|
if (market['inverse']) {
|
|
3321
|
-
|
|
3322
|
+
response = await this.dapiPublicGetIndexPriceKlines(this.extend(request, params));
|
|
3322
3323
|
}
|
|
3323
3324
|
else {
|
|
3324
|
-
|
|
3325
|
+
response = await this.fapiPublicGetIndexPriceKlines(this.extend(request, params));
|
|
3325
3326
|
}
|
|
3326
3327
|
}
|
|
3327
3328
|
else if (market['linear']) {
|
|
3328
|
-
|
|
3329
|
+
response = await this.fapiPublicGetKlines(this.extend(request, params));
|
|
3329
3330
|
}
|
|
3330
3331
|
else if (market['inverse']) {
|
|
3331
|
-
|
|
3332
|
+
response = await this.dapiPublicGetKlines(this.extend(request, params));
|
|
3333
|
+
}
|
|
3334
|
+
else {
|
|
3335
|
+
response = await this.publicGetKlines(this.extend(request, params));
|
|
3332
3336
|
}
|
|
3333
|
-
const response = await this[method](this.extend(request, params));
|
|
3334
3337
|
//
|
|
3335
3338
|
// [
|
|
3336
3339
|
// [1591478520000,"0.02501300","0.02501800","0.02500000","0.02500000","22.19000000",1591478579999,"0.55490906",40,"10.92900000","0.27336462","0"],
|
|
@@ -4746,22 +4749,6 @@ export default class binance extends Exchange {
|
|
|
4746
4749
|
const request = {
|
|
4747
4750
|
'symbol': market['id'],
|
|
4748
4751
|
};
|
|
4749
|
-
let method = 'privateGetOrder';
|
|
4750
|
-
if (market['option']) {
|
|
4751
|
-
method = 'eapiPrivateGetOrder';
|
|
4752
|
-
}
|
|
4753
|
-
else if (market['linear']) {
|
|
4754
|
-
method = 'fapiPrivateGetOrder';
|
|
4755
|
-
}
|
|
4756
|
-
else if (market['inverse']) {
|
|
4757
|
-
method = 'dapiPrivateGetOrder';
|
|
4758
|
-
}
|
|
4759
|
-
else if (type === 'margin' || marginMode !== undefined) {
|
|
4760
|
-
method = 'sapiGetMarginOrder';
|
|
4761
|
-
if (marginMode === 'isolated') {
|
|
4762
|
-
request['isIsolated'] = true;
|
|
4763
|
-
}
|
|
4764
|
-
}
|
|
4765
4752
|
const clientOrderId = this.safeValue2(params, 'origClientOrderId', 'clientOrderId');
|
|
4766
4753
|
if (clientOrderId !== undefined) {
|
|
4767
4754
|
if (market['option']) {
|
|
@@ -4775,7 +4762,25 @@ export default class binance extends Exchange {
|
|
|
4775
4762
|
request['orderId'] = id;
|
|
4776
4763
|
}
|
|
4777
4764
|
const requestParams = this.omit(query, ['type', 'clientOrderId', 'origClientOrderId']);
|
|
4778
|
-
|
|
4765
|
+
let response = undefined;
|
|
4766
|
+
if (market['option']) {
|
|
4767
|
+
response = await this.eapiPrivateGetOrder(this.extend(request, requestParams));
|
|
4768
|
+
}
|
|
4769
|
+
else if (market['linear']) {
|
|
4770
|
+
response = await this.fapiPrivateGetOrder(this.extend(request, requestParams));
|
|
4771
|
+
}
|
|
4772
|
+
else if (market['inverse']) {
|
|
4773
|
+
response = await this.dapiPrivateGetOrder(this.extend(request, requestParams));
|
|
4774
|
+
}
|
|
4775
|
+
else if (type === 'margin' || marginMode !== undefined) {
|
|
4776
|
+
if (marginMode === 'isolated') {
|
|
4777
|
+
request['isIsolated'] = true;
|
|
4778
|
+
}
|
|
4779
|
+
response = await this.sapiGetMarginOrder(this.extend(request, requestParams));
|
|
4780
|
+
}
|
|
4781
|
+
else {
|
|
4782
|
+
response = await this.privateGetOrder(this.extend(request, requestParams));
|
|
4783
|
+
}
|
|
4779
4784
|
return this.parseOrder(response, market);
|
|
4780
4785
|
}
|
|
4781
4786
|
async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
@@ -4813,34 +4818,36 @@ export default class binance extends Exchange {
|
|
|
4813
4818
|
const request = {
|
|
4814
4819
|
'symbol': market['id'],
|
|
4815
4820
|
};
|
|
4816
|
-
|
|
4821
|
+
const until = this.safeInteger(params, 'until');
|
|
4822
|
+
if (until !== undefined) {
|
|
4823
|
+
params = this.omit(params, 'until');
|
|
4824
|
+
request['endTime'] = until;
|
|
4825
|
+
}
|
|
4826
|
+
if (since !== undefined) {
|
|
4827
|
+
request['startTime'] = since;
|
|
4828
|
+
}
|
|
4829
|
+
if (limit !== undefined) {
|
|
4830
|
+
request['limit'] = limit;
|
|
4831
|
+
}
|
|
4832
|
+
let response = undefined;
|
|
4817
4833
|
if (market['option']) {
|
|
4818
|
-
|
|
4834
|
+
response = await this.eapiPrivateGetHistoryOrders(this.extend(request, query));
|
|
4819
4835
|
}
|
|
4820
4836
|
else if (market['linear']) {
|
|
4821
|
-
|
|
4837
|
+
response = await this.fapiPrivateGetAllOrders(this.extend(request, query));
|
|
4822
4838
|
}
|
|
4823
4839
|
else if (market['inverse']) {
|
|
4824
|
-
|
|
4840
|
+
response = await this.dapiPrivateGetAllOrders(this.extend(request, query));
|
|
4825
4841
|
}
|
|
4826
4842
|
else if (type === 'margin' || marginMode !== undefined) {
|
|
4827
|
-
method = 'sapiGetMarginAllOrders';
|
|
4828
4843
|
if (marginMode === 'isolated') {
|
|
4829
4844
|
request['isIsolated'] = true;
|
|
4830
4845
|
}
|
|
4846
|
+
response = await this.sapiGetMarginAllOrders(this.extend(request, query));
|
|
4831
4847
|
}
|
|
4832
|
-
|
|
4833
|
-
|
|
4834
|
-
params = this.omit(params, 'until');
|
|
4835
|
-
request['endTime'] = until;
|
|
4836
|
-
}
|
|
4837
|
-
if (since !== undefined) {
|
|
4838
|
-
request['startTime'] = since;
|
|
4839
|
-
}
|
|
4840
|
-
if (limit !== undefined) {
|
|
4841
|
-
request['limit'] = limit;
|
|
4848
|
+
else {
|
|
4849
|
+
response = await this.privateGetAllOrders(this.extend(request, query));
|
|
4842
4850
|
}
|
|
4843
|
-
const response = await this[method](this.extend(request, query));
|
|
4844
4851
|
//
|
|
4845
4852
|
// spot
|
|
4846
4853
|
//
|
|
@@ -4965,32 +4972,34 @@ export default class binance extends Exchange {
|
|
|
4965
4972
|
let subType = undefined;
|
|
4966
4973
|
[subType, query] = this.handleSubTypeAndParams('fetchOpenOrders', market, query);
|
|
4967
4974
|
const requestParams = this.omit(query, 'type');
|
|
4968
|
-
let
|
|
4975
|
+
let response = undefined;
|
|
4969
4976
|
if (type === 'option') {
|
|
4970
|
-
method = 'eapiPrivateGetOpenOrders';
|
|
4971
4977
|
if (since !== undefined) {
|
|
4972
4978
|
request['startTime'] = since;
|
|
4973
4979
|
}
|
|
4974
4980
|
if (limit !== undefined) {
|
|
4975
4981
|
request['limit'] = limit;
|
|
4976
4982
|
}
|
|
4983
|
+
response = await this.eapiPrivateGetOpenOrders(this.extend(request, requestParams));
|
|
4977
4984
|
}
|
|
4978
4985
|
else if (this.isLinear(type, subType)) {
|
|
4979
|
-
|
|
4986
|
+
response = await this.fapiPrivateGetOpenOrders(this.extend(request, requestParams));
|
|
4980
4987
|
}
|
|
4981
4988
|
else if (this.isInverse(type, subType)) {
|
|
4982
|
-
|
|
4989
|
+
response = await this.dapiPrivateGetOpenOrders(this.extend(request, requestParams));
|
|
4983
4990
|
}
|
|
4984
4991
|
else if (type === 'margin' || marginMode !== undefined) {
|
|
4985
|
-
method = 'sapiGetMarginOpenOrders';
|
|
4986
4992
|
if (marginMode === 'isolated') {
|
|
4987
4993
|
request['isIsolated'] = true;
|
|
4988
4994
|
if (symbol === undefined) {
|
|
4989
4995
|
throw new ArgumentsRequired(this.id + ' fetchOpenOrders() requires a symbol argument for isolated markets');
|
|
4990
4996
|
}
|
|
4991
4997
|
}
|
|
4998
|
+
response = await this.sapiGetMarginOpenOrders(this.extend(request, requestParams));
|
|
4999
|
+
}
|
|
5000
|
+
else {
|
|
5001
|
+
response = await this.privateGetOpenOrders(this.extend(request, requestParams));
|
|
4992
5002
|
}
|
|
4993
|
-
const response = await this[method](this.extend(request, requestParams));
|
|
4994
5003
|
return this.parseOrders(response, market, since, limit);
|
|
4995
5004
|
}
|
|
4996
5005
|
async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
@@ -5081,24 +5090,26 @@ export default class binance extends Exchange {
|
|
|
5081
5090
|
else {
|
|
5082
5091
|
request['orderId'] = id;
|
|
5083
5092
|
}
|
|
5084
|
-
|
|
5093
|
+
const requestParams = this.omit(query, ['type', 'origClientOrderId', 'clientOrderId']);
|
|
5094
|
+
let response = undefined;
|
|
5085
5095
|
if (market['option']) {
|
|
5086
|
-
|
|
5096
|
+
response = await this.eapiPrivateDeleteOrder(this.extend(request, requestParams));
|
|
5087
5097
|
}
|
|
5088
5098
|
else if (market['linear']) {
|
|
5089
|
-
|
|
5099
|
+
response = await this.fapiPrivateDeleteOrder(this.extend(request, requestParams));
|
|
5090
5100
|
}
|
|
5091
5101
|
else if (market['inverse']) {
|
|
5092
|
-
|
|
5102
|
+
response = await this.dapiPrivateDeleteOrder(this.extend(request, requestParams));
|
|
5093
5103
|
}
|
|
5094
5104
|
else if (type === 'margin' || marginMode !== undefined) {
|
|
5095
|
-
method = 'sapiDeleteMarginOrder';
|
|
5096
5105
|
if (marginMode === 'isolated') {
|
|
5097
5106
|
request['isIsolated'] = true;
|
|
5098
5107
|
}
|
|
5108
|
+
response = await this.sapiDeleteMarginOrder(this.extend(request, requestParams));
|
|
5109
|
+
}
|
|
5110
|
+
else {
|
|
5111
|
+
response = await this.privateDeleteOrder(this.extend(request, requestParams));
|
|
5099
5112
|
}
|
|
5100
|
-
const requestParams = this.omit(query, ['type', 'origClientOrderId', 'clientOrderId']);
|
|
5101
|
-
const response = await this[method](this.extend(request, requestParams));
|
|
5102
5113
|
return this.parseOrder(response, market);
|
|
5103
5114
|
}
|
|
5104
5115
|
async cancelAllOrders(symbol = undefined, params = {}) {
|
|
@@ -5127,23 +5138,25 @@ export default class binance extends Exchange {
|
|
|
5127
5138
|
const type = this.safeString(params, 'type', market['type']);
|
|
5128
5139
|
params = this.omit(params, ['type']);
|
|
5129
5140
|
const [marginMode, query] = this.handleMarginModeAndParams('cancelAllOrders', params);
|
|
5130
|
-
let
|
|
5141
|
+
let response = undefined;
|
|
5131
5142
|
if (market['option']) {
|
|
5132
|
-
|
|
5143
|
+
response = await this.eapiPrivateDeleteAllOpenOrders(this.extend(request, query));
|
|
5133
5144
|
}
|
|
5134
5145
|
else if (market['linear']) {
|
|
5135
|
-
|
|
5146
|
+
response = await this.fapiPrivateDeleteAllOpenOrders(this.extend(request, query));
|
|
5136
5147
|
}
|
|
5137
5148
|
else if (market['inverse']) {
|
|
5138
|
-
|
|
5149
|
+
response = await this.dapiPrivateDeleteAllOpenOrders(this.extend(request, query));
|
|
5139
5150
|
}
|
|
5140
5151
|
else if ((type === 'margin') || (marginMode !== undefined)) {
|
|
5141
|
-
method = 'sapiDeleteMarginOpenOrders';
|
|
5142
5152
|
if (marginMode === 'isolated') {
|
|
5143
5153
|
request['isIsolated'] = true;
|
|
5144
5154
|
}
|
|
5155
|
+
response = await this.sapiDeleteMarginOpenOrders(this.extend(request, query));
|
|
5156
|
+
}
|
|
5157
|
+
else {
|
|
5158
|
+
response = await this.privateDeleteOpenOrders(this.extend(request, query));
|
|
5145
5159
|
}
|
|
5146
|
-
const response = await this[method](this.extend(request, query));
|
|
5147
5160
|
if (Array.isArray(response)) {
|
|
5148
5161
|
return this.parseOrders(response, market);
|
|
5149
5162
|
}
|
|
@@ -5280,37 +5293,12 @@ export default class binance extends Exchange {
|
|
|
5280
5293
|
const request = {};
|
|
5281
5294
|
let market = undefined;
|
|
5282
5295
|
let type = undefined;
|
|
5283
|
-
let method = undefined;
|
|
5284
5296
|
let marginMode = undefined;
|
|
5285
5297
|
if (symbol !== undefined) {
|
|
5286
5298
|
market = this.market(symbol);
|
|
5287
5299
|
request['symbol'] = market['id'];
|
|
5288
5300
|
}
|
|
5289
5301
|
[type, params] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);
|
|
5290
|
-
if (type === 'option') {
|
|
5291
|
-
method = 'eapiPrivateGetUserTrades';
|
|
5292
|
-
}
|
|
5293
|
-
else {
|
|
5294
|
-
if (symbol === undefined) {
|
|
5295
|
-
throw new ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
|
|
5296
|
-
}
|
|
5297
|
-
[marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);
|
|
5298
|
-
if (type === 'spot' || type === 'margin') {
|
|
5299
|
-
method = 'privateGetMyTrades';
|
|
5300
|
-
if ((type === 'margin') || (marginMode !== undefined)) {
|
|
5301
|
-
method = 'sapiGetMarginMyTrades';
|
|
5302
|
-
if (marginMode === 'isolated') {
|
|
5303
|
-
request['isIsolated'] = true;
|
|
5304
|
-
}
|
|
5305
|
-
}
|
|
5306
|
-
}
|
|
5307
|
-
else if (market['linear']) {
|
|
5308
|
-
method = 'fapiPrivateGetUserTrades';
|
|
5309
|
-
}
|
|
5310
|
-
else if (market['inverse']) {
|
|
5311
|
-
method = 'dapiPrivateGetUserTrades';
|
|
5312
|
-
}
|
|
5313
|
-
}
|
|
5314
5302
|
let endTime = this.safeInteger2(params, 'until', 'endTime');
|
|
5315
5303
|
if (since !== undefined) {
|
|
5316
5304
|
const startTime = since;
|
|
@@ -5338,7 +5326,33 @@ export default class binance extends Exchange {
|
|
|
5338
5326
|
}
|
|
5339
5327
|
request['limit'] = limit;
|
|
5340
5328
|
}
|
|
5341
|
-
|
|
5329
|
+
let response = undefined;
|
|
5330
|
+
if (type === 'option') {
|
|
5331
|
+
response = await this.eapiPrivateGetUserTrades(this.extend(request, params));
|
|
5332
|
+
}
|
|
5333
|
+
else {
|
|
5334
|
+
if (symbol === undefined) {
|
|
5335
|
+
throw new ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
|
|
5336
|
+
}
|
|
5337
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);
|
|
5338
|
+
if (type === 'spot' || type === 'margin') {
|
|
5339
|
+
if ((type === 'margin') || (marginMode !== undefined)) {
|
|
5340
|
+
if (marginMode === 'isolated') {
|
|
5341
|
+
request['isIsolated'] = true;
|
|
5342
|
+
}
|
|
5343
|
+
response = await this.sapiGetMarginMyTrades(this.extend(request, params));
|
|
5344
|
+
}
|
|
5345
|
+
else {
|
|
5346
|
+
response = await this.privateGetMyTrades(this.extend(request, params));
|
|
5347
|
+
}
|
|
5348
|
+
}
|
|
5349
|
+
else if (market['linear']) {
|
|
5350
|
+
response = await this.fapiPrivateGetUserTrades(this.extend(request, params));
|
|
5351
|
+
}
|
|
5352
|
+
else if (market['inverse']) {
|
|
5353
|
+
response = await this.dapiPrivateGetUserTrades(this.extend(request, params));
|
|
5354
|
+
}
|
|
5355
|
+
}
|
|
5342
5356
|
//
|
|
5343
5357
|
// spot trade
|
|
5344
5358
|
//
|
|
@@ -6668,7 +6682,6 @@ export default class binance extends Exchange {
|
|
|
6668
6682
|
* @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
|
|
6669
6683
|
*/
|
|
6670
6684
|
await this.loadMarkets();
|
|
6671
|
-
let method = undefined;
|
|
6672
6685
|
let type = undefined;
|
|
6673
6686
|
[type, params] = this.handleMarketTypeAndParams('fetchTradingFees', undefined, params);
|
|
6674
6687
|
let subType = undefined;
|
|
@@ -6676,16 +6689,16 @@ export default class binance extends Exchange {
|
|
|
6676
6689
|
const isSpotOrMargin = (type === 'spot') || (type === 'margin');
|
|
6677
6690
|
const isLinear = this.isLinear(type, subType);
|
|
6678
6691
|
const isInverse = this.isInverse(type, subType);
|
|
6692
|
+
let response = undefined;
|
|
6679
6693
|
if (isSpotOrMargin) {
|
|
6680
|
-
|
|
6694
|
+
response = await this.sapiGetAssetTradeFee(params);
|
|
6681
6695
|
}
|
|
6682
6696
|
else if (isLinear) {
|
|
6683
|
-
|
|
6697
|
+
response = await this.fapiPrivateV2GetAccount(params);
|
|
6684
6698
|
}
|
|
6685
6699
|
else if (isInverse) {
|
|
6686
|
-
|
|
6700
|
+
response = await this.dapiPrivateGetAccount(params);
|
|
6687
6701
|
}
|
|
6688
|
-
const response = await this[method](params);
|
|
6689
6702
|
//
|
|
6690
6703
|
// sapi / spot
|
|
6691
6704
|
//
|
|
@@ -6883,17 +6896,16 @@ export default class binance extends Exchange {
|
|
|
6883
6896
|
const request = {
|
|
6884
6897
|
'symbol': market['id'],
|
|
6885
6898
|
};
|
|
6886
|
-
let
|
|
6899
|
+
let response = undefined;
|
|
6887
6900
|
if (market['linear']) {
|
|
6888
|
-
|
|
6901
|
+
response = await this.fapiPublicGetPremiumIndex(this.extend(request, params));
|
|
6889
6902
|
}
|
|
6890
6903
|
else if (market['inverse']) {
|
|
6891
|
-
|
|
6904
|
+
response = await this.dapiPublicGetPremiumIndex(this.extend(request, params));
|
|
6892
6905
|
}
|
|
6893
6906
|
else {
|
|
6894
6907
|
throw new NotSupported(this.id + ' fetchFundingRate() supports linear and inverse contracts only');
|
|
6895
6908
|
}
|
|
6896
|
-
let response = await this[method](this.extend(request, params));
|
|
6897
6909
|
if (market['inverse']) {
|
|
6898
6910
|
response = response[0];
|
|
6899
6911
|
}
|
|
@@ -7531,20 +7543,20 @@ export default class binance extends Exchange {
|
|
|
7531
7543
|
* @returns {object} a dictionary of [leverage tiers structures]{@link https://docs.ccxt.com/#/?id=leverage-tiers-structure}, indexed by market symbols
|
|
7532
7544
|
*/
|
|
7533
7545
|
await this.loadMarkets();
|
|
7534
|
-
|
|
7546
|
+
let type = undefined;
|
|
7547
|
+
[type, params] = this.handleMarketTypeAndParams('fetchLeverageTiers', undefined, params);
|
|
7535
7548
|
let subType = undefined;
|
|
7536
|
-
[subType, params] = this.handleSubTypeAndParams('fetchLeverageTiers', undefined,
|
|
7537
|
-
let
|
|
7549
|
+
[subType, params] = this.handleSubTypeAndParams('fetchLeverageTiers', undefined, params, 'linear');
|
|
7550
|
+
let response = undefined;
|
|
7538
7551
|
if (this.isLinear(type, subType)) {
|
|
7539
|
-
|
|
7552
|
+
response = await this.fapiPrivateGetLeverageBracket(params);
|
|
7540
7553
|
}
|
|
7541
7554
|
else if (this.isInverse(type, subType)) {
|
|
7542
|
-
|
|
7555
|
+
response = await this.dapiPrivateV2GetLeverageBracket(params);
|
|
7543
7556
|
}
|
|
7544
7557
|
else {
|
|
7545
7558
|
throw new NotSupported(this.id + ' fetchLeverageTiers() supports linear and inverse contracts only');
|
|
7546
7559
|
}
|
|
7547
|
-
const response = await this[method](query);
|
|
7548
7560
|
//
|
|
7549
7561
|
// usdm
|
|
7550
7562
|
//
|
|
@@ -8018,21 +8030,21 @@ export default class binance extends Exchange {
|
|
|
8018
8030
|
}
|
|
8019
8031
|
await this.loadMarkets();
|
|
8020
8032
|
const market = this.market(symbol);
|
|
8021
|
-
|
|
8033
|
+
const request = {
|
|
8034
|
+
'symbol': market['id'],
|
|
8035
|
+
'leverage': leverage,
|
|
8036
|
+
};
|
|
8037
|
+
let response = undefined;
|
|
8022
8038
|
if (market['linear']) {
|
|
8023
|
-
|
|
8039
|
+
response = await this.fapiPrivatePostLeverage(this.extend(request, params));
|
|
8024
8040
|
}
|
|
8025
8041
|
else if (market['inverse']) {
|
|
8026
|
-
|
|
8042
|
+
response = await this.dapiPrivatePostLeverage(this.extend(request, params));
|
|
8027
8043
|
}
|
|
8028
8044
|
else {
|
|
8029
8045
|
throw new NotSupported(this.id + ' setLeverage() supports linear and inverse contracts only');
|
|
8030
8046
|
}
|
|
8031
|
-
|
|
8032
|
-
'symbol': market['id'],
|
|
8033
|
-
'leverage': leverage,
|
|
8034
|
-
};
|
|
8035
|
-
return await this[method](this.extend(request, params));
|
|
8047
|
+
return response;
|
|
8036
8048
|
}
|
|
8037
8049
|
async setMarginMode(marginMode, symbol = undefined, params = {}) {
|
|
8038
8050
|
/**
|
|
@@ -8065,23 +8077,21 @@ export default class binance extends Exchange {
|
|
|
8065
8077
|
}
|
|
8066
8078
|
await this.loadMarkets();
|
|
8067
8079
|
const market = this.market(symbol);
|
|
8068
|
-
let method = undefined;
|
|
8069
|
-
if (market['linear']) {
|
|
8070
|
-
method = 'fapiPrivatePostMarginType';
|
|
8071
|
-
}
|
|
8072
|
-
else if (market['inverse']) {
|
|
8073
|
-
method = 'dapiPrivatePostMarginType';
|
|
8074
|
-
}
|
|
8075
|
-
else {
|
|
8076
|
-
throw new NotSupported(this.id + ' setMarginMode() supports linear and inverse contracts only');
|
|
8077
|
-
}
|
|
8078
8080
|
const request = {
|
|
8079
8081
|
'symbol': market['id'],
|
|
8080
8082
|
'marginType': marginMode,
|
|
8081
8083
|
};
|
|
8082
8084
|
let response = undefined;
|
|
8083
8085
|
try {
|
|
8084
|
-
|
|
8086
|
+
if (market['linear']) {
|
|
8087
|
+
response = await this.fapiPrivatePostMarginType(this.extend(request, params));
|
|
8088
|
+
}
|
|
8089
|
+
else if (market['inverse']) {
|
|
8090
|
+
response = await this.dapiPrivatePostMarginType(this.extend(request, params));
|
|
8091
|
+
}
|
|
8092
|
+
else {
|
|
8093
|
+
throw new NotSupported(this.id + ' setMarginMode() supports linear and inverse contracts only');
|
|
8094
|
+
}
|
|
8085
8095
|
}
|
|
8086
8096
|
catch (e) {
|
|
8087
8097
|
// not an error
|
package/js/src/bingx.js
CHANGED
|
@@ -331,6 +331,7 @@ export default class bingx extends Exchange {
|
|
|
331
331
|
'100202': InsufficientFunds,
|
|
332
332
|
'100204': BadRequest,
|
|
333
333
|
'100400': BadRequest,
|
|
334
|
+
'100421': BadSymbol,
|
|
334
335
|
'100440': ExchangeError,
|
|
335
336
|
'100500': ExchangeError,
|
|
336
337
|
'100503': ExchangeError,
|
|
@@ -1306,7 +1307,7 @@ export default class bingx extends Exchange {
|
|
|
1306
1307
|
// }
|
|
1307
1308
|
//
|
|
1308
1309
|
const marketId = this.safeString(ticker, 'symbol');
|
|
1309
|
-
const change = this.safeString(ticker, 'priceChange');
|
|
1310
|
+
// const change = this.safeString (ticker, 'priceChange'); // this is not ccxt's change because it does high-low instead of last-open
|
|
1310
1311
|
const lastQty = this.safeString(ticker, 'lastQty');
|
|
1311
1312
|
// in spot markets, lastQty is not present
|
|
1312
1313
|
// it's (bad, but) the only way we can check the tickers origin
|
|
@@ -1318,10 +1319,10 @@ export default class bingx extends Exchange {
|
|
|
1318
1319
|
const close = this.safeString(ticker, 'lastPrice');
|
|
1319
1320
|
const quoteVolume = this.safeString(ticker, 'quoteVolume');
|
|
1320
1321
|
const baseVolume = this.safeString(ticker, 'volume');
|
|
1321
|
-
let percentage = this.safeString(ticker, 'priceChangePercent');
|
|
1322
|
-
if (percentage !== undefined) {
|
|
1323
|
-
|
|
1324
|
-
}
|
|
1322
|
+
// let percentage = this.safeString (ticker, 'priceChangePercent');
|
|
1323
|
+
// if (percentage !== undefined) {
|
|
1324
|
+
// percentage = percentage.replace ('%', '');
|
|
1325
|
+
// } similarly to change, it's not ccxt's percentage because it does priceChange/open, and priceChange is high-low
|
|
1325
1326
|
const ts = this.safeInteger(ticker, 'closeTime');
|
|
1326
1327
|
const datetime = this.iso8601(ts);
|
|
1327
1328
|
const bid = this.safeString(ticker, 'bidPrice');
|
|
@@ -1343,8 +1344,8 @@ export default class bingx extends Exchange {
|
|
|
1343
1344
|
'close': close,
|
|
1344
1345
|
'last': undefined,
|
|
1345
1346
|
'previousClose': undefined,
|
|
1346
|
-
'change':
|
|
1347
|
-
'percentage':
|
|
1347
|
+
'change': undefined,
|
|
1348
|
+
'percentage': undefined,
|
|
1348
1349
|
'average': undefined,
|
|
1349
1350
|
'baseVolume': baseVolume,
|
|
1350
1351
|
'quoteVolume': quoteVolume,
|
package/js/src/bit2c.js
CHANGED
|
@@ -279,14 +279,13 @@ export default class bit2c extends Exchange {
|
|
|
279
279
|
}
|
|
280
280
|
parseTicker(ticker, market = undefined) {
|
|
281
281
|
const symbol = this.safeSymbol(undefined, market);
|
|
282
|
-
const timestamp = this.milliseconds();
|
|
283
282
|
const averagePrice = this.safeString(ticker, 'av');
|
|
284
283
|
const baseVolume = this.safeString(ticker, 'a');
|
|
285
284
|
const last = this.safeString(ticker, 'll');
|
|
286
285
|
return this.safeTicker({
|
|
287
286
|
'symbol': symbol,
|
|
288
|
-
'timestamp':
|
|
289
|
-
'datetime':
|
|
287
|
+
'timestamp': undefined,
|
|
288
|
+
'datetime': undefined,
|
|
290
289
|
'high': undefined,
|
|
291
290
|
'low': undefined,
|
|
292
291
|
'bid': this.safeString(ticker, 'h'),
|
package/js/src/bitfinex2.js
CHANGED
|
@@ -1066,15 +1066,14 @@ export default class bitfinex2 extends Exchange {
|
|
|
1066
1066
|
// FRR_AMOUNT_AVAILABLE
|
|
1067
1067
|
// ]
|
|
1068
1068
|
//
|
|
1069
|
-
const timestamp = this.milliseconds();
|
|
1070
1069
|
const symbol = this.safeSymbol(undefined, market);
|
|
1071
1070
|
const length = ticker.length;
|
|
1072
1071
|
const last = this.safeString(ticker, length - 4);
|
|
1073
1072
|
const percentage = this.safeString(ticker, length - 5);
|
|
1074
1073
|
return this.safeTicker({
|
|
1075
1074
|
'symbol': symbol,
|
|
1076
|
-
'timestamp':
|
|
1077
|
-
'datetime':
|
|
1075
|
+
'timestamp': undefined,
|
|
1076
|
+
'datetime': undefined,
|
|
1078
1077
|
'high': this.safeString(ticker, length - 2),
|
|
1079
1078
|
'low': this.safeString(ticker, length - 1),
|
|
1080
1079
|
'bid': this.safeString(ticker, length - 10),
|
package/js/src/bitmart.js
CHANGED
|
@@ -1080,7 +1080,7 @@ export default class bitmart extends Exchange {
|
|
|
1080
1080
|
// "legal_coin_price":"0.1302699"
|
|
1081
1081
|
// }
|
|
1082
1082
|
//
|
|
1083
|
-
const timestamp = this.safeInteger(ticker, 'timestamp'
|
|
1083
|
+
const timestamp = this.safeInteger(ticker, 'timestamp');
|
|
1084
1084
|
const marketId = this.safeString2(ticker, 'symbol', 'contract_symbol');
|
|
1085
1085
|
market = this.safeMarket(marketId, market);
|
|
1086
1086
|
const symbol = market['symbol'];
|
package/js/src/btcbox.js
CHANGED
|
@@ -177,13 +177,12 @@ export default class btcbox extends Exchange {
|
|
|
177
177
|
return this.parseOrderBook(response, market['symbol']);
|
|
178
178
|
}
|
|
179
179
|
parseTicker(ticker, market = undefined) {
|
|
180
|
-
const timestamp = this.milliseconds();
|
|
181
180
|
const symbol = this.safeSymbol(undefined, market);
|
|
182
181
|
const last = this.safeString(ticker, 'last');
|
|
183
182
|
return this.safeTicker({
|
|
184
183
|
'symbol': symbol,
|
|
185
|
-
'timestamp':
|
|
186
|
-
'datetime':
|
|
184
|
+
'timestamp': undefined,
|
|
185
|
+
'datetime': undefined,
|
|
187
186
|
'high': this.safeString(ticker, 'high'),
|
|
188
187
|
'low': this.safeString(ticker, 'low'),
|
|
189
188
|
'bid': this.safeString(ticker, 'buy'),
|
package/js/src/coinbase.js
CHANGED
|
@@ -2366,6 +2366,12 @@ export default class coinbase extends Exchange {
|
|
|
2366
2366
|
// "base_size": "0.2",
|
|
2367
2367
|
// "limit_price": "0.006",
|
|
2368
2368
|
// "post_only": false
|
|
2369
|
+
// },
|
|
2370
|
+
// "stop_limit_stop_limit_gtc": {
|
|
2371
|
+
// "base_size": "48.54",
|
|
2372
|
+
// "limit_price": "6.998",
|
|
2373
|
+
// "stop_price": "7.0687",
|
|
2374
|
+
// "stop_direction": "STOP_DIRECTION_STOP_DOWN"
|
|
2369
2375
|
// }
|
|
2370
2376
|
// },
|
|
2371
2377
|
// "side": "SELL",
|
|
@@ -2399,11 +2405,11 @@ export default class coinbase extends Exchange {
|
|
|
2399
2405
|
market = this.market(symbol);
|
|
2400
2406
|
}
|
|
2401
2407
|
const orderConfiguration = this.safeValue(order, 'order_configuration', {});
|
|
2402
|
-
const limitGTC = this.safeValue(orderConfiguration, 'limit_limit_gtc'
|
|
2403
|
-
const limitGTD = this.safeValue(orderConfiguration, 'limit_limit_gtd'
|
|
2404
|
-
const stopLimitGTC = this.safeValue(orderConfiguration, 'stop_limit_stop_limit_gtc'
|
|
2405
|
-
const stopLimitGTD = this.safeValue(orderConfiguration, 'stop_limit_stop_limit_gtd'
|
|
2406
|
-
const marketIOC = this.safeValue(orderConfiguration, 'market_market_ioc'
|
|
2408
|
+
const limitGTC = this.safeValue(orderConfiguration, 'limit_limit_gtc');
|
|
2409
|
+
const limitGTD = this.safeValue(orderConfiguration, 'limit_limit_gtd');
|
|
2410
|
+
const stopLimitGTC = this.safeValue(orderConfiguration, 'stop_limit_stop_limit_gtc');
|
|
2411
|
+
const stopLimitGTD = this.safeValue(orderConfiguration, 'stop_limit_stop_limit_gtd');
|
|
2412
|
+
const marketIOC = this.safeValue(orderConfiguration, 'market_market_ioc');
|
|
2407
2413
|
const isLimit = ((limitGTC !== undefined) || (limitGTD !== undefined));
|
|
2408
2414
|
const isStop = ((stopLimitGTC !== undefined) || (stopLimitGTD !== undefined));
|
|
2409
2415
|
let price = undefined;
|