ccxt 4.1.44 → 4.1.46

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.
Files changed (242) hide show
  1. package/README.md +3 -3
  2. package/dist/ccxt.browser.js +2132 -768
  3. package/dist/ccxt.browser.min.js +9 -9
  4. package/dist/cjs/ccxt.js +1 -1
  5. package/dist/cjs/src/ace.js +1 -3
  6. package/dist/cjs/src/ascendex.js +1 -3
  7. package/dist/cjs/src/base/Exchange.js +11 -3
  8. package/dist/cjs/src/base/ws/Cache.js +50 -0
  9. package/dist/cjs/src/bigone.js +2 -6
  10. package/dist/cjs/src/binance.js +16 -12
  11. package/dist/cjs/src/bit2c.js +2 -4
  12. package/dist/cjs/src/bitbns.js +5 -15
  13. package/dist/cjs/src/bitfinex.js +1 -3
  14. package/dist/cjs/src/bitfinex2.js +1 -3
  15. package/dist/cjs/src/bitflyer.js +4 -12
  16. package/dist/cjs/src/bitforex.js +4 -8
  17. package/dist/cjs/src/bithumb.js +4 -10
  18. package/dist/cjs/src/bitmart.js +64 -59
  19. package/dist/cjs/src/bitmex.js +2 -6
  20. package/dist/cjs/src/bitopro.js +6 -16
  21. package/dist/cjs/src/bitrue.js +6 -14
  22. package/dist/cjs/src/bitvavo.js +9 -14
  23. package/dist/cjs/src/btctradeua.js +2 -4
  24. package/dist/cjs/src/bybit.js +88 -132
  25. package/dist/cjs/src/cex.js +2 -4
  26. package/dist/cjs/src/coinbasepro.js +2 -2
  27. package/dist/cjs/src/coinex.js +7 -24
  28. package/dist/cjs/src/coinfalcon.js +1 -3
  29. package/dist/cjs/src/coinmate.js +2 -4
  30. package/dist/cjs/src/coinone.js +2 -6
  31. package/dist/cjs/src/coinsph.js +5 -13
  32. package/dist/cjs/src/cryptocom.js +1 -1
  33. package/dist/cjs/src/currencycom.js +2 -6
  34. package/dist/cjs/src/gate.js +5 -7
  35. package/dist/cjs/src/gemini.js +1 -3
  36. package/dist/cjs/src/hitbtc.js +290 -100
  37. package/dist/cjs/src/hollaex.js +1 -3
  38. package/dist/cjs/src/huobi.js +4 -14
  39. package/dist/cjs/src/huobijp.js +1 -3
  40. package/dist/cjs/src/indodax.js +4 -10
  41. package/dist/cjs/src/kucoinfutures.js +2 -7
  42. package/dist/cjs/src/kuna.js +1 -0
  43. package/dist/cjs/src/luno.js +1 -3
  44. package/dist/cjs/src/mercado.js +7 -17
  45. package/dist/cjs/src/mexc.js +5 -15
  46. package/dist/cjs/src/oceanex.js +2 -4
  47. package/dist/cjs/src/okx.js +33 -21
  48. package/dist/cjs/src/phemex.js +12 -33
  49. package/dist/cjs/src/poloniexfutures.js +2 -6
  50. package/dist/cjs/src/pro/binance.js +203 -1
  51. package/dist/cjs/src/pro/bitget.js +181 -0
  52. package/dist/cjs/src/pro/bitmart.js +2 -4
  53. package/dist/cjs/src/pro/bitrue.js +0 -4
  54. package/dist/cjs/src/pro/bitstamp.js +2 -4
  55. package/dist/cjs/src/pro/bitvavo.js +3 -7
  56. package/dist/cjs/src/pro/bybit.js +154 -10
  57. package/dist/cjs/src/pro/cex.js +2 -6
  58. package/dist/cjs/src/pro/cryptocom.js +131 -1
  59. package/dist/cjs/src/pro/gate.js +161 -0
  60. package/dist/cjs/src/pro/huobi.js +128 -4
  61. package/dist/cjs/src/pro/krakenfutures.js +129 -0
  62. package/dist/cjs/src/pro/kucoinfutures.js +182 -0
  63. package/dist/cjs/src/pro/okx.js +121 -0
  64. package/dist/cjs/src/pro/whitebit.js +3 -7
  65. package/dist/cjs/src/probit.js +2 -6
  66. package/dist/cjs/src/tokocrypto.js +3 -7
  67. package/dist/cjs/src/wavesexchange.js +2 -4
  68. package/dist/cjs/src/wazirx.js +4 -10
  69. package/dist/cjs/src/whitebit.js +3 -7
  70. package/dist/cjs/src/woo.js +0 -3
  71. package/dist/cjs/src/yobit.js +3 -7
  72. package/js/ccxt.d.ts +1 -1
  73. package/js/ccxt.js +1 -1
  74. package/js/src/abstract/bequant.d.ts +37 -7
  75. package/js/src/abstract/binance.d.ts +1 -0
  76. package/js/src/abstract/binancecoinm.d.ts +1 -0
  77. package/js/src/abstract/binanceus.d.ts +1 -0
  78. package/js/src/abstract/binanceusdm.d.ts +1 -0
  79. package/js/src/abstract/bitcoincom.d.ts +37 -7
  80. package/js/src/abstract/bybit.d.ts +3 -0
  81. package/js/src/abstract/fmfwio.d.ts +37 -7
  82. package/js/src/abstract/hitbtc.d.ts +37 -7
  83. package/js/src/abstract/hitbtc3.d.ts +37 -7
  84. package/js/src/abstract/okex.d.ts +6 -1
  85. package/js/src/abstract/okex5.d.ts +6 -1
  86. package/js/src/abstract/okx.d.ts +6 -1
  87. package/js/src/ace.d.ts +2 -2
  88. package/js/src/ace.js +2 -4
  89. package/js/src/alpaca.d.ts +2 -2
  90. package/js/src/ascendex.d.ts +2 -2
  91. package/js/src/ascendex.js +1 -3
  92. package/js/src/base/Exchange.d.ts +4 -1
  93. package/js/src/base/Exchange.js +11 -3
  94. package/js/src/base/ws/Cache.d.ts +5 -1
  95. package/js/src/base/ws/Cache.js +50 -1
  96. package/js/src/bigone.d.ts +2 -2
  97. package/js/src/bigone.js +3 -7
  98. package/js/src/binance.d.ts +2 -2
  99. package/js/src/binance.js +16 -12
  100. package/js/src/bingx.d.ts +2 -2
  101. package/js/src/bit2c.d.ts +2 -2
  102. package/js/src/bit2c.js +3 -5
  103. package/js/src/bitbank.d.ts +2 -2
  104. package/js/src/bitbns.d.ts +2 -2
  105. package/js/src/bitbns.js +5 -15
  106. package/js/src/bitfinex.d.ts +2 -2
  107. package/js/src/bitfinex.js +1 -3
  108. package/js/src/bitfinex2.js +1 -3
  109. package/js/src/bitflyer.d.ts +2 -2
  110. package/js/src/bitflyer.js +4 -12
  111. package/js/src/bitforex.d.ts +2 -2
  112. package/js/src/bitforex.js +5 -9
  113. package/js/src/bitget.d.ts +2 -2
  114. package/js/src/bithumb.d.ts +2 -2
  115. package/js/src/bithumb.js +4 -10
  116. package/js/src/bitmart.d.ts +2 -2
  117. package/js/src/bitmart.js +64 -59
  118. package/js/src/bitmex.js +2 -6
  119. package/js/src/bitopro.d.ts +2 -2
  120. package/js/src/bitopro.js +6 -16
  121. package/js/src/bitpanda.d.ts +2 -2
  122. package/js/src/bitrue.d.ts +2 -2
  123. package/js/src/bitrue.js +6 -14
  124. package/js/src/bitso.d.ts +2 -2
  125. package/js/src/bitstamp.d.ts +2 -2
  126. package/js/src/bitstamp1.d.ts +2 -2
  127. package/js/src/bittrex.d.ts +2 -2
  128. package/js/src/bitvavo.d.ts +2 -2
  129. package/js/src/bitvavo.js +9 -14
  130. package/js/src/bl3p.d.ts +2 -2
  131. package/js/src/blockchaincom.d.ts +4 -4
  132. package/js/src/btcalpha.d.ts +2 -2
  133. package/js/src/btcbox.d.ts +2 -2
  134. package/js/src/btcmarkets.d.ts +2 -2
  135. package/js/src/btctradeua.d.ts +2 -2
  136. package/js/src/btctradeua.js +3 -5
  137. package/js/src/btcturk.d.ts +2 -2
  138. package/js/src/bybit.d.ts +2 -4
  139. package/js/src/bybit.js +88 -132
  140. package/js/src/cex.d.ts +2 -2
  141. package/js/src/cex.js +2 -4
  142. package/js/src/coinbase.d.ts +2 -2
  143. package/js/src/coinbasepro.d.ts +2 -2
  144. package/js/src/coinbasepro.js +2 -2
  145. package/js/src/coincheck.d.ts +2 -2
  146. package/js/src/coinex.js +7 -24
  147. package/js/src/coinfalcon.d.ts +2 -2
  148. package/js/src/coinfalcon.js +2 -4
  149. package/js/src/coinlist.d.ts +12 -12
  150. package/js/src/coinmate.d.ts +3 -3
  151. package/js/src/coinmate.js +3 -5
  152. package/js/src/coinone.d.ts +2 -2
  153. package/js/src/coinone.js +2 -6
  154. package/js/src/coinsph.d.ts +2 -2
  155. package/js/src/coinsph.js +5 -13
  156. package/js/src/coinspot.d.ts +2 -2
  157. package/js/src/cryptocom.d.ts +2 -2
  158. package/js/src/cryptocom.js +1 -1
  159. package/js/src/currencycom.d.ts +2 -2
  160. package/js/src/currencycom.js +2 -6
  161. package/js/src/delta.d.ts +2 -2
  162. package/js/src/deribit.d.ts +3 -3
  163. package/js/src/digifinex.d.ts +2 -2
  164. package/js/src/gate.d.ts +2 -2
  165. package/js/src/gate.js +5 -7
  166. package/js/src/gemini.d.ts +3 -3
  167. package/js/src/gemini.js +1 -3
  168. package/js/src/hitbtc.d.ts +3 -0
  169. package/js/src/hitbtc.js +291 -101
  170. package/js/src/hollaex.js +1 -3
  171. package/js/src/huobi.d.ts +2 -2
  172. package/js/src/huobi.js +4 -14
  173. package/js/src/huobijp.d.ts +2 -2
  174. package/js/src/huobijp.js +2 -4
  175. package/js/src/independentreserve.d.ts +2 -2
  176. package/js/src/indodax.d.ts +2 -2
  177. package/js/src/indodax.js +4 -10
  178. package/js/src/kraken.d.ts +2 -2
  179. package/js/src/krakenfutures.d.ts +2 -2
  180. package/js/src/kucoin.d.ts +2 -2
  181. package/js/src/kucoinfutures.d.ts +2 -2
  182. package/js/src/kucoinfutures.js +2 -7
  183. package/js/src/kuna.d.ts +3 -3
  184. package/js/src/kuna.js +1 -0
  185. package/js/src/latoken.d.ts +2 -2
  186. package/js/src/lbank2.d.ts +2 -2
  187. package/js/src/luno.d.ts +2 -2
  188. package/js/src/luno.js +1 -3
  189. package/js/src/lykke.d.ts +2 -2
  190. package/js/src/mercado.d.ts +2 -2
  191. package/js/src/mercado.js +7 -17
  192. package/js/src/mexc.js +5 -15
  193. package/js/src/novadax.d.ts +2 -2
  194. package/js/src/oceanex.d.ts +4 -4
  195. package/js/src/oceanex.js +2 -4
  196. package/js/src/okcoin.d.ts +2 -2
  197. package/js/src/okx.d.ts +2 -2
  198. package/js/src/okx.js +33 -21
  199. package/js/src/paymium.d.ts +2 -2
  200. package/js/src/phemex.js +12 -33
  201. package/js/src/poloniexfutures.d.ts +2 -2
  202. package/js/src/poloniexfutures.js +2 -6
  203. package/js/src/pro/binance.d.ts +6 -0
  204. package/js/src/pro/binance.js +204 -2
  205. package/js/src/pro/bitget.d.ts +3 -0
  206. package/js/src/pro/bitget.js +182 -1
  207. package/js/src/pro/bitmart.js +2 -4
  208. package/js/src/pro/bitrue.js +0 -4
  209. package/js/src/pro/bitstamp.js +3 -5
  210. package/js/src/pro/bitvavo.js +4 -8
  211. package/js/src/pro/bybit.d.ts +5 -1
  212. package/js/src/pro/bybit.js +156 -12
  213. package/js/src/pro/cex.js +3 -7
  214. package/js/src/pro/cryptocom.d.ts +4 -0
  215. package/js/src/pro/cryptocom.js +132 -2
  216. package/js/src/pro/gate.d.ts +5 -0
  217. package/js/src/pro/gate.js +162 -1
  218. package/js/src/pro/huobi.d.ts +2 -0
  219. package/js/src/pro/huobi.js +129 -5
  220. package/js/src/pro/krakenfutures.d.ts +3 -0
  221. package/js/src/pro/krakenfutures.js +129 -0
  222. package/js/src/pro/kucoinfutures.d.ts +5 -0
  223. package/js/src/pro/kucoinfutures.js +182 -0
  224. package/js/src/pro/okx.d.ts +2 -0
  225. package/js/src/pro/okx.js +123 -2
  226. package/js/src/pro/whitebit.js +4 -8
  227. package/js/src/probit.d.ts +2 -2
  228. package/js/src/probit.js +3 -7
  229. package/js/src/timex.d.ts +2 -2
  230. package/js/src/tokocrypto.d.ts +2 -2
  231. package/js/src/tokocrypto.js +4 -8
  232. package/js/src/wavesexchange.js +3 -5
  233. package/js/src/wazirx.d.ts +2 -2
  234. package/js/src/wazirx.js +5 -11
  235. package/js/src/whitebit.d.ts +2 -2
  236. package/js/src/whitebit.js +3 -7
  237. package/js/src/woo.d.ts +2 -2
  238. package/js/src/woo.js +1 -4
  239. package/js/src/yobit.js +3 -7
  240. package/js/src/zaif.d.ts +2 -2
  241. package/package.json +1 -1
  242. package/skip-tests.json +3 -1
@@ -323,6 +323,8 @@ class bybit extends bybit$1 {
323
323
  'v5/spot-cross-margin-trade/orders': 1,
324
324
  'v5/spot-cross-margin-trade/repay-history': 1,
325
325
  // institutional lending
326
+ 'v5/ins-loan/product-infos': 5,
327
+ 'v5/ins-loan/ensure-tokens-convert': 5,
326
328
  'v5/ins-loan/loan-order': 5,
327
329
  'v5/ins-loan/repaid-history': 5,
328
330
  'v5/ins-loan/ltv-convert': 5,
@@ -459,6 +461,8 @@ class bybit extends bybit$1 {
459
461
  'v5/spot-cross-margin-trade/loan': 2.5,
460
462
  'v5/spot-cross-margin-trade/repay': 2.5,
461
463
  'v5/spot-cross-margin-trade/switch': 2.5,
464
+ // institutional lending
465
+ 'v5/ins-loan/association-uid': 5,
462
466
  // c2c lending
463
467
  'v5/lending/purchase': 5,
464
468
  'v5/lending/redeem': 5,
@@ -2519,88 +2523,8 @@ class bybit extends bybit$1 {
2519
2523
  return this.filterBySymbolSinceLimit(sorted, symbol, since, limit);
2520
2524
  }
2521
2525
  parseTrade(trade, market = undefined) {
2522
- const isSpotTrade = ('isBuyerMaker' in trade) || ('feeTokenId' in trade);
2523
- if (isSpotTrade) {
2524
- return this.parseSpotTrade(trade, market);
2525
- }
2526
- else {
2527
- return this.parseContractTrade(trade, market);
2528
- }
2529
- }
2530
- parseSpotTrade(trade, market = undefined) {
2531
2526
  //
2532
- // public:
2533
- // {
2534
- // "price": "39548.68",
2535
- // "time": "1651748717850",
2536
- // "qty": "0.166872",
2537
- // "isBuyerMaker": 0
2538
- // }
2539
- //
2540
- // private:
2541
- // {
2542
- // "orderPrice": "82.5",
2543
- // "creatTime": "1666702226326",
2544
- // "orderQty": "0.016",
2545
- // "isBuyer": "0",
2546
- // "isMaker": "0",
2547
- // "symbol": "AAVEUSDT",
2548
- // "id": "1274785101965716992",
2549
- // "orderId": "1274784252359089664",
2550
- // "tradeId": "2270000000031365639",
2551
- // "execFee": "0",
2552
- // "feeTokenId": "AAVE",
2553
- // "matchOrderId": "1274785101865076224",
2554
- // "makerRebate": "0",
2555
- // "executionTime": "1666702226335"
2556
- // }
2557
- //
2558
- const timestamp = this.safeIntegerN(trade, ['time', 'creatTime']);
2559
- let takerOrMaker = undefined;
2560
- let side = undefined;
2561
- const isBuyerMaker = this.safeInteger(trade, 'isBuyerMaker');
2562
- if (isBuyerMaker !== undefined) {
2563
- // if public response
2564
- side = (isBuyerMaker === 1) ? 'buy' : 'sell';
2565
- }
2566
- else {
2567
- // if private response
2568
- const isBuyer = this.safeInteger(trade, 'isBuyer');
2569
- const isMaker = this.safeInteger(trade, 'isMaker');
2570
- takerOrMaker = (isMaker === 0) ? 'maker' : 'taker';
2571
- side = (isBuyer === 0) ? 'buy' : 'sell';
2572
- }
2573
- const marketId = this.safeString(trade, 'symbol');
2574
- market = this.safeMarket(marketId, market, undefined, 'spot');
2575
- let fee = undefined;
2576
- const feeCost = this.safeString(trade, 'execFee');
2577
- if (feeCost !== undefined) {
2578
- const feeToken = this.safeString(trade, 'feeTokenId');
2579
- const feeCurrency = this.safeCurrencyCode(feeToken);
2580
- fee = {
2581
- 'cost': feeCost,
2582
- 'currency': feeCurrency,
2583
- };
2584
- }
2585
- return this.safeTrade({
2586
- 'id': this.safeString(trade, 'tradeId'),
2587
- 'info': trade,
2588
- 'timestamp': timestamp,
2589
- 'datetime': this.iso8601(timestamp),
2590
- 'symbol': market['symbol'],
2591
- 'order': this.safeString(trade, 'orderId'),
2592
- 'type': undefined,
2593
- 'side': side,
2594
- 'takerOrMaker': takerOrMaker,
2595
- 'price': this.safeString2(trade, 'price', 'orderPrice'),
2596
- 'amount': this.safeString2(trade, 'qty', 'orderQty'),
2597
- 'cost': undefined,
2598
- 'fee': fee,
2599
- }, market);
2600
- }
2601
- parseContractTrade(trade, market = undefined) {
2602
- //
2603
- // public contract
2527
+ // public https://bybit-exchange.github.io/docs/v5/market/recent-trade
2604
2528
  //
2605
2529
  // {
2606
2530
  // "execId": "666042b4-50c6-58f3-bd9c-89b2088663ff",
@@ -2612,59 +2536,66 @@ class bybit extends bybit$1 {
2612
2536
  // "isBlockTrade": false
2613
2537
  // }
2614
2538
  //
2615
- // public unified margin
2539
+ // private trades classic spot https://bybit-exchange.github.io/docs/v5/position/execution
2616
2540
  //
2617
2541
  // {
2618
- // "execId": "da66abbc-f358-5864-8d34-84ef7274d853",
2619
- // "symbol": "BTCUSDT",
2620
- // "price": "20802.50",
2621
- // "size": "0.200",
2622
- // "side": "Sell",
2623
- // "time": "1657870316630"
2624
- // }
2625
- //
2626
- // private contract trades
2627
- //
2628
- // {
2629
- // "symbol": "ETHUSD",
2630
- // "execFee": "0.00005484",
2631
- // "execId": "acf78206-d464-589b-b888-51bd130821c1",
2632
- // "execPrice": "1367.80",
2633
- // "execQty": "100",
2634
- // "execType": "Trade",
2635
- // "execValue": "0.0731101",
2636
- // "feeRate": "0.00075",
2637
- // "lastLiquidityInd": "RemovedLiquidity",
2638
- // "leavesQty": "0",
2639
- // "orderId": "fdc584c3-be5d-41ff-8f54-5be7649b1d1c",
2542
+ // "symbol": "QNTUSDT",
2543
+ // "orderId": "1538686353240339712",
2640
2544
  // "orderLinkId": "",
2641
- // "orderPrice": "1299.50",
2642
- // "orderQty": "100",
2643
- // "orderType": "Market",
2644
- // "stopOrderType": "UNKNOWN",
2645
2545
  // "side": "Sell",
2646
- // "execTime": "1611528105547",
2647
- // "closedSize": "100"
2546
+ // "orderPrice": "",
2547
+ // "orderQty": "",
2548
+ // "leavesQty": "",
2549
+ // "orderType": "Limit",
2550
+ // "stopOrderType": "",
2551
+ // "execFee": "0.040919",
2552
+ // "execId": "2210000000097330907",
2553
+ // "execPrice": "98.6",
2554
+ // "execQty": "0.415",
2555
+ // "execType": "",
2556
+ // "execValue": "",
2557
+ // "execTime": "1698161716634",
2558
+ // "isMaker": true,
2559
+ // "feeRate": "",
2560
+ // "tradeIv": "",
2561
+ // "markIv": "",
2562
+ // "markPrice": "",
2563
+ // "indexPrice": "",
2564
+ // "underlyingPrice": "",
2565
+ // "blockTradeId": ""
2648
2566
  // }
2649
2567
  //
2650
- // private unified margin
2568
+ // private trades unified https://bybit-exchange.github.io/docs/v5/position/execution
2651
2569
  //
2652
2570
  // {
2653
- // "symbol": "AAVEUSDT",
2654
- // "id": "1274785101965716991",
2655
- // "orderId": "1274784252359089664",
2656
- // "tradeId": "2270000000031365639",
2657
- // "orderPrice": "82.5",
2658
- // "orderQty": "0.016",
2659
- // "execFee": "0",
2660
- // "feeTokenId": "AAVE",
2661
- // "creatTime": "1666702226326",
2662
- // "isBuyer": "0",
2663
- // "isMaker": "0",
2664
- // "matchOrderId": "1274785101865076224",
2665
- // "makerRebate": "0",
2666
- // "executionTime": "1666702226335"
2667
- // }
2571
+ // "symbol": "QNTUSDT",
2572
+ // "orderType": "Limit",
2573
+ // "underlyingPrice": "",
2574
+ // "orderLinkId": "1549452573428424449",
2575
+ // "orderId": "1549452573428424448",
2576
+ // "stopOrderType": "",
2577
+ // "execTime": "1699445151998",
2578
+ // "feeRate": "0.00025",
2579
+ // "tradeIv": "",
2580
+ // "blockTradeId": "",
2581
+ // "markPrice": "",
2582
+ // "execPrice": "102.8",
2583
+ // "markIv": "",
2584
+ // "orderQty": "3.652",
2585
+ // "orderPrice": "102.8",
2586
+ // "execValue": "1.028",
2587
+ // "closedSize": "",
2588
+ // "execType": "Trade",
2589
+ // "seq": "19157444346",
2590
+ // "side": "Buy",
2591
+ // "indexPrice": "",
2592
+ // "leavesQty": "3.642",
2593
+ // "isMaker": true,
2594
+ // "execFee": "0.0000025",
2595
+ // "execId": "2210000000101610464",
2596
+ // "execQty": "0.01",
2597
+ // "nextPageCursor": "267951%3A0%2C38567%3A0"
2598
+ // },
2668
2599
  //
2669
2600
  // private USDC settled trades
2670
2601
  //
@@ -2736,9 +2667,25 @@ class bybit extends bybit$1 {
2736
2667
  const feeCostString = this.safeString(trade, 'execFee');
2737
2668
  let fee = undefined;
2738
2669
  if (feeCostString !== undefined) {
2670
+ const feeRateString = this.safeString(trade, 'feeRate');
2739
2671
  let feeCurrencyCode = undefined;
2740
2672
  if (market['spot']) {
2741
- feeCurrencyCode = this.safeString(trade, 'commissionAsset');
2673
+ if (Precise["default"].stringGt(feeCostString, '0')) {
2674
+ if (side === 'buy') {
2675
+ feeCurrencyCode = market['base'];
2676
+ }
2677
+ else {
2678
+ feeCurrencyCode = market['quote'];
2679
+ }
2680
+ }
2681
+ else {
2682
+ if (side === 'buy') {
2683
+ feeCurrencyCode = market['quote'];
2684
+ }
2685
+ else {
2686
+ feeCurrencyCode = market['base'];
2687
+ }
2688
+ }
2742
2689
  }
2743
2690
  else {
2744
2691
  feeCurrencyCode = market['inverse'] ? market['base'] : market['settle'];
@@ -2746,6 +2693,7 @@ class bybit extends bybit$1 {
2746
2693
  fee = {
2747
2694
  'cost': feeCostString,
2748
2695
  'currency': feeCurrencyCode,
2696
+ 'rate': feeRateString,
2749
2697
  };
2750
2698
  }
2751
2699
  return this.safeTrade({
@@ -5751,11 +5699,19 @@ class bybit extends bybit$1 {
5751
5699
  }
5752
5700
  if (type === 'linear' || type === 'inverse') {
5753
5701
  const baseCoin = this.safeString(params, 'baseCoin');
5754
- if (symbol === undefined && baseCoin === undefined) {
5755
- const defaultSettle = this.safeString(this.options, 'defaultSettle', 'USDT');
5756
- const settleCoin = this.safeString(params, 'settleCoin', defaultSettle);
5757
- request['settleCoin'] = settleCoin;
5758
- isUsdcSettled = (settleCoin === 'USDC');
5702
+ if (type === 'linear') {
5703
+ if (symbol === undefined && baseCoin === undefined) {
5704
+ const defaultSettle = this.safeString(this.options, 'defaultSettle', 'USDT');
5705
+ const settleCoin = this.safeString(params, 'settleCoin', defaultSettle);
5706
+ request['settleCoin'] = settleCoin;
5707
+ isUsdcSettled = (settleCoin === 'USDC');
5708
+ }
5709
+ }
5710
+ else {
5711
+ // inverse
5712
+ if (symbol === undefined && baseCoin === undefined) {
5713
+ request['category'] = 'inverse';
5714
+ }
5759
5715
  }
5760
5716
  }
5761
5717
  if (((type === 'option') || isUsdcSettled) && !isUnifiedAccount) {
@@ -1130,15 +1130,13 @@ class cex extends cex$1 {
1130
1130
  * @description fetches information on multiple closed orders made by the user
1131
1131
  * @param {string} symbol unified market symbol of the market orders were made in
1132
1132
  * @param {int} [since] the earliest time in ms to fetch orders for
1133
- * @param {int} [limit] the maximum number of orde structures to retrieve
1133
+ * @param {int} [limit] the maximum number of order structures to retrieve
1134
1134
  * @param {object} [params] extra parameters specific to the cex api endpoint
1135
1135
  * @returns {Order[]} a list of [order structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure}
1136
1136
  */
1137
+ this.checkRequiredSymbol('fetchClosedOrders', symbol);
1137
1138
  await this.loadMarkets();
1138
1139
  const method = 'privatePostArchivedOrdersPair';
1139
- if (symbol === undefined) {
1140
- throw new errors.ArgumentsRequired(this.id + ' fetchClosedOrders() requires a symbol argument');
1141
- }
1142
1140
  const market = this.market(symbol);
1143
1141
  const request = { 'pair': market['id'] };
1144
1142
  const response = await this[method](this.extend(request, params));
@@ -1233,7 +1233,7 @@ class coinbasepro extends coinbasepro$1 {
1233
1233
  if (clientOrderId !== undefined) {
1234
1234
  request['client_oid'] = clientOrderId;
1235
1235
  }
1236
- const stopPrice = this.safeNumber2(params, 'stopPrice', 'stop_price');
1236
+ const stopPrice = this.safeNumberN(params, ['stopPrice', 'stop_price', 'triggerPrice']);
1237
1237
  if (stopPrice !== undefined) {
1238
1238
  request['stop_price'] = this.priceToPrecision(symbol, stopPrice);
1239
1239
  }
@@ -1245,7 +1245,7 @@ class coinbasepro extends coinbasepro$1 {
1245
1245
  if (postOnly) {
1246
1246
  request['post_only'] = true;
1247
1247
  }
1248
- params = this.omit(params, ['timeInForce', 'time_in_force', 'stopPrice', 'stop_price', 'clientOrderId', 'client_oid', 'postOnly', 'post_only']);
1248
+ params = this.omit(params, ['timeInForce', 'time_in_force', 'stopPrice', 'stop_price', 'clientOrderId', 'client_oid', 'postOnly', 'post_only', 'triggerPrice']);
1249
1249
  if (type === 'limit') {
1250
1250
  request['price'] = this.priceToPrecision(symbol, price);
1251
1251
  request['size'] = this.amountToPrecision(symbol, amount);
@@ -901,9 +901,6 @@ class coinex extends coinex$1 {
901
901
  * @param {object} [params] extra parameters specific to the coinex api endpoint
902
902
  * @returns {object} A dictionary of [order book structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-book-structure} indexed by market symbols
903
903
  */
904
- if (symbol === undefined) {
905
- throw new errors.ArgumentsRequired(this.id + ' fetchOrderBook() requires a symbol argument');
906
- }
907
904
  await this.loadMarkets();
908
905
  const market = this.market(symbol);
909
906
  if (limit === undefined) {
@@ -2302,9 +2299,7 @@ class coinex extends coinex$1 {
2302
2299
  * @param {object} [params] extra parameters specific to the coinex api endpoint
2303
2300
  * @returns {object[]} a list of [order structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure}
2304
2301
  */
2305
- if (symbol === undefined) {
2306
- throw new errors.ArgumentsRequired(this.id + ' cancellAllOrders() requires a symbol argument');
2307
- }
2302
+ this.checkRequiredSymbol('cancelAllOrders', symbol);
2308
2303
  await this.loadMarkets();
2309
2304
  const market = this.market(symbol);
2310
2305
  const marketId = market['id'];
@@ -2352,9 +2347,7 @@ class coinex extends coinex$1 {
2352
2347
  * @param {object} [params] extra parameters specific to the coinex api endpoint
2353
2348
  * @returns {object} An [order structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure}
2354
2349
  */
2355
- if (symbol === undefined) {
2356
- throw new errors.ArgumentsRequired(this.id + ' fetchOrder() requires a symbol argument');
2357
- }
2350
+ this.checkRequiredSymbol('fetchOrder', symbol);
2358
2351
  await this.loadMarkets();
2359
2352
  const market = this.market(symbol);
2360
2353
  const swap = market['swap'];
@@ -3257,9 +3250,7 @@ class coinex extends coinex$1 {
3257
3250
  * @param {object} [params] extra parameters specific to the coinex api endpoint
3258
3251
  * @returns {object} response from the exchange
3259
3252
  */
3260
- if (symbol === undefined) {
3261
- throw new errors.ArgumentsRequired(this.id + ' setMarginMode() requires a symbol argument');
3262
- }
3253
+ this.checkRequiredSymbol('setMarginMode', symbol);
3263
3254
  marginMode = marginMode.toLowerCase();
3264
3255
  if (marginMode !== 'isolated' && marginMode !== 'cross') {
3265
3256
  throw new errors.BadRequest(this.id + ' setMarginMode() marginMode argument should be isolated or cross');
@@ -3533,9 +3524,7 @@ class coinex extends coinex$1 {
3533
3524
  * @param {object} [params] extra parameters specific to the coinex api endpoint
3534
3525
  * @returns {object} a [funding history structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#funding-history-structure}
3535
3526
  */
3536
- if (symbol === undefined) {
3537
- throw new errors.ArgumentsRequired(this.id + ' fetchFundingHistory() requires a symbol argument');
3538
- }
3527
+ this.checkRequiredSymbol('fetchFundingHistory', symbol);
3539
3528
  limit = (limit === undefined) ? 100 : limit;
3540
3529
  await this.loadMarkets();
3541
3530
  const market = this.market(symbol);
@@ -3855,9 +3844,7 @@ class coinex extends coinex$1 {
3855
3844
  * @param {int} [params.until] timestamp in ms of the latest funding rate
3856
3845
  * @returns {object[]} a list of [funding rate structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#funding-rate-history-structure}
3857
3846
  */
3858
- if (symbol === undefined) {
3859
- throw new errors.ArgumentsRequired(this.id + ' fetchFundingRateHistory() requires a symbol argument');
3860
- }
3847
+ this.checkRequiredSymbol('fetchFundingRateHistory', symbol);
3861
3848
  await this.loadMarkets();
3862
3849
  let paginate = false;
3863
3850
  [paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
@@ -4579,9 +4566,7 @@ class coinex extends coinex$1 {
4579
4566
  * @param {object} [params] extra parameters specific to the coinex api endpoint
4580
4567
  * @returns {object} a [margin loan structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#margin-loan-structure}
4581
4568
  */
4582
- if (symbol === undefined) {
4583
- throw new errors.ArgumentsRequired(this.id + ' borrowMargin() requires a symbol argument');
4584
- }
4569
+ this.checkRequiredSymbol('borrowMargin', symbol);
4585
4570
  await this.loadMarkets();
4586
4571
  const market = this.market(symbol);
4587
4572
  const currency = this.currency(code);
@@ -4620,9 +4605,7 @@ class coinex extends coinex$1 {
4620
4605
  * @param {string} [params.loan_id] extra parameter that is not required
4621
4606
  * @returns {object} a [margin loan structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#margin-loan-structure}
4622
4607
  */
4623
- if (symbol === undefined) {
4624
- throw new errors.ArgumentsRequired(this.id + ' repayMargin() requires a symbol argument');
4625
- }
4608
+ this.checkRequiredSymbol('repayMargin', symbol);
4626
4609
  await this.loadMarkets();
4627
4610
  const market = this.market(symbol);
4628
4611
  const currency = this.currency(code);
@@ -405,9 +405,7 @@ class coinfalcon extends coinfalcon$1 {
405
405
  * @param {object} [params] extra parameters specific to the coinfalcon api endpoint
406
406
  * @returns {Trade[]} a list of [trade structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#trade-structure}
407
407
  */
408
- if (symbol === undefined) {
409
- throw new errors.ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
410
- }
408
+ this.checkRequiredSymbol('fetchMyTrades', symbol);
411
409
  await this.loadMarkets();
412
410
  const market = this.market(symbol);
413
411
  const request = {
@@ -735,13 +735,11 @@ class coinmate extends coinmate$1 {
735
735
  * @description fetches information on multiple orders made by the user
736
736
  * @param {string} symbol unified market symbol of the market orders were made in
737
737
  * @param {int} [since] the earliest time in ms to fetch orders for
738
- * @param {int} [limit] the maximum number of orde structures to retrieve
738
+ * @param {int} [limit] the maximum number of order structures to retrieve
739
739
  * @param {object} [params] extra parameters specific to the coinmate api endpoint
740
740
  * @returns {Order[]} a list of [order structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure}
741
741
  */
742
- if (symbol === undefined) {
743
- throw new errors.ArgumentsRequired(this.id + ' fetchOrders() requires a symbol argument');
744
- }
742
+ this.checkRequiredSymbol('fetchOrders', symbol);
745
743
  await this.loadMarkets();
746
744
  const market = this.market(symbol);
747
745
  const request = {
@@ -534,9 +534,7 @@ class coinone extends coinone$1 {
534
534
  * @param {object} [params] extra parameters specific to the coinone api endpoint
535
535
  * @returns {object} An [order structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure}
536
536
  */
537
- if (symbol === undefined) {
538
- throw new errors.ArgumentsRequired(this.id + ' fetchOrder() requires a symbol argument');
539
- }
537
+ this.checkRequiredSymbol('fetchOrder', symbol);
540
538
  await this.loadMarkets();
541
539
  const market = this.market(symbol);
542
540
  const request = {
@@ -746,9 +744,7 @@ class coinone extends coinone$1 {
746
744
  * @param {object} [params] extra parameters specific to the coinone api endpoint
747
745
  * @returns {Trade[]} a list of [trade structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#trade-structure}
748
746
  */
749
- if (symbol === undefined) {
750
- throw new errors.ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
751
- }
747
+ this.checkRequiredSymbol('fetchMyTrades', symbol);
752
748
  await this.loadMarkets();
753
749
  const market = this.market(symbol);
754
750
  const request = {
@@ -877,9 +877,7 @@ class coinsph extends coinsph$1 {
877
877
  * @param {object} [params] extra parameters specific to the coinsph api endpoint
878
878
  * @returns {Trade[]} a list of [trade structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#trade-structure}
879
879
  */
880
- if (symbol === undefined) {
881
- throw new errors.ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
882
- }
880
+ this.checkRequiredSymbol('fetchMyTrades', symbol);
883
881
  await this.loadMarkets();
884
882
  const market = this.market(symbol);
885
883
  const request = {
@@ -908,9 +906,7 @@ class coinsph extends coinsph$1 {
908
906
  * @param {object} [params] extra parameters specific to the coinsph api endpoint
909
907
  * @returns {object[]} a list of [trade structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#trade-structure}
910
908
  */
911
- if (symbol === undefined) {
912
- throw new errors.ArgumentsRequired(this.id + ' fetchOrderTrades() requires a symbol argument');
913
- }
909
+ this.checkRequiredSymbol('fetchOrderTrades', symbol);
914
910
  const request = {
915
911
  'orderId': id,
916
912
  };
@@ -1210,13 +1206,11 @@ class coinsph extends coinsph$1 {
1210
1206
  * @description fetches information on multiple closed orders made by the user
1211
1207
  * @param {string} symbol unified market symbol of the market orders were made in
1212
1208
  * @param {int} [since] the earliest time in ms to fetch orders for
1213
- * @param {int} [limit] the maximum number of orde structures to retrieve (default 500, max 1000)
1209
+ * @param {int} [limit] the maximum number of order structures to retrieve (default 500, max 1000)
1214
1210
  * @param {object} [params] extra parameters specific to the coinsph api endpoint
1215
1211
  * @returns {Order[]} a list of [order structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure}
1216
1212
  */
1217
- if (symbol === undefined) {
1218
- throw new errors.ArgumentsRequired(this.id + ' fetchClosedOrders() requires a symbol argument');
1219
- }
1213
+ this.checkRequiredSymbol('fetchClosedOrders', symbol);
1220
1214
  await this.loadMarkets();
1221
1215
  const market = this.market(symbol);
1222
1216
  const request = {
@@ -1265,9 +1259,7 @@ class coinsph extends coinsph$1 {
1265
1259
  * @param {object} [params] extra parameters specific to the coinsph api endpoint
1266
1260
  * @returns {object[]} a list of [order structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure}
1267
1261
  */
1268
- if (symbol === undefined) {
1269
- throw new errors.ArgumentsRequired(this.id + ' cancelAllOrders() requires a symbol argument');
1270
- }
1262
+ this.checkRequiredSymbol('cancelAllOrders', symbol);
1271
1263
  await this.loadMarkets();
1272
1264
  let market = undefined;
1273
1265
  const request = {};
@@ -3167,7 +3167,7 @@ class cryptocom extends cryptocom$1 {
3167
3167
  'datetime': this.iso8601(timestamp),
3168
3168
  'hedged': undefined,
3169
3169
  'side': undefined,
3170
- 'contracts': undefined,
3170
+ 'contracts': this.safeNumber(position, 'quantity'),
3171
3171
  'contractSize': market['contractSize'],
3172
3172
  'entryPrice': undefined,
3173
3173
  'markPrice': undefined,
@@ -1442,9 +1442,7 @@ class currencycom extends currencycom$1 {
1442
1442
  * @param {object} [params] extra parameters specific to the currencycom api endpoint
1443
1443
  * @returns {object} An [order structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure}
1444
1444
  */
1445
- if (symbol === undefined) {
1446
- throw new errors.ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
1447
- }
1445
+ this.checkRequiredSymbol('cancelOrder', symbol);
1448
1446
  await this.loadMarkets();
1449
1447
  const market = this.market(symbol);
1450
1448
  const origClientOrderId = this.safeValue(params, 'origClientOrderId');
@@ -1486,9 +1484,7 @@ class currencycom extends currencycom$1 {
1486
1484
  * @param {object} [params] extra parameters specific to the currencycom api endpoint
1487
1485
  * @returns {Trade[]} a list of [trade structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#trade-structure}
1488
1486
  */
1489
- if (symbol === undefined) {
1490
- throw new errors.ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
1491
- }
1487
+ this.checkRequiredSymbol('fetchMyTrades', symbol);
1492
1488
  await this.loadMarkets();
1493
1489
  const market = this.market(symbol);
1494
1490
  const request = {
@@ -2914,9 +2914,7 @@ class gate extends gate$1 {
2914
2914
  * @param {object} [params] extra parameters specific to the gate api endpoint
2915
2915
  * @returns {object[]} a list of [funding rate structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#funding-rate-history-structure}
2916
2916
  */
2917
- if (symbol === undefined) {
2918
- throw new errors.ArgumentsRequired(this.id + ' fetchFundingRateHistory() requires a symbol argument');
2919
- }
2917
+ this.checkRequiredSymbol('fetchFundingRateHistory', symbol);
2920
2918
  await this.loadMarkets();
2921
2919
  const market = this.market(symbol);
2922
2920
  if (!market['swap']) {
@@ -4959,9 +4957,7 @@ class gate extends gate$1 {
4959
4957
  * @param {object} [params] extra parameters specific to the gate api endpoint
4960
4958
  * @returns {object} response from the exchange
4961
4959
  */
4962
- if (symbol === undefined) {
4963
- throw new errors.ArgumentsRequired(this.id + ' setLeverage() requires a symbol argument');
4964
- }
4960
+ this.checkRequiredSymbol('setLeverage', symbol);
4965
4961
  // WARNING: THIS WILL INCREASE LIQUIDATION PRICE FOR OPEN ISOLATED LONG POSITIONS
4966
4962
  // AND DECREASE LIQUIDATION PRICE FOR OPEN ISOLATED SHORT POSITIONS
4967
4963
  if ((leverage < 0) || (leverage > 100)) {
@@ -5096,13 +5092,14 @@ class gate extends gate$1 {
5096
5092
  const takerFee = '0.00075';
5097
5093
  const feePaid = Precise["default"].stringMul(takerFee, notional);
5098
5094
  const initialMarginString = Precise["default"].stringAdd(Precise["default"].stringDiv(notional, leverage), feePaid);
5095
+ const timestamp = this.safeInteger(position, 'time_ms');
5099
5096
  return this.safePosition({
5100
5097
  'info': position,
5101
5098
  'id': undefined,
5102
5099
  'symbol': this.safeString(market, 'symbol'),
5103
5100
  'timestamp': undefined,
5104
5101
  'datetime': undefined,
5105
- 'lastUpdateTimestamp': undefined,
5102
+ 'lastUpdateTimestamp': timestamp,
5106
5103
  'initialMargin': this.parseNumber(initialMarginString),
5107
5104
  'initialMarginPercentage': this.parseNumber(Precise["default"].stringDiv(initialMarginString, notional)),
5108
5105
  'maintenanceMargin': this.parseNumber(Precise["default"].stringMul(maintenanceRate, notional)),
@@ -5111,6 +5108,7 @@ class gate extends gate$1 {
5111
5108
  'notional': this.parseNumber(notional),
5112
5109
  'leverage': this.safeNumber(position, 'leverage'),
5113
5110
  'unrealizedPnl': this.parseNumber(unrealisedPnl),
5111
+ 'realizedPnl': this.safeNumber(position, 'realised_pnl'),
5114
5112
  'contracts': this.parseNumber(Precise["default"].stringAbs(size)),
5115
5113
  'contractSize': this.safeValue(market, 'contractSize'),
5116
5114
  // 'realisedPnl': position['realised_pnl'],
@@ -1451,9 +1451,7 @@ class gemini extends gemini$1 {
1451
1451
  * @param {object} [params] extra parameters specific to the gemini api endpoint
1452
1452
  * @returns {Trade[]} a list of [trade structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#trade-structure}
1453
1453
  */
1454
- if (symbol === undefined) {
1455
- throw new errors.ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
1456
- }
1454
+ this.checkRequiredSymbol('fetchMyTrades', symbol);
1457
1455
  await this.loadMarkets();
1458
1456
  const market = this.market(symbol);
1459
1457
  const request = {