ccxt 4.1.13 → 4.1.14
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/CHANGELOG.md +219 -0
- package/CONTRIBUTING.md +1 -0
- package/README.md +3 -3
- package/dist/ccxt.browser.js +296 -106
- package/dist/ccxt.browser.min.js +3 -3
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/ascendex.js +1 -0
- package/dist/cjs/src/binance.js +6 -2
- package/dist/cjs/src/bingx.js +4 -2
- package/dist/cjs/src/bitget.js +192 -1
- package/dist/cjs/src/bitmart.js +2 -0
- package/dist/cjs/src/bittrex.js +6 -0
- package/dist/cjs/src/cex.js +1 -0
- package/dist/cjs/src/coinbase.js +1 -0
- package/dist/cjs/src/coinbasepro.js +1 -0
- package/dist/cjs/src/coinex.js +2 -0
- package/dist/cjs/src/coinfalcon.js +1 -0
- package/dist/cjs/src/coinmate.js +1 -0
- package/dist/cjs/src/coinone.js +2 -1
- package/dist/cjs/src/cryptocom.js +25 -87
- package/dist/cjs/src/currencycom.js +1 -0
- package/dist/cjs/src/delta.js +1 -0
- package/dist/cjs/src/deribit.js +1 -0
- package/dist/cjs/src/digifinex.js +1 -0
- package/dist/cjs/src/exmo.js +1 -0
- package/dist/cjs/src/gate.js +3 -0
- package/dist/cjs/src/gemini.js +1 -0
- package/dist/cjs/src/hitbtc.js +1 -0
- package/dist/cjs/src/hollaex.js +1 -0
- package/dist/cjs/src/huobijp.js +1 -0
- package/dist/cjs/src/idex.js +1 -0
- package/dist/cjs/src/independentreserve.js +1 -0
- package/dist/cjs/src/indodax.js +1 -0
- package/dist/cjs/src/kraken.js +9 -0
- package/dist/cjs/src/krakenfutures.js +1 -0
- package/dist/cjs/src/latoken.js +1 -0
- package/dist/cjs/src/poloniex.js +1 -0
- package/dist/cjs/src/poloniexfutures.js +8 -2
- package/dist/cjs/src/pro/krakenfutures.js +14 -10
- package/dist/cjs/src/woo.js +1 -0
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/binance.d.ts +4 -0
- package/js/src/abstract/binancecoinm.d.ts +4 -0
- package/js/src/abstract/binanceus.d.ts +4 -0
- package/js/src/abstract/binanceusdm.d.ts +4 -0
- package/js/src/abstract/kraken.d.ts +8 -0
- package/js/src/abstract/poloniexfutures.d.ts +6 -1
- package/js/src/ascendex.js +1 -0
- package/js/src/binance.js +6 -2
- package/js/src/bingx.js +4 -2
- package/js/src/bitget.d.ts +28 -0
- package/js/src/bitget.js +192 -1
- package/js/src/bitmart.js +2 -0
- package/js/src/bittrex.d.ts +2 -2
- package/js/src/bittrex.js +6 -0
- package/js/src/cex.js +1 -0
- package/js/src/coinbase.js +1 -0
- package/js/src/coinbasepro.js +1 -0
- package/js/src/coinex.js +2 -0
- package/js/src/coinfalcon.js +1 -0
- package/js/src/coinmate.js +1 -0
- package/js/src/coinone.js +2 -1
- package/js/src/cryptocom.d.ts +0 -2
- package/js/src/cryptocom.js +25 -87
- package/js/src/currencycom.js +1 -0
- package/js/src/delta.js +1 -0
- package/js/src/deribit.js +1 -0
- package/js/src/digifinex.js +1 -0
- package/js/src/exmo.js +1 -0
- package/js/src/gate.d.ts +1 -0
- package/js/src/gate.js +3 -0
- package/js/src/gemini.d.ts +1 -0
- package/js/src/gemini.js +1 -0
- package/js/src/hitbtc.js +1 -0
- package/js/src/hollaex.js +1 -0
- package/js/src/huobijp.js +1 -0
- package/js/src/idex.js +1 -0
- package/js/src/independentreserve.js +1 -0
- package/js/src/indodax.js +1 -0
- package/js/src/kraken.js +9 -0
- package/js/src/krakenfutures.js +1 -0
- package/js/src/latoken.js +1 -0
- package/js/src/poloniex.js +1 -0
- package/js/src/poloniexfutures.js +8 -2
- package/js/src/pro/krakenfutures.js +14 -10
- package/js/src/woo.js +1 -0
- package/package.json +1 -1
- package/skip-tests.json +33 -7
package/js/src/bitget.js
CHANGED
|
@@ -28,11 +28,12 @@ export default class bitget extends Exchange {
|
|
|
28
28
|
'has': {
|
|
29
29
|
'CORS': undefined,
|
|
30
30
|
'spot': true,
|
|
31
|
-
'margin':
|
|
31
|
+
'margin': undefined,
|
|
32
32
|
'swap': true,
|
|
33
33
|
'future': true,
|
|
34
34
|
'option': false,
|
|
35
35
|
'addMargin': true,
|
|
36
|
+
'borrowMargin': true,
|
|
36
37
|
'cancelAllOrders': true,
|
|
37
38
|
'cancelOrder': true,
|
|
38
39
|
'cancelOrders': true,
|
|
@@ -91,6 +92,7 @@ export default class bitget extends Exchange {
|
|
|
91
92
|
'fetchWithdrawal': false,
|
|
92
93
|
'fetchWithdrawals': true,
|
|
93
94
|
'reduceMargin': true,
|
|
95
|
+
'repayMargin': true,
|
|
94
96
|
'setLeverage': true,
|
|
95
97
|
'setMarginMode': true,
|
|
96
98
|
'setPositionMode': true,
|
|
@@ -1295,6 +1297,7 @@ export default class bitget extends Exchange {
|
|
|
1295
1297
|
'max': undefined,
|
|
1296
1298
|
},
|
|
1297
1299
|
},
|
|
1300
|
+
'created': undefined,
|
|
1298
1301
|
'info': market,
|
|
1299
1302
|
};
|
|
1300
1303
|
}
|
|
@@ -5201,6 +5204,194 @@ export default class bitget extends Exchange {
|
|
|
5201
5204
|
'info': interest,
|
|
5202
5205
|
}, market);
|
|
5203
5206
|
}
|
|
5207
|
+
async borrowMargin(code, amount, symbol = undefined, params = {}) {
|
|
5208
|
+
/**
|
|
5209
|
+
* @method
|
|
5210
|
+
* @name bitget#borrowMargin
|
|
5211
|
+
* @description create a loan to borrow margin
|
|
5212
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#cross-borrow
|
|
5213
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#isolated-borrow
|
|
5214
|
+
* @param {string} code unified currency code of the currency to borrow
|
|
5215
|
+
* @param {string} amount the amount to borrow
|
|
5216
|
+
* @param {string} [symbol] unified market symbol
|
|
5217
|
+
* @param {object} [params] extra parameters specific to the bitget api endpoint
|
|
5218
|
+
* @param {string} [params.marginMode] 'isolated' or 'cross', symbol is required for 'isolated'
|
|
5219
|
+
* @returns {object} a [margin loan structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#margin-loan-structure}
|
|
5220
|
+
*/
|
|
5221
|
+
await this.loadMarkets();
|
|
5222
|
+
const currency = this.currency(code);
|
|
5223
|
+
const request = {
|
|
5224
|
+
'coin': currency['info']['coinName'],
|
|
5225
|
+
'borrowAmount': this.currencyToPrecision(code, amount),
|
|
5226
|
+
};
|
|
5227
|
+
let response = undefined;
|
|
5228
|
+
let marginMode = undefined;
|
|
5229
|
+
[marginMode, params] = this.handleMarginModeAndParams('borrowMargin', params);
|
|
5230
|
+
if ((symbol !== undefined) || (marginMode === 'isolated')) {
|
|
5231
|
+
this.checkRequiredSymbol('borrowMargin', symbol);
|
|
5232
|
+
const market = this.market(symbol);
|
|
5233
|
+
const marketId = market['id'];
|
|
5234
|
+
const parts = marketId.split('_');
|
|
5235
|
+
const marginMarketId = this.safeStringUpper(parts, 0);
|
|
5236
|
+
request['symbol'] = marginMarketId;
|
|
5237
|
+
response = await this.privateMarginPostIsolatedAccountBorrow(this.extend(request, params));
|
|
5238
|
+
}
|
|
5239
|
+
else {
|
|
5240
|
+
response = await this.privateMarginPostCrossAccountBorrow(this.extend(request, params));
|
|
5241
|
+
}
|
|
5242
|
+
//
|
|
5243
|
+
// isolated
|
|
5244
|
+
//
|
|
5245
|
+
// {
|
|
5246
|
+
// "code": "00000",
|
|
5247
|
+
// "msg": "success",
|
|
5248
|
+
// "requestTime": 1697250952516,
|
|
5249
|
+
// "data": {
|
|
5250
|
+
// "clientOid": null,
|
|
5251
|
+
// "symbol": "BTCUSDT",
|
|
5252
|
+
// "coin": "BTC",
|
|
5253
|
+
// "borrowAmount": "0.001"
|
|
5254
|
+
// }
|
|
5255
|
+
// }
|
|
5256
|
+
//
|
|
5257
|
+
// cross
|
|
5258
|
+
//
|
|
5259
|
+
// {
|
|
5260
|
+
// "code": "00000",
|
|
5261
|
+
// "msg": "success",
|
|
5262
|
+
// "requestTime": 1697251314271,
|
|
5263
|
+
// "data": {
|
|
5264
|
+
// "clientOid": null,
|
|
5265
|
+
// "coin": "BTC",
|
|
5266
|
+
// "borrowAmount": "0.0001"
|
|
5267
|
+
// }
|
|
5268
|
+
// }
|
|
5269
|
+
//
|
|
5270
|
+
const data = this.safeValue(response, 'data', {});
|
|
5271
|
+
return this.parseMarginLoan(data, currency);
|
|
5272
|
+
}
|
|
5273
|
+
async repayMargin(code, amount, symbol = undefined, params = {}) {
|
|
5274
|
+
/**
|
|
5275
|
+
* @method
|
|
5276
|
+
* @name bitget#repayMargin
|
|
5277
|
+
* @description repay borrowed margin and interest
|
|
5278
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#cross-repay
|
|
5279
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#isolated-repay
|
|
5280
|
+
* @param {string} code unified currency code of the currency to repay
|
|
5281
|
+
* @param {string} amount the amount to repay
|
|
5282
|
+
* @param {string} [symbol] unified market symbol
|
|
5283
|
+
* @param {object} [params] extra parameters specific to the bitget api endpoint
|
|
5284
|
+
* @param {string} [params.marginMode] 'isolated' or 'cross', symbol is required for 'isolated'
|
|
5285
|
+
* @returns {object} a [margin loan structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#margin-loan-structure}
|
|
5286
|
+
*/
|
|
5287
|
+
await this.loadMarkets();
|
|
5288
|
+
const currency = this.currency(code);
|
|
5289
|
+
const request = {
|
|
5290
|
+
'coin': currency['info']['coinName'],
|
|
5291
|
+
'repayAmount': this.currencyToPrecision(code, amount),
|
|
5292
|
+
};
|
|
5293
|
+
let response = undefined;
|
|
5294
|
+
let marginMode = undefined;
|
|
5295
|
+
[marginMode, params] = this.handleMarginModeAndParams('repayMargin', params);
|
|
5296
|
+
if ((symbol !== undefined) || (marginMode === 'isolated')) {
|
|
5297
|
+
this.checkRequiredSymbol('repayMargin', symbol);
|
|
5298
|
+
const market = this.market(symbol);
|
|
5299
|
+
const marketId = market['id'];
|
|
5300
|
+
const parts = marketId.split('_');
|
|
5301
|
+
const marginMarketId = this.safeStringUpper(parts, 0);
|
|
5302
|
+
request['symbol'] = marginMarketId;
|
|
5303
|
+
response = await this.privateMarginPostIsolatedAccountRepay(this.extend(request, params));
|
|
5304
|
+
}
|
|
5305
|
+
else {
|
|
5306
|
+
response = await this.privateMarginPostCrossAccountRepay(this.extend(request, params));
|
|
5307
|
+
}
|
|
5308
|
+
//
|
|
5309
|
+
// isolated
|
|
5310
|
+
//
|
|
5311
|
+
// {
|
|
5312
|
+
// "code": "00000",
|
|
5313
|
+
// "msg": "success",
|
|
5314
|
+
// "requestTime": 1697251988593,
|
|
5315
|
+
// "data": {
|
|
5316
|
+
// "remainDebtAmount": "0",
|
|
5317
|
+
// "clientOid": null,
|
|
5318
|
+
// "symbol": "BTCUSDT",
|
|
5319
|
+
// "coin": "BTC",
|
|
5320
|
+
// "repayAmount": "0.00100001"
|
|
5321
|
+
// }
|
|
5322
|
+
// }
|
|
5323
|
+
//
|
|
5324
|
+
// cross
|
|
5325
|
+
//
|
|
5326
|
+
// {
|
|
5327
|
+
// "code": "00000",
|
|
5328
|
+
// "msg": "success",
|
|
5329
|
+
// "requestTime": 1697252151042,
|
|
5330
|
+
// "data": {
|
|
5331
|
+
// "remainDebtAmount": "0",
|
|
5332
|
+
// "clientOid": null,
|
|
5333
|
+
// "coin": "BTC",
|
|
5334
|
+
// "repayAmount": "0.00010001"
|
|
5335
|
+
// }
|
|
5336
|
+
// }
|
|
5337
|
+
//
|
|
5338
|
+
const data = this.safeValue(response, 'data', {});
|
|
5339
|
+
return this.parseMarginLoan(data, currency);
|
|
5340
|
+
}
|
|
5341
|
+
parseMarginLoan(info, currency = undefined) {
|
|
5342
|
+
//
|
|
5343
|
+
// isolated: borrowMargin
|
|
5344
|
+
//
|
|
5345
|
+
// {
|
|
5346
|
+
// "clientOid": null,
|
|
5347
|
+
// "symbol": "BTCUSDT",
|
|
5348
|
+
// "coin": "BTC",
|
|
5349
|
+
// "borrowAmount": "0.001"
|
|
5350
|
+
// }
|
|
5351
|
+
//
|
|
5352
|
+
// cross: borrowMargin
|
|
5353
|
+
//
|
|
5354
|
+
// {
|
|
5355
|
+
// "clientOid": null,
|
|
5356
|
+
// "coin": "BTC",
|
|
5357
|
+
// "borrowAmount": "0.0001"
|
|
5358
|
+
// }
|
|
5359
|
+
//
|
|
5360
|
+
// isolated: repayMargin
|
|
5361
|
+
//
|
|
5362
|
+
// {
|
|
5363
|
+
// "remainDebtAmount": "0",
|
|
5364
|
+
// "clientOid": null,
|
|
5365
|
+
// "symbol": "BTCUSDT",
|
|
5366
|
+
// "coin": "BTC",
|
|
5367
|
+
// "repayAmount": "0.00100001"
|
|
5368
|
+
// }
|
|
5369
|
+
//
|
|
5370
|
+
// cross: repayMargin
|
|
5371
|
+
//
|
|
5372
|
+
// {
|
|
5373
|
+
// "remainDebtAmount": "0",
|
|
5374
|
+
// "clientOid": null,
|
|
5375
|
+
// "coin": "BTC",
|
|
5376
|
+
// "repayAmount": "0.00010001"
|
|
5377
|
+
// }
|
|
5378
|
+
//
|
|
5379
|
+
const currencyId = this.safeString(info, 'coin');
|
|
5380
|
+
const marketId = this.safeString(info, 'symbol');
|
|
5381
|
+
let symbol = undefined;
|
|
5382
|
+
if (marketId !== undefined) {
|
|
5383
|
+
symbol = this.safeSymbol(marketId);
|
|
5384
|
+
}
|
|
5385
|
+
return {
|
|
5386
|
+
'id': this.safeString(info, 'clientOid'),
|
|
5387
|
+
'currency': this.safeCurrencyCode(currencyId, currency),
|
|
5388
|
+
'amount': this.safeNumber2(info, 'borrowAmount', 'repayAmount'),
|
|
5389
|
+
'symbol': symbol,
|
|
5390
|
+
'timestamp': undefined,
|
|
5391
|
+
'datetime': undefined,
|
|
5392
|
+
'info': info,
|
|
5393
|
+
};
|
|
5394
|
+
}
|
|
5204
5395
|
handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
|
|
5205
5396
|
if (!response) {
|
|
5206
5397
|
return undefined; // fallback to default error handler
|
package/js/src/bitmart.js
CHANGED
|
@@ -760,6 +760,7 @@ export default class bitmart extends Exchange {
|
|
|
760
760
|
'max': undefined,
|
|
761
761
|
},
|
|
762
762
|
},
|
|
763
|
+
'created': undefined,
|
|
763
764
|
'info': market,
|
|
764
765
|
});
|
|
765
766
|
}
|
|
@@ -866,6 +867,7 @@ export default class bitmart extends Exchange {
|
|
|
866
867
|
'max': undefined,
|
|
867
868
|
},
|
|
868
869
|
},
|
|
870
|
+
'created': this.safeInteger(market, 'open_timestamp'),
|
|
869
871
|
'info': market,
|
|
870
872
|
});
|
|
871
873
|
}
|
package/js/src/bittrex.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/bittrex.js';
|
|
2
|
-
import { Int, OrderSide, OrderType } from './base/types.js';
|
|
2
|
+
import { Int, OrderSide, OrderType, OHLCV } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class bittrex
|
|
5
5
|
* @extends Exchange
|
|
@@ -38,7 +38,7 @@ export default class bittrex extends Exchange {
|
|
|
38
38
|
info: any;
|
|
39
39
|
};
|
|
40
40
|
parseOHLCV(ohlcv: any, market?: any): number[];
|
|
41
|
-
fetchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<
|
|
41
|
+
fetchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
|
|
42
42
|
fetchOpenOrders(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<import("./base/types.js").Order[]>;
|
|
43
43
|
fetchOrderTrades(id: string, symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<import("./base/types.js").Trade[]>;
|
|
44
44
|
createOrder(symbol: string, type: OrderType, side: OrderSide, amount: any, price?: any, params?: {}): Promise<import("./base/types.js").Order>;
|
package/js/src/bittrex.js
CHANGED
|
@@ -908,8 +908,14 @@ export default class bittrex extends Exchange {
|
|
|
908
908
|
* @param {int} [since] timestamp in ms of the earliest candle to fetch
|
|
909
909
|
* @param {int} [limit] the maximum amount of candles to fetch
|
|
910
910
|
* @param {object} [params] extra parameters specific to the bittrex api endpoint
|
|
911
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
911
912
|
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
|
912
913
|
*/
|
|
914
|
+
let paginate = false;
|
|
915
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate', false);
|
|
916
|
+
if (paginate) {
|
|
917
|
+
return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 1440);
|
|
918
|
+
}
|
|
913
919
|
await this.loadMarkets();
|
|
914
920
|
const market = this.market(symbol);
|
|
915
921
|
const reverseId = market['baseId'] + '-' + market['quoteId'];
|
package/js/src/cex.js
CHANGED
package/js/src/coinbase.js
CHANGED
package/js/src/coinbasepro.js
CHANGED
package/js/src/coinex.js
CHANGED
|
@@ -536,6 +536,7 @@ export default class coinex extends Exchange {
|
|
|
536
536
|
'max': undefined,
|
|
537
537
|
},
|
|
538
538
|
},
|
|
539
|
+
'created': undefined,
|
|
539
540
|
'info': market,
|
|
540
541
|
});
|
|
541
542
|
}
|
|
@@ -632,6 +633,7 @@ export default class coinex extends Exchange {
|
|
|
632
633
|
'max': undefined,
|
|
633
634
|
},
|
|
634
635
|
},
|
|
636
|
+
'created': undefined,
|
|
635
637
|
'info': entry,
|
|
636
638
|
});
|
|
637
639
|
}
|
package/js/src/coinfalcon.js
CHANGED
package/js/src/coinmate.js
CHANGED
package/js/src/coinone.js
CHANGED
|
@@ -232,6 +232,7 @@ export default class coinone extends Exchange {
|
|
|
232
232
|
'max': undefined,
|
|
233
233
|
},
|
|
234
234
|
},
|
|
235
|
+
'created': undefined,
|
|
235
236
|
'info': ticker,
|
|
236
237
|
});
|
|
237
238
|
}
|
|
@@ -889,7 +890,7 @@ export default class coinone extends Exchange {
|
|
|
889
890
|
const payload = this.stringToBase64(json);
|
|
890
891
|
body = payload;
|
|
891
892
|
const secret = this.secret.toUpperCase();
|
|
892
|
-
const signature = this.hmac(payload, this.encode(secret), sha512);
|
|
893
|
+
const signature = this.hmac(this.encode(payload), this.encode(secret), sha512);
|
|
893
894
|
headers = {
|
|
894
895
|
'Content-Type': 'application/json',
|
|
895
896
|
'X-COINONE-PAYLOAD': payload,
|
package/js/src/cryptocom.d.ts
CHANGED
|
@@ -113,7 +113,6 @@ export default class cryptocom extends Exchange {
|
|
|
113
113
|
datetime: any;
|
|
114
114
|
info: any;
|
|
115
115
|
};
|
|
116
|
-
fetchBorrowInterest(code?: string, symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<any>;
|
|
117
116
|
parseBorrowInterest(info: any, market?: any): {
|
|
118
117
|
symbol: any;
|
|
119
118
|
marginMode: any;
|
|
@@ -125,7 +124,6 @@ export default class cryptocom extends Exchange {
|
|
|
125
124
|
datetime: string;
|
|
126
125
|
info: any;
|
|
127
126
|
};
|
|
128
|
-
fetchBorrowRates(params?: {}): Promise<any[]>;
|
|
129
127
|
parseBorrowRates(info: any, codeKey: any): any[];
|
|
130
128
|
customHandleMarginModeAndParams(methodName: any, params?: {}): any[];
|
|
131
129
|
parseDepositWithdrawFee(fee: any, currency?: any): {
|
package/js/src/cryptocom.js
CHANGED
|
@@ -39,11 +39,11 @@ export default class cryptocom extends Exchange {
|
|
|
39
39
|
'fetchAccounts': true,
|
|
40
40
|
'fetchBalance': true,
|
|
41
41
|
'fetchBidsAsks': false,
|
|
42
|
-
'fetchBorrowInterest':
|
|
42
|
+
'fetchBorrowInterest': false,
|
|
43
43
|
'fetchBorrowRate': false,
|
|
44
44
|
'fetchBorrowRateHistories': false,
|
|
45
45
|
'fetchBorrowRateHistory': false,
|
|
46
|
-
'fetchBorrowRates':
|
|
46
|
+
'fetchBorrowRates': false,
|
|
47
47
|
'fetchClosedOrders': 'emulated',
|
|
48
48
|
'fetchCurrencies': false,
|
|
49
49
|
'fetchDepositAddress': true,
|
|
@@ -337,6 +337,7 @@ export default class cryptocom extends Exchange {
|
|
|
337
337
|
'precisionMode': TICK_SIZE,
|
|
338
338
|
'exceptions': {
|
|
339
339
|
'exact': {
|
|
340
|
+
'219': InvalidOrder,
|
|
340
341
|
'10001': ExchangeError,
|
|
341
342
|
'10002': PermissionDenied,
|
|
342
343
|
'10003': PermissionDenied,
|
|
@@ -566,6 +567,7 @@ export default class cryptocom extends Exchange {
|
|
|
566
567
|
'max': undefined,
|
|
567
568
|
},
|
|
568
569
|
},
|
|
570
|
+
'created': undefined,
|
|
569
571
|
'info': market,
|
|
570
572
|
});
|
|
571
573
|
}
|
|
@@ -1058,7 +1060,7 @@ export default class cryptocom extends Exchange {
|
|
|
1058
1060
|
}
|
|
1059
1061
|
const postOnly = this.safeValue(params, 'postOnly', false);
|
|
1060
1062
|
if ((postOnly) || (timeInForce === 'PO')) {
|
|
1061
|
-
request['exec_inst'] = 'POST_ONLY';
|
|
1063
|
+
request['exec_inst'] = ['POST_ONLY'];
|
|
1062
1064
|
request['time_in_force'] = 'GOOD_TILL_CANCEL';
|
|
1063
1065
|
}
|
|
1064
1066
|
const triggerPrice = this.safeStringN(params, ['stopPrice', 'triggerPrice', 'ref_price']);
|
|
@@ -1866,8 +1868,8 @@ export default class cryptocom extends Exchange {
|
|
|
1866
1868
|
'close': last,
|
|
1867
1869
|
'last': last,
|
|
1868
1870
|
'previousClose': undefined,
|
|
1869
|
-
'change':
|
|
1870
|
-
'percentage':
|
|
1871
|
+
'change': undefined,
|
|
1872
|
+
'percentage': this.safeString(ticker, 'c'),
|
|
1871
1873
|
'average': undefined,
|
|
1872
1874
|
'baseVolume': this.safeString(ticker, 'v'),
|
|
1873
1875
|
'quoteVolume': this.safeString(ticker, 'vv'),
|
|
@@ -2011,10 +2013,16 @@ export default class cryptocom extends Exchange {
|
|
|
2011
2013
|
const created = this.safeInteger(order, 'create_time');
|
|
2012
2014
|
const marketId = this.safeString(order, 'instrument_name');
|
|
2013
2015
|
const symbol = this.safeSymbol(marketId, market);
|
|
2014
|
-
const execInst = this.
|
|
2015
|
-
let postOnly =
|
|
2016
|
+
const execInst = this.safeValue(order, 'exec_inst');
|
|
2017
|
+
let postOnly = false;
|
|
2016
2018
|
if (execInst !== undefined) {
|
|
2017
|
-
|
|
2019
|
+
for (let i = 0; i < execInst.length; i++) {
|
|
2020
|
+
const inst = execInst[i];
|
|
2021
|
+
if (inst === 'POST_ONLY') {
|
|
2022
|
+
postOnly = true;
|
|
2023
|
+
break;
|
|
2024
|
+
}
|
|
2025
|
+
}
|
|
2018
2026
|
}
|
|
2019
2027
|
const feeCurrency = this.safeString(order, 'fee_instrument_name');
|
|
2020
2028
|
return this.safeOrder({
|
|
@@ -2247,52 +2255,6 @@ export default class cryptocom extends Exchange {
|
|
|
2247
2255
|
'info': info,
|
|
2248
2256
|
};
|
|
2249
2257
|
}
|
|
2250
|
-
async fetchBorrowInterest(code = undefined, symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2251
|
-
await this.loadMarkets();
|
|
2252
|
-
const request = {};
|
|
2253
|
-
let market = undefined;
|
|
2254
|
-
let currency = undefined;
|
|
2255
|
-
if (symbol !== undefined) {
|
|
2256
|
-
market = this.market(symbol);
|
|
2257
|
-
}
|
|
2258
|
-
if (code !== undefined) {
|
|
2259
|
-
currency = this.currency(code);
|
|
2260
|
-
request['currency'] = currency['id'];
|
|
2261
|
-
}
|
|
2262
|
-
if (since !== undefined) {
|
|
2263
|
-
request['start_ts'] = since;
|
|
2264
|
-
}
|
|
2265
|
-
if (limit !== undefined) {
|
|
2266
|
-
request['page_size'] = limit;
|
|
2267
|
-
}
|
|
2268
|
-
const response = await this.v2PrivatePostPrivateMarginGetInterestHistory(this.extend(request, params));
|
|
2269
|
-
//
|
|
2270
|
-
// {
|
|
2271
|
-
// "id": 1656705829020,
|
|
2272
|
-
// "method": "private/margin/get-interest-history",
|
|
2273
|
-
// "code": 0,
|
|
2274
|
-
// "result": {
|
|
2275
|
-
// "list": [
|
|
2276
|
-
// {
|
|
2277
|
-
// "loan_id": "2643528867803765921",
|
|
2278
|
-
// "currency": "USDT",
|
|
2279
|
-
// "interest": 0.00000004,
|
|
2280
|
-
// "time": 1656702899559,
|
|
2281
|
-
// "stake_amount": 6,
|
|
2282
|
-
// "interest_rate": 0.000025
|
|
2283
|
-
// },
|
|
2284
|
-
// ]
|
|
2285
|
-
// }
|
|
2286
|
-
// }
|
|
2287
|
-
//
|
|
2288
|
-
const data = this.safeValue(response, 'result', {});
|
|
2289
|
-
const rows = this.safeValue(data, 'list', []);
|
|
2290
|
-
let interest = undefined;
|
|
2291
|
-
for (let i = 0; i < rows.length; i++) {
|
|
2292
|
-
interest = this.parseBorrowInterests(rows, market);
|
|
2293
|
-
}
|
|
2294
|
-
return this.filterByCurrencySinceLimit(interest, code, since, limit);
|
|
2295
|
-
}
|
|
2296
2258
|
parseBorrowInterest(info, market = undefined) {
|
|
2297
2259
|
//
|
|
2298
2260
|
// {
|
|
@@ -2321,38 +2283,6 @@ export default class cryptocom extends Exchange {
|
|
|
2321
2283
|
'info': info,
|
|
2322
2284
|
};
|
|
2323
2285
|
}
|
|
2324
|
-
async fetchBorrowRates(params = {}) {
|
|
2325
|
-
/**
|
|
2326
|
-
* @method
|
|
2327
|
-
* @name cryptocom#fetchBorrowRates
|
|
2328
|
-
* @description fetch the borrow interest rates of all currencies
|
|
2329
|
-
* @param {object} [params] extra parameters specific to the cryptocom api endpoint
|
|
2330
|
-
* @returns {object} a list of [borrow rate structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#borrow-rate-structure}
|
|
2331
|
-
*/
|
|
2332
|
-
await this.loadMarkets();
|
|
2333
|
-
const response = await this.v2PrivatePostPrivateMarginGetUserConfig(params);
|
|
2334
|
-
//
|
|
2335
|
-
// {
|
|
2336
|
-
// "id": 1656707947456,
|
|
2337
|
-
// "method": "private/margin/get-user-config",
|
|
2338
|
-
// "code": 0,
|
|
2339
|
-
// "result": {
|
|
2340
|
-
// "stake_amount": 6,
|
|
2341
|
-
// "currency_configs": [
|
|
2342
|
-
// {
|
|
2343
|
-
// "currency": "AGLD",
|
|
2344
|
-
// "hourly_rate": 0.00003334,
|
|
2345
|
-
// "max_borrow_limit": 342.4032393,
|
|
2346
|
-
// "min_borrow_limit": 30
|
|
2347
|
-
// },
|
|
2348
|
-
// ]
|
|
2349
|
-
// }
|
|
2350
|
-
// }
|
|
2351
|
-
//
|
|
2352
|
-
const data = this.safeValue(response, 'result', {});
|
|
2353
|
-
const rates = this.safeValue(data, 'currency_configs', []);
|
|
2354
|
-
return this.parseBorrowRates(rates, 'currency');
|
|
2355
|
-
}
|
|
2356
2286
|
parseBorrowRates(info, codeKey) {
|
|
2357
2287
|
//
|
|
2358
2288
|
// {
|
|
@@ -3025,7 +2955,15 @@ export default class cryptocom extends Exchange {
|
|
|
3025
2955
|
const paramsKeys = Object.keys(keysorted);
|
|
3026
2956
|
let strSortKey = '';
|
|
3027
2957
|
for (let i = 0; i < paramsKeys.length; i++) {
|
|
3028
|
-
|
|
2958
|
+
const key = paramsKeys[i].toString();
|
|
2959
|
+
let value = requestParams[paramsKeys[i]];
|
|
2960
|
+
if (Array.isArray(value)) {
|
|
2961
|
+
value = value.join(',');
|
|
2962
|
+
}
|
|
2963
|
+
else {
|
|
2964
|
+
value = value.toString();
|
|
2965
|
+
}
|
|
2966
|
+
strSortKey = strSortKey + key + value;
|
|
3029
2967
|
}
|
|
3030
2968
|
const payload = path + nonce + this.apiKey + strSortKey + nonce;
|
|
3031
2969
|
const signature = this.hmac(this.encode(payload), this.encode(this.secret), sha256);
|
package/js/src/currencycom.js
CHANGED
package/js/src/delta.js
CHANGED
package/js/src/deribit.js
CHANGED
package/js/src/digifinex.js
CHANGED
package/js/src/exmo.js
CHANGED
package/js/src/gate.d.ts
CHANGED
package/js/src/gate.js
CHANGED
|
@@ -1098,6 +1098,7 @@ export default class gate extends Exchange {
|
|
|
1098
1098
|
'max': margin ? this.safeNumber(market, 'max_quote_amount') : undefined,
|
|
1099
1099
|
},
|
|
1100
1100
|
},
|
|
1101
|
+
'created': undefined,
|
|
1101
1102
|
'info': market,
|
|
1102
1103
|
});
|
|
1103
1104
|
}
|
|
@@ -1295,6 +1296,7 @@ export default class gate extends Exchange {
|
|
|
1295
1296
|
'max': undefined,
|
|
1296
1297
|
},
|
|
1297
1298
|
},
|
|
1299
|
+
'created': undefined,
|
|
1298
1300
|
'info': market,
|
|
1299
1301
|
};
|
|
1300
1302
|
}
|
|
@@ -1415,6 +1417,7 @@ export default class gate extends Exchange {
|
|
|
1415
1417
|
'max': undefined,
|
|
1416
1418
|
},
|
|
1417
1419
|
},
|
|
1420
|
+
'created': this.safeIntegerProduct(market, 'create_time', 1000),
|
|
1418
1421
|
'info': market,
|
|
1419
1422
|
});
|
|
1420
1423
|
}
|
package/js/src/gemini.d.ts
CHANGED
package/js/src/gemini.js
CHANGED
package/js/src/hitbtc.js
CHANGED