ccxt 4.2.13 → 4.2.15
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.js +781 -133
- package/dist/ccxt.browser.min.js +7 -7
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/js/ccxt.js +1 -1
- package/dist/cjs/js/src/base/Exchange.js +148 -1
- package/dist/cjs/js/src/bigone.js +36 -32
- package/dist/cjs/js/src/binance.js +108 -0
- package/dist/cjs/js/src/binanceus.js +8 -0
- package/dist/cjs/js/src/bingx.js +5 -0
- package/dist/cjs/js/src/bitget.js +4 -0
- package/dist/cjs/js/src/bybit.js +4 -0
- package/dist/cjs/js/src/coinex.js +3 -0
- package/dist/cjs/js/src/delta.js +7 -1
- package/dist/cjs/js/src/gate.js +5 -0
- package/dist/cjs/js/src/htx.js +126 -1
- package/dist/cjs/js/src/kraken.js +43 -9
- package/dist/cjs/js/src/kucoin.js +5 -0
- package/dist/cjs/js/src/kucoinfutures.js +131 -77
- package/dist/cjs/js/src/okx.js +9 -8
- package/dist/cjs/js/src/pro/htx.js +6 -1
- package/dist/cjs/js/src/pro/woo.js +126 -0
- package/dist/cjs/js/src/woo.js +6 -2
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/bigone.d.ts +1 -0
- package/js/src/abstract/kucoin.d.ts +4 -0
- package/js/src/abstract/kucoinfutures.d.ts +4 -0
- package/js/src/base/Exchange.d.ts +8 -0
- package/js/src/base/Exchange.js +148 -1
- package/js/src/bigone.js +36 -32
- package/js/src/binance.d.ts +9 -0
- package/js/src/binance.js +108 -0
- package/js/src/binanceus.js +8 -0
- package/js/src/bingx.js +5 -0
- package/js/src/bitget.js +4 -0
- package/js/src/bybit.js +4 -0
- package/js/src/coinex.js +3 -0
- package/js/src/delta.js +7 -1
- package/js/src/gate.js +5 -0
- package/js/src/htx.d.ts +9 -0
- package/js/src/htx.js +126 -1
- package/js/src/kraken.d.ts +1 -0
- package/js/src/kraken.js +43 -9
- package/js/src/kucoin.js +5 -0
- package/js/src/kucoinfutures.d.ts +4 -2
- package/js/src/kucoinfutures.js +131 -77
- package/js/src/okx.js +9 -8
- package/js/src/pro/htx.js +6 -1
- package/js/src/pro/woo.d.ts +5 -1
- package/js/src/pro/woo.js +127 -1
- package/js/src/woo.js +6 -2
- package/package.json +1 -1
package/js/src/binance.js
CHANGED
|
@@ -52,9 +52,12 @@ export default class binance extends Exchange {
|
|
|
52
52
|
'createPostOnlyOrder': true,
|
|
53
53
|
'createReduceOnlyOrder': true,
|
|
54
54
|
'createStopLimitOrder': true,
|
|
55
|
+
'createStopLossOrder': true,
|
|
55
56
|
'createStopMarketOrder': false,
|
|
56
57
|
'createStopOrder': true,
|
|
58
|
+
'createTakeProfitOrder': true,
|
|
57
59
|
'createTrailingPercentOrder': true,
|
|
60
|
+
'createTriggerOrder': true,
|
|
58
61
|
'editOrder': true,
|
|
59
62
|
'fetchAccounts': undefined,
|
|
60
63
|
'fetchBalance': true,
|
|
@@ -85,6 +88,7 @@ export default class binance extends Exchange {
|
|
|
85
88
|
'fetchIsolatedBorrowRate': false,
|
|
86
89
|
'fetchIsolatedBorrowRates': false,
|
|
87
90
|
'fetchL3OrderBook': false,
|
|
91
|
+
'fetchLastPrices': true,
|
|
88
92
|
'fetchLedger': true,
|
|
89
93
|
'fetchLeverage': false,
|
|
90
94
|
'fetchLeverageTiers': true,
|
|
@@ -3160,6 +3164,110 @@ export default class binance extends Exchange {
|
|
|
3160
3164
|
}
|
|
3161
3165
|
return this.parseTickers(response, symbols);
|
|
3162
3166
|
}
|
|
3167
|
+
async fetchLastPrices(symbols = undefined, params = {}) {
|
|
3168
|
+
/**
|
|
3169
|
+
* @method
|
|
3170
|
+
* @name binance#fetchLastPrices
|
|
3171
|
+
* @description fetches the last price for multiple markets
|
|
3172
|
+
* @see https://binance-docs.github.io/apidocs/spot/en/#symbol-price-ticker // spot
|
|
3173
|
+
* @see https://binance-docs.github.io/apidocs/future/en/#symbol-price-ticker // swap
|
|
3174
|
+
* @see https://binance-docs.github.io/apidocs/delivery/en/#symbol-price-ticker // future
|
|
3175
|
+
* @param {string[]|undefined} symbols unified symbols of the markets to fetch the last prices
|
|
3176
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3177
|
+
* @returns {object} a dictionary of lastprices structures
|
|
3178
|
+
*/
|
|
3179
|
+
await this.loadMarkets();
|
|
3180
|
+
symbols = this.marketSymbols(symbols);
|
|
3181
|
+
const market = this.getMarketFromSymbols(symbols);
|
|
3182
|
+
let type = undefined;
|
|
3183
|
+
let subType = undefined;
|
|
3184
|
+
[subType, params] = this.handleSubTypeAndParams('fetchLastPrices', market, params);
|
|
3185
|
+
[type, params] = this.handleMarketTypeAndParams('fetchLastPrices', market, params);
|
|
3186
|
+
let response = undefined;
|
|
3187
|
+
if (this.isLinear(type, subType)) {
|
|
3188
|
+
response = await this.fapiPublicV2GetTickerPrice(params);
|
|
3189
|
+
//
|
|
3190
|
+
// [
|
|
3191
|
+
// {
|
|
3192
|
+
// "symbol": "LTCBTC",
|
|
3193
|
+
// "price": "4.00000200"
|
|
3194
|
+
// "time": 1589437530011
|
|
3195
|
+
// },
|
|
3196
|
+
// ...
|
|
3197
|
+
// ]
|
|
3198
|
+
//
|
|
3199
|
+
}
|
|
3200
|
+
else if (this.isInverse(type, subType)) {
|
|
3201
|
+
response = await this.dapiPublicGetTickerPrice(params);
|
|
3202
|
+
//
|
|
3203
|
+
// [
|
|
3204
|
+
// {
|
|
3205
|
+
// "symbol": "BTCUSD_200626",
|
|
3206
|
+
// "ps": "9647.8",
|
|
3207
|
+
// "price": "9647.8",
|
|
3208
|
+
// "time": 1591257246176
|
|
3209
|
+
// }
|
|
3210
|
+
// ]
|
|
3211
|
+
//
|
|
3212
|
+
}
|
|
3213
|
+
else if (type === 'spot') {
|
|
3214
|
+
response = await this.publicGetTickerPrice(params);
|
|
3215
|
+
//
|
|
3216
|
+
// [
|
|
3217
|
+
// {
|
|
3218
|
+
// "symbol": "LTCBTC",
|
|
3219
|
+
// "price": "4.00000200"
|
|
3220
|
+
// },
|
|
3221
|
+
// ...
|
|
3222
|
+
// ]
|
|
3223
|
+
//
|
|
3224
|
+
}
|
|
3225
|
+
else {
|
|
3226
|
+
throw new NotSupported(this.id + ' fetchLastPrices() does not support ' + type + ' markets yet');
|
|
3227
|
+
}
|
|
3228
|
+
return this.parseLastPrices(response, symbols);
|
|
3229
|
+
}
|
|
3230
|
+
parseLastPrice(entry, market = undefined) {
|
|
3231
|
+
//
|
|
3232
|
+
// spot
|
|
3233
|
+
//
|
|
3234
|
+
// {
|
|
3235
|
+
// "symbol": "LTCBTC",
|
|
3236
|
+
// "price": "4.00000200"
|
|
3237
|
+
// }
|
|
3238
|
+
//
|
|
3239
|
+
// usdm (swap/future)
|
|
3240
|
+
//
|
|
3241
|
+
// {
|
|
3242
|
+
// "symbol": "BTCUSDT",
|
|
3243
|
+
// "price": "6000.01",
|
|
3244
|
+
// "time": 1589437530011 // Transaction time
|
|
3245
|
+
// }
|
|
3246
|
+
//
|
|
3247
|
+
//
|
|
3248
|
+
// coinm (swap/future)
|
|
3249
|
+
//
|
|
3250
|
+
// {
|
|
3251
|
+
// "symbol": "BTCUSD_200626", // symbol ("BTCUSD_200626", "BTCUSD_PERP", etc..)
|
|
3252
|
+
// "ps": "BTCUSD", // pair
|
|
3253
|
+
// "price": "9647.8",
|
|
3254
|
+
// "time": 1591257246176
|
|
3255
|
+
// }
|
|
3256
|
+
//
|
|
3257
|
+
const timestamp = this.safeInteger(entry, 'time');
|
|
3258
|
+
const type = (timestamp === undefined) ? 'spot' : 'swap';
|
|
3259
|
+
const marketId = this.safeString(entry, 'symbol');
|
|
3260
|
+
market = this.safeMarket(marketId, market, undefined, type);
|
|
3261
|
+
const price = this.safeNumber(entry, 'price');
|
|
3262
|
+
return {
|
|
3263
|
+
'symbol': market['symbol'],
|
|
3264
|
+
'timestamp': timestamp,
|
|
3265
|
+
'datetime': this.iso8601(timestamp),
|
|
3266
|
+
'price': price,
|
|
3267
|
+
'side': undefined,
|
|
3268
|
+
'info': entry,
|
|
3269
|
+
};
|
|
3270
|
+
}
|
|
3163
3271
|
async fetchTickers(symbols = undefined, params = {}) {
|
|
3164
3272
|
/**
|
|
3165
3273
|
* @method
|
package/js/src/binanceus.js
CHANGED
|
@@ -13,6 +13,7 @@ export default class binanceus extends binance {
|
|
|
13
13
|
'id': 'binanceus',
|
|
14
14
|
'name': 'Binance US',
|
|
15
15
|
'countries': ['US'],
|
|
16
|
+
'rateLimit': 50,
|
|
16
17
|
'certified': false,
|
|
17
18
|
'pro': true,
|
|
18
19
|
'urls': {
|
|
@@ -80,6 +81,13 @@ export default class binanceus extends binance {
|
|
|
80
81
|
'setMarginMode': false,
|
|
81
82
|
'setPositionMode': false,
|
|
82
83
|
},
|
|
84
|
+
'api': {
|
|
85
|
+
'public': {
|
|
86
|
+
'get': {
|
|
87
|
+
'ticker/price': { 'cost': 1, 'noSymbol': 2 },
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
},
|
|
83
91
|
});
|
|
84
92
|
}
|
|
85
93
|
}
|
package/js/src/bingx.js
CHANGED
|
@@ -39,8 +39,12 @@ export default class bingx extends Exchange {
|
|
|
39
39
|
'createMarketSellOrderWithCost': true,
|
|
40
40
|
'createOrder': true,
|
|
41
41
|
'createOrders': true,
|
|
42
|
+
'createOrderWithTakeProfitAndStopLoss': true,
|
|
43
|
+
'createStopLossOrder': true,
|
|
44
|
+
'createTakeProfitOrder': true,
|
|
42
45
|
'createTrailingAmountOrder': true,
|
|
43
46
|
'createTrailingPercentOrder': true,
|
|
47
|
+
'createTriggerOrder': true,
|
|
44
48
|
'fetchBalance': true,
|
|
45
49
|
'fetchClosedOrders': true,
|
|
46
50
|
'fetchCurrencies': true,
|
|
@@ -360,6 +364,7 @@ export default class bingx extends Exchange {
|
|
|
360
364
|
'80016': OrderNotFound,
|
|
361
365
|
'80017': OrderNotFound,
|
|
362
366
|
'100414': AccountSuspended,
|
|
367
|
+
'100419': PermissionDenied,
|
|
363
368
|
'100437': BadRequest, // {"code":100437,"msg":"The withdrawal amount is lower than the minimum limit, please re-enter.","timestamp":1689258588845}
|
|
364
369
|
},
|
|
365
370
|
'broad': {},
|
package/js/src/bitget.js
CHANGED
|
@@ -45,8 +45,12 @@ export default class bitget extends Exchange {
|
|
|
45
45
|
'createMarketSellOrderWithCost': false,
|
|
46
46
|
'createOrder': true,
|
|
47
47
|
'createOrders': true,
|
|
48
|
+
'createOrderWithTakeProfitAndStopLoss': true,
|
|
48
49
|
'createReduceOnlyOrder': false,
|
|
50
|
+
'createStopLossOrder': true,
|
|
51
|
+
'createTakeProfitOrder': true,
|
|
49
52
|
'createTrailingPercentOrder': true,
|
|
53
|
+
'createTriggerOrder': true,
|
|
50
54
|
'editOrder': true,
|
|
51
55
|
'fetchAccounts': false,
|
|
52
56
|
'fetchBalance': true,
|
package/js/src/bybit.js
CHANGED
|
@@ -44,12 +44,16 @@ export default class bybit extends Exchange {
|
|
|
44
44
|
'createMarketSellOrderWithCost': false,
|
|
45
45
|
'createOrder': true,
|
|
46
46
|
'createOrders': true,
|
|
47
|
+
'createOrderWithTakeProfitAndStopLoss': true,
|
|
47
48
|
'createPostOnlyOrder': true,
|
|
48
49
|
'createReduceOnlyOrder': true,
|
|
49
50
|
'createStopLimitOrder': true,
|
|
51
|
+
'createStopLossOrder': true,
|
|
50
52
|
'createStopMarketOrder': true,
|
|
51
53
|
'createStopOrder': true,
|
|
54
|
+
'createTakeProfitOrder': true,
|
|
52
55
|
'createTrailingAmountOrder': true,
|
|
56
|
+
'createTriggerOrder': true,
|
|
53
57
|
'editOrder': true,
|
|
54
58
|
'fetchBalance': true,
|
|
55
59
|
'fetchBorrowInterest': false,
|
package/js/src/coinex.js
CHANGED
|
@@ -54,6 +54,9 @@ export default class coinex extends Exchange {
|
|
|
54
54
|
'createOrder': true,
|
|
55
55
|
'createOrders': true,
|
|
56
56
|
'createReduceOnlyOrder': true,
|
|
57
|
+
'createStopLossOrder': true,
|
|
58
|
+
'createTakeProfitOrder': true,
|
|
59
|
+
'createTriggerOrder': true,
|
|
57
60
|
'editOrder': true,
|
|
58
61
|
'fetchBalance': true,
|
|
59
62
|
'fetchBorrowInterest': true,
|
package/js/src/delta.js
CHANGED
|
@@ -2074,7 +2074,13 @@ export default class delta extends Exchange {
|
|
|
2074
2074
|
if (limit !== undefined) {
|
|
2075
2075
|
request['page_size'] = limit;
|
|
2076
2076
|
}
|
|
2077
|
-
|
|
2077
|
+
let response = undefined;
|
|
2078
|
+
if (method === 'privateGetOrders') {
|
|
2079
|
+
response = await this.privateGetOrders(this.extend(request, params));
|
|
2080
|
+
}
|
|
2081
|
+
else if (method === 'privateGetOrdersHistory') {
|
|
2082
|
+
response = await this.privateGetOrdersHistory(this.extend(request, params));
|
|
2083
|
+
}
|
|
2078
2084
|
//
|
|
2079
2085
|
// {
|
|
2080
2086
|
// "success": true,
|
package/js/src/gate.js
CHANGED
|
@@ -92,8 +92,11 @@ export default class gate extends Exchange {
|
|
|
92
92
|
'createPostOnlyOrder': true,
|
|
93
93
|
'createReduceOnlyOrder': true,
|
|
94
94
|
'createStopLimitOrder': true,
|
|
95
|
+
'createStopLossOrder': true,
|
|
95
96
|
'createStopMarketOrder': false,
|
|
96
97
|
'createStopOrder': true,
|
|
98
|
+
'createTakeProfitOrder': true,
|
|
99
|
+
'createTriggerOrder': true,
|
|
97
100
|
'editOrder': true,
|
|
98
101
|
'fetchBalance': true,
|
|
99
102
|
'fetchBorrowRateHistories': false,
|
|
@@ -3769,6 +3772,8 @@ export default class gate extends Exchange {
|
|
|
3769
3772
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3770
3773
|
* @param {float} [params.stopPrice] The price at which a trigger order is triggered at
|
|
3771
3774
|
* @param {string} [params.timeInForce] "GTC", "IOC", or "PO"
|
|
3775
|
+
* @param {float} [params.stopLossPrice] The price at which a stop loss order is triggered at
|
|
3776
|
+
* @param {float} [params.takeProfitPrice] The price at which a take profit order is triggered at
|
|
3772
3777
|
* @param {string} [params.marginMode] 'cross' or 'isolated' - marginMode for margin trading if not provided this.options['defaultMarginMode'] is used
|
|
3773
3778
|
* @param {int} [params.iceberg] Amount to display for the iceberg order, Null or 0 for normal orders, Set to -1 to hide the order completely
|
|
3774
3779
|
* @param {string} [params.text] User defined information
|
package/js/src/htx.d.ts
CHANGED
|
@@ -51,6 +51,15 @@ export default class htx extends Exchange {
|
|
|
51
51
|
parseTicker(ticker: any, market?: Market): Ticker;
|
|
52
52
|
fetchTicker(symbol: string, params?: {}): Promise<Ticker>;
|
|
53
53
|
fetchTickers(symbols?: Strings, params?: {}): Promise<Tickers>;
|
|
54
|
+
fetchLastPrices(symbols?: Strings, params?: {}): Promise<any>;
|
|
55
|
+
parseLastPrice(entry: any, market?: Market): {
|
|
56
|
+
symbol: string;
|
|
57
|
+
timestamp: any;
|
|
58
|
+
datetime: any;
|
|
59
|
+
price: number;
|
|
60
|
+
side: string;
|
|
61
|
+
info: any;
|
|
62
|
+
};
|
|
54
63
|
fetchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
|
|
55
64
|
parseTrade(trade: any, market?: Market): Trade;
|
|
56
65
|
fetchOrderTrades(id: string, symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
package/js/src/htx.js
CHANGED
|
@@ -48,9 +48,12 @@ export default class htx extends Exchange {
|
|
|
48
48
|
'createOrders': true,
|
|
49
49
|
'createReduceOnlyOrder': false,
|
|
50
50
|
'createStopLimitOrder': true,
|
|
51
|
+
'createStopLossOrder': true,
|
|
51
52
|
'createStopMarketOrder': true,
|
|
52
53
|
'createStopOrder': true,
|
|
54
|
+
'createTakeProfitOrder': true,
|
|
53
55
|
'createTrailingPercentOrder': true,
|
|
56
|
+
'createTriggerOrder': true,
|
|
54
57
|
'fetchAccounts': true,
|
|
55
58
|
'fetchBalance': true,
|
|
56
59
|
'fetchBidsAsks': undefined,
|
|
@@ -78,6 +81,7 @@ export default class htx extends Exchange {
|
|
|
78
81
|
'fetchIsolatedBorrowRate': false,
|
|
79
82
|
'fetchIsolatedBorrowRates': true,
|
|
80
83
|
'fetchL3OrderBook': undefined,
|
|
84
|
+
'fetchLastPrices': true,
|
|
81
85
|
'fetchLedger': true,
|
|
82
86
|
'fetchLedgerEntry': undefined,
|
|
83
87
|
'fetchLeverage': false,
|
|
@@ -2270,6 +2274,127 @@ export default class htx extends Exchange {
|
|
|
2270
2274
|
}
|
|
2271
2275
|
return this.filterByArrayTickers(result, 'symbol', symbols);
|
|
2272
2276
|
}
|
|
2277
|
+
async fetchLastPrices(symbols = undefined, params = {}) {
|
|
2278
|
+
/**
|
|
2279
|
+
* @method
|
|
2280
|
+
* @name binance#fetchLastPrices
|
|
2281
|
+
* @description fetches the last price for multiple markets
|
|
2282
|
+
* @see https://www.htx.com/en-us/opend/newApiPages/?id=8cb81024-77b5-11ed-9966-0242ac110003 linear swap & linear future
|
|
2283
|
+
* @see https://www.htx.com/en-us/opend/newApiPages/?id=28c2e8fc-77ae-11ed-9966-0242ac110003 inverse future
|
|
2284
|
+
* @see https://www.htx.com/en-us/opend/newApiPages/?id=5d517ef5-77b6-11ed-9966-0242ac110003 inverse swap
|
|
2285
|
+
* @param {string[]|undefined} symbols unified symbols of the markets to fetch the last prices
|
|
2286
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2287
|
+
* @returns {object} a dictionary of lastprices structures
|
|
2288
|
+
*/
|
|
2289
|
+
await this.loadMarkets();
|
|
2290
|
+
symbols = this.marketSymbols(symbols);
|
|
2291
|
+
const market = this.getMarketFromSymbols(symbols);
|
|
2292
|
+
let type = undefined;
|
|
2293
|
+
let subType = undefined;
|
|
2294
|
+
[subType, params] = this.handleSubTypeAndParams('fetchLastPrices', market, params);
|
|
2295
|
+
[type, params] = this.handleMarketTypeAndParams('fetchLastPrices', market, params);
|
|
2296
|
+
let response = undefined;
|
|
2297
|
+
if (((type === 'swap') || (type === 'future')) && (subType === 'linear')) {
|
|
2298
|
+
response = await this.contractPublicGetLinearSwapExMarketTrade(params);
|
|
2299
|
+
//
|
|
2300
|
+
// {
|
|
2301
|
+
// "ch": "market.*.trade.detail",
|
|
2302
|
+
// "status": "ok",
|
|
2303
|
+
// "tick": {
|
|
2304
|
+
// "data": [
|
|
2305
|
+
// {
|
|
2306
|
+
// "amount": "4",
|
|
2307
|
+
// "quantity": "40",
|
|
2308
|
+
// "trade_turnover": "22.176",
|
|
2309
|
+
// "ts": 1703697705028,
|
|
2310
|
+
// "id": 1000003558478170000,
|
|
2311
|
+
// "price": "0.5544",
|
|
2312
|
+
// "direction": "buy",
|
|
2313
|
+
// "contract_code": "MANA-USDT",
|
|
2314
|
+
// "business_type": "swap",
|
|
2315
|
+
// "trade_partition": "USDT"
|
|
2316
|
+
// },
|
|
2317
|
+
// ],
|
|
2318
|
+
// "id": 1703697740147,
|
|
2319
|
+
// "ts": 1703697740147
|
|
2320
|
+
// },
|
|
2321
|
+
// "ts": 1703697740147
|
|
2322
|
+
// }
|
|
2323
|
+
//
|
|
2324
|
+
}
|
|
2325
|
+
else if ((type === 'swap') && (subType === 'inverse')) {
|
|
2326
|
+
response = await this.contractPublicGetSwapExMarketTrade(params);
|
|
2327
|
+
//
|
|
2328
|
+
// {
|
|
2329
|
+
// "ch": "market.*.trade.detail",
|
|
2330
|
+
// "status": "ok",
|
|
2331
|
+
// "tick": {
|
|
2332
|
+
// "data": [
|
|
2333
|
+
// {
|
|
2334
|
+
// "amount": "6",
|
|
2335
|
+
// "quantity": "94.5000945000945000945000945000945000945",
|
|
2336
|
+
// "ts": 1703698704594,
|
|
2337
|
+
// "id": 1000001187811060000,
|
|
2338
|
+
// "price": "0.63492",
|
|
2339
|
+
// "direction": "buy",
|
|
2340
|
+
// "contract_code": "XRP-USD"
|
|
2341
|
+
// },
|
|
2342
|
+
// ],
|
|
2343
|
+
// "id": 1703698706589,
|
|
2344
|
+
// "ts": 1703698706589
|
|
2345
|
+
// },
|
|
2346
|
+
// "ts": 1703698706589
|
|
2347
|
+
// }
|
|
2348
|
+
//
|
|
2349
|
+
}
|
|
2350
|
+
else if ((type === 'future') && (subType === 'inverse')) {
|
|
2351
|
+
response = await this.contractPublicGetMarketTrade(params);
|
|
2352
|
+
//
|
|
2353
|
+
// {
|
|
2354
|
+
// "ch": "market.*.trade.detail",
|
|
2355
|
+
// "status": "ok",
|
|
2356
|
+
// "tick": {
|
|
2357
|
+
// "data": [
|
|
2358
|
+
// {
|
|
2359
|
+
// "amount": "20",
|
|
2360
|
+
// "quantity": "44.4444444444444444444444444444444444444",
|
|
2361
|
+
// "ts": 1686134498885,
|
|
2362
|
+
// "id": 2323000000174820000,
|
|
2363
|
+
// "price": "4.5",
|
|
2364
|
+
// "direction": "sell",
|
|
2365
|
+
// "symbol": "DORA_CW"
|
|
2366
|
+
// },
|
|
2367
|
+
// ],
|
|
2368
|
+
// "id": 1703698855142,
|
|
2369
|
+
// "ts": 1703698855142
|
|
2370
|
+
// },
|
|
2371
|
+
// "ts": 1703698855142
|
|
2372
|
+
// }
|
|
2373
|
+
//
|
|
2374
|
+
}
|
|
2375
|
+
else {
|
|
2376
|
+
throw new NotSupported(this.id + ' fetchLastPrices() does not support ' + type + ' markets yet');
|
|
2377
|
+
}
|
|
2378
|
+
const tick = this.safeValue(response, 'tick', {});
|
|
2379
|
+
const data = this.safeValue(tick, 'data', []);
|
|
2380
|
+
return this.parseLastPrices(data, symbols);
|
|
2381
|
+
}
|
|
2382
|
+
parseLastPrice(entry, market = undefined) {
|
|
2383
|
+
// example responses are documented in fetchLastPrices
|
|
2384
|
+
const marketId = this.safeString2(entry, 'symbol', 'contract_code');
|
|
2385
|
+
market = this.safeMarket(marketId, market);
|
|
2386
|
+
const price = this.safeNumber(entry, 'price');
|
|
2387
|
+
const direction = this.safeString(entry, 'direction'); // "buy" or "sell"
|
|
2388
|
+
// group timestamp should not be assigned to the individual trades' times
|
|
2389
|
+
return {
|
|
2390
|
+
'symbol': market['symbol'],
|
|
2391
|
+
'timestamp': undefined,
|
|
2392
|
+
'datetime': undefined,
|
|
2393
|
+
'price': price,
|
|
2394
|
+
'side': direction,
|
|
2395
|
+
'info': entry,
|
|
2396
|
+
};
|
|
2397
|
+
}
|
|
2273
2398
|
async fetchOrderBook(symbol, limit = undefined, params = {}) {
|
|
2274
2399
|
/**
|
|
2275
2400
|
* @method
|
|
@@ -4975,7 +5100,7 @@ export default class htx extends Exchange {
|
|
|
4975
5100
|
async createTrailingPercentOrder(symbol, type, side, amount, price = undefined, trailingPercent = undefined, trailingTriggerPrice = undefined, params = {}) {
|
|
4976
5101
|
/**
|
|
4977
5102
|
* @method
|
|
4978
|
-
* @name createTrailingPercentOrder
|
|
5103
|
+
* @name htx#createTrailingPercentOrder
|
|
4979
5104
|
* @description create a trailing order by providing the symbol, type, side, amount, price and trailingPercent
|
|
4980
5105
|
* @param {string} symbol unified symbol of the market to create an order in
|
|
4981
5106
|
* @param {string} type 'market' or 'limit'
|
package/js/src/kraken.d.ts
CHANGED
|
@@ -66,6 +66,7 @@ export default class kraken extends Exchange {
|
|
|
66
66
|
findMarketByAltnameOrId(id: any): any;
|
|
67
67
|
getDelistedMarketById(id: any): any;
|
|
68
68
|
parseOrderStatus(status: any): string;
|
|
69
|
+
parseOrderType(status: any): string;
|
|
69
70
|
parseOrder(order: any, market?: Market): Order;
|
|
70
71
|
orderRequest(method: any, symbol: any, type: any, request: any, price?: any, params?: {}): any[];
|
|
71
72
|
editOrder(id: string, symbol: any, type: any, side: any, amount?: any, price?: any, params?: {}): Promise<Order>;
|
package/js/src/kraken.js
CHANGED
|
@@ -1441,6 +1441,16 @@ export default class kraken extends Exchange {
|
|
|
1441
1441
|
};
|
|
1442
1442
|
return this.safeString(statuses, status, status);
|
|
1443
1443
|
}
|
|
1444
|
+
parseOrderType(status) {
|
|
1445
|
+
const statuses = {
|
|
1446
|
+
'take-profit': 'market',
|
|
1447
|
+
'stop-loss-limit': 'limit',
|
|
1448
|
+
'stop-loss': 'market',
|
|
1449
|
+
'take-profit-limit': 'limit',
|
|
1450
|
+
'trailing-stop-limit': 'limit',
|
|
1451
|
+
};
|
|
1452
|
+
return this.safeString(statuses, status, status);
|
|
1453
|
+
}
|
|
1444
1454
|
parseOrder(order, market = undefined) {
|
|
1445
1455
|
//
|
|
1446
1456
|
// createOrder for regular orders
|
|
@@ -1583,7 +1593,17 @@ export default class kraken extends Exchange {
|
|
|
1583
1593
|
trades.push(rawTrade);
|
|
1584
1594
|
}
|
|
1585
1595
|
}
|
|
1586
|
-
stopPrice = this.
|
|
1596
|
+
stopPrice = this.omitZero(this.safeString(order, 'stopprice', stopPrice));
|
|
1597
|
+
let stopLossPrice = undefined;
|
|
1598
|
+
let takeProfitPrice = undefined;
|
|
1599
|
+
if (type.startsWith('take-profit')) {
|
|
1600
|
+
takeProfitPrice = this.safeString(description, 'price');
|
|
1601
|
+
price = this.omitZero(this.safeString(description, 'price2'));
|
|
1602
|
+
}
|
|
1603
|
+
else if (type.startsWith('stop-loss')) {
|
|
1604
|
+
stopLossPrice = this.safeString(description, 'price');
|
|
1605
|
+
price = this.omitZero(this.safeString(description, 'price2'));
|
|
1606
|
+
}
|
|
1587
1607
|
return this.safeOrder({
|
|
1588
1608
|
'id': id,
|
|
1589
1609
|
'clientOrderId': clientOrderId,
|
|
@@ -1593,13 +1613,15 @@ export default class kraken extends Exchange {
|
|
|
1593
1613
|
'lastTradeTimestamp': undefined,
|
|
1594
1614
|
'status': status,
|
|
1595
1615
|
'symbol': symbol,
|
|
1596
|
-
'type': type,
|
|
1616
|
+
'type': this.parseOrderType(type),
|
|
1597
1617
|
'timeInForce': undefined,
|
|
1598
1618
|
'postOnly': isPostOnly,
|
|
1599
1619
|
'side': side,
|
|
1600
1620
|
'price': price,
|
|
1601
1621
|
'stopPrice': stopPrice,
|
|
1602
1622
|
'triggerPrice': stopPrice,
|
|
1623
|
+
'takeProfitPrice': takeProfitPrice,
|
|
1624
|
+
'stopLossPrice': stopLossPrice,
|
|
1603
1625
|
'cost': undefined,
|
|
1604
1626
|
'amount': amount,
|
|
1605
1627
|
'filled': filled,
|
|
@@ -1623,27 +1645,39 @@ export default class kraken extends Exchange {
|
|
|
1623
1645
|
const trailingAmount = this.safeString(params, 'trailingAmount');
|
|
1624
1646
|
const trailingLimitAmount = this.safeString(params, 'trailingLimitAmount');
|
|
1625
1647
|
const isTrailingAmountOrder = trailingAmount !== undefined;
|
|
1626
|
-
|
|
1648
|
+
const isLimitOrder = type.endsWith('limit'); // supporting limit, stop-loss-limit, take-profit-limit, etc
|
|
1649
|
+
if (isLimitOrder && !isTrailingAmountOrder) {
|
|
1627
1650
|
request['price'] = this.priceToPrecision(symbol, price);
|
|
1628
1651
|
}
|
|
1629
|
-
|
|
1652
|
+
const reduceOnly = this.safeValue2(params, 'reduceOnly', 'reduce_only');
|
|
1630
1653
|
if (isStopLossOrTakeProfitTrigger) {
|
|
1631
1654
|
if (isStopLossTriggerOrder) {
|
|
1632
1655
|
request['price'] = this.priceToPrecision(symbol, stopLossTriggerPrice);
|
|
1633
|
-
|
|
1656
|
+
if (isLimitOrder) {
|
|
1657
|
+
request['ordertype'] = 'stop-loss-limit';
|
|
1658
|
+
}
|
|
1659
|
+
else {
|
|
1660
|
+
request['ordertype'] = 'stop-loss';
|
|
1661
|
+
}
|
|
1634
1662
|
}
|
|
1635
1663
|
else if (isTakeProfitTriggerOrder) {
|
|
1636
1664
|
request['price'] = this.priceToPrecision(symbol, takeProfitTriggerPrice);
|
|
1637
|
-
|
|
1665
|
+
if (isLimitOrder) {
|
|
1666
|
+
request['ordertype'] = 'take-profit-limit';
|
|
1667
|
+
}
|
|
1668
|
+
else {
|
|
1669
|
+
request['ordertype'] = 'take-profit';
|
|
1670
|
+
}
|
|
1671
|
+
}
|
|
1672
|
+
if (isLimitOrder) {
|
|
1673
|
+
request['price2'] = this.priceToPrecision(symbol, price);
|
|
1638
1674
|
}
|
|
1639
|
-
request['price2'] = this.priceToPrecision(symbol, price);
|
|
1640
|
-
reduceOnly = true;
|
|
1641
1675
|
}
|
|
1642
1676
|
else if (isTrailingAmountOrder) {
|
|
1643
1677
|
const trailingActivationPriceType = this.safeString(params, 'trigger', 'last');
|
|
1644
1678
|
const trailingAmountString = '+' + trailingAmount;
|
|
1645
1679
|
request['trigger'] = trailingActivationPriceType;
|
|
1646
|
-
if (
|
|
1680
|
+
if (isLimitOrder || (trailingLimitAmount !== undefined)) {
|
|
1647
1681
|
const offset = this.safeString(params, 'offset', '-');
|
|
1648
1682
|
const trailingLimitAmountString = offset + this.numberToString(trailingLimitAmount);
|
|
1649
1683
|
request['price'] = trailingAmountString;
|
package/js/src/kucoin.js
CHANGED
|
@@ -50,6 +50,7 @@ export default class kucoin extends Exchange {
|
|
|
50
50
|
'createStopLimitOrder': true,
|
|
51
51
|
'createStopMarketOrder': true,
|
|
52
52
|
'createStopOrder': true,
|
|
53
|
+
'createTriggerOrder': true,
|
|
53
54
|
'editOrder': true,
|
|
54
55
|
'fetchAccounts': true,
|
|
55
56
|
'fetchBalance': true,
|
|
@@ -316,6 +317,7 @@ export default class kucoin extends Exchange {
|
|
|
316
317
|
'premium/query': 4.5,
|
|
317
318
|
'trade-statistics': 4.5,
|
|
318
319
|
'funding-rate/{symbol}/current': 3,
|
|
320
|
+
'contract/funding-rates': 7.5,
|
|
319
321
|
'timestamp': 3,
|
|
320
322
|
'status': 6,
|
|
321
323
|
// ?
|
|
@@ -345,6 +347,7 @@ export default class kucoin extends Exchange {
|
|
|
345
347
|
'openOrderStatistics': 15,
|
|
346
348
|
'position': 3,
|
|
347
349
|
'positions': 3,
|
|
350
|
+
'margin/maxWithdrawMargin': 15,
|
|
348
351
|
'contracts/risk-limit/{symbol}': 7.5,
|
|
349
352
|
'funding-history': 7.5, // 5FW
|
|
350
353
|
},
|
|
@@ -355,7 +358,9 @@ export default class kucoin extends Exchange {
|
|
|
355
358
|
// futures
|
|
356
359
|
'orders': 3,
|
|
357
360
|
'orders/test': 3,
|
|
361
|
+
'orders/multi': 4.5,
|
|
358
362
|
'position/margin/auto-deposit-status': 6,
|
|
363
|
+
'margin/withdrawMargin': 15,
|
|
359
364
|
'position/margin/deposit-margin': 6,
|
|
360
365
|
'position/risk-limit-level/change': 6,
|
|
361
366
|
// ws
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import kucoin from './abstract/kucoinfutures.js';
|
|
2
|
-
import type { Int, OrderSide, OrderType, OHLCV, Order, Trade,
|
|
2
|
+
import type { Int, OrderSide, OrderType, OHLCV, Order, Trade, FundingHistory, Balances, Str, Ticker, OrderBook, Transaction, Strings, Market, Currency, OrderRequest } from './base/types.js';
|
|
3
3
|
export default class kucoinfutures extends kucoin {
|
|
4
4
|
describe(): any;
|
|
5
5
|
fetchStatus(params?: {}): Promise<{
|
|
@@ -28,6 +28,8 @@ export default class kucoinfutures extends kucoin {
|
|
|
28
28
|
fetchPositions(symbols?: Strings, params?: {}): Promise<import("./base/types.js").Position[]>;
|
|
29
29
|
parsePosition(position: any, market?: Market): import("./base/types.js").Position;
|
|
30
30
|
createOrder(symbol: string, type: OrderType, side: OrderSide, amount: any, price?: any, params?: {}): Promise<Order>;
|
|
31
|
+
createOrders(orders: OrderRequest[], params?: {}): Promise<Order[]>;
|
|
32
|
+
createContractOrderRequest(symbol: string, type: OrderType, side: OrderSide, amount: any, price?: any, params?: {}): any;
|
|
31
33
|
cancelOrder(id: string, symbol?: Str, params?: {}): Promise<any>;
|
|
32
34
|
cancelAllOrders(symbol?: Str, params?: {}): Promise<any>;
|
|
33
35
|
addMargin(symbol: string, amount: any, params?: {}): Promise<any>;
|
|
@@ -85,7 +87,7 @@ export default class kucoinfutures extends kucoin {
|
|
|
85
87
|
fetchWithdrawals(code?: Str, since?: Int, limit?: Int, params?: {}): Promise<Transaction[]>;
|
|
86
88
|
fetchMarketLeverageTiers(symbol: string, params?: {}): Promise<any[]>;
|
|
87
89
|
parseMarketLeverageTiers(info: any, market?: Market): any[];
|
|
88
|
-
fetchFundingRateHistory(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<FundingRateHistory[]>;
|
|
90
|
+
fetchFundingRateHistory(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<import("./base/types.js").FundingRateHistory[]>;
|
|
89
91
|
parseFundingRateHistory(info: any, market?: Market): {
|
|
90
92
|
info: any;
|
|
91
93
|
symbol: string;
|