ccxt 4.4.98 → 4.4.99

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 (938) hide show
  1. package/README.md +6 -5
  2. package/dist/ccxt.browser.min.js +2 -2
  3. package/dist/cjs/ccxt.js +4 -1
  4. package/dist/cjs/src/abstract/alpaca.js +1 -1
  5. package/dist/cjs/src/abstract/apex.js +1 -1
  6. package/dist/cjs/src/abstract/ascendex.js +1 -1
  7. package/dist/cjs/src/abstract/bigone.js +1 -1
  8. package/dist/cjs/src/abstract/binance.js +1 -1
  9. package/dist/cjs/src/abstract/bingx.js +1 -1
  10. package/dist/cjs/src/abstract/bit2c.js +1 -1
  11. package/dist/cjs/src/abstract/bitbank.js +1 -1
  12. package/dist/cjs/src/abstract/bitbns.js +1 -1
  13. package/dist/cjs/src/abstract/bitfinex.js +1 -1
  14. package/dist/cjs/src/abstract/bitflyer.js +1 -1
  15. package/dist/cjs/src/abstract/bitget.js +1 -1
  16. package/dist/cjs/src/abstract/bithumb.js +1 -1
  17. package/dist/cjs/src/abstract/bitmart.js +1 -1
  18. package/dist/cjs/src/abstract/bitmex.js +1 -1
  19. package/dist/cjs/src/abstract/bitopro.js +1 -1
  20. package/dist/cjs/src/abstract/bitrue.js +1 -1
  21. package/dist/cjs/src/abstract/bitso.js +1 -1
  22. package/dist/cjs/src/abstract/bitstamp.js +1 -1
  23. package/dist/cjs/src/abstract/bitteam.js +1 -1
  24. package/dist/cjs/src/abstract/bittrade.js +1 -1
  25. package/dist/cjs/src/abstract/bitvavo.js +1 -1
  26. package/dist/cjs/src/abstract/blockchaincom.js +1 -1
  27. package/dist/cjs/src/abstract/blofin.js +1 -1
  28. package/dist/cjs/src/abstract/btcalpha.js +1 -1
  29. package/dist/cjs/src/abstract/btcbox.js +1 -1
  30. package/dist/cjs/src/abstract/btcmarkets.js +1 -1
  31. package/dist/cjs/src/abstract/btcturk.js +1 -1
  32. package/dist/cjs/src/abstract/bybit.js +1 -1
  33. package/dist/cjs/src/abstract/cex.js +1 -1
  34. package/dist/cjs/src/abstract/coinbase.js +1 -1
  35. package/dist/cjs/src/abstract/coinbaseexchange.js +1 -1
  36. package/dist/cjs/src/abstract/coinbaseinternational.js +1 -1
  37. package/dist/cjs/src/abstract/coincatch.js +1 -1
  38. package/dist/cjs/src/abstract/coincheck.js +1 -1
  39. package/dist/cjs/src/abstract/coinex.js +1 -1
  40. package/dist/cjs/src/abstract/coinmate.js +1 -1
  41. package/dist/cjs/src/abstract/coinmetro.js +1 -1
  42. package/dist/cjs/src/abstract/coinone.js +1 -1
  43. package/dist/cjs/src/abstract/coinsph.js +1 -1
  44. package/dist/cjs/src/abstract/coinspot.js +1 -1
  45. package/dist/cjs/src/abstract/cryptocom.js +1 -1
  46. package/dist/cjs/src/abstract/cryptomus.js +1 -1
  47. package/dist/cjs/src/abstract/defx.js +1 -1
  48. package/dist/cjs/src/abstract/delta.js +1 -1
  49. package/dist/cjs/src/abstract/deribit.js +1 -1
  50. package/dist/cjs/src/abstract/derive.js +1 -1
  51. package/dist/cjs/src/abstract/digifinex.js +1 -1
  52. package/dist/cjs/src/abstract/ellipx.js +1 -1
  53. package/dist/cjs/src/abstract/exmo.js +1 -1
  54. package/dist/cjs/src/abstract/foxbit.js +1 -1
  55. package/dist/cjs/src/abstract/gate.js +1 -1
  56. package/dist/cjs/src/abstract/gemini.js +1 -1
  57. package/dist/cjs/src/abstract/hashkey.js +1 -1
  58. package/dist/cjs/src/abstract/hibachi.js +9 -0
  59. package/dist/cjs/src/abstract/hitbtc.js +1 -1
  60. package/dist/cjs/src/abstract/hollaex.js +1 -1
  61. package/dist/cjs/src/abstract/htx.js +1 -1
  62. package/dist/cjs/src/abstract/hyperliquid.js +1 -1
  63. package/dist/cjs/src/abstract/independentreserve.js +1 -1
  64. package/dist/cjs/src/abstract/indodax.js +1 -1
  65. package/dist/cjs/src/abstract/kraken.js +1 -1
  66. package/dist/cjs/src/abstract/krakenfutures.js +1 -1
  67. package/dist/cjs/src/abstract/kucoin.js +1 -1
  68. package/dist/cjs/src/abstract/kucoinfutures.js +1 -1
  69. package/dist/cjs/src/abstract/latoken.js +1 -1
  70. package/dist/cjs/src/abstract/lbank.js +1 -1
  71. package/dist/cjs/src/abstract/luno.js +1 -1
  72. package/dist/cjs/src/abstract/mercado.js +1 -1
  73. package/dist/cjs/src/abstract/mexc.js +1 -1
  74. package/dist/cjs/src/abstract/modetrade.js +1 -1
  75. package/dist/cjs/src/abstract/ndax.js +1 -1
  76. package/dist/cjs/src/abstract/novadax.js +1 -1
  77. package/dist/cjs/src/abstract/oceanex.js +1 -1
  78. package/dist/cjs/src/abstract/okcoin.js +1 -1
  79. package/dist/cjs/src/abstract/okx.js +1 -1
  80. package/dist/cjs/src/abstract/onetrading.js +1 -1
  81. package/dist/cjs/src/abstract/oxfun.js +1 -1
  82. package/dist/cjs/src/abstract/p2b.js +1 -1
  83. package/dist/cjs/src/abstract/paradex.js +1 -1
  84. package/dist/cjs/src/abstract/paymium.js +1 -1
  85. package/dist/cjs/src/abstract/phemex.js +1 -1
  86. package/dist/cjs/src/abstract/poloniex.js +1 -1
  87. package/dist/cjs/src/abstract/probit.js +1 -1
  88. package/dist/cjs/src/abstract/timex.js +1 -1
  89. package/dist/cjs/src/abstract/tokocrypto.js +1 -1
  90. package/dist/cjs/src/abstract/tradeogre.js +1 -1
  91. package/dist/cjs/src/abstract/upbit.js +1 -1
  92. package/dist/cjs/src/abstract/vertex.js +1 -1
  93. package/dist/cjs/src/abstract/wavesexchange.js +1 -1
  94. package/dist/cjs/src/abstract/whitebit.js +1 -1
  95. package/dist/cjs/src/abstract/woo.js +1 -1
  96. package/dist/cjs/src/abstract/woofipro.js +1 -1
  97. package/dist/cjs/src/abstract/xt.js +1 -1
  98. package/dist/cjs/src/abstract/yobit.js +1 -1
  99. package/dist/cjs/src/abstract/zaif.js +1 -1
  100. package/dist/cjs/src/abstract/zonda.js +1 -1
  101. package/dist/cjs/src/alpaca.js +1 -1
  102. package/dist/cjs/src/apex.js +1 -1
  103. package/dist/cjs/src/ascendex.js +1 -1
  104. package/dist/cjs/src/base/Precise.js +0 -6
  105. package/dist/cjs/src/base/errors.js +0 -6
  106. package/dist/cjs/src/base/functions/crypto.js +1 -1
  107. package/dist/cjs/src/base/functions/encode.js +1 -1
  108. package/dist/cjs/src/base/functions/misc.js +0 -1
  109. package/dist/cjs/src/base/functions/number.js +0 -6
  110. package/dist/cjs/src/base/functions/platform.js +0 -6
  111. package/dist/cjs/src/base/functions/rsa.js +0 -1
  112. package/dist/cjs/src/base/functions/string.js +0 -6
  113. package/dist/cjs/src/base/functions/throttle.js +1 -1
  114. package/dist/cjs/src/base/functions/time.js +0 -6
  115. package/dist/cjs/src/base/functions/totp.js +0 -1
  116. package/dist/cjs/src/base/functions/type.js +0 -6
  117. package/dist/cjs/src/base/functions.js +1 -1
  118. package/dist/cjs/src/base/ws/Cache.js +0 -6
  119. package/dist/cjs/src/base/ws/Client.js +0 -1
  120. package/dist/cjs/src/base/ws/Future.js +1 -1
  121. package/dist/cjs/src/base/ws/OrderBook.js +1 -1
  122. package/dist/cjs/src/base/ws/OrderBookSide.js +0 -6
  123. package/dist/cjs/src/base/ws/WsClient.js +1 -1
  124. package/dist/cjs/src/bequant.js +1 -1
  125. package/dist/cjs/src/bigone.js +1 -1
  126. package/dist/cjs/src/binance.js +9 -7
  127. package/dist/cjs/src/binancecoinm.js +1 -1
  128. package/dist/cjs/src/binanceus.js +1 -1
  129. package/dist/cjs/src/binanceusdm.js +1 -1
  130. package/dist/cjs/src/bingx.js +1 -1
  131. package/dist/cjs/src/bit2c.js +1 -1
  132. package/dist/cjs/src/bitbank.js +1 -1
  133. package/dist/cjs/src/bitbns.js +1 -1
  134. package/dist/cjs/src/bitfinex.js +1 -1
  135. package/dist/cjs/src/bitflyer.js +1 -1
  136. package/dist/cjs/src/bitget.js +2135 -536
  137. package/dist/cjs/src/bithumb.js +1 -1
  138. package/dist/cjs/src/bitmart.js +1 -1
  139. package/dist/cjs/src/bitmex.js +1 -1
  140. package/dist/cjs/src/bitopro.js +1 -1
  141. package/dist/cjs/src/bitrue.js +1 -1
  142. package/dist/cjs/src/bitso.js +1 -1
  143. package/dist/cjs/src/bitstamp.js +1 -1
  144. package/dist/cjs/src/bitteam.js +1 -1
  145. package/dist/cjs/src/bittrade.js +1 -1
  146. package/dist/cjs/src/blockchaincom.js +1 -1
  147. package/dist/cjs/src/blofin.js +1 -1
  148. package/dist/cjs/src/btcalpha.js +1 -1
  149. package/dist/cjs/src/btcbox.js +1 -1
  150. package/dist/cjs/src/btcmarkets.js +1 -1
  151. package/dist/cjs/src/btcturk.js +1 -1
  152. package/dist/cjs/src/bybit.js +7 -2
  153. package/dist/cjs/src/cex.js +1 -1
  154. package/dist/cjs/src/coinbaseadvanced.js +1 -1
  155. package/dist/cjs/src/coincatch.js +1 -1
  156. package/dist/cjs/src/coincheck.js +1 -1
  157. package/dist/cjs/src/coinex.js +68 -4
  158. package/dist/cjs/src/coinmate.js +1 -1
  159. package/dist/cjs/src/coinmetro.js +1 -1
  160. package/dist/cjs/src/coinone.js +1 -1
  161. package/dist/cjs/src/coinsph.js +0 -1
  162. package/dist/cjs/src/coinspot.js +1 -1
  163. package/dist/cjs/src/cryptocom.js +2 -2
  164. package/dist/cjs/src/cryptomus.js +1 -1
  165. package/dist/cjs/src/defx.js +1 -1
  166. package/dist/cjs/src/delta.js +1 -1
  167. package/dist/cjs/src/deribit.js +1 -1
  168. package/dist/cjs/src/derive.js +1 -1
  169. package/dist/cjs/src/digifinex.js +1 -1
  170. package/dist/cjs/src/ellipx.js +1 -1
  171. package/dist/cjs/src/exmo.js +1 -1
  172. package/dist/cjs/src/fmfwio.js +1 -1
  173. package/dist/cjs/src/foxbit.js +1 -1
  174. package/dist/cjs/src/gate.js +2 -3
  175. package/dist/cjs/src/gateio.js +1 -1
  176. package/dist/cjs/src/gemini.js +1 -1
  177. package/dist/cjs/src/hashkey.js +1 -1
  178. package/dist/cjs/src/hibachi.js +2136 -0
  179. package/dist/cjs/src/hitbtc.js +0 -1
  180. package/dist/cjs/src/hollaex.js +1 -1
  181. package/dist/cjs/src/htx.js +1 -1
  182. package/dist/cjs/src/huobi.js +1 -1
  183. package/dist/cjs/src/hyperliquid.js +1 -1
  184. package/dist/cjs/src/independentreserve.js +1 -1
  185. package/dist/cjs/src/indodax.js +1 -1
  186. package/dist/cjs/src/kraken.js +1 -1
  187. package/dist/cjs/src/krakenfutures.js +1 -1
  188. package/dist/cjs/src/kucoin.js +1 -1
  189. package/dist/cjs/src/kucoinfutures.js +1 -1
  190. package/dist/cjs/src/latoken.js +1 -1
  191. package/dist/cjs/src/lbank.js +1 -1
  192. package/dist/cjs/src/luno.js +1 -1
  193. package/dist/cjs/src/mercado.js +1 -1
  194. package/dist/cjs/src/mexc.js +1 -1
  195. package/dist/cjs/src/modetrade.js +1 -1
  196. package/dist/cjs/src/myokx.js +1 -1
  197. package/dist/cjs/src/ndax.js +1 -1
  198. package/dist/cjs/src/novadax.js +35 -1
  199. package/dist/cjs/src/oceanex.js +1 -1
  200. package/dist/cjs/src/okcoin.js +1 -1
  201. package/dist/cjs/src/okx.js +1 -1
  202. package/dist/cjs/src/okxus.js +1 -1
  203. package/dist/cjs/src/onetrading.js +1 -1
  204. package/dist/cjs/src/oxfun.js +1 -1
  205. package/dist/cjs/src/p2b.js +1 -1
  206. package/dist/cjs/src/paradex.js +1 -1
  207. package/dist/cjs/src/paymium.js +1 -1
  208. package/dist/cjs/src/poloniex.js +1 -1
  209. package/dist/cjs/src/pro/alpaca.js +1 -1
  210. package/dist/cjs/src/pro/apex.js +1 -1
  211. package/dist/cjs/src/pro/ascendex.js +1 -1
  212. package/dist/cjs/src/pro/bequant.js +1 -1
  213. package/dist/cjs/src/pro/binance.js +2 -5
  214. package/dist/cjs/src/pro/binancecoinm.js +1 -1
  215. package/dist/cjs/src/pro/binanceus.js +1 -1
  216. package/dist/cjs/src/pro/binanceusdm.js +1 -1
  217. package/dist/cjs/src/pro/bingx.js +1 -1
  218. package/dist/cjs/src/pro/bitfinex.js +1 -1
  219. package/dist/cjs/src/pro/bitget.js +2 -2
  220. package/dist/cjs/src/pro/bithumb.js +1 -1
  221. package/dist/cjs/src/pro/bitmart.js +1 -1
  222. package/dist/cjs/src/pro/bitmex.js +2 -2
  223. package/dist/cjs/src/pro/bitrue.js +1 -1
  224. package/dist/cjs/src/pro/bitstamp.js +2 -2
  225. package/dist/cjs/src/pro/bitvavo.js +3 -1
  226. package/dist/cjs/src/pro/blockchaincom.js +1 -1
  227. package/dist/cjs/src/pro/blofin.js +1 -1
  228. package/dist/cjs/src/pro/bybit.js +1 -1
  229. package/dist/cjs/src/pro/cex.js +2 -1
  230. package/dist/cjs/src/pro/coinbase.js +1 -1
  231. package/dist/cjs/src/pro/coinbaseadvanced.js +1 -1
  232. package/dist/cjs/src/pro/coinbaseexchange.js +3 -3
  233. package/dist/cjs/src/pro/coinbaseinternational.js +1 -1
  234. package/dist/cjs/src/pro/coincatch.js +1 -1
  235. package/dist/cjs/src/pro/coincheck.js +1 -1
  236. package/dist/cjs/src/pro/coinex.js +1 -1
  237. package/dist/cjs/src/pro/coinone.js +1 -1
  238. package/dist/cjs/src/pro/cryptocom.js +1 -1
  239. package/dist/cjs/src/pro/defx.js +1 -1
  240. package/dist/cjs/src/pro/deribit.js +1 -1
  241. package/dist/cjs/src/pro/exmo.js +1 -1
  242. package/dist/cjs/src/pro/gate.js +2 -2
  243. package/dist/cjs/src/pro/gateio.js +1 -1
  244. package/dist/cjs/src/pro/gemini.js +1 -1
  245. package/dist/cjs/src/pro/hashkey.js +1 -1
  246. package/dist/cjs/src/pro/hitbtc.js +1 -1
  247. package/dist/cjs/src/pro/hollaex.js +1 -1
  248. package/dist/cjs/src/pro/htx.js +2 -2
  249. package/dist/cjs/src/pro/huobi.js +1 -1
  250. package/dist/cjs/src/pro/hyperliquid.js +1 -1
  251. package/dist/cjs/src/pro/independentreserve.js +1 -1
  252. package/dist/cjs/src/pro/kraken.js +1 -1
  253. package/dist/cjs/src/pro/krakenfutures.js +3 -2
  254. package/dist/cjs/src/pro/kucoin.js +2 -1
  255. package/dist/cjs/src/pro/kucoinfutures.js +2 -1
  256. package/dist/cjs/src/pro/lbank.js +0 -1
  257. package/dist/cjs/src/pro/luno.js +1 -1
  258. package/dist/cjs/src/pro/mexc.js +1 -1
  259. package/dist/cjs/src/pro/myokx.js +1 -1
  260. package/dist/cjs/src/pro/ndax.js +1 -1
  261. package/dist/cjs/src/pro/okcoin.js +1 -1
  262. package/dist/cjs/src/pro/okx.js +4 -4
  263. package/dist/cjs/src/pro/okxus.js +1 -1
  264. package/dist/cjs/src/pro/onetrading.js +1 -1
  265. package/dist/cjs/src/pro/oxfun.js +1 -1
  266. package/dist/cjs/src/pro/p2b.js +1 -1
  267. package/dist/cjs/src/pro/paradex.js +1 -1
  268. package/dist/cjs/src/pro/phemex.js +1 -1
  269. package/dist/cjs/src/pro/poloniex.js +1 -1
  270. package/dist/cjs/src/pro/probit.js +1 -1
  271. package/dist/cjs/src/pro/tradeogre.js +1 -1
  272. package/dist/cjs/src/pro/upbit.js +1 -1
  273. package/dist/cjs/src/pro/whitebit.js +1 -1
  274. package/dist/cjs/src/pro/xt.js +1 -1
  275. package/dist/cjs/src/probit.js +1 -1
  276. package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +0 -6
  277. package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -1
  278. package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
  279. package/dist/cjs/src/static_dependencies/ethers/coders/address.js +0 -1
  280. package/dist/cjs/src/static_dependencies/ethers/coders/anonymous.js +0 -1
  281. package/dist/cjs/src/static_dependencies/ethers/coders/array.js +0 -1
  282. package/dist/cjs/src/static_dependencies/ethers/coders/boolean.js +0 -1
  283. package/dist/cjs/src/static_dependencies/ethers/coders/bytes.js +0 -1
  284. package/dist/cjs/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -1
  285. package/dist/cjs/src/static_dependencies/ethers/coders/null.js +0 -1
  286. package/dist/cjs/src/static_dependencies/ethers/coders/number.js +0 -1
  287. package/dist/cjs/src/static_dependencies/ethers/coders/string.js +0 -1
  288. package/dist/cjs/src/static_dependencies/ethers/coders/tuple.js +0 -1
  289. package/dist/cjs/src/static_dependencies/ethers/fragments.js +0 -6
  290. package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +0 -6
  291. package/dist/cjs/src/static_dependencies/ethers/index.js +10 -1
  292. package/dist/cjs/src/static_dependencies/ethers/interface.js +0 -6
  293. package/dist/cjs/src/static_dependencies/ethers/typed.js +0 -6
  294. package/dist/cjs/src/static_dependencies/ethers/utils/base58.js +13 -1
  295. package/dist/cjs/src/static_dependencies/ethers/utils/data.js +6 -1
  296. package/dist/cjs/src/static_dependencies/ethers/utils/errors.js +9 -1
  297. package/dist/cjs/src/static_dependencies/ethers/utils/events.js +0 -6
  298. package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
  299. package/dist/cjs/src/static_dependencies/ethers/utils/index.js +7 -1
  300. package/dist/cjs/src/static_dependencies/ethers/utils/maths.js +5 -1
  301. package/dist/cjs/src/static_dependencies/ethers/utils/properties.js +0 -6
  302. package/dist/cjs/src/static_dependencies/ethers/utils/utf8.js +8 -1
  303. package/dist/cjs/src/static_dependencies/fflake/browser.js +1 -1
  304. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -1
  305. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -1
  306. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +1 -1
  307. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
  308. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
  309. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
  310. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -1
  311. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1 -1
  312. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
  313. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +1 -1
  314. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +1 -1
  315. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
  316. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1 -1
  317. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
  318. package/dist/cjs/src/static_dependencies/messagepack/msgpack.js +0 -6
  319. package/dist/cjs/src/static_dependencies/noble-curves/_shortw_utils.js +1 -1
  320. package/dist/cjs/src/static_dependencies/noble-curves/abstract/curve.js +1 -1
  321. package/dist/cjs/src/static_dependencies/noble-curves/abstract/edwards.js +1 -1
  322. package/dist/cjs/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -1
  323. package/dist/cjs/src/static_dependencies/noble-curves/abstract/modular.js +1 -1
  324. package/dist/cjs/src/static_dependencies/noble-curves/abstract/montgomery.js +1 -1
  325. package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +1 -1
  326. package/dist/cjs/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
  327. package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
  328. package/dist/cjs/src/static_dependencies/noble-curves/ed25519.js +1 -1
  329. package/dist/cjs/src/static_dependencies/noble-curves/p256.js +1 -1
  330. package/dist/cjs/src/static_dependencies/noble-curves/secp256k1.js +1 -1
  331. package/dist/cjs/src/static_dependencies/noble-hashes/_assert.js +0 -6
  332. package/dist/cjs/src/static_dependencies/noble-hashes/_sha2.js +0 -1
  333. package/dist/cjs/src/static_dependencies/noble-hashes/_u64.js +0 -6
  334. package/dist/cjs/src/static_dependencies/noble-hashes/crypto.js +0 -6
  335. package/dist/cjs/src/static_dependencies/noble-hashes/hmac.js +0 -1
  336. package/dist/cjs/src/static_dependencies/noble-hashes/md5.js +0 -1
  337. package/dist/cjs/src/static_dependencies/noble-hashes/sha1.js +0 -1
  338. package/dist/cjs/src/static_dependencies/noble-hashes/sha256.js +0 -1
  339. package/dist/cjs/src/static_dependencies/noble-hashes/sha3.js +0 -1
  340. package/dist/cjs/src/static_dependencies/noble-hashes/sha512.js +0 -1
  341. package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +1 -1
  342. package/dist/cjs/src/static_dependencies/node-fetch/body.js +5 -1
  343. package/dist/cjs/src/static_dependencies/node-fetch/errors/abort-error.js +0 -1
  344. package/dist/cjs/src/static_dependencies/node-fetch/errors/base.js +0 -6
  345. package/dist/cjs/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -1
  346. package/dist/cjs/src/static_dependencies/node-fetch/headers.js +5 -1
  347. package/dist/cjs/src/static_dependencies/node-fetch/index.js +7 -1
  348. package/dist/cjs/src/static_dependencies/node-fetch/request.js +7 -1
  349. package/dist/cjs/src/static_dependencies/node-fetch/response.js +5 -1
  350. package/dist/cjs/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
  351. package/dist/cjs/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
  352. package/dist/cjs/src/static_dependencies/node-fetch/utils/is.js +0 -6
  353. package/dist/cjs/src/static_dependencies/node-fetch/utils/referrer.js +0 -1
  354. package/dist/cjs/src/static_dependencies/proxies/agent-base/index.js +0 -1
  355. package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -1
  356. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -1
  357. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
  358. package/dist/cjs/src/static_dependencies/scure-base/index.js +0 -6
  359. package/dist/cjs/src/static_dependencies/scure-starknet/index.js +1 -1
  360. package/dist/cjs/src/static_dependencies/starknet/constants.js +1 -1
  361. package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +0 -6
  362. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
  363. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
  364. package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +0 -6
  365. package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +0 -6
  366. package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +0 -6
  367. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +1 -1
  368. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +1 -1
  369. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +1 -1
  370. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -1
  371. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -1
  372. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
  373. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
  374. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
  375. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -1
  376. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +1 -1
  377. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -1
  378. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -1
  379. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
  380. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -1
  381. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -1
  382. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -1
  383. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +1 -1
  384. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +4 -1
  385. package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +0 -1
  386. package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +3 -1
  387. package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +0 -1
  388. package/dist/cjs/src/static_dependencies/starknet/utils/num.js +0 -1
  389. package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +0 -1
  390. package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +0 -1
  391. package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +1 -1
  392. package/dist/cjs/src/static_dependencies/watchable/src/unpromise.js +0 -6
  393. package/dist/cjs/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
  394. package/dist/cjs/src/timex.js +0 -1
  395. package/dist/cjs/src/tokocrypto.js +1 -1
  396. package/dist/cjs/src/tradeogre.js +1 -1
  397. package/dist/cjs/src/upbit.js +1 -1
  398. package/dist/cjs/src/vertex.js +1 -1
  399. package/dist/cjs/src/wavesexchange.js +1 -1
  400. package/dist/cjs/src/whitebit.js +1 -1
  401. package/dist/cjs/src/woo.js +1 -1
  402. package/dist/cjs/src/woofipro.js +1 -1
  403. package/dist/cjs/src/xt.js +1 -1
  404. package/dist/cjs/src/yobit.js +1 -1
  405. package/dist/cjs/src/zaif.js +1 -1
  406. package/dist/cjs/src/zonda.js +1 -1
  407. package/js/ccxt.d.ts +5 -2
  408. package/js/ccxt.js +4 -8
  409. package/js/src/abstract/alpaca.js +0 -6
  410. package/js/src/abstract/apex.js +0 -6
  411. package/js/src/abstract/ascendex.js +0 -6
  412. package/js/src/abstract/bequant.js +0 -6
  413. package/js/src/abstract/bigone.js +0 -6
  414. package/js/src/abstract/binance.js +0 -6
  415. package/js/src/abstract/binancecoinm.js +0 -6
  416. package/js/src/abstract/binanceus.js +0 -6
  417. package/js/src/abstract/binanceusdm.js +0 -6
  418. package/js/src/abstract/bingx.js +0 -6
  419. package/js/src/abstract/bit2c.js +0 -6
  420. package/js/src/abstract/bitbank.js +0 -6
  421. package/js/src/abstract/bitbns.js +0 -6
  422. package/js/src/abstract/bitfinex.js +0 -6
  423. package/js/src/abstract/bitflyer.js +0 -6
  424. package/js/src/abstract/bitget.d.ts +6 -0
  425. package/js/src/abstract/bitget.js +0 -6
  426. package/js/src/abstract/bithumb.js +0 -6
  427. package/js/src/abstract/bitmart.js +0 -6
  428. package/js/src/abstract/bitmex.js +0 -6
  429. package/js/src/abstract/bitopro.js +0 -6
  430. package/js/src/abstract/bitrue.js +0 -6
  431. package/js/src/abstract/bitso.js +0 -6
  432. package/js/src/abstract/bitstamp.js +0 -6
  433. package/js/src/abstract/bitteam.js +0 -6
  434. package/js/src/abstract/bittrade.js +0 -6
  435. package/js/src/abstract/bitvavo.js +0 -6
  436. package/js/src/abstract/blockchaincom.js +0 -6
  437. package/js/src/abstract/blofin.js +0 -6
  438. package/js/src/abstract/btcalpha.js +0 -6
  439. package/js/src/abstract/btcbox.js +0 -6
  440. package/js/src/abstract/btcmarkets.js +0 -6
  441. package/js/src/abstract/btcturk.js +0 -6
  442. package/js/src/abstract/bybit.js +0 -6
  443. package/js/src/abstract/cex.js +0 -6
  444. package/js/src/abstract/coinbase.js +0 -6
  445. package/js/src/abstract/coinbaseadvanced.js +0 -6
  446. package/js/src/abstract/coinbaseexchange.js +0 -6
  447. package/js/src/abstract/coinbaseinternational.js +0 -6
  448. package/js/src/abstract/coincatch.js +0 -6
  449. package/js/src/abstract/coincheck.js +0 -6
  450. package/js/src/abstract/coinex.js +0 -6
  451. package/js/src/abstract/coinmate.js +0 -6
  452. package/js/src/abstract/coinmetro.js +0 -6
  453. package/js/src/abstract/coinone.js +0 -6
  454. package/js/src/abstract/coinsph.js +0 -6
  455. package/js/src/abstract/coinspot.js +0 -6
  456. package/js/src/abstract/cryptocom.js +0 -6
  457. package/js/src/abstract/cryptomus.js +0 -6
  458. package/js/src/abstract/defx.js +0 -6
  459. package/js/src/abstract/delta.js +0 -6
  460. package/js/src/abstract/deribit.js +0 -6
  461. package/js/src/abstract/derive.js +0 -6
  462. package/js/src/abstract/digifinex.js +0 -6
  463. package/js/src/abstract/ellipx.js +0 -6
  464. package/js/src/abstract/exmo.js +0 -6
  465. package/js/src/abstract/fmfwio.js +0 -6
  466. package/js/src/abstract/foxbit.js +0 -6
  467. package/js/src/abstract/gate.js +0 -6
  468. package/js/src/abstract/gateio.js +0 -6
  469. package/js/src/abstract/gemini.js +0 -6
  470. package/js/src/abstract/hashkey.js +0 -6
  471. package/js/src/abstract/hibachi.d.ts +29 -0
  472. package/js/src/abstract/hibachi.js +5 -0
  473. package/js/src/abstract/hitbtc.js +0 -6
  474. package/js/src/abstract/hollaex.js +0 -6
  475. package/js/src/abstract/htx.js +0 -6
  476. package/js/src/abstract/huobi.js +0 -6
  477. package/js/src/abstract/hyperliquid.js +0 -6
  478. package/js/src/abstract/independentreserve.js +0 -6
  479. package/js/src/abstract/indodax.js +0 -6
  480. package/js/src/abstract/kraken.js +0 -6
  481. package/js/src/abstract/krakenfutures.js +0 -6
  482. package/js/src/abstract/kucoin.js +0 -6
  483. package/js/src/abstract/kucoinfutures.js +0 -6
  484. package/js/src/abstract/latoken.js +0 -6
  485. package/js/src/abstract/lbank.js +0 -6
  486. package/js/src/abstract/luno.js +0 -6
  487. package/js/src/abstract/mercado.js +0 -6
  488. package/js/src/abstract/mexc.js +0 -6
  489. package/js/src/abstract/modetrade.js +0 -6
  490. package/js/src/abstract/myokx.js +0 -6
  491. package/js/src/abstract/ndax.js +0 -6
  492. package/js/src/abstract/novadax.js +0 -6
  493. package/js/src/abstract/oceanex.js +0 -6
  494. package/js/src/abstract/okcoin.js +0 -6
  495. package/js/src/abstract/okx.js +0 -6
  496. package/js/src/abstract/okxus.js +0 -6
  497. package/js/src/abstract/onetrading.js +0 -6
  498. package/js/src/abstract/oxfun.js +0 -6
  499. package/js/src/abstract/p2b.js +0 -6
  500. package/js/src/abstract/paradex.js +0 -6
  501. package/js/src/abstract/paymium.js +0 -6
  502. package/js/src/abstract/phemex.js +0 -6
  503. package/js/src/abstract/poloniex.js +0 -6
  504. package/js/src/abstract/probit.js +0 -6
  505. package/js/src/abstract/timex.js +0 -6
  506. package/js/src/abstract/tokocrypto.js +0 -6
  507. package/js/src/abstract/tradeogre.js +0 -6
  508. package/js/src/abstract/upbit.js +0 -6
  509. package/js/src/abstract/vertex.js +0 -6
  510. package/js/src/abstract/wavesexchange.js +0 -6
  511. package/js/src/abstract/whitebit.js +0 -6
  512. package/js/src/abstract/woo.js +0 -6
  513. package/js/src/abstract/woofipro.js +0 -6
  514. package/js/src/abstract/xt.js +0 -6
  515. package/js/src/abstract/yobit.js +0 -6
  516. package/js/src/abstract/zaif.js +0 -6
  517. package/js/src/abstract/zonda.js +0 -6
  518. package/js/src/alpaca.js +0 -6
  519. package/js/src/apex.js +0 -6
  520. package/js/src/ascendex.js +0 -6
  521. package/js/src/base/Exchange.js +0 -6
  522. package/js/src/base/Precise.js +0 -6
  523. package/js/src/base/errorHierarchy.js +0 -6
  524. package/js/src/base/errors.js +0 -6
  525. package/js/src/base/functions/crypto.js +0 -6
  526. package/js/src/base/functions/encode.js +0 -6
  527. package/js/src/base/functions/generic.js +0 -6
  528. package/js/src/base/functions/misc.js +0 -6
  529. package/js/src/base/functions/number.js +0 -6
  530. package/js/src/base/functions/platform.js +0 -6
  531. package/js/src/base/functions/rsa.js +0 -6
  532. package/js/src/base/functions/string.js +0 -6
  533. package/js/src/base/functions/throttle.js +0 -6
  534. package/js/src/base/functions/time.js +0 -6
  535. package/js/src/base/functions/totp.js +0 -6
  536. package/js/src/base/functions/type.js +0 -6
  537. package/js/src/base/functions.js +0 -6
  538. package/js/src/base/types.js +0 -6
  539. package/js/src/base/ws/Cache.js +0 -6
  540. package/js/src/base/ws/Client.js +0 -6
  541. package/js/src/base/ws/Future.js +0 -6
  542. package/js/src/base/ws/OrderBook.js +0 -6
  543. package/js/src/base/ws/OrderBookSide.js +0 -6
  544. package/js/src/base/ws/WsClient.js +0 -6
  545. package/js/src/base/ws/functions.js +0 -6
  546. package/js/src/bequant.js +0 -6
  547. package/js/src/bigone.js +0 -6
  548. package/js/src/binance.js +8 -12
  549. package/js/src/binancecoinm.js +0 -6
  550. package/js/src/binanceus.js +0 -6
  551. package/js/src/binanceusdm.js +0 -6
  552. package/js/src/bingx.js +0 -6
  553. package/js/src/bit2c.js +0 -6
  554. package/js/src/bitbank.js +0 -6
  555. package/js/src/bitbns.js +0 -6
  556. package/js/src/bitfinex.js +0 -6
  557. package/js/src/bitflyer.js +0 -6
  558. package/js/src/bitget.d.ts +73 -7
  559. package/js/src/bitget.js +2135 -542
  560. package/js/src/bithumb.js +0 -6
  561. package/js/src/bitmart.js +0 -6
  562. package/js/src/bitmex.js +0 -6
  563. package/js/src/bitopro.js +0 -6
  564. package/js/src/bitrue.js +0 -6
  565. package/js/src/bitso.js +0 -6
  566. package/js/src/bitstamp.js +0 -6
  567. package/js/src/bitteam.js +0 -6
  568. package/js/src/bittrade.js +0 -6
  569. package/js/src/bitvavo.js +0 -6
  570. package/js/src/blockchaincom.js +0 -6
  571. package/js/src/blofin.js +0 -6
  572. package/js/src/btcalpha.js +0 -6
  573. package/js/src/btcbox.js +0 -6
  574. package/js/src/btcmarkets.js +0 -6
  575. package/js/src/btcturk.js +0 -6
  576. package/js/src/bybit.js +6 -7
  577. package/js/src/cex.js +0 -6
  578. package/js/src/coinbase.js +0 -6
  579. package/js/src/coinbaseadvanced.js +0 -6
  580. package/js/src/coinbaseexchange.js +0 -6
  581. package/js/src/coinbaseinternational.js +0 -6
  582. package/js/src/coincatch.js +0 -6
  583. package/js/src/coincheck.js +0 -6
  584. package/js/src/coinex.d.ts +10 -0
  585. package/js/src/coinex.js +67 -9
  586. package/js/src/coinmate.js +0 -6
  587. package/js/src/coinmetro.js +0 -6
  588. package/js/src/coinone.js +0 -6
  589. package/js/src/coinsph.js +0 -6
  590. package/js/src/coinspot.js +0 -6
  591. package/js/src/cryptocom.js +1 -7
  592. package/js/src/cryptomus.js +0 -6
  593. package/js/src/defx.js +0 -6
  594. package/js/src/delta.js +0 -6
  595. package/js/src/deribit.js +0 -6
  596. package/js/src/derive.js +0 -6
  597. package/js/src/digifinex.js +0 -6
  598. package/js/src/ellipx.js +0 -6
  599. package/js/src/exmo.js +0 -6
  600. package/js/src/fmfwio.js +0 -6
  601. package/js/src/foxbit.js +0 -6
  602. package/js/src/gate.js +1 -8
  603. package/js/src/gateio.js +0 -6
  604. package/js/src/gemini.js +0 -6
  605. package/js/src/hashkey.js +0 -6
  606. package/js/src/hibachi.d.ts +346 -0
  607. package/js/src/hibachi.js +2131 -0
  608. package/js/src/hitbtc.js +0 -6
  609. package/js/src/hollaex.js +0 -6
  610. package/js/src/htx.js +0 -6
  611. package/js/src/huobi.js +0 -6
  612. package/js/src/hyperliquid.js +0 -6
  613. package/js/src/independentreserve.js +0 -6
  614. package/js/src/indodax.js +0 -6
  615. package/js/src/kraken.js +0 -6
  616. package/js/src/krakenfutures.js +0 -6
  617. package/js/src/kucoin.js +0 -6
  618. package/js/src/kucoinfutures.js +0 -6
  619. package/js/src/latoken.js +0 -6
  620. package/js/src/lbank.js +0 -6
  621. package/js/src/luno.js +0 -6
  622. package/js/src/mercado.js +0 -6
  623. package/js/src/mexc.js +0 -6
  624. package/js/src/modetrade.js +0 -6
  625. package/js/src/myokx.js +0 -6
  626. package/js/src/ndax.js +0 -6
  627. package/js/src/novadax.js +34 -6
  628. package/js/src/oceanex.js +0 -6
  629. package/js/src/okcoin.js +0 -6
  630. package/js/src/okx.js +0 -6
  631. package/js/src/okxus.js +0 -6
  632. package/js/src/onetrading.js +0 -6
  633. package/js/src/oxfun.js +0 -6
  634. package/js/src/p2b.js +0 -6
  635. package/js/src/paradex.js +0 -6
  636. package/js/src/paymium.js +0 -6
  637. package/js/src/phemex.js +0 -6
  638. package/js/src/poloniex.js +0 -6
  639. package/js/src/pro/alpaca.d.ts +2 -2
  640. package/js/src/pro/alpaca.js +0 -6
  641. package/js/src/pro/apex.d.ts +2 -2
  642. package/js/src/pro/apex.js +0 -6
  643. package/js/src/pro/ascendex.d.ts +2 -2
  644. package/js/src/pro/ascendex.js +0 -6
  645. package/js/src/pro/bequant.js +0 -6
  646. package/js/src/pro/binance.d.ts +2 -2
  647. package/js/src/pro/binance.js +2 -11
  648. package/js/src/pro/binancecoinm.js +0 -6
  649. package/js/src/pro/binanceus.js +0 -6
  650. package/js/src/pro/binanceusdm.js +0 -6
  651. package/js/src/pro/bingx.js +0 -6
  652. package/js/src/pro/bitfinex.js +0 -6
  653. package/js/src/pro/bitget.d.ts +2 -2
  654. package/js/src/pro/bitget.js +1 -7
  655. package/js/src/pro/bithumb.d.ts +2 -2
  656. package/js/src/pro/bithumb.js +0 -6
  657. package/js/src/pro/bitmart.d.ts +2 -2
  658. package/js/src/pro/bitmart.js +0 -6
  659. package/js/src/pro/bitmex.d.ts +3 -3
  660. package/js/src/pro/bitmex.js +1 -7
  661. package/js/src/pro/bitopro.js +0 -6
  662. package/js/src/pro/bitrue.js +0 -6
  663. package/js/src/pro/bitstamp.d.ts +2 -2
  664. package/js/src/pro/bitstamp.js +1 -7
  665. package/js/src/pro/bittrade.d.ts +2 -2
  666. package/js/src/pro/bittrade.js +0 -6
  667. package/js/src/pro/bitvavo.d.ts +2 -2
  668. package/js/src/pro/bitvavo.js +2 -6
  669. package/js/src/pro/blockchaincom.js +0 -6
  670. package/js/src/pro/blofin.js +0 -6
  671. package/js/src/pro/bybit.d.ts +4 -4
  672. package/js/src/pro/bybit.js +0 -6
  673. package/js/src/pro/cex.d.ts +2 -2
  674. package/js/src/pro/cex.js +1 -6
  675. package/js/src/pro/coinbase.js +0 -6
  676. package/js/src/pro/coinbaseadvanced.js +0 -6
  677. package/js/src/pro/coinbaseexchange.d.ts +4 -4
  678. package/js/src/pro/coinbaseexchange.js +2 -8
  679. package/js/src/pro/coinbaseinternational.d.ts +2 -2
  680. package/js/src/pro/coinbaseinternational.js +0 -6
  681. package/js/src/pro/coincatch.d.ts +2 -2
  682. package/js/src/pro/coincatch.js +0 -6
  683. package/js/src/pro/coincheck.js +0 -6
  684. package/js/src/pro/coinex.js +0 -6
  685. package/js/src/pro/coinone.d.ts +2 -2
  686. package/js/src/pro/coinone.js +0 -6
  687. package/js/src/pro/cryptocom.d.ts +2 -2
  688. package/js/src/pro/cryptocom.js +0 -6
  689. package/js/src/pro/defx.js +0 -6
  690. package/js/src/pro/deribit.js +0 -6
  691. package/js/src/pro/derive.d.ts +2 -2
  692. package/js/src/pro/derive.js +0 -6
  693. package/js/src/pro/exmo.js +0 -6
  694. package/js/src/pro/gate.d.ts +3 -3
  695. package/js/src/pro/gate.js +1 -7
  696. package/js/src/pro/gateio.js +0 -6
  697. package/js/src/pro/gemini.js +0 -6
  698. package/js/src/pro/hashkey.js +0 -6
  699. package/js/src/pro/hitbtc.js +0 -6
  700. package/js/src/pro/hollaex.d.ts +2 -2
  701. package/js/src/pro/hollaex.js +0 -6
  702. package/js/src/pro/htx.d.ts +2 -2
  703. package/js/src/pro/htx.js +1 -7
  704. package/js/src/pro/huobi.js +0 -6
  705. package/js/src/pro/hyperliquid.d.ts +2 -2
  706. package/js/src/pro/hyperliquid.js +0 -6
  707. package/js/src/pro/independentreserve.js +0 -6
  708. package/js/src/pro/kraken.d.ts +2 -2
  709. package/js/src/pro/kraken.js +0 -6
  710. package/js/src/pro/krakenfutures.d.ts +3 -3
  711. package/js/src/pro/krakenfutures.js +2 -7
  712. package/js/src/pro/kucoin.d.ts +2 -2
  713. package/js/src/pro/kucoin.js +1 -6
  714. package/js/src/pro/kucoinfutures.d.ts +2 -2
  715. package/js/src/pro/kucoinfutures.js +1 -6
  716. package/js/src/pro/lbank.js +0 -6
  717. package/js/src/pro/luno.js +0 -6
  718. package/js/src/pro/mexc.js +0 -6
  719. package/js/src/pro/modetrade.d.ts +2 -2
  720. package/js/src/pro/modetrade.js +0 -6
  721. package/js/src/pro/myokx.js +0 -6
  722. package/js/src/pro/ndax.js +0 -6
  723. package/js/src/pro/okcoin.d.ts +2 -2
  724. package/js/src/pro/okcoin.js +0 -6
  725. package/js/src/pro/okx.d.ts +4 -4
  726. package/js/src/pro/okx.js +3 -9
  727. package/js/src/pro/okxus.js +0 -6
  728. package/js/src/pro/onetrading.d.ts +2 -2
  729. package/js/src/pro/onetrading.js +0 -6
  730. package/js/src/pro/oxfun.js +0 -6
  731. package/js/src/pro/p2b.d.ts +2 -2
  732. package/js/src/pro/p2b.js +0 -6
  733. package/js/src/pro/paradex.d.ts +2 -2
  734. package/js/src/pro/paradex.js +0 -6
  735. package/js/src/pro/phemex.js +0 -6
  736. package/js/src/pro/poloniex.d.ts +2 -2
  737. package/js/src/pro/poloniex.js +0 -6
  738. package/js/src/pro/probit.d.ts +2 -2
  739. package/js/src/pro/probit.js +0 -6
  740. package/js/src/pro/tradeogre.js +0 -6
  741. package/js/src/pro/upbit.js +0 -6
  742. package/js/src/pro/vertex.d.ts +2 -2
  743. package/js/src/pro/vertex.js +0 -6
  744. package/js/src/pro/whitebit.d.ts +2 -2
  745. package/js/src/pro/whitebit.js +0 -6
  746. package/js/src/pro/woo.d.ts +2 -2
  747. package/js/src/pro/woo.js +0 -6
  748. package/js/src/pro/woofipro.d.ts +2 -2
  749. package/js/src/pro/woofipro.js +0 -6
  750. package/js/src/pro/xt.js +0 -6
  751. package/js/src/probit.js +0 -6
  752. package/js/src/static_dependencies/ethers/abi-coder.js +0 -6
  753. package/js/src/static_dependencies/ethers/address/address.js +0 -6
  754. package/js/src/static_dependencies/ethers/address/checks.js +0 -6
  755. package/js/src/static_dependencies/ethers/address/contract-address.js +0 -6
  756. package/js/src/static_dependencies/ethers/address/index.js +0 -6
  757. package/js/src/static_dependencies/ethers/bytes32.js +0 -6
  758. package/js/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
  759. package/js/src/static_dependencies/ethers/coders/address.js +0 -6
  760. package/js/src/static_dependencies/ethers/coders/anonymous.js +0 -6
  761. package/js/src/static_dependencies/ethers/coders/array.js +0 -6
  762. package/js/src/static_dependencies/ethers/coders/boolean.js +0 -6
  763. package/js/src/static_dependencies/ethers/coders/bytes.js +0 -6
  764. package/js/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -6
  765. package/js/src/static_dependencies/ethers/coders/null.js +0 -6
  766. package/js/src/static_dependencies/ethers/coders/number.js +0 -6
  767. package/js/src/static_dependencies/ethers/coders/string.js +0 -6
  768. package/js/src/static_dependencies/ethers/coders/tuple.js +0 -6
  769. package/js/src/static_dependencies/ethers/fragments.js +0 -6
  770. package/js/src/static_dependencies/ethers/hash/index.js +0 -6
  771. package/js/src/static_dependencies/ethers/hash/solidity.js +0 -6
  772. package/js/src/static_dependencies/ethers/hash/typed-data.js +0 -6
  773. package/js/src/static_dependencies/ethers/index.js +0 -6
  774. package/js/src/static_dependencies/ethers/interface.js +0 -6
  775. package/js/src/static_dependencies/ethers/typed.js +0 -6
  776. package/js/src/static_dependencies/ethers/utils/base58.js +0 -6
  777. package/js/src/static_dependencies/ethers/utils/base64-browser.js +0 -6
  778. package/js/src/static_dependencies/ethers/utils/base64.js +0 -6
  779. package/js/src/static_dependencies/ethers/utils/data.js +0 -6
  780. package/js/src/static_dependencies/ethers/utils/errors.js +0 -6
  781. package/js/src/static_dependencies/ethers/utils/events.js +0 -6
  782. package/js/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
  783. package/js/src/static_dependencies/ethers/utils/index.js +0 -6
  784. package/js/src/static_dependencies/ethers/utils/maths.js +0 -6
  785. package/js/src/static_dependencies/ethers/utils/properties.js +0 -6
  786. package/js/src/static_dependencies/ethers/utils/rlp-decode.js +0 -6
  787. package/js/src/static_dependencies/ethers/utils/rlp-encode.js +0 -6
  788. package/js/src/static_dependencies/ethers/utils/rlp.js +0 -6
  789. package/js/src/static_dependencies/ethers/utils/units.js +0 -6
  790. package/js/src/static_dependencies/ethers/utils/utf8.js +0 -6
  791. package/js/src/static_dependencies/ethers/utils/uuid.js +0 -6
  792. package/js/src/static_dependencies/fflake/browser.js +0 -6
  793. package/js/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -6
  794. package/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -6
  795. package/js/src/static_dependencies/jsencrypt/index.js +0 -6
  796. package/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +0 -6
  797. package/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
  798. package/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
  799. package/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
  800. package/js/src/static_dependencies/jsencrypt/lib/asn1js/oids.js +0 -6
  801. package/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -6
  802. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +0 -6
  803. package/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
  804. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +0 -6
  805. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +0 -6
  806. package/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
  807. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +0 -6
  808. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
  809. package/js/src/static_dependencies/messagepack/msgpack.js +0 -6
  810. package/js/src/static_dependencies/noble-curves/_shortw_utils.js +0 -6
  811. package/js/src/static_dependencies/noble-curves/abstract/curve.js +0 -6
  812. package/js/src/static_dependencies/noble-curves/abstract/edwards.js +0 -6
  813. package/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -6
  814. package/js/src/static_dependencies/noble-curves/abstract/modular.js +0 -6
  815. package/js/src/static_dependencies/noble-curves/abstract/montgomery.js +0 -6
  816. package/js/src/static_dependencies/noble-curves/abstract/poseidon.js +0 -6
  817. package/js/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
  818. package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +0 -6
  819. package/js/src/static_dependencies/noble-curves/bn.js +0 -6
  820. package/js/src/static_dependencies/noble-curves/ed25519.js +0 -6
  821. package/js/src/static_dependencies/noble-curves/ed448.js +0 -6
  822. package/js/src/static_dependencies/noble-curves/index.js +0 -6
  823. package/js/src/static_dependencies/noble-curves/jubjub.js +0 -6
  824. package/js/src/static_dependencies/noble-curves/p256.js +0 -6
  825. package/js/src/static_dependencies/noble-curves/p384.js +0 -6
  826. package/js/src/static_dependencies/noble-curves/p521.js +0 -6
  827. package/js/src/static_dependencies/noble-curves/pasta.js +0 -6
  828. package/js/src/static_dependencies/noble-curves/secp256k1.js +0 -6
  829. package/js/src/static_dependencies/noble-hashes/_assert.js +0 -6
  830. package/js/src/static_dependencies/noble-hashes/_blake2.js +0 -6
  831. package/js/src/static_dependencies/noble-hashes/_sha2.js +0 -6
  832. package/js/src/static_dependencies/noble-hashes/_u64.js +0 -6
  833. package/js/src/static_dependencies/noble-hashes/argon2.js +0 -6
  834. package/js/src/static_dependencies/noble-hashes/blake2b.js +0 -6
  835. package/js/src/static_dependencies/noble-hashes/blake2s.js +0 -6
  836. package/js/src/static_dependencies/noble-hashes/blake3.js +0 -6
  837. package/js/src/static_dependencies/noble-hashes/crypto.js +0 -6
  838. package/js/src/static_dependencies/noble-hashes/cryptoNode.js +0 -6
  839. package/js/src/static_dependencies/noble-hashes/eskdf.js +0 -6
  840. package/js/src/static_dependencies/noble-hashes/hkdf.js +0 -6
  841. package/js/src/static_dependencies/noble-hashes/hmac.js +0 -6
  842. package/js/src/static_dependencies/noble-hashes/index.js +0 -6
  843. package/js/src/static_dependencies/noble-hashes/md5.js +0 -6
  844. package/js/src/static_dependencies/noble-hashes/pbkdf2.js +0 -6
  845. package/js/src/static_dependencies/noble-hashes/ripemd160.js +0 -6
  846. package/js/src/static_dependencies/noble-hashes/scrypt.js +0 -6
  847. package/js/src/static_dependencies/noble-hashes/sha1.js +0 -6
  848. package/js/src/static_dependencies/noble-hashes/sha256.js +0 -6
  849. package/js/src/static_dependencies/noble-hashes/sha3-addons.js +0 -6
  850. package/js/src/static_dependencies/noble-hashes/sha3.js +0 -6
  851. package/js/src/static_dependencies/noble-hashes/sha512.js +0 -6
  852. package/js/src/static_dependencies/noble-hashes/utils.js +0 -6
  853. package/js/src/static_dependencies/node-fetch/body.js +0 -6
  854. package/js/src/static_dependencies/node-fetch/errors/abort-error.js +0 -6
  855. package/js/src/static_dependencies/node-fetch/errors/base.js +0 -6
  856. package/js/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -6
  857. package/js/src/static_dependencies/node-fetch/headers.js +0 -6
  858. package/js/src/static_dependencies/node-fetch/index.js +0 -6
  859. package/js/src/static_dependencies/node-fetch/request.js +0 -6
  860. package/js/src/static_dependencies/node-fetch/response.js +0 -6
  861. package/js/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
  862. package/js/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
  863. package/js/src/static_dependencies/node-fetch/utils/is.js +0 -6
  864. package/js/src/static_dependencies/node-fetch/utils/referrer.js +0 -6
  865. package/js/src/static_dependencies/proxies/agent-base/helpers.js +0 -6
  866. package/js/src/static_dependencies/proxies/agent-base/index.js +0 -6
  867. package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -6
  868. package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -6
  869. package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
  870. package/js/src/static_dependencies/qs/formats.cjs +0 -6
  871. package/js/src/static_dependencies/qs/index.cjs +0 -6
  872. package/js/src/static_dependencies/qs/parse.cjs +0 -6
  873. package/js/src/static_dependencies/qs/stringify.cjs +0 -6
  874. package/js/src/static_dependencies/qs/utils.cjs +0 -6
  875. package/js/src/static_dependencies/scure-base/index.js +0 -6
  876. package/js/src/static_dependencies/scure-starknet/index.js +0 -6
  877. package/js/src/static_dependencies/starknet/constants.js +0 -6
  878. package/js/src/static_dependencies/starknet/index.js +0 -6
  879. package/js/src/static_dependencies/starknet/types/cairoEnum.js +0 -6
  880. package/js/src/static_dependencies/starknet/types/calldata.js +0 -6
  881. package/js/src/static_dependencies/starknet/types/index.js +0 -6
  882. package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
  883. package/js/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
  884. package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +0 -6
  885. package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +0 -6
  886. package/js/src/static_dependencies/starknet/types/lib/index.js +0 -6
  887. package/js/src/static_dependencies/starknet/types/typedData.js +0 -6
  888. package/js/src/static_dependencies/starknet/utils/address.js +0 -6
  889. package/js/src/static_dependencies/starknet/utils/assert.js +0 -6
  890. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +0 -6
  891. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +0 -6
  892. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +0 -6
  893. package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -6
  894. package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -6
  895. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
  896. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
  897. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
  898. package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +0 -6
  899. package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -6
  900. package/js/src/static_dependencies/starknet/utils/calldata/index.js +0 -6
  901. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -6
  902. package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +0 -6
  903. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -6
  904. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
  905. package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -6
  906. package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -6
  907. package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -6
  908. package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +0 -6
  909. package/js/src/static_dependencies/starknet/utils/calldata/validate.js +0 -6
  910. package/js/src/static_dependencies/starknet/utils/encode.js +0 -6
  911. package/js/src/static_dependencies/starknet/utils/hash/classHash.js +0 -6
  912. package/js/src/static_dependencies/starknet/utils/hash/index.js +0 -6
  913. package/js/src/static_dependencies/starknet/utils/merkle.js +0 -6
  914. package/js/src/static_dependencies/starknet/utils/num.js +0 -6
  915. package/js/src/static_dependencies/starknet/utils/selector.js +0 -6
  916. package/js/src/static_dependencies/starknet/utils/shortString.js +0 -6
  917. package/js/src/static_dependencies/starknet/utils/starknetId.js +0 -6
  918. package/js/src/static_dependencies/starknet/utils/typedData.js +0 -6
  919. package/js/src/static_dependencies/starknet/utils/uint256.js +0 -6
  920. package/js/src/static_dependencies/starknet/utils/url.js +0 -6
  921. package/js/src/static_dependencies/watchable/src/index.js +0 -6
  922. package/js/src/static_dependencies/watchable/src/types.js +0 -6
  923. package/js/src/static_dependencies/watchable/src/unpromise.js +0 -6
  924. package/js/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
  925. package/js/src/timex.js +0 -6
  926. package/js/src/tokocrypto.js +0 -6
  927. package/js/src/tradeogre.js +0 -6
  928. package/js/src/upbit.js +0 -6
  929. package/js/src/vertex.js +0 -6
  930. package/js/src/wavesexchange.js +0 -6
  931. package/js/src/whitebit.js +0 -6
  932. package/js/src/woo.js +0 -6
  933. package/js/src/woofipro.js +0 -6
  934. package/js/src/xt.js +0 -6
  935. package/js/src/yobit.js +0 -6
  936. package/js/src/zaif.js +0 -6
  937. package/js/src/zonda.js +0 -6
  938. package/package.json +2 -2
@@ -6,7 +6,7 @@ var Precise = require('./base/Precise.js');
6
6
  var number = require('./base/functions/number.js');
7
7
  var sha256 = require('./static_dependencies/noble-hashes/sha256.js');
8
8
 
9
- // ----------------------------------------------------------------------------
9
+ // ---------------------------------------------------------------------------
10
10
  // ---------------------------------------------------------------------------
11
11
  /**
12
12
  * @class bitget
@@ -805,6 +805,7 @@ class bitget extends bitget$1 {
805
805
  'get': {
806
806
  'v3/account/assets': 1,
807
807
  'v3/account/settings': 1,
808
+ 'v3/account/deposit-records': 2,
808
809
  'v3/account/financial-records': 1,
809
810
  'v3/account/repayable-coins': 2,
810
811
  'v3/account/payment-coins': 2,
@@ -823,7 +824,9 @@ class bitget extends bitget$1 {
823
824
  'v3/position/history-position': 1,
824
825
  'v3/trade/order-info': 1,
825
826
  'v3/trade/unfilled-orders': 1,
827
+ 'v3/trade/unfilled-strategy-orders': 1,
826
828
  'v3/trade/history-orders': 1,
829
+ 'v3/trade/history-strategy-orders': 1,
827
830
  'v3/trade/fills': 1,
828
831
  'v3/user/sub-list': 2,
829
832
  'v3/user/sub-api-list': 2,
@@ -837,8 +840,11 @@ class bitget extends bitget$1 {
837
840
  'v3/account/max-open-available': 4,
838
841
  'v3/ins-loan/bind-uid': 6.6667,
839
842
  'v3/trade/place-order': 2,
843
+ 'v3/trade/place-strategy-order': 2,
840
844
  'v3/trade/modify-order': 2,
845
+ 'v3/trade/modify-strategy-order': 2,
841
846
  'v3/trade/cancel-order': 2,
847
+ 'v3/trade/cancel-strategy-order': 2,
842
848
  'v3/trade/place-batch': 4,
843
849
  'v3/trade/batch-modify-order': 2,
844
850
  'v3/trade/cancel-batch': 4,
@@ -884,6 +890,7 @@ class bitget extends bitget$1 {
884
890
  // '0': ExchangeError, // 200 successful,when the order placement / cancellation / operation is successful
885
891
  '4001': errors.ExchangeError,
886
892
  '4002': errors.ExchangeError,
893
+ '40020': errors.BadRequest,
887
894
  // --------------------------------------------------------
888
895
  '30001': errors.AuthenticationError,
889
896
  '30002': errors.AuthenticationError,
@@ -1428,6 +1435,19 @@ class bitget extends bitget$1 {
1428
1435
  '1w': '1Wutc',
1429
1436
  '1M': '1Mutc',
1430
1437
  },
1438
+ 'uta': {
1439
+ '1m': '1m',
1440
+ '3m': '3m',
1441
+ '5m': '5m',
1442
+ '15m': '15m',
1443
+ '30m': '30m',
1444
+ '1h': '1H',
1445
+ '2h': '2H',
1446
+ '4h': '4H',
1447
+ '6h': '6H',
1448
+ '12h': '12H',
1449
+ '1d': '1D',
1450
+ },
1431
1451
  },
1432
1452
  'fetchMarkets': {
1433
1453
  'types': ['spot', 'swap'], // there is future markets but they use the same endpoints as swap
@@ -1517,7 +1537,6 @@ class bitget extends bitget$1 {
1517
1537
  'ERC20': 'ERC20',
1518
1538
  'BEP20': 'BSC',
1519
1539
  // 'BEP20': 'BEP20', // different for BEP20
1520
- 'BSC': 'BEP20',
1521
1540
  'ATOM': 'ATOM',
1522
1541
  'ACA': 'AcalaToken',
1523
1542
  'APT': 'Aptos',
@@ -1771,10 +1790,20 @@ class bitget extends bitget$1 {
1771
1790
  defaultProductType = (subType === 'linear') ? 'USDT-FUTURES' : 'COIN-FUTURES';
1772
1791
  // }
1773
1792
  }
1774
- let productType = this.safeString(params, 'productType', defaultProductType);
1793
+ let productType = this.safeString2(params, 'productType', 'category', defaultProductType);
1775
1794
  if ((productType === undefined) && (market !== undefined)) {
1776
1795
  const settle = market['settle'];
1777
- if (settle === 'USDT') {
1796
+ if (market['spot']) {
1797
+ let marginMode = undefined;
1798
+ [marginMode, params] = this.handleMarginModeAndParams('handleProductTypeAndParams', params);
1799
+ if (marginMode !== undefined) {
1800
+ productType = 'MARGIN';
1801
+ }
1802
+ else {
1803
+ productType = 'SPOT';
1804
+ }
1805
+ }
1806
+ else if (settle === 'USDT') {
1778
1807
  productType = 'USDT-FUTURES';
1779
1808
  }
1780
1809
  else if (settle === 'USDC') {
@@ -1794,9 +1823,9 @@ class bitget extends bitget$1 {
1794
1823
  }
1795
1824
  }
1796
1825
  if (productType === undefined) {
1797
- throw new errors.ArgumentsRequired(this.id + ' requires a productType param, one of "USDT-FUTURES", "USDC-FUTURES", "COIN-FUTURES", "SUSDT-FUTURES", "SUSDC-FUTURES" or "SCOIN-FUTURES"');
1826
+ throw new errors.ArgumentsRequired(this.id + ' requires a productType param, one of "USDT-FUTURES", "USDC-FUTURES", "COIN-FUTURES", "SUSDT-FUTURES", "SUSDC-FUTURES", "SCOIN-FUTURES" or for uta only "SPOT"');
1798
1827
  }
1799
- params = this.omit(params, 'productType');
1828
+ params = this.omit(params, ['productType', 'category']);
1800
1829
  return [productType, params];
1801
1830
  }
1802
1831
  /**
@@ -1829,9 +1858,9 @@ class bitget extends bitget$1 {
1829
1858
  * @see https://www.bitget.com/api-doc/spot/market/Get-Symbols
1830
1859
  * @see https://www.bitget.com/api-doc/contract/market/Get-All-Symbols-Contracts
1831
1860
  * @see https://www.bitget.com/api-doc/margin/common/support-currencies
1832
- * @see https://www.bitget.bike/api-doc/uta/public/Instruments
1861
+ * @see https://www.bitget.com/api-doc/uta/public/Instruments
1833
1862
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1834
- * @param {string} [params.uta] set to true to fetch markets for the unified trading account (uta), defaults to false
1863
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
1835
1864
  * @returns {object[]} an array of objects representing market data
1836
1865
  */
1837
1866
  async fetchMarkets(params = {}) {
@@ -2477,11 +2506,13 @@ class bitget extends bitget$1 {
2477
2506
  * @see https://www.bitget.com/api-doc/contract/position/Get-Query-Position-Lever
2478
2507
  * @see https://www.bitget.com/api-doc/margin/cross/account/Cross-Tier-Data
2479
2508
  * @see https://www.bitget.com/api-doc/margin/isolated/account/Isolated-Tier-Data
2509
+ * @see https://www.bitget.com/api-doc/uta/public/Get-Position-Tier-Data
2480
2510
  * @param {string} symbol unified market symbol
2481
2511
  * @param {object} [params] extra parameters specific to the exchange API endpoint
2482
2512
  * @param {string} [params.marginMode] for spot margin 'cross' or 'isolated', default is 'isolated'
2483
2513
  * @param {string} [params.code] required for cross spot margin
2484
- * @param {string} [params.productType] *contract only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
2514
+ * @param {string} [params.productType] *contract and uta only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
2515
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
2485
2516
  * @returns {object} a [leverage tiers structure]{@link https://docs.ccxt.com/#/?id=leverage-tiers-structure}
2486
2517
  */
2487
2518
  async fetchMarketLeverageTiers(symbol, params = {}) {
@@ -2490,10 +2521,22 @@ class bitget extends bitget$1 {
2490
2521
  const request = {};
2491
2522
  let response = undefined;
2492
2523
  let marginMode = undefined;
2524
+ let productType = undefined;
2525
+ let uta = undefined;
2493
2526
  [marginMode, params] = this.handleMarginModeAndParams('fetchMarketLeverageTiers', params, 'isolated');
2494
- if ((market['swap']) || (market['future'])) {
2495
- let productType = undefined;
2496
- [productType, params] = this.handleProductTypeAndParams(market, params);
2527
+ [productType, params] = this.handleProductTypeAndParams(market, params);
2528
+ [uta, params] = this.handleOptionAndParams(params, 'fetchMarketLeverageTiers', 'uta', false);
2529
+ if (uta) {
2530
+ if (productType === 'SPOT') {
2531
+ if (marginMode !== undefined) {
2532
+ productType = 'MARGIN';
2533
+ }
2534
+ }
2535
+ request['symbol'] = market['id'];
2536
+ request['category'] = productType;
2537
+ response = await this.publicUtaGetV3MarketPositionTier(this.extend(request, params));
2538
+ }
2539
+ else if ((market['swap']) || (market['future'])) {
2497
2540
  request['productType'] = productType;
2498
2541
  request['symbol'] = market['id'];
2499
2542
  response = await this.publicMixGetV2MixMarketQueryPositionLever(this.extend(request, params));
@@ -2572,6 +2615,23 @@ class bitget extends bitget$1 {
2572
2615
  // ]
2573
2616
  // }
2574
2617
  //
2618
+ // uta
2619
+ //
2620
+ // {
2621
+ // "code": "00000",
2622
+ // "msg": "success",
2623
+ // "requestTime": 1752735673127,
2624
+ // "data": [
2625
+ // {
2626
+ // "tier": "1",
2627
+ // "minTierValue": "0",
2628
+ // "maxTierValue": "150000",
2629
+ // "leverage": "125",
2630
+ // "mmr": "0.004"
2631
+ // },
2632
+ // ]
2633
+ // }
2634
+ //
2575
2635
  const result = this.safeValue(response, 'data', []);
2576
2636
  return this.parseMarketLeverageTiers(result, market);
2577
2637
  }
@@ -2612,15 +2672,25 @@ class bitget extends bitget$1 {
2612
2672
  // "maintainMarginRate": "0.1"
2613
2673
  // }
2614
2674
  //
2675
+ // uta
2676
+ //
2677
+ // {
2678
+ // "tier": "1",
2679
+ // "minTierValue": "0",
2680
+ // "maxTierValue": "150000",
2681
+ // "leverage": "125",
2682
+ // "mmr": "0.004"
2683
+ // }
2684
+ //
2615
2685
  const tiers = [];
2616
2686
  let minNotional = 0;
2617
2687
  for (let i = 0; i < info.length; i++) {
2618
2688
  const item = info[i];
2619
- const minimumNotional = this.safeNumber(item, 'startUnit');
2689
+ const minimumNotional = this.safeNumber2(item, 'startUnit', 'minTierValue');
2620
2690
  if (minimumNotional !== undefined) {
2621
2691
  minNotional = minimumNotional;
2622
2692
  }
2623
- const maxNotional = this.safeNumberN(item, ['endUnit', 'maxBorrowableAmount', 'baseMaxBorrowableAmount']);
2693
+ const maxNotional = this.safeNumberN(item, ['endUnit', 'maxBorrowableAmount', 'baseMaxBorrowableAmount', 'maxTierValue']);
2624
2694
  const marginCurrency = this.safeString2(item, 'coin', 'baseCoin');
2625
2695
  const currencyId = (marginCurrency !== undefined) ? marginCurrency : market['base'];
2626
2696
  const marketId = this.safeString(item, 'symbol');
@@ -2630,7 +2700,7 @@ class bitget extends bitget$1 {
2630
2700
  'currency': this.safeCurrencyCode(currencyId),
2631
2701
  'minNotional': minNotional,
2632
2702
  'maxNotional': maxNotional,
2633
- 'maintenanceMarginRate': this.safeNumber2(item, 'keepMarginRate', 'maintainMarginRate'),
2703
+ 'maintenanceMarginRate': this.safeNumberN(item, ['keepMarginRate', 'maintainMarginRate', 'mmr']),
2634
2704
  'maxLeverage': this.safeNumber(item, 'leverage'),
2635
2705
  'info': item,
2636
2706
  });
@@ -2989,9 +3059,11 @@ class bitget extends bitget$1 {
2989
3059
  * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
2990
3060
  * @see https://www.bitget.com/api-doc/spot/market/Get-Orderbook
2991
3061
  * @see https://www.bitget.com/api-doc/contract/market/Get-Merge-Depth
3062
+ * @see https://www.bitget.com/api-doc/uta/public/OrderBook
2992
3063
  * @param {string} symbol unified symbol of the market to fetch the order book for
2993
3064
  * @param {int} [limit] the maximum amount of order book entries to return
2994
3065
  * @param {object} [params] extra parameters specific to the exchange API endpoint
3066
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
2995
3067
  * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
2996
3068
  */
2997
3069
  async fetchOrderBook(symbol, limit = undefined, params = {}) {
@@ -3003,13 +3075,19 @@ class bitget extends bitget$1 {
3003
3075
  if (limit !== undefined) {
3004
3076
  request['limit'] = limit;
3005
3077
  }
3078
+ let productType = undefined;
3079
+ [productType, params] = this.handleProductTypeAndParams(market, params);
3006
3080
  let response = undefined;
3007
- if (market['spot']) {
3081
+ let uta = undefined;
3082
+ [uta, params] = this.handleOptionAndParams(params, 'fetchOrderBook', 'uta', false);
3083
+ if (uta) {
3084
+ request['category'] = productType;
3085
+ response = await this.publicUtaGetV3MarketOrderbook(this.extend(request, params));
3086
+ }
3087
+ else if (market['spot']) {
3008
3088
  response = await this.publicSpotGetV2SpotMarketOrderbook(this.extend(request, params));
3009
3089
  }
3010
3090
  else {
3011
- let productType = undefined;
3012
- [productType, params] = this.handleProductTypeAndParams(market, params);
3013
3091
  request['productType'] = productType;
3014
3092
  response = await this.publicMixGetV2MixMarketMergeDepth(this.extend(request, params));
3015
3093
  }
@@ -3025,9 +3103,24 @@ class bitget extends bitget$1 {
3025
3103
  // }
3026
3104
  // }
3027
3105
  //
3106
+ // uta
3107
+ //
3108
+ // {
3109
+ // "code": "00000",
3110
+ // "msg": "success",
3111
+ // "requestTime": 1750329437753,
3112
+ // "data": {
3113
+ // "a": [ [ 104992.60, 0.018411 ] ],
3114
+ // "b":[ [104927.40, 0.229914 ] ],
3115
+ // "ts": "1750329437763"
3116
+ // }
3117
+ // }
3118
+ //
3028
3119
  const data = this.safeValue(response, 'data', {});
3120
+ const bidsKey = uta ? 'b' : 'bids';
3121
+ const asksKey = uta ? 'a' : 'asks';
3029
3122
  const timestamp = this.safeInteger(data, 'ts');
3030
- return this.parseOrderBook(data, market['symbol'], timestamp);
3123
+ return this.parseOrderBook(data, market['symbol'], timestamp, bidsKey, asksKey);
3031
3124
  }
3032
3125
  parseTicker(ticker, market = undefined) {
3033
3126
  //
@@ -3039,7 +3132,7 @@ class bitget extends bitget$1 {
3039
3132
  // "ts": "1695793390482"
3040
3133
  // }
3041
3134
  //
3042
- // spot: fetchTicker, fetchTickers
3135
+ // spot
3043
3136
  //
3044
3137
  // {
3045
3138
  // "open": "37202.46",
@@ -3060,92 +3153,118 @@ class bitget extends bitget$1 {
3060
3153
  // "change24h": "0.00321"
3061
3154
  // }
3062
3155
  //
3063
- // swap and future: fetchTicker
3156
+ // swap and future
3064
3157
  //
3065
3158
  // {
3066
3159
  // "symbol": "BTCUSDT",
3067
- // "lastPr": "37577.2",
3068
- // "askPr": "37577.3",
3069
- // "bidPr": "37577.2",
3070
- // "bidSz": "3.679",
3071
- // "askSz": "0.02",
3072
- // "high24h": "37765",
3073
- // "low24h": "36628.9",
3074
- // "ts": "1700533070359",
3075
- // "change24h": "0.00288",
3076
- // "baseVolume": "108606.181",
3077
- // "quoteVolume": "4051316303.9608",
3078
- // "usdtVolume": "4051316303.9608",
3079
- // "openUtc": "37451.5",
3080
- // "changeUtc24h": "0.00336",
3081
- // "indexPrice": "37574.489253",
3082
- // "fundingRate": "0.0001",
3083
- // "holdingAmount": "53464.529",
3160
+ // "lastPr": "104823.8",
3161
+ // "askPr": "104823.8",
3162
+ // "bidPr": "104823.5",
3163
+ // "bidSz": "0.703",
3164
+ // "askSz": "13.894",
3165
+ // "high24h": "105289.3",
3166
+ // "low24h": "103447.9",
3167
+ // "ts": "1750332210370",
3168
+ // "change24h": "0.00471",
3169
+ // "baseVolume": "79089.5675",
3170
+ // "quoteVolume": "8274870921.80485",
3171
+ // "usdtVolume": "8274870921.80485",
3172
+ // "openUtc": "104833",
3173
+ // "changeUtc24h": "-0.00009",
3174
+ // "indexPrice": "104881.953125",
3175
+ // "fundingRate": "-0.000014",
3176
+ // "holdingAmount": "7452.6421",
3084
3177
  // "deliveryStartTime": null,
3085
3178
  // "deliveryTime": null,
3086
3179
  // "deliveryStatus": "",
3087
- // "open24h": "37235.7"
3180
+ // "open24h": "104332.3",
3181
+ // "markPrice": "104824.2"
3182
+ // }
3183
+ //
3184
+ // spot uta
3185
+ //
3186
+ // {
3187
+ // "category": "SPOT",
3188
+ // "symbol": "BTCUSDT",
3189
+ // "ts": "1750330651972",
3190
+ // "lastPrice": "104900.2",
3191
+ // "openPrice24h": "104321.2",
3192
+ // "highPrice24h": "107956.8",
3193
+ // "lowPrice24h": "103600.1",
3194
+ // "ask1Price": "104945.8",
3195
+ // "bid1Price": "104880.6",
3196
+ // "bid1Size": "0.266534",
3197
+ // "ask1Size": "0.014001",
3198
+ // "price24hPcnt": "0.00555",
3199
+ // "volume24h": "355.941109",
3200
+ // "turnover24h": "37302936.008134"
3088
3201
  // }
3089
3202
  //
3090
- // swap and future: fetchTickers
3203
+ // swap and future uta
3091
3204
  //
3092
3205
  // {
3093
- // "open": "14.9776",
3094
- // "symbol": "LINKUSDT",
3095
- // "high24h": "15.3942",
3096
- // "low24h": "14.3457",
3097
- // "lastPr": "14.3748",
3098
- // "quoteVolume": "7008612.4299",
3099
- // "baseVolume": "469908.8523",
3100
- // "usdtVolume": "7008612.42986561",
3101
- // "ts": "1700533772309",
3102
- // "bidPr": "14.375",
3103
- // "askPr": "14.3769",
3104
- // "bidSz": "50.004",
3105
- // "askSz": "0.7647",
3106
- // "openUtc": "14.478",
3107
- // "changeUtc24h": "-0.00713",
3108
- // "change24h": "-0.04978"
3206
+ // "category": "USDT-FUTURES",
3207
+ // "symbol": "BTCUSDT",
3208
+ // "ts": "1750332730472",
3209
+ // "lastPrice": "104738",
3210
+ // "openPrice24h": "104374",
3211
+ // "highPrice24h": "105289.3",
3212
+ // "lowPrice24h": "103447.9",
3213
+ // "ask1Price": "104738",
3214
+ // "bid1Price": "104737.7",
3215
+ // "bid1Size": "2.036",
3216
+ // "ask1Size": "8.094",
3217
+ // "price24hPcnt": "0.00349",
3218
+ // "volume24h": "79101.6477",
3219
+ // "turnover24h": "8276293391.45973",
3220
+ // "indexPrice": "104785.956168",
3221
+ // "markPrice": "104738",
3222
+ // "fundingRate": "-0.000007",
3223
+ // "openInterest": "7465.5938",
3224
+ // "deliveryStartTime": "",
3225
+ // "deliveryTime": "",
3226
+ // "deliveryStatus": ""
3109
3227
  // }
3110
3228
  //
3111
3229
  const marketId = this.safeString(ticker, 'symbol');
3112
- const close = this.safeString(ticker, 'lastPr');
3230
+ const close = this.safeString2(ticker, 'lastPr', 'lastPrice');
3113
3231
  const timestamp = this.safeIntegerOmitZero(ticker, 'ts'); // exchange bitget provided 0
3114
3232
  const change = this.safeString(ticker, 'change24h');
3115
- const open24 = this.safeString2(ticker, 'open24', 'open24h');
3116
- const open = this.safeString(ticker, 'open');
3117
- let symbol;
3118
- let openValue;
3119
- if (open === undefined) {
3120
- symbol = this.safeSymbol(marketId, market, undefined, 'contract');
3121
- openValue = open24;
3233
+ const category = this.safeString(ticker, 'category');
3234
+ const markPrice = this.safeString(ticker, 'markPrice');
3235
+ let marketType;
3236
+ if ((markPrice !== undefined) && (category !== 'SPOT')) {
3237
+ marketType = 'contract';
3122
3238
  }
3123
3239
  else {
3124
- symbol = this.safeSymbol(marketId, market, undefined, 'spot');
3125
- openValue = open;
3240
+ marketType = 'spot';
3241
+ }
3242
+ let percentage = this.safeString(ticker, 'price24hPcnt');
3243
+ if (percentage === undefined) {
3244
+ percentage = Precise["default"].stringMul(change, '100');
3126
3245
  }
3127
3246
  return this.safeTicker({
3128
- 'symbol': symbol,
3247
+ 'symbol': this.safeSymbol(marketId, market, undefined, marketType),
3129
3248
  'timestamp': timestamp,
3130
3249
  'datetime': this.iso8601(timestamp),
3131
- 'high': this.safeString(ticker, 'high24h'),
3132
- 'low': this.safeString(ticker, 'low24h'),
3133
- 'bid': this.safeString(ticker, 'bidPr'),
3134
- 'bidVolume': this.safeString(ticker, 'bidSz'),
3135
- 'ask': this.safeString(ticker, 'askPr'),
3136
- 'askVolume': this.safeString(ticker, 'askSz'),
3250
+ 'high': this.safeString2(ticker, 'high24h', 'highPrice24h'),
3251
+ 'low': this.safeString2(ticker, 'low24h', 'lowPrice24h'),
3252
+ 'bid': this.safeString2(ticker, 'bidPr', 'bid1Price'),
3253
+ 'bidVolume': this.safeString2(ticker, 'bidSz', 'bid1Size'),
3254
+ 'ask': this.safeString2(ticker, 'askPr', 'ask1Price'),
3255
+ 'askVolume': this.safeString2(ticker, 'askSz', 'ask1Size'),
3137
3256
  'vwap': undefined,
3138
- 'open': openValue,
3257
+ 'open': this.safeStringN(ticker, ['open', 'open24h', 'openPrice24h']),
3139
3258
  'close': close,
3140
3259
  'last': close,
3141
3260
  'previousClose': undefined,
3142
3261
  'change': change,
3143
- 'percentage': Precise["default"].stringMul(change, '100'),
3262
+ 'percentage': percentage,
3144
3263
  'average': undefined,
3145
- 'baseVolume': this.safeString(ticker, 'baseVolume'),
3146
- 'quoteVolume': this.safeString(ticker, 'quoteVolume'),
3264
+ 'baseVolume': this.safeString2(ticker, 'baseVolume', 'volume24h'),
3265
+ 'quoteVolume': this.safeString2(ticker, 'quoteVolume', 'turnover24h'),
3147
3266
  'indexPrice': this.safeString(ticker, 'indexPrice'),
3148
- 'markPrice': this.safeString(ticker, 'markPrice'),
3267
+ 'markPrice': markPrice,
3149
3268
  'info': ticker,
3150
3269
  }, market);
3151
3270
  }
@@ -3155,8 +3274,10 @@ class bitget extends bitget$1 {
3155
3274
  * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
3156
3275
  * @see https://www.bitget.com/api-doc/spot/market/Get-Tickers
3157
3276
  * @see https://www.bitget.com/api-doc/contract/market/Get-Ticker
3277
+ * @see https://www.bitget.com/api-doc/uta/public/Tickers
3158
3278
  * @param {string} symbol unified symbol of the market to fetch the ticker for
3159
3279
  * @param {object} [params] extra parameters specific to the exchange API endpoint
3280
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
3160
3281
  * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
3161
3282
  */
3162
3283
  async fetchTicker(symbol, params = {}) {
@@ -3165,13 +3286,19 @@ class bitget extends bitget$1 {
3165
3286
  const request = {
3166
3287
  'symbol': market['id'],
3167
3288
  };
3289
+ let productType = undefined;
3290
+ [productType, params] = this.handleProductTypeAndParams(market, params);
3168
3291
  let response = undefined;
3169
- if (market['spot']) {
3292
+ let uta = undefined;
3293
+ [uta, params] = this.handleOptionAndParams(params, 'fetchTicker', 'uta', false);
3294
+ if (uta) {
3295
+ request['category'] = productType;
3296
+ response = await this.publicUtaGetV3MarketTickers(this.extend(request, params));
3297
+ }
3298
+ else if (market['spot']) {
3170
3299
  response = await this.publicSpotGetV2SpotMarketTickers(this.extend(request, params));
3171
3300
  }
3172
3301
  else {
3173
- let productType = undefined;
3174
- [productType, params] = this.handleProductTypeAndParams(market, params);
3175
3302
  request['productType'] = productType;
3176
3303
  response = await this.publicMixGetV2MixMarketTicker(this.extend(request, params));
3177
3304
  }
@@ -3206,34 +3333,94 @@ class bitget extends bitget$1 {
3206
3333
  //
3207
3334
  // swap and future
3208
3335
  //
3209
- // {
3336
+ // {
3210
3337
  // "code": "00000",
3211
3338
  // "msg": "success",
3212
- // "requestTime": 1700533070357,
3339
+ // "requestTime": 1750332210369,
3213
3340
  // "data": [
3214
3341
  // {
3215
3342
  // "symbol": "BTCUSDT",
3216
- // "lastPr": "37577.2",
3217
- // "askPr": "37577.3",
3218
- // "bidPr": "37577.2",
3219
- // "bidSz": "3.679",
3220
- // "askSz": "0.02",
3221
- // "high24h": "37765",
3222
- // "low24h": "36628.9",
3223
- // "ts": "1700533070359",
3224
- // "change24h": "0.00288",
3225
- // "baseVolume": "108606.181",
3226
- // "quoteVolume": "4051316303.9608",
3227
- // "usdtVolume": "4051316303.9608",
3228
- // "openUtc": "37451.5",
3229
- // "changeUtc24h": "0.00336",
3230
- // "indexPrice": "37574.489253",
3231
- // "fundingRate": "0.0001",
3232
- // "holdingAmount": "53464.529",
3343
+ // "lastPr": "104823.8",
3344
+ // "askPr": "104823.8",
3345
+ // "bidPr": "104823.5",
3346
+ // "bidSz": "0.703",
3347
+ // "askSz": "13.894",
3348
+ // "high24h": "105289.3",
3349
+ // "low24h": "103447.9",
3350
+ // "ts": "1750332210370",
3351
+ // "change24h": "0.00471",
3352
+ // "baseVolume": "79089.5675",
3353
+ // "quoteVolume": "8274870921.80485",
3354
+ // "usdtVolume": "8274870921.80485",
3355
+ // "openUtc": "104833",
3356
+ // "changeUtc24h": "-0.00009",
3357
+ // "indexPrice": "104881.953125",
3358
+ // "fundingRate": "-0.000014",
3359
+ // "holdingAmount": "7452.6421",
3233
3360
  // "deliveryStartTime": null,
3234
3361
  // "deliveryTime": null,
3235
3362
  // "deliveryStatus": "",
3236
- // "open24h": "37235.7"
3363
+ // "open24h": "104332.3",
3364
+ // "markPrice": "104824.2"
3365
+ // }
3366
+ // ]
3367
+ // }
3368
+ //
3369
+ // spot uta
3370
+ //
3371
+ // {
3372
+ // "code": "00000",
3373
+ // "msg": "success",
3374
+ // "requestTime": 1750330653575,
3375
+ // "data": [
3376
+ // {
3377
+ // "category": "SPOT",
3378
+ // "symbol": "BTCUSDT",
3379
+ // "ts": "1750330651972",
3380
+ // "lastPrice": "104900.2",
3381
+ // "openPrice24h": "104321.2",
3382
+ // "highPrice24h": "107956.8",
3383
+ // "lowPrice24h": "103600.1",
3384
+ // "ask1Price": "104945.8",
3385
+ // "bid1Price": "104880.6",
3386
+ // "bid1Size": "0.266534",
3387
+ // "ask1Size": "0.014001",
3388
+ // "price24hPcnt": "0.00555",
3389
+ // "volume24h": "355.941109",
3390
+ // "turnover24h": "37302936.008134"
3391
+ // }
3392
+ // ]
3393
+ // }
3394
+ //
3395
+ // swap and future uta
3396
+ //
3397
+ // {
3398
+ // "code": "00000",
3399
+ // "msg": "success",
3400
+ // "requestTime": 1750332731203,
3401
+ // "data": [
3402
+ // {
3403
+ // "category": "USDT-FUTURES",
3404
+ // "symbol": "BTCUSDT",
3405
+ // "ts": "1750332730472",
3406
+ // "lastPrice": "104738",
3407
+ // "openPrice24h": "104374",
3408
+ // "highPrice24h": "105289.3",
3409
+ // "lowPrice24h": "103447.9",
3410
+ // "ask1Price": "104738",
3411
+ // "bid1Price": "104737.7",
3412
+ // "bid1Size": "2.036",
3413
+ // "ask1Size": "8.094",
3414
+ // "price24hPcnt": "0.00349",
3415
+ // "volume24h": "79101.6477",
3416
+ // "turnover24h": "8276293391.45973",
3417
+ // "indexPrice": "104785.956168",
3418
+ // "markPrice": "104738",
3419
+ // "fundingRate": "-0.000007",
3420
+ // "openInterest": "7465.5938",
3421
+ // "deliveryStartTime": "",
3422
+ // "deliveryTime": "",
3423
+ // "deliveryStatus": ""
3237
3424
  // }
3238
3425
  // ]
3239
3426
  // }
@@ -3275,8 +3462,10 @@ class bitget extends bitget$1 {
3275
3462
  * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
3276
3463
  * @see https://www.bitget.com/api-doc/spot/market/Get-Tickers
3277
3464
  * @see https://www.bitget.com/api-doc/contract/market/Get-All-Symbol-Ticker
3465
+ * @see https://www.bitget.com/api-doc/uta/public/Tickers
3278
3466
  * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
3279
3467
  * @param {object} [params] extra parameters specific to the exchange API endpoint
3468
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
3280
3469
  * @param {string} [params.subType] *contract only* 'linear', 'inverse'
3281
3470
  * @param {string} [params.productType] *contract only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
3282
3471
  * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
@@ -3299,7 +3488,17 @@ class bitget extends bitget$1 {
3299
3488
  let productType = undefined;
3300
3489
  [productType, params] = this.handleProductTypeAndParams(market, params);
3301
3490
  // only if passedSubType && productType is undefined, then use spot
3302
- if (type === 'spot' && passedSubType === undefined) {
3491
+ let uta = undefined;
3492
+ [uta, params] = this.handleOptionAndParams(params, 'fetchTickers', 'uta', false);
3493
+ if (uta) {
3494
+ const symbolsLength = symbols.length;
3495
+ if ((symbols !== undefined) && (symbolsLength === 1)) {
3496
+ request['symbol'] = market['id'];
3497
+ }
3498
+ request['category'] = productType;
3499
+ response = await this.publicUtaGetV3MarketTickers(this.extend(request, params));
3500
+ }
3501
+ else if (type === 'spot' && passedSubType === undefined) {
3303
3502
  response = await this.publicSpotGetV2SpotMarketTickers(this.extend(request, params));
3304
3503
  }
3305
3504
  else {
@@ -3363,6 +3562,65 @@ class bitget extends bitget$1 {
3363
3562
  // ]
3364
3563
  // }
3365
3564
  //
3565
+ // spot uta
3566
+ //
3567
+ // {
3568
+ // "code": "00000",
3569
+ // "msg": "success",
3570
+ // "requestTime": 1750330653575,
3571
+ // "data": [
3572
+ // {
3573
+ // "category": "SPOT",
3574
+ // "symbol": "BTCUSDT",
3575
+ // "ts": "1750330651972",
3576
+ // "lastPrice": "104900.2",
3577
+ // "openPrice24h": "104321.2",
3578
+ // "highPrice24h": "107956.8",
3579
+ // "lowPrice24h": "103600.1",
3580
+ // "ask1Price": "104945.8",
3581
+ // "bid1Price": "104880.6",
3582
+ // "bid1Size": "0.266534",
3583
+ // "ask1Size": "0.014001",
3584
+ // "price24hPcnt": "0.00555",
3585
+ // "volume24h": "355.941109",
3586
+ // "turnover24h": "37302936.008134"
3587
+ // }
3588
+ // ]
3589
+ // }
3590
+ //
3591
+ // swap and future uta
3592
+ //
3593
+ // {
3594
+ // "code": "00000",
3595
+ // "msg": "success",
3596
+ // "requestTime": 1750332731203,
3597
+ // "data": [
3598
+ // {
3599
+ // "category": "USDT-FUTURES",
3600
+ // "symbol": "BTCUSDT",
3601
+ // "ts": "1750332730472",
3602
+ // "lastPrice": "104738",
3603
+ // "openPrice24h": "104374",
3604
+ // "highPrice24h": "105289.3",
3605
+ // "lowPrice24h": "103447.9",
3606
+ // "ask1Price": "104738",
3607
+ // "bid1Price": "104737.7",
3608
+ // "bid1Size": "2.036",
3609
+ // "ask1Size": "8.094",
3610
+ // "price24hPcnt": "0.00349",
3611
+ // "volume24h": "79101.6477",
3612
+ // "turnover24h": "8276293391.45973",
3613
+ // "indexPrice": "104785.956168",
3614
+ // "markPrice": "104738",
3615
+ // "fundingRate": "-0.000007",
3616
+ // "openInterest": "7465.5938",
3617
+ // "deliveryStartTime": "",
3618
+ // "deliveryTime": "",
3619
+ // "deliveryStatus": ""
3620
+ // }
3621
+ // ]
3622
+ // }
3623
+ //
3366
3624
  const data = this.safeList(response, 'data', []);
3367
3625
  return this.parseTickers(data, symbols);
3368
3626
  }
@@ -3449,19 +3707,53 @@ class bitget extends bitget$1 {
3449
3707
  // "cTime": "1700720700342"
3450
3708
  // }
3451
3709
  //
3710
+ // uta fetchTrades
3711
+ //
3712
+ // {
3713
+ // "execId": "1319896716324937729",
3714
+ // "price": "105909.1",
3715
+ // "size": "6.3090",
3716
+ // "side": "sell",
3717
+ // "ts": "1750413820344"
3718
+ // }
3719
+ //
3720
+ // uta fetchMyTrades
3721
+ //
3722
+ // {
3723
+ // "execId": "1322441401010528257",
3724
+ // "orderId": "1322441400976261120",
3725
+ // "category": "USDT-FUTURES",
3726
+ // "symbol": "BTCUSDT",
3727
+ // "orderType": "market",
3728
+ // "side": "sell",
3729
+ // "execPrice": "107005.4",
3730
+ // "execQty": "0.0001",
3731
+ // "execValue": "10.7005",
3732
+ // "tradeScope": "taker",
3733
+ // "feeDetail": [{
3734
+ // "feeCoin": "USDT",
3735
+ // "fee":"0.00642032"
3736
+ // }],
3737
+ // "createdTime": "1751020520451",
3738
+ // "updatedTime": "1751020520458",
3739
+ // "execPnl": "0.00017"
3740
+ // }
3741
+ //
3452
3742
  const marketId = this.safeString(trade, 'symbol');
3453
3743
  const symbol = this.safeSymbol(marketId, market);
3454
- const timestamp = this.safeInteger2(trade, 'cTime', 'ts');
3744
+ const timestamp = this.safeIntegerN(trade, ['cTime', 'ts', 'createdTime']);
3455
3745
  let fee = undefined;
3456
3746
  const feeDetail = this.safeValue(trade, 'feeDetail');
3457
3747
  const posMode = this.safeString(trade, 'posMode');
3458
- const feeStructure = (posMode !== undefined) ? feeDetail[0] : feeDetail;
3748
+ const category = this.safeString(trade, 'category');
3749
+ const isFeeStructure = (posMode !== undefined) || (category !== undefined);
3750
+ const feeStructure = isFeeStructure ? feeDetail[0] : feeDetail;
3459
3751
  if (feeStructure !== undefined) {
3460
3752
  const currencyCode = this.safeCurrencyCode(this.safeString(feeStructure, 'feeCoin'));
3461
3753
  fee = {
3462
3754
  'currency': currencyCode,
3463
3755
  };
3464
- const feeCostString = this.safeString(feeStructure, 'totalFee');
3756
+ const feeCostString = this.safeString2(feeStructure, 'totalFee', 'fee');
3465
3757
  const deduction = this.safeString(feeStructure, 'deduction') === 'yes' ? true : false;
3466
3758
  if (deduction) {
3467
3759
  fee['cost'] = feeCostString;
@@ -3472,15 +3764,15 @@ class bitget extends bitget$1 {
3472
3764
  }
3473
3765
  return this.safeTrade({
3474
3766
  'info': trade,
3475
- 'id': this.safeString(trade, 'tradeId'),
3767
+ 'id': this.safeString2(trade, 'tradeId', 'execId'),
3476
3768
  'order': this.safeString(trade, 'orderId'),
3477
3769
  'symbol': symbol,
3478
3770
  'side': this.safeStringLower(trade, 'side'),
3479
3771
  'type': this.safeString(trade, 'orderType'),
3480
3772
  'takerOrMaker': this.safeString(trade, 'tradeScope'),
3481
- 'price': this.safeString2(trade, 'priceAvg', 'price'),
3482
- 'amount': this.safeString2(trade, 'baseVolume', 'size'),
3483
- 'cost': this.safeString2(trade, 'quoteVolume', 'amount'),
3773
+ 'price': this.safeStringN(trade, ['priceAvg', 'price', 'execPrice']),
3774
+ 'amount': this.safeStringN(trade, ['baseVolume', 'size', 'execQty']),
3775
+ 'cost': this.safeStringN(trade, ['quoteVolume', 'amount', 'execValue']),
3484
3776
  'timestamp': timestamp,
3485
3777
  'datetime': this.iso8601(timestamp),
3486
3778
  'fee': fee,
@@ -3494,10 +3786,12 @@ class bitget extends bitget$1 {
3494
3786
  * @see https://www.bitget.com/api-doc/spot/market/Get-Market-Trades
3495
3787
  * @see https://www.bitget.com/api-doc/contract/market/Get-Recent-Fills
3496
3788
  * @see https://www.bitget.com/api-doc/contract/market/Get-Fills-History
3789
+ * @see https://www.bitget.com/api-doc/uta/public/Fills
3497
3790
  * @param {string} symbol unified symbol of the market to fetch trades for
3498
3791
  * @param {int} [since] timestamp in ms of the earliest trade to fetch
3499
3792
  * @param {int} [limit] the maximum amount of trades to fetch
3500
3793
  * @param {object} [params] extra parameters specific to the exchange API endpoint
3794
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
3501
3795
  * @param {int} [params.until] *only applies to publicSpotGetV2SpotMarketFillsHistory and publicMixGetV2MixMarketFillsHistory* the latest time in ms to fetch trades for
3502
3796
  * @param {boolean} [params.paginate] *only applies to publicSpotGetV2SpotMarketFillsHistory and publicMixGetV2MixMarketFillsHistory* default false, when true will automatically paginate by calling this endpoint multiple times
3503
3797
  * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
@@ -3513,8 +3807,13 @@ class bitget extends bitget$1 {
3513
3807
  let request = {
3514
3808
  'symbol': market['id'],
3515
3809
  };
3810
+ let uta = undefined;
3811
+ [uta, params] = this.handleOptionAndParams(params, 'fetchTrades', 'uta', false);
3516
3812
  if (limit !== undefined) {
3517
- if (market['contract']) {
3813
+ if (uta) {
3814
+ request['limit'] = Math.min(limit, 100);
3815
+ }
3816
+ else if (market['contract']) {
3518
3817
  request['limit'] = Math.min(limit, 1000);
3519
3818
  }
3520
3819
  else {
@@ -3523,7 +3822,20 @@ class bitget extends bitget$1 {
3523
3822
  }
3524
3823
  const options = this.safeValue(this.options, 'fetchTrades', {});
3525
3824
  let response = undefined;
3526
- if (market['spot']) {
3825
+ let productType = undefined;
3826
+ [productType, params] = this.handleProductTypeAndParams(market, params);
3827
+ if (uta) {
3828
+ if (productType === 'SPOT') {
3829
+ let marginMode = undefined;
3830
+ [marginMode, params] = this.handleMarginModeAndParams('fetchTrades', params);
3831
+ if (marginMode !== undefined) {
3832
+ productType = 'MARGIN';
3833
+ }
3834
+ }
3835
+ request['category'] = productType;
3836
+ response = await this.publicUtaGetV3MarketFills(this.extend(request, params));
3837
+ }
3838
+ else if (market['spot']) {
3527
3839
  const spotOptions = this.safeValue(options, 'spot', {});
3528
3840
  const defaultSpotMethod = this.safeString(spotOptions, 'method', 'publicSpotGetV2SpotMarketFillsHistory');
3529
3841
  const spotMethod = this.safeString(params, 'method', defaultSpotMethod);
@@ -3544,8 +3856,6 @@ class bitget extends bitget$1 {
3544
3856
  const defaultSwapMethod = this.safeString(swapOptions, 'method', 'publicMixGetV2MixMarketFillsHistory');
3545
3857
  const swapMethod = this.safeString(params, 'method', defaultSwapMethod);
3546
3858
  params = this.omit(params, 'method');
3547
- let productType = undefined;
3548
- [productType, params] = this.handleProductTypeAndParams(market, params);
3549
3859
  request['productType'] = productType;
3550
3860
  if (swapMethod === 'publicMixGetV2MixMarketFillsHistory') {
3551
3861
  [request, params] = this.handleUntilOption('endTime', request, params);
@@ -3595,6 +3905,23 @@ class bitget extends bitget$1 {
3595
3905
  // ]
3596
3906
  // }
3597
3907
  //
3908
+ // uta
3909
+ //
3910
+ // {
3911
+ // "code": "00000",
3912
+ // "msg": "success",
3913
+ // "requestTime": 1750413823980,
3914
+ // "data": [
3915
+ // {
3916
+ // "execId": "1319896716324937729",
3917
+ // "price": "105909.1",
3918
+ // "size": "6.3090",
3919
+ // "side": "sell",
3920
+ // "ts": "1750413820344"
3921
+ // }
3922
+ // ]
3923
+ // }
3924
+ //
3598
3925
  const data = this.safeList(response, 'data', []);
3599
3926
  return this.parseTrades(data, market, since, limit);
3600
3927
  }
@@ -3786,13 +4113,15 @@ class bitget extends bitget$1 {
3786
4113
  // "1399132.341"
3787
4114
  // ]
3788
4115
  //
4116
+ const inverse = this.safeBool(market, 'inverse');
4117
+ const volumeIndex = inverse ? 6 : 5;
3789
4118
  return [
3790
4119
  this.safeInteger(ohlcv, 0),
3791
4120
  this.safeNumber(ohlcv, 1),
3792
4121
  this.safeNumber(ohlcv, 2),
3793
4122
  this.safeNumber(ohlcv, 3),
3794
4123
  this.safeNumber(ohlcv, 4),
3795
- this.safeNumber(ohlcv, 5),
4124
+ this.safeNumber(ohlcv, volumeIndex),
3796
4125
  ];
3797
4126
  }
3798
4127
  /**
@@ -3805,11 +4134,13 @@ class bitget extends bitget$1 {
3805
4134
  * @see https://www.bitget.com/api-doc/contract/market/Get-History-Candle-Data
3806
4135
  * @see https://www.bitget.com/api-doc/contract/market/Get-History-Index-Candle-Data
3807
4136
  * @see https://www.bitget.com/api-doc/contract/market/Get-History-Mark-Candle-Data
4137
+ * @see https://www.bitget.com/api-doc/uta/public/Get-Candle-Data
3808
4138
  * @param {string} symbol unified symbol of the market to fetch OHLCV data for
3809
4139
  * @param {string} timeframe the length of time each candle represents
3810
4140
  * @param {int} [since] timestamp in ms of the earliest candle to fetch
3811
4141
  * @param {int} [limit] the maximum amount of candles to fetch
3812
4142
  * @param {object} [params] extra parameters specific to the exchange API endpoint
4143
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
3813
4144
  * @param {int} [params.until] timestamp in ms of the latest candle to fetch
3814
4145
  * @param {boolean} [params.useHistoryEndpoint] whether to force to use historical endpoint (it has max limit of 200)
3815
4146
  * @param {boolean} [params.useHistoryEndpointForPagination] whether to force to use historical endpoint for pagination (default true)
@@ -3831,12 +4162,22 @@ class bitget extends bitget$1 {
3831
4162
  return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, limitForPagination);
3832
4163
  }
3833
4164
  const market = this.market(symbol);
3834
- const marketType = market['spot'] ? 'spot' : 'swap';
3835
- const timeframes = this.options['timeframes'][marketType];
3836
4165
  const request = {
3837
4166
  'symbol': market['id'],
3838
- 'granularity': this.safeString(timeframes, timeframe, timeframe),
3839
4167
  };
4168
+ let marketType = undefined;
4169
+ let timeframes = undefined;
4170
+ let uta = undefined;
4171
+ [uta, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'uta', false);
4172
+ if (uta) {
4173
+ timeframes = this.options['timeframes']['uta'];
4174
+ request['interval'] = this.safeString(timeframes, timeframe, timeframe);
4175
+ }
4176
+ else {
4177
+ marketType = market['spot'] ? 'spot' : 'swap';
4178
+ timeframes = this.options['timeframes'][marketType];
4179
+ request['granularity'] = this.safeString(timeframes, timeframe, timeframe);
4180
+ }
3840
4181
  const msInDay = 86400000;
3841
4182
  const now = this.milliseconds();
3842
4183
  const duration = this.parseTimeframe(timeframe) * 1000;
@@ -3906,7 +4247,23 @@ class bitget extends bitget$1 {
3906
4247
  request['limit'] = limit;
3907
4248
  // make request
3908
4249
  let response = undefined;
3909
- if (market['spot']) {
4250
+ let productType = undefined;
4251
+ let priceType = undefined;
4252
+ [priceType, params] = this.handleParamString(params, 'price');
4253
+ [productType, params] = this.handleProductTypeAndParams(market, params);
4254
+ if (uta) {
4255
+ if (priceType !== undefined) {
4256
+ if (priceType === 'mark') {
4257
+ request['type'] = 'MARK';
4258
+ }
4259
+ else if (priceType === 'index') {
4260
+ request['type'] = 'INDEX';
4261
+ }
4262
+ }
4263
+ request['category'] = productType;
4264
+ response = await this.publicUtaGetV3MarketCandles(this.extend(request, params));
4265
+ }
4266
+ else if (market['spot']) {
3910
4267
  // checks if we need history endpoint
3911
4268
  if (historicalEndpointNeeded) {
3912
4269
  response = await this.publicSpotGetV2SpotMarketHistoryCandles(this.extend(request, params));
@@ -3920,10 +4277,6 @@ class bitget extends bitget$1 {
3920
4277
  }
3921
4278
  }
3922
4279
  else {
3923
- let priceType = undefined;
3924
- [priceType, params] = this.handleParamString(params, 'price');
3925
- let productType = undefined;
3926
- [productType, params] = this.handleProductTypeAndParams(market, params);
3927
4280
  request['productType'] = productType;
3928
4281
  const extended = this.extend(request, params);
3929
4282
  if (!historicalEndpointNeeded && (priceType === 'mark' || priceType === 'index')) {
@@ -3971,8 +4324,10 @@ class bitget extends bitget$1 {
3971
4324
  * @see https://www.bitget.com/api-doc/margin/isolated/account/Get-Isolated-Assets
3972
4325
  * @see https://bitgetlimited.github.io/apidoc/en/margin/#get-cross-assets
3973
4326
  * @see https://bitgetlimited.github.io/apidoc/en/margin/#get-isolated-assets
4327
+ * @see https://www.bitget.com/api-doc/uta/account/Get-Account
3974
4328
  * @param {object} [params] extra parameters specific to the exchange API endpoint
3975
4329
  * @param {string} [params.productType] *contract only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
4330
+ * @param {string} [params.uta] set to true for the unified trading account (uta), defaults to false
3976
4331
  * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
3977
4332
  */
3978
4333
  async fetchBalance(params = {}) {
@@ -3981,9 +4336,17 @@ class bitget extends bitget$1 {
3981
4336
  let marketType = undefined;
3982
4337
  let marginMode = undefined;
3983
4338
  let response = undefined;
4339
+ let uta = undefined;
4340
+ [uta, params] = this.handleOptionAndParams(params, 'fetchBalance', 'uta', false);
3984
4341
  [marketType, params] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);
3985
4342
  [marginMode, params] = this.handleMarginModeAndParams('fetchBalance', params);
3986
- if ((marketType === 'swap') || (marketType === 'future')) {
4343
+ if (uta) {
4344
+ response = await this.privateUtaGetV3AccountAssets(this.extend(request, params));
4345
+ const results = this.safeDict(response, 'data', {});
4346
+ const assets = this.safeList(results, 'assets', []);
4347
+ return this.parseUtaBalance(assets);
4348
+ }
4349
+ else if ((marketType === 'swap') || (marketType === 'future')) {
3987
4350
  let productType = undefined;
3988
4351
  [productType, params] = this.handleProductTypeAndParams(undefined, params);
3989
4352
  request['productType'] = productType;
@@ -4088,9 +4451,67 @@ class bitget extends bitget$1 {
4088
4451
  // ]
4089
4452
  // }
4090
4453
  //
4454
+ // uta
4455
+ //
4456
+ // {
4457
+ // "code": "00000",
4458
+ // "msg": "success",
4459
+ // "requestTime": 1749980065089,
4460
+ // "data": {
4461
+ // "accountEquity": "11.13919278",
4462
+ // "usdtEquity": "11.13921165",
4463
+ // "btcEquity": "0.00011256",
4464
+ // "unrealisedPnl": "0",
4465
+ // "usdtUnrealisedPnl": "0",
4466
+ // "btcUnrealizedPnl": "0",
4467
+ // "effEquity": "6.19299777",
4468
+ // "mmr": "0",
4469
+ // "imr": "0",
4470
+ // "mgnRatio": "0",
4471
+ // "positionMgnRatio": "0",
4472
+ // "assets": [
4473
+ // {
4474
+ // "coin": "USDT",
4475
+ // "equity": "6.19300826",
4476
+ // "usdValue": "6.19299777",
4477
+ // "balance": "6.19300826",
4478
+ // "available": "6.19300826",
4479
+ // "debt": "0",
4480
+ // "locked": "0"
4481
+ // }
4482
+ // ]
4483
+ // }
4484
+ // }
4485
+ //
4091
4486
  const data = this.safeValue(response, 'data', []);
4092
4487
  return this.parseBalance(data);
4093
4488
  }
4489
+ parseUtaBalance(balance) {
4490
+ const result = { 'info': balance };
4491
+ //
4492
+ // {
4493
+ // "coin": "USDT",
4494
+ // "equity": "6.19300826",
4495
+ // "usdValue": "6.19299777",
4496
+ // "balance": "6.19300826",
4497
+ // "available": "6.19300826",
4498
+ // "debt": "0",
4499
+ // "locked": "0"
4500
+ // }
4501
+ //
4502
+ for (let i = 0; i < balance.length; i++) {
4503
+ const entry = balance[i];
4504
+ const account = this.account();
4505
+ const currencyId = this.safeString(entry, 'coin');
4506
+ const code = this.safeCurrencyCode(currencyId);
4507
+ account['debt'] = this.safeString(entry, 'debt');
4508
+ account['used'] = this.safeString(entry, 'locked');
4509
+ account['free'] = this.safeString(entry, 'available');
4510
+ account['total'] = this.safeString(entry, 'balance');
4511
+ result[code] = account;
4512
+ }
4513
+ return this.safeBalance(result);
4514
+ }
4094
4515
  parseBalance(balance) {
4095
4516
  const result = { 'info': balance };
4096
4517
  //
@@ -4229,7 +4650,7 @@ class bitget extends bitget$1 {
4229
4650
  // },
4230
4651
  // ]
4231
4652
  //
4232
- // spot, swap, future and spot margin: cancelOrder, cancelOrders
4653
+ // spot, swap, future, spot margin and uta: cancelOrder, cancelOrders, cancelAllOrders
4233
4654
  //
4234
4655
  // {
4235
4656
  // "orderId": "1098758604547850241",
@@ -4358,6 +4779,66 @@ class bitget extends bitget$1 {
4358
4779
  // "stopLossTriggerType": "fill_price",
4359
4780
  // }
4360
4781
  //
4782
+ // uta: fetchOrder, fetchOpenOrders, fetchCanceledAndClosedOrders
4783
+ //
4784
+ // {
4785
+ // "orderId": "1320244799629316096",
4786
+ // "clientOid": "1320244799633510400",
4787
+ // "category": "USDT-FUTURES",
4788
+ // "symbol": "BTCUSDT",
4789
+ // "orderType": "limit",
4790
+ // "side": "buy",
4791
+ // "price": "50000",
4792
+ // "qty": "0.001",
4793
+ // "amount": "0",
4794
+ // "cumExecQty": "0",
4795
+ // "cumExecValue": "0",
4796
+ // "avgPrice": "0",
4797
+ // "timeInForce": "gtc",
4798
+ // "orderStatus": "live",
4799
+ // "posSide": "long",
4800
+ // "holdMode": "hedge_mode",
4801
+ // "reduceOnly": "NO",
4802
+ // "feeDetail": [{
4803
+ // "feeCoin": "",
4804
+ // "fee": ""
4805
+ // }],
4806
+ // "createdTime": "1750496809871",
4807
+ // "updatedTime": "1750496809886",
4808
+ // "cancelReason": "",
4809
+ // "execType": "normal",
4810
+ // "stpMode": "none",
4811
+ // "tpTriggerBy": null,
4812
+ // "slTriggerBy": null,
4813
+ // "takeProfit": null,
4814
+ // "stopLoss": null,
4815
+ // "tpOrderType": null,
4816
+ // "slOrderType": null,
4817
+ // "tpLimitPrice": null,
4818
+ // "slLimitPrice": null
4819
+ // }
4820
+ //
4821
+ // uta trigger: fetchClosedOrders, fetchCanceledOrders
4822
+ //
4823
+ // {
4824
+ // "orderId": "1330984742276198400",
4825
+ // "clientOid": "1330984742276198400",
4826
+ // "symbol": "BTCUSDT",
4827
+ // "category": "USDT-FUTURES",
4828
+ // "qty": "0.001",
4829
+ // "posSide": "long",
4830
+ // "tpTriggerBy": "market",
4831
+ // "slTriggerBy": "mark",
4832
+ // "takeProfit": "",
4833
+ // "stopLoss": "112000",
4834
+ // "tpOrderType": "market",
4835
+ // "slOrderType": "limit",
4836
+ // "tpLimitPrice": "",
4837
+ // "slLimitPrice": "111000",
4838
+ // "createdTime": "1753057411736",
4839
+ // "updatedTime": "1753058267412"
4840
+ // }
4841
+ //
4361
4842
  const errorMessage = this.safeString(order, 'errorMsg');
4362
4843
  if (errorMessage !== undefined) {
4363
4844
  return this.safeOrder({
@@ -4367,17 +4848,17 @@ class bitget extends bitget$1 {
4367
4848
  'status': 'rejected',
4368
4849
  }, market);
4369
4850
  }
4370
- const isContractOrder = ('posSide' in order);
4851
+ const posSide = this.safeString(order, 'posSide');
4852
+ const isContractOrder = (posSide !== undefined);
4371
4853
  let marketType = isContractOrder ? 'contract' : 'spot';
4372
4854
  if (market !== undefined) {
4373
4855
  marketType = market['type'];
4374
4856
  }
4375
4857
  const marketId = this.safeString(order, 'symbol');
4376
4858
  market = this.safeMarket(marketId, market, undefined, marketType);
4377
- const timestamp = this.safeInteger2(order, 'cTime', 'ctime');
4378
- const updateTimestamp = this.safeInteger(order, 'uTime');
4379
- let rawStatus = this.safeString2(order, 'status', 'state');
4380
- rawStatus = this.safeString(order, 'planStatus', rawStatus);
4859
+ const timestamp = this.safeIntegerN(order, ['cTime', 'ctime', 'createdTime']);
4860
+ const updateTimestamp = this.safeInteger2(order, 'uTime', 'updatedTime');
4861
+ const rawStatus = this.safeStringN(order, ['status', 'state', 'orderStatus', 'planStatus']);
4381
4862
  let fee = undefined;
4382
4863
  const feeCostString = this.safeString(order, 'fee');
4383
4864
  if (feeCostString !== undefined) {
@@ -4388,27 +4869,38 @@ class bitget extends bitget$1 {
4388
4869
  };
4389
4870
  }
4390
4871
  const feeDetail = this.safeValue(order, 'feeDetail');
4391
- if (feeDetail !== undefined) {
4392
- const parsedFeeDetail = JSON.parse(feeDetail);
4393
- const feeValues = Object.values(parsedFeeDetail);
4394
- let feeObject = undefined;
4395
- for (let i = 0; i < feeValues.length; i++) {
4396
- const feeValue = feeValues[i];
4397
- if (this.safeValue(feeValue, 'feeCoinCode') !== undefined) {
4398
- feeObject = feeValue;
4399
- break;
4400
- }
4401
- }
4872
+ const uta = this.safeString(order, 'category') !== undefined;
4873
+ if (uta) {
4874
+ const feeResult = this.safeDict(feeDetail, 0, {});
4875
+ const utaFee = this.safeString(feeResult, 'fee');
4402
4876
  fee = {
4403
- 'cost': this.parseNumber(Precise["default"].stringNeg(this.safeString(feeObject, 'totalFee'))),
4404
- 'currency': this.safeCurrencyCode(this.safeString(feeObject, 'feeCoinCode')),
4877
+ 'cost': this.parseNumber(Precise["default"].stringNeg(utaFee)),
4878
+ 'currency': market['settle'],
4405
4879
  };
4406
4880
  }
4407
- let postOnly = undefined;
4408
- let timeInForce = this.safeStringUpper(order, 'force');
4409
- if (timeInForce === 'POST_ONLY') {
4410
- postOnly = true;
4411
- timeInForce = 'PO';
4881
+ else {
4882
+ if (feeDetail !== undefined) {
4883
+ const parsedFeeDetail = JSON.parse(feeDetail);
4884
+ const feeValues = Object.values(parsedFeeDetail);
4885
+ let feeObject = undefined;
4886
+ for (let i = 0; i < feeValues.length; i++) {
4887
+ const feeValue = feeValues[i];
4888
+ if (this.safeValue(feeValue, 'feeCoinCode') !== undefined) {
4889
+ feeObject = feeValue;
4890
+ break;
4891
+ }
4892
+ }
4893
+ fee = {
4894
+ 'cost': this.parseNumber(Precise["default"].stringNeg(this.safeString(feeObject, 'totalFee'))),
4895
+ 'currency': this.safeCurrencyCode(this.safeString(feeObject, 'feeCoinCode')),
4896
+ };
4897
+ }
4898
+ }
4899
+ let postOnly = undefined;
4900
+ let timeInForce = this.safeStringUpper2(order, 'force', 'timeInForce');
4901
+ if (timeInForce === 'POST_ONLY') {
4902
+ postOnly = true;
4903
+ timeInForce = 'PO';
4412
4904
  }
4413
4905
  let reduceOnly = undefined;
4414
4906
  const reduceOnlyRaw = this.safeString(order, 'reduceOnly');
@@ -4424,7 +4916,7 @@ class bitget extends bitget$1 {
4424
4916
  average = this.safeString(order, 'basePrice');
4425
4917
  }
4426
4918
  else {
4427
- price = this.safeString2(order, 'price', 'executePrice');
4919
+ price = this.safeStringN(order, ['price', 'executePrice', 'slLimitPrice', 'tpLimitPrice']);
4428
4920
  average = this.safeString(order, 'priceAvg');
4429
4921
  }
4430
4922
  let size = undefined;
@@ -4436,8 +4928,8 @@ class bitget extends bitget$1 {
4436
4928
  filled = this.safeString(order, 'size');
4437
4929
  }
4438
4930
  else {
4439
- size = this.safeString(order, 'size');
4440
- filled = this.safeString(order, 'baseVolume');
4931
+ size = this.safeString2(order, 'size', 'qty');
4932
+ filled = this.safeString2(order, 'baseVolume', 'cumExecQty');
4441
4933
  }
4442
4934
  let side = this.safeString(order, 'side');
4443
4935
  const posMode = this.safeString(order, 'posMode');
@@ -4473,8 +4965,8 @@ class bitget extends bitget$1 {
4473
4965
  'postOnly': postOnly,
4474
4966
  'reduceOnly': reduceOnly,
4475
4967
  'triggerPrice': this.safeNumber(order, 'triggerPrice'),
4476
- 'takeProfitPrice': this.safeNumber2(order, 'presetStopSurplusPrice', 'stopSurplusTriggerPrice'),
4477
- 'stopLossPrice': this.safeNumber2(order, 'presetStopLossPrice', 'stopLossTriggerPrice'),
4968
+ 'takeProfitPrice': this.safeNumberN(order, ['presetStopSurplusPrice', 'stopSurplusTriggerPrice', 'takeProfit']),
4969
+ 'stopLossPrice': this.safeNumberN(order, ['presetStopLossPrice', 'stopLossTriggerPrice', 'stopLoss']),
4478
4970
  'status': this.parseOrderStatus(rawStatus),
4479
4971
  'fee': fee,
4480
4972
  'trades': undefined,
@@ -4514,6 +5006,8 @@ class bitget extends bitget$1 {
4514
5006
  * @see https://www.bitget.com/api-doc/contract/plan/Place-Plan-Order
4515
5007
  * @see https://www.bitget.com/api-doc/margin/cross/trade/Cross-Place-Order
4516
5008
  * @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Place-Order
5009
+ * @see https://www.bitget.com/api-doc/uta/trade/Place-Order
5010
+ * @see https://www.bitget.com/api-doc/uta/strategy/Place-Strategy-Order
4517
5011
  * @param {string} symbol unified symbol of the market to create an order in
4518
5012
  * @param {string} type 'market' or 'limit'
4519
5013
  * @param {string} side 'buy' or 'sell'
@@ -4542,6 +5036,8 @@ class bitget extends bitget$1 {
4542
5036
  * @param {boolean} [params.oneWayMode] *swap and future only* required to set this to true in one_way_mode and you can leave this as undefined in hedge_mode, can adjust the mode using the setPositionMode() method
4543
5037
  * @param {bool} [params.hedged] *swap and future only* true for hedged mode, false for one way mode, default is false
4544
5038
  * @param {bool} [params.reduceOnly] true or false whether the order is reduce-only
5039
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
5040
+ * @param {string} [params.posSide] *uta only* hedged two-way position side, long or short
4545
5041
  * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
4546
5042
  */
4547
5043
  async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
@@ -4558,31 +5054,44 @@ class bitget extends bitget$1 {
4558
5054
  const isStopLossTriggerOrder = stopLossTriggerPrice !== undefined;
4559
5055
  const isTakeProfitTriggerOrder = takeProfitTriggerPrice !== undefined;
4560
5056
  const isStopLossOrTakeProfitTrigger = isStopLossTriggerOrder || isTakeProfitTriggerOrder;
4561
- const request = this.createOrderRequest(symbol, type, side, amount, price, params);
4562
5057
  let response = undefined;
4563
- if (market['spot']) {
4564
- if (isTriggerOrder) {
4565
- response = await this.privateSpotPostV2SpotTradePlacePlanOrder(request);
4566
- }
4567
- else if (marginMode === 'isolated') {
4568
- response = await this.privateMarginPostV2MarginIsolatedPlaceOrder(request);
4569
- }
4570
- else if (marginMode === 'cross') {
4571
- response = await this.privateMarginPostV2MarginCrossedPlaceOrder(request);
5058
+ let uta = undefined;
5059
+ [uta, params] = this.handleOptionAndParams(params, 'createOrder', 'uta', false);
5060
+ if (uta) {
5061
+ const request = this.createUtaOrderRequest(symbol, type, side, amount, price, params);
5062
+ if (isStopLossOrTakeProfitTrigger) {
5063
+ response = await this.privateUtaPostV3TradePlaceStrategyOrder(request);
4572
5064
  }
4573
5065
  else {
4574
- response = await this.privateSpotPostV2SpotTradePlaceOrder(request);
5066
+ response = await this.privateUtaPostV3TradePlaceOrder(request);
4575
5067
  }
4576
5068
  }
4577
5069
  else {
4578
- if (isTriggerOrder || isTrailingPercentOrder) {
4579
- response = await this.privateMixPostV2MixOrderPlacePlanOrder(request);
4580
- }
4581
- else if (isStopLossOrTakeProfitTrigger) {
4582
- response = await this.privateMixPostV2MixOrderPlaceTpslOrder(request);
5070
+ const request = this.createOrderRequest(symbol, type, side, amount, price, params);
5071
+ if (market['spot']) {
5072
+ if (isTriggerOrder) {
5073
+ response = await this.privateSpotPostV2SpotTradePlacePlanOrder(request);
5074
+ }
5075
+ else if (marginMode === 'isolated') {
5076
+ response = await this.privateMarginPostV2MarginIsolatedPlaceOrder(request);
5077
+ }
5078
+ else if (marginMode === 'cross') {
5079
+ response = await this.privateMarginPostV2MarginCrossedPlaceOrder(request);
5080
+ }
5081
+ else {
5082
+ response = await this.privateSpotPostV2SpotTradePlaceOrder(request);
5083
+ }
4583
5084
  }
4584
5085
  else {
4585
- response = await this.privateMixPostV2MixOrderPlaceOrder(request);
5086
+ if (isTriggerOrder || isTrailingPercentOrder) {
5087
+ response = await this.privateMixPostV2MixOrderPlacePlanOrder(request);
5088
+ }
5089
+ else if (isStopLossOrTakeProfitTrigger) {
5090
+ response = await this.privateMixPostV2MixOrderPlaceTpslOrder(request);
5091
+ }
5092
+ else {
5093
+ response = await this.privateMixPostV2MixOrderPlaceOrder(request);
5094
+ }
4586
5095
  }
4587
5096
  }
4588
5097
  //
@@ -4599,6 +5108,133 @@ class bitget extends bitget$1 {
4599
5108
  const data = this.safeDict(response, 'data', {});
4600
5109
  return this.parseOrder(data, market);
4601
5110
  }
5111
+ createUtaOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
5112
+ const market = this.market(symbol);
5113
+ let productType = undefined;
5114
+ [productType, params] = this.handleProductTypeAndParams(market, params);
5115
+ if (productType === 'SPOT') {
5116
+ let marginMode = undefined;
5117
+ [marginMode, params] = this.handleMarginModeAndParams('createOrder', params);
5118
+ if (marginMode !== undefined) {
5119
+ productType = 'MARGIN';
5120
+ }
5121
+ }
5122
+ const request = {
5123
+ 'category': productType,
5124
+ 'symbol': market['id'],
5125
+ 'qty': this.amountToPrecision(symbol, amount),
5126
+ 'side': side,
5127
+ };
5128
+ const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId');
5129
+ if (clientOrderId !== undefined) {
5130
+ request['clientOid'] = clientOrderId;
5131
+ params = this.omit(params, 'clientOrderId');
5132
+ }
5133
+ const stopLossTriggerPrice = this.safeNumber(params, 'stopLossPrice');
5134
+ const takeProfitTriggerPrice = this.safeNumber(params, 'takeProfitPrice');
5135
+ const stopLoss = this.safeValue(params, 'stopLoss');
5136
+ const takeProfit = this.safeValue(params, 'takeProfit');
5137
+ const isStopLoss = stopLoss !== undefined;
5138
+ const isTakeProfit = takeProfit !== undefined;
5139
+ const isStopLossTrigger = stopLossTriggerPrice !== undefined;
5140
+ const isTakeProfitTrigger = takeProfitTriggerPrice !== undefined;
5141
+ const isStopLossOrTakeProfitTrigger = isStopLossTrigger || isTakeProfitTrigger;
5142
+ if (isStopLossOrTakeProfitTrigger) {
5143
+ if (isStopLossTrigger) {
5144
+ const slType = this.safeString(params, 'slTriggerBy', 'mark');
5145
+ request['slTriggerBy'] = slType;
5146
+ request['stopLoss'] = this.priceToPrecision(symbol, stopLossTriggerPrice);
5147
+ if (price !== undefined) {
5148
+ request['slLimitPrice'] = this.priceToPrecision(symbol, price);
5149
+ request['slOrderType'] = this.safeString(params, 'slOrderType', 'limit');
5150
+ }
5151
+ else {
5152
+ request['slOrderType'] = this.safeString(params, 'slOrderType', 'market');
5153
+ }
5154
+ }
5155
+ else if (isTakeProfitTrigger) {
5156
+ const tpType = this.safeString(params, 'tpTriggerBy', 'mark');
5157
+ request['tpTriggerBy'] = tpType;
5158
+ request['takeProfit'] = this.priceToPrecision(symbol, takeProfitTriggerPrice);
5159
+ if (price !== undefined) {
5160
+ request['tpLimitPrice'] = this.priceToPrecision(symbol, price);
5161
+ request['tpOrderType'] = this.safeString(params, 'tpOrderType', 'limit');
5162
+ }
5163
+ else {
5164
+ request['tpOrderType'] = this.safeString(params, 'tpOrderType', 'market');
5165
+ }
5166
+ }
5167
+ params = this.omit(params, ['stopLossPrice', 'takeProfitPrice']);
5168
+ }
5169
+ else {
5170
+ if (isStopLoss) {
5171
+ const slTriggerPrice = this.safeNumber2(stopLoss, 'triggerPrice', 'stopPrice');
5172
+ const slLimitPrice = this.safeNumber(stopLoss, 'price');
5173
+ request['stopLoss'] = this.priceToPrecision(symbol, slTriggerPrice);
5174
+ if (slLimitPrice !== undefined) {
5175
+ request['slLimitPrice'] = this.priceToPrecision(symbol, slLimitPrice);
5176
+ request['slOrderType'] = this.safeString(params, 'slOrderType', 'limit');
5177
+ }
5178
+ else {
5179
+ request['slOrderType'] = this.safeString(params, 'slOrderType', 'market');
5180
+ }
5181
+ }
5182
+ if (isTakeProfit) {
5183
+ const tpTriggerPrice = this.safeNumber2(takeProfit, 'triggerPrice', 'stopPrice');
5184
+ const tpLimitPrice = this.safeNumber(takeProfit, 'price');
5185
+ request['takeProfit'] = this.priceToPrecision(symbol, tpTriggerPrice);
5186
+ if (tpLimitPrice !== undefined) {
5187
+ request['tpLimitPrice'] = this.priceToPrecision(symbol, tpLimitPrice);
5188
+ request['tpOrderType'] = this.safeString(params, 'tpOrderType', 'limit');
5189
+ }
5190
+ else {
5191
+ request['tpOrderType'] = this.safeString(params, 'tpOrderType', 'market');
5192
+ }
5193
+ }
5194
+ const isMarketOrder = type === 'market';
5195
+ if (!isMarketOrder) {
5196
+ request['price'] = this.priceToPrecision(symbol, price);
5197
+ }
5198
+ request['orderType'] = type;
5199
+ const exchangeSpecificTifParam = this.safeString(params, 'timeInForce');
5200
+ let postOnly = undefined;
5201
+ [postOnly, params] = this.handlePostOnly(isMarketOrder, exchangeSpecificTifParam === 'post_only', params);
5202
+ const defaultTimeInForce = this.safeStringUpper(this.options, 'defaultTimeInForce');
5203
+ const timeInForce = this.safeStringUpper(params, 'timeInForce', defaultTimeInForce);
5204
+ if (postOnly) {
5205
+ request['timeInForce'] = 'post_only';
5206
+ }
5207
+ else if (timeInForce === 'GTC') {
5208
+ request['timeInForce'] = 'gtc';
5209
+ }
5210
+ else if (timeInForce === 'FOK') {
5211
+ request['timeInForce'] = 'fok';
5212
+ }
5213
+ else if (timeInForce === 'IOC') {
5214
+ request['timeInForce'] = 'ioc';
5215
+ }
5216
+ }
5217
+ const reduceOnly = this.safeBool(params, 'reduceOnly', false);
5218
+ let hedged = undefined;
5219
+ [hedged, params] = this.handleParamBool(params, 'hedged', false);
5220
+ if (reduceOnly) {
5221
+ if (hedged || isStopLossOrTakeProfitTrigger) {
5222
+ const reduceOnlyPosSide = (side === 'sell') ? 'long' : 'short';
5223
+ request['posSide'] = reduceOnlyPosSide;
5224
+ }
5225
+ else if (!isStopLossOrTakeProfitTrigger) {
5226
+ request['reduceOnly'] = 'yes';
5227
+ }
5228
+ }
5229
+ else {
5230
+ if (hedged) {
5231
+ const posSide = (side === 'buy') ? 'long' : 'short';
5232
+ request['posSide'] = posSide;
5233
+ }
5234
+ }
5235
+ params = this.omit(params, ['stopLoss', 'takeProfit', 'postOnly', 'reduceOnly', 'hedged']);
5236
+ return this.extend(request, params);
5237
+ }
4602
5238
  createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
4603
5239
  const market = this.market(symbol);
4604
5240
  let marketType = undefined;
@@ -4682,17 +5318,17 @@ class bitget extends bitget$1 {
4682
5318
  request['executePrice'] = this.priceToPrecision(symbol, price);
4683
5319
  }
4684
5320
  if (isStopLoss) {
4685
- const slTriggerPrice = this.safeNumber2(stopLoss, 'triggerPrice', 'stopPrice');
5321
+ const slTriggerPrice = this.safeString2(stopLoss, 'triggerPrice', 'stopPrice');
4686
5322
  request['stopLossTriggerPrice'] = this.priceToPrecision(symbol, slTriggerPrice);
4687
- const slPrice = this.safeNumber(stopLoss, 'price');
5323
+ const slPrice = this.safeString(stopLoss, 'price');
4688
5324
  request['stopLossExecutePrice'] = this.priceToPrecision(symbol, slPrice);
4689
5325
  const slType = this.safeString(stopLoss, 'type', 'mark_price');
4690
5326
  request['stopLossTriggerType'] = slType;
4691
5327
  }
4692
5328
  if (isTakeProfit) {
4693
- const tpTriggerPrice = this.safeNumber2(takeProfit, 'triggerPrice', 'stopPrice');
5329
+ const tpTriggerPrice = this.safeString2(takeProfit, 'triggerPrice', 'stopPrice');
4694
5330
  request['stopSurplusTriggerPrice'] = this.priceToPrecision(symbol, tpTriggerPrice);
4695
- const tpPrice = this.safeNumber(takeProfit, 'price');
5331
+ const tpPrice = this.safeString(takeProfit, 'price');
4696
5332
  request['stopSurplusExecutePrice'] = this.priceToPrecision(symbol, tpPrice);
4697
5333
  const tpType = this.safeString(takeProfit, 'type', 'mark_price');
4698
5334
  request['stopSurplusTriggerType'] = tpType;
@@ -4821,6 +5457,60 @@ class bitget extends bitget$1 {
4821
5457
  }
4822
5458
  return this.extend(request, params);
4823
5459
  }
5460
+ async createUtaOrders(orders, params = {}) {
5461
+ await this.loadMarkets();
5462
+ const ordersRequests = [];
5463
+ let symbol = undefined;
5464
+ let marginMode = undefined;
5465
+ for (let i = 0; i < orders.length; i++) {
5466
+ const rawOrder = orders[i];
5467
+ const marketId = this.safeString(rawOrder, 'symbol');
5468
+ if (symbol === undefined) {
5469
+ symbol = marketId;
5470
+ }
5471
+ else {
5472
+ if (symbol !== marketId) {
5473
+ throw new errors.BadRequest(this.id + ' createOrders() requires all orders to have the same symbol');
5474
+ }
5475
+ }
5476
+ const type = this.safeString(rawOrder, 'type');
5477
+ const side = this.safeString(rawOrder, 'side');
5478
+ const amount = this.safeValue(rawOrder, 'amount');
5479
+ const price = this.safeValue(rawOrder, 'price');
5480
+ const orderParams = this.safeValue(rawOrder, 'params', {});
5481
+ const marginResult = this.handleMarginModeAndParams('createOrders', orderParams);
5482
+ const currentMarginMode = marginResult[0];
5483
+ if (currentMarginMode !== undefined) {
5484
+ if (marginMode === undefined) {
5485
+ marginMode = currentMarginMode;
5486
+ }
5487
+ else {
5488
+ if (marginMode !== currentMarginMode) {
5489
+ throw new errors.BadRequest(this.id + ' createOrders() requires all orders to have the same margin mode (isolated or cross)');
5490
+ }
5491
+ }
5492
+ }
5493
+ const orderRequest = this.createUtaOrderRequest(marketId, type, side, amount, price, orderParams);
5494
+ ordersRequests.push(orderRequest);
5495
+ }
5496
+ const market = this.market(symbol);
5497
+ const response = await this.privateUtaPostV3TradePlaceBatch(ordersRequests);
5498
+ //
5499
+ // {
5500
+ // "code": "00000",
5501
+ // "msg": "success",
5502
+ // "requestTime": 1752810184560,
5503
+ // "data": [
5504
+ // {
5505
+ // "orderId": "1329947796441513984",
5506
+ // "clientOid": "1329947796483457024"
5507
+ // },
5508
+ // ]
5509
+ // }
5510
+ //
5511
+ const data = this.safeList(response, 'data', []);
5512
+ return this.parseOrders(data, market);
5513
+ }
4824
5514
  /**
4825
5515
  * @method
4826
5516
  * @name bitget#createOrders
@@ -4829,12 +5519,19 @@ class bitget extends bitget$1 {
4829
5519
  * @see https://www.bitget.com/api-doc/contract/trade/Batch-Order
4830
5520
  * @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Batch-Order
4831
5521
  * @see https://www.bitget.com/api-doc/margin/cross/trade/Cross-Batch-Order
5522
+ * @see https://www.bitget.com/api-doc/uta/trade/Place-Batch
4832
5523
  * @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params
4833
5524
  * @param {object} [params] extra parameters specific to the api endpoint
5525
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
4834
5526
  * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
4835
5527
  */
4836
5528
  async createOrders(orders, params = {}) {
4837
5529
  await this.loadMarkets();
5530
+ let uta = undefined;
5531
+ [uta, params] = this.handleOptionAndParams(params, 'createOrders', 'uta', false);
5532
+ if (uta) {
5533
+ return await this.createUtaOrders(orders, params);
5534
+ }
4838
5535
  const ordersRequests = [];
4839
5536
  let symbol = undefined;
4840
5537
  let marginMode = undefined;
@@ -4933,6 +5630,8 @@ class bitget extends bitget$1 {
4933
5630
  * @see https://www.bitget.com/api-doc/contract/trade/Modify-Order
4934
5631
  * @see https://www.bitget.com/api-doc/contract/plan/Modify-Tpsl-Order
4935
5632
  * @see https://www.bitget.com/api-doc/contract/plan/Modify-Plan-Order
5633
+ * @see https://www.bitget.com/api-doc/uta/trade/Modify-Order
5634
+ * @see https://www.bitget.com/api-doc/uta/strategy/Modify-Strategy-Order
4936
5635
  * @param {string} id cancel order id
4937
5636
  * @param {string} symbol unified symbol of the market to create an order in
4938
5637
  * @param {string} type 'market' or 'limit'
@@ -4954,6 +5653,7 @@ class bitget extends bitget$1 {
4954
5653
  * @param {string} [params.trailingPercent] *swap and future only* the percent to trail away from the current market price, rate can not be greater than 10
4955
5654
  * @param {string} [params.trailingTriggerPrice] *swap and future only* the price to trigger a trailing stop order, default uses the price argument
4956
5655
  * @param {string} [params.newTriggerType] *swap and future only* 'fill_price', 'mark_price' or 'index_price'
5656
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
4957
5657
  * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
4958
5658
  */
4959
5659
  async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
@@ -4985,7 +5685,50 @@ class bitget extends bitget$1 {
4985
5685
  }
4986
5686
  params = this.omit(params, ['stopPrice', 'triggerType', 'stopLossPrice', 'takeProfitPrice', 'stopLoss', 'takeProfit', 'clientOrderId', 'trailingTriggerPrice', 'trailingPercent']);
4987
5687
  let response = undefined;
4988
- if (market['spot']) {
5688
+ let productType = undefined;
5689
+ let uta = undefined;
5690
+ [productType, params] = this.handleProductTypeAndParams(market, params);
5691
+ [uta, params] = this.handleOptionAndParams(params, 'editOrder', 'uta', false);
5692
+ if (uta) {
5693
+ if (amount !== undefined) {
5694
+ request['qty'] = this.amountToPrecision(symbol, amount);
5695
+ }
5696
+ if (isStopLossOrder || isTakeProfitOrder) {
5697
+ if (isStopLossOrder) {
5698
+ const slType = this.safeString(params, 'slTriggerBy', 'mark');
5699
+ request['slTriggerBy'] = slType;
5700
+ request['stopLoss'] = this.priceToPrecision(symbol, stopLossPrice);
5701
+ if (price !== undefined) {
5702
+ request['slLimitPrice'] = this.priceToPrecision(symbol, price);
5703
+ request['slOrderType'] = this.safeString(params, 'slOrderType', 'limit');
5704
+ }
5705
+ else {
5706
+ request['slOrderType'] = this.safeString(params, 'slOrderType', 'market');
5707
+ }
5708
+ }
5709
+ else if (isTakeProfitOrder) {
5710
+ const tpType = this.safeString(params, 'tpTriggerBy', 'mark');
5711
+ request['tpTriggerBy'] = tpType;
5712
+ request['takeProfit'] = this.priceToPrecision(symbol, takeProfitPrice);
5713
+ if (price !== undefined) {
5714
+ request['tpLimitPrice'] = this.priceToPrecision(symbol, price);
5715
+ request['tpOrderType'] = this.safeString(params, 'tpOrderType', 'limit');
5716
+ }
5717
+ else {
5718
+ request['tpOrderType'] = this.safeString(params, 'tpOrderType', 'market');
5719
+ }
5720
+ }
5721
+ params = this.omit(params, ['stopLossPrice', 'takeProfitPrice']);
5722
+ response = await this.privateUtaPostV3TradeModifyStrategyOrder(this.extend(request, params));
5723
+ }
5724
+ else {
5725
+ if (price !== undefined) {
5726
+ request['price'] = this.priceToPrecision(symbol, price);
5727
+ }
5728
+ response = await this.privateUtaPostV3TradeModifyOrder(this.extend(request, params));
5729
+ }
5730
+ }
5731
+ else if (market['spot']) {
4989
5732
  if (triggerPrice === undefined) {
4990
5733
  throw new errors.NotSupported(this.id + ' editOrder() only supports plan/trigger spot orders');
4991
5734
  }
@@ -5014,8 +5757,6 @@ class bitget extends bitget$1 {
5014
5757
  throw new errors.NotSupported(this.id + ' editOrder() does not support ' + market['type'] + ' orders');
5015
5758
  }
5016
5759
  request['symbol'] = market['id'];
5017
- let productType = undefined;
5018
- [productType, params] = this.handleProductTypeAndParams(market, params);
5019
5760
  request['productType'] = productType;
5020
5761
  if (!isTakeProfitOrder && !isStopLossOrder) {
5021
5762
  request['newSize'] = this.amountToPrecision(symbol, amount);
@@ -5107,6 +5848,8 @@ class bitget extends bitget$1 {
5107
5848
  * @see https://www.bitget.com/api-doc/contract/plan/Cancel-Plan-Order
5108
5849
  * @see https://www.bitget.com/api-doc/margin/cross/trade/Cross-Cancel-Order
5109
5850
  * @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Cancel-Order
5851
+ * @see https://www.bitget.com/api-doc/uta/trade/Cancel-Order
5852
+ * @see https://www.bitget.com/api-doc/uta/strategy/Cancel-Strategy-Order
5110
5853
  * @param {string} id order id
5111
5854
  * @param {string} symbol unified symbol of the market the order was made in
5112
5855
  * @param {object} [params] extra parameters specific to the exchange API endpoint
@@ -5114,6 +5857,7 @@ class bitget extends bitget$1 {
5114
5857
  * @param {boolean} [params.trigger] set to true for canceling trigger orders
5115
5858
  * @param {string} [params.planType] *swap only* either profit_plan, loss_plan, normal_plan, pos_profit, pos_loss, moving_plan or track_plan
5116
5859
  * @param {boolean} [params.trailing] set to true if you want to cancel a trailing order
5860
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
5117
5861
  * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
5118
5862
  */
5119
5863
  async cancelOrder(id, symbol = undefined, params = {}) {
@@ -5135,7 +5879,18 @@ class bitget extends bitget$1 {
5135
5879
  if (!((market['swap'] || market['future']) && trigger)) {
5136
5880
  request['orderId'] = id;
5137
5881
  }
5138
- if ((market['swap']) || (market['future'])) {
5882
+ let uta = undefined;
5883
+ [uta, params] = this.handleOptionAndParams(params, 'cancelOrder', 'uta', false);
5884
+ if (uta) {
5885
+ request['orderId'] = id;
5886
+ if (trigger) {
5887
+ response = await this.privateUtaPostV3TradeCancelStrategyOrder(this.extend(request, params));
5888
+ }
5889
+ else {
5890
+ response = await this.privateUtaPostV3TradeCancelOrder(this.extend(request, params));
5891
+ }
5892
+ }
5893
+ else if ((market['swap']) || (market['future'])) {
5139
5894
  let productType = undefined;
5140
5895
  [productType, params] = this.handleProductTypeAndParams(market, params);
5141
5896
  request['productType'] = productType;
@@ -5221,17 +5976,66 @@ class bitget extends bitget$1 {
5221
5976
  // }
5222
5977
  // }
5223
5978
  //
5979
+ // uta trigger
5980
+ //
5981
+ // {
5982
+ // "code": "00000",
5983
+ // "msg": "success",
5984
+ // "requestTime": "1753058267399",
5985
+ // "data": null
5986
+ // }
5987
+ //
5224
5988
  const data = this.safeValue(response, 'data', {});
5225
5989
  let order = undefined;
5226
- if ((market['swap'] || market['future']) && trigger) {
5990
+ if ((market['swap'] || market['future']) && trigger && !uta) {
5227
5991
  const orderInfo = this.safeValue(data, 'successList', []);
5228
5992
  order = orderInfo[0];
5229
5993
  }
5230
5994
  else {
5231
- order = data;
5995
+ if (uta && trigger) {
5996
+ order = response;
5997
+ }
5998
+ else {
5999
+ order = data;
6000
+ }
5232
6001
  }
5233
6002
  return this.parseOrder(order, market);
5234
6003
  }
6004
+ async cancelUtaOrders(ids, symbol = undefined, params = {}) {
6005
+ if (symbol === undefined) {
6006
+ throw new errors.ArgumentsRequired(this.id + ' cancelOrders() requires a symbol argument');
6007
+ }
6008
+ await this.loadMarkets();
6009
+ const market = this.market(symbol);
6010
+ let productType = undefined;
6011
+ [productType, params] = this.handleProductTypeAndParams(market, params);
6012
+ const requestList = [];
6013
+ for (let i = 0; i < ids.length; i++) {
6014
+ const individualId = ids[i];
6015
+ const order = {
6016
+ 'orderId': individualId,
6017
+ 'symbol': market['id'],
6018
+ 'category': productType,
6019
+ };
6020
+ requestList.push(order);
6021
+ }
6022
+ const response = await this.privateUtaPostV3TradeCancelBatch(requestList);
6023
+ //
6024
+ // {
6025
+ // "code": "00000",
6026
+ // "msg": "success",
6027
+ // "requestTime": 1752813731517,
6028
+ // "data": [
6029
+ // {
6030
+ // "orderId": "1329948909442023424",
6031
+ // "clientOid": "1329948909446217728"
6032
+ // },
6033
+ // ]
6034
+ // }
6035
+ //
6036
+ const data = this.safeList(response, 'data', []);
6037
+ return this.parseOrders(data, market);
6038
+ }
5235
6039
  /**
5236
6040
  * @method
5237
6041
  * @name bitget#cancelOrders
@@ -5241,11 +6045,13 @@ class bitget extends bitget$1 {
5241
6045
  * @see https://www.bitget.com/api-doc/contract/plan/Cancel-Plan-Order
5242
6046
  * @see https://www.bitget.com/api-doc/margin/cross/trade/Cross-Batch-Cancel-Order
5243
6047
  * @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Batch-Cancel-Orders
6048
+ * @see https://www.bitget.com/api-doc/uta/trade/Cancel-Batch
5244
6049
  * @param {string[]} ids order ids
5245
6050
  * @param {string} symbol unified market symbol, default is undefined
5246
6051
  * @param {object} [params] extra parameters specific to the exchange API endpoint
5247
6052
  * @param {string} [params.marginMode] 'isolated' or 'cross' for spot margin trading
5248
6053
  * @param {boolean} [params.trigger] *contract only* set to true for canceling trigger orders
6054
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
5249
6055
  * @returns {object} an array of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
5250
6056
  */
5251
6057
  async cancelOrders(ids, symbol = undefined, params = {}) {
@@ -5254,6 +6060,11 @@ class bitget extends bitget$1 {
5254
6060
  }
5255
6061
  await this.loadMarkets();
5256
6062
  const market = this.market(symbol);
6063
+ let uta = undefined;
6064
+ [uta, params] = this.handleOptionAndParams(params, 'cancelOrders', 'uta', false);
6065
+ if (uta) {
6066
+ return await this.cancelUtaOrders(ids, symbol, params);
6067
+ }
5257
6068
  let marginMode = undefined;
5258
6069
  [marginMode, params] = this.handleMarginModeAndParams('cancelOrders', params);
5259
6070
  const trigger = this.safeValue2(params, 'stop', 'trigger');
@@ -5329,10 +6140,12 @@ class bitget extends bitget$1 {
5329
6140
  * @see https://www.bitget.com/api-doc/contract/trade/Batch-Cancel-Orders
5330
6141
  * @see https://bitgetlimited.github.io/apidoc/en/margin/#isolated-batch-cancel-orders
5331
6142
  * @see https://bitgetlimited.github.io/apidoc/en/margin/#cross-batch-cancel-order
6143
+ * @see https://www.bitget.com/api-doc/uta/trade/Cancel-All-Order
5332
6144
  * @param {string} symbol unified market symbol
5333
6145
  * @param {object} [params] extra parameters specific to the exchange API endpoint
5334
6146
  * @param {string} [params.marginMode] 'isolated' or 'cross' for spot margin trading
5335
6147
  * @param {boolean} [params.trigger] *contract only* set to true for canceling trigger orders
6148
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
5336
6149
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
5337
6150
  */
5338
6151
  async cancelAllOrders(symbol = undefined, params = {}) {
@@ -5343,13 +6156,41 @@ class bitget extends bitget$1 {
5343
6156
  const market = this.market(symbol);
5344
6157
  let marginMode = undefined;
5345
6158
  [marginMode, params] = this.handleMarginModeAndParams('cancelAllOrders', params);
6159
+ let productType = undefined;
6160
+ [productType, params] = this.handleProductTypeAndParams(market, params);
5346
6161
  const request = {
5347
6162
  'symbol': market['id'],
5348
6163
  };
5349
6164
  const trigger = this.safeBool2(params, 'stop', 'trigger');
5350
6165
  params = this.omit(params, ['stop', 'trigger']);
5351
6166
  let response = undefined;
5352
- if (market['spot']) {
6167
+ let uta = undefined;
6168
+ [uta, params] = this.handleOptionAndParams(params, 'cancelAllOrders', 'uta', false);
6169
+ if (uta) {
6170
+ if (productType === 'SPOT') {
6171
+ if (marginMode !== undefined) {
6172
+ productType = 'MARGIN';
6173
+ }
6174
+ }
6175
+ request['category'] = productType;
6176
+ response = await this.privateUtaPostV3TradeCancelSymbolOrder(this.extend(request, params));
6177
+ //
6178
+ // {
6179
+ // "code": "00000",
6180
+ // "msg": "success",
6181
+ // "requestTime": 1750751578138,
6182
+ // "data": {
6183
+ // "list": [
6184
+ // {
6185
+ // "orderId": "1321313242969427968",
6186
+ // "clientOid": "1321313242969427969"
6187
+ // }
6188
+ // ]
6189
+ // }
6190
+ // }
6191
+ //
6192
+ }
6193
+ else if (market['spot']) {
5353
6194
  if (marginMode !== undefined) {
5354
6195
  if (marginMode === 'cross') {
5355
6196
  response = await this.privateMarginPostMarginV1CrossOrderBatchCancelOrder(this.extend(request, params));
@@ -5408,8 +6249,6 @@ class bitget extends bitget$1 {
5408
6249
  }
5409
6250
  }
5410
6251
  else {
5411
- let productType = undefined;
5412
- [productType, params] = this.handleProductTypeAndParams(market, params);
5413
6252
  request['productType'] = productType;
5414
6253
  if (trigger) {
5415
6254
  response = await this.privateMixPostV2MixOrderCancelPlanOrder(this.extend(request, params));
@@ -5433,9 +6272,15 @@ class bitget extends bitget$1 {
5433
6272
  // }
5434
6273
  }
5435
6274
  const data = this.safeDict(response, 'data');
5436
- const resultList = this.safeList2(data, 'resultList', 'successList');
6275
+ const resultList = this.safeListN(data, ['resultList', 'successList', 'list']);
5437
6276
  const failureList = this.safeList2(data, 'failure', 'failureList');
5438
- const responseList = this.arrayConcat(resultList, failureList);
6277
+ let responseList = undefined;
6278
+ if ((resultList !== undefined) && (failureList !== undefined)) {
6279
+ responseList = this.arrayConcat(resultList, failureList);
6280
+ }
6281
+ else {
6282
+ responseList = resultList;
6283
+ }
5439
6284
  return this.parseOrders(responseList);
5440
6285
  }
5441
6286
  /**
@@ -5444,9 +6289,11 @@ class bitget extends bitget$1 {
5444
6289
  * @description fetches information on an order made by the user
5445
6290
  * @see https://www.bitget.com/api-doc/spot/trade/Get-Order-Info
5446
6291
  * @see https://www.bitget.com/api-doc/contract/trade/Get-Order-Details
6292
+ * @see https://www.bitget.com/api-doc/uta/trade/Get-Order-Details
5447
6293
  * @param {string} id the order id
5448
6294
  * @param {string} symbol unified symbol of the market the order was made in
5449
6295
  * @param {object} [params] extra parameters specific to the exchange API endpoint
6296
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
5450
6297
  * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
5451
6298
  */
5452
6299
  async fetchOrder(id, symbol = undefined, params = {}) {
@@ -5459,7 +6306,12 @@ class bitget extends bitget$1 {
5459
6306
  'orderId': id,
5460
6307
  };
5461
6308
  let response = undefined;
5462
- if (market['spot']) {
6309
+ let uta = undefined;
6310
+ [uta, params] = this.handleOptionAndParams(params, 'fetchOrder', 'uta', false);
6311
+ if (uta) {
6312
+ response = await this.privateUtaGetV3TradeOrderInfo(this.extend(request, params));
6313
+ }
6314
+ else if (market['spot']) {
5463
6315
  response = await this.privateSpotGetV2SpotTradeOrderInfo(this.extend(request, params));
5464
6316
  }
5465
6317
  else if (market['swap'] || market['future']) {
@@ -5539,7 +6391,51 @@ class bitget extends bitget$1 {
5539
6391
  // }
5540
6392
  // }
5541
6393
  //
5542
- if (typeof response === 'string') {
6394
+ // uta
6395
+ //
6396
+ // {
6397
+ // "code": "00000",
6398
+ // "msg": "success",
6399
+ // "requestTime": 1750496858333,
6400
+ // "data": {
6401
+ // "orderId": "1320244799629316096",
6402
+ // "clientOid": "1320244799633510400",
6403
+ // "category": "USDT-FUTURES",
6404
+ // "symbol": "BTCUSDT",
6405
+ // "orderType": "limit",
6406
+ // "side": "buy",
6407
+ // "price": "50000",
6408
+ // "qty": "0.001",
6409
+ // "amount": "0",
6410
+ // "cumExecQty": "0",
6411
+ // "cumExecValue": "0",
6412
+ // "avgPrice": "0",
6413
+ // "timeInForce": "gtc",
6414
+ // "orderStatus": "live",
6415
+ // "posSide": "long",
6416
+ // "holdMode": "hedge_mode",
6417
+ // "reduceOnly": "NO",
6418
+ // "feeDetail": [{
6419
+ // "feeCoin": "",
6420
+ // "fee": ""
6421
+ // }],
6422
+ // "createdTime": "1750496809871",
6423
+ // "updatedTime": "1750496809886",
6424
+ // "cancelReason": "",
6425
+ // "execType": "normal",
6426
+ // "stpMode": "none",
6427
+ // "tpTriggerBy": null,
6428
+ // "slTriggerBy": null,
6429
+ // "takeProfit": null,
6430
+ // "stopLoss": null,
6431
+ // "tpOrderType": null,
6432
+ // "slOrderType": null,
6433
+ // "tpLimitPrice": null,
6434
+ // "slLimitPrice": null
6435
+ // }
6436
+ // }
6437
+ //
6438
+ if (!uta && (typeof response === 'string')) {
5543
6439
  response = JSON.parse(response);
5544
6440
  }
5545
6441
  const data = this.safeDict(response, 'data');
@@ -5549,6 +6445,10 @@ class bitget extends bitget$1 {
5549
6445
  }
5550
6446
  }
5551
6447
  const dataList = this.safeList(response, 'data', []);
6448
+ const dataListLength = dataList.length;
6449
+ if (dataListLength === 0) {
6450
+ throw new errors.OrderNotFound(this.id + ' fetchOrder() could not find order id ' + id + ' in ' + this.json(response));
6451
+ }
5552
6452
  const first = this.safeDict(dataList, 0, {});
5553
6453
  return this.parseOrder(first, market);
5554
6454
  // const first = this.safeDict (data, 0, data);
@@ -5564,6 +6464,7 @@ class bitget extends bitget$1 {
5564
6464
  * @see https://www.bitget.com/api-doc/contract/plan/get-orders-plan-pending
5565
6465
  * @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Open-Orders
5566
6466
  * @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Open-Orders
6467
+ * @see https://www.bitget.com/api-doc/uta/strategy/Get-Unfilled-Strategy-Orders
5567
6468
  * @param {string} symbol unified market symbol
5568
6469
  * @param {int} [since] the earliest time in ms to fetch open orders for
5569
6470
  * @param {int} [limit] the maximum number of open order structures to retrieve
@@ -5574,6 +6475,7 @@ class bitget extends bitget$1 {
5574
6475
  * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
5575
6476
  * @param {string} [params.isPlan] *swap only* 'plan' for stop orders and 'profit_loss' for tp/sl orders, default is 'plan'
5576
6477
  * @param {boolean} [params.trailing] set to true if you want to fetch trailing orders
6478
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
5577
6479
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
5578
6480
  */
5579
6481
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -5583,6 +6485,8 @@ class bitget extends bitget$1 {
5583
6485
  let request = {};
5584
6486
  let marginMode = undefined;
5585
6487
  [marginMode, params] = this.handleMarginModeAndParams('fetchOpenOrders', params);
6488
+ let uta = undefined;
6489
+ [uta, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'uta', false);
5586
6490
  if (symbol !== undefined) {
5587
6491
  market = this.market(symbol);
5588
6492
  request['symbol'] = market['id'];
@@ -5598,22 +6502,28 @@ class bitget extends bitget$1 {
5598
6502
  [paginate, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'paginate');
5599
6503
  if (paginate) {
5600
6504
  let cursorReceived = undefined;
5601
- if (type === 'spot') {
6505
+ let cursorSent = undefined;
6506
+ if (uta) {
6507
+ cursorReceived = 'cursor';
6508
+ cursorSent = 'cursor';
6509
+ }
6510
+ else if (type === 'spot') {
5602
6511
  if (marginMode !== undefined) {
5603
6512
  cursorReceived = 'minId';
6513
+ cursorSent = 'idLessThan';
5604
6514
  }
5605
6515
  }
5606
6516
  else {
5607
6517
  cursorReceived = 'endId';
6518
+ cursorSent = 'idLessThan';
5608
6519
  }
5609
- return await this.fetchPaginatedCallCursor('fetchOpenOrders', symbol, since, limit, params, cursorReceived, 'idLessThan');
6520
+ return await this.fetchPaginatedCallCursor('fetchOpenOrders', symbol, since, limit, params, cursorReceived, cursorSent);
5610
6521
  }
5611
6522
  let response = undefined;
5612
6523
  const trailing = this.safeBool(params, 'trailing');
5613
6524
  const trigger = this.safeBool2(params, 'stop', 'trigger');
5614
6525
  const planTypeDefined = this.safeString(params, 'planType') !== undefined;
5615
6526
  const isTrigger = (trigger || planTypeDefined);
5616
- params = this.omit(params, ['stop', 'trigger', 'trailing']);
5617
6527
  [request, params] = this.handleUntilOption('endTime', request, params);
5618
6528
  if (since !== undefined) {
5619
6529
  request['startTime'] = since;
@@ -5621,53 +6531,66 @@ class bitget extends bitget$1 {
5621
6531
  if (limit !== undefined) {
5622
6532
  request['limit'] = limit;
5623
6533
  }
5624
- if ((type === 'swap') || (type === 'future') || (marginMode !== undefined)) {
6534
+ if (!uta && ((type === 'swap') || (type === 'future') || (marginMode !== undefined))) {
5625
6535
  const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId');
5626
6536
  params = this.omit(params, 'clientOrderId');
5627
6537
  if (clientOrderId !== undefined) {
5628
6538
  request['clientOid'] = clientOrderId;
5629
6539
  }
5630
6540
  }
5631
- let query = undefined;
5632
- query = this.omit(params, ['type']);
5633
- if (type === 'spot') {
6541
+ let productType = undefined;
6542
+ [productType, params] = this.handleProductTypeAndParams(market, params);
6543
+ params = this.omit(params, ['type', 'stop', 'trigger', 'trailing']);
6544
+ if (uta) {
6545
+ if (type === 'spot') {
6546
+ if (marginMode !== undefined) {
6547
+ productType = 'MARGIN';
6548
+ }
6549
+ }
6550
+ request['category'] = productType;
6551
+ if (trigger) {
6552
+ response = await this.privateUtaGetV3TradeUnfilledStrategyOrders(this.extend(request, params));
6553
+ }
6554
+ else {
6555
+ response = await this.privateUtaGetV3TradeUnfilledOrders(this.extend(request, params));
6556
+ }
6557
+ }
6558
+ else if (type === 'spot') {
5634
6559
  if (marginMode !== undefined) {
5635
6560
  if (since === undefined) {
5636
6561
  since = this.milliseconds() - 7776000000;
5637
6562
  request['startTime'] = since;
5638
6563
  }
5639
6564
  if (marginMode === 'isolated') {
5640
- response = await this.privateMarginGetV2MarginIsolatedOpenOrders(this.extend(request, query));
6565
+ response = await this.privateMarginGetV2MarginIsolatedOpenOrders(this.extend(request, params));
5641
6566
  }
5642
6567
  else if (marginMode === 'cross') {
5643
- response = await this.privateMarginGetV2MarginCrossedOpenOrders(this.extend(request, query));
6568
+ response = await this.privateMarginGetV2MarginCrossedOpenOrders(this.extend(request, params));
5644
6569
  }
5645
6570
  }
5646
6571
  else {
5647
6572
  if (trigger) {
5648
- response = await this.privateSpotGetV2SpotTradeCurrentPlanOrder(this.extend(request, query));
6573
+ response = await this.privateSpotGetV2SpotTradeCurrentPlanOrder(this.extend(request, params));
5649
6574
  }
5650
6575
  else {
5651
- response = await this.privateSpotGetV2SpotTradeUnfilledOrders(this.extend(request, query));
6576
+ response = await this.privateSpotGetV2SpotTradeUnfilledOrders(this.extend(request, params));
5652
6577
  }
5653
6578
  }
5654
6579
  }
5655
6580
  else {
5656
- let productType = undefined;
5657
- [productType, query] = this.handleProductTypeAndParams(market, query);
5658
6581
  request['productType'] = productType;
5659
6582
  if (trailing) {
5660
6583
  const planType = this.safeString(params, 'planType', 'track_plan');
5661
6584
  request['planType'] = planType;
5662
- response = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(request, query));
6585
+ response = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(request, params));
5663
6586
  }
5664
6587
  else if (isTrigger) {
5665
- const planType = this.safeString(query, 'planType', 'normal_plan');
6588
+ const planType = this.safeString(params, 'planType', 'normal_plan');
5666
6589
  request['planType'] = planType;
5667
- response = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(request, query));
6590
+ response = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(request, params));
5668
6591
  }
5669
6592
  else {
5670
- response = await this.privateMixGetV2MixOrderOrdersPending(this.extend(request, query));
6593
+ response = await this.privateMixGetV2MixOrderOrdersPending(this.extend(request, params));
5671
6594
  }
5672
6595
  }
5673
6596
  //
@@ -5845,8 +6768,95 @@ class bitget extends bitget$1 {
5845
6768
  // }
5846
6769
  // }
5847
6770
  //
6771
+ // uta
6772
+ //
6773
+ // {
6774
+ // "code": "00000",
6775
+ // "msg": "success",
6776
+ // "requestTime": 1750753395850,
6777
+ // "data": {
6778
+ // "list": [
6779
+ // {
6780
+ // "orderId": "1321320757371228160",
6781
+ // "clientOid": "1321320757371228161",
6782
+ // "category": "USDT-FUTURES",
6783
+ // "symbol": "BTCUSDT",
6784
+ // "orderType": "limit",
6785
+ // "side": "buy",
6786
+ // "price": "50000",
6787
+ // "qty": "0.001",
6788
+ // "amount": "0",
6789
+ // "cumExecQty": "0",
6790
+ // "cumExecValue": "0",
6791
+ // "avgPrice": "0",
6792
+ // "timeInForce": "gtc",
6793
+ // "orderStatus": "live",
6794
+ // "posSide": "long",
6795
+ // "holdMode": "hedge_mode",
6796
+ // "reduceOnly": "NO",
6797
+ // "feeDetail": [
6798
+ // {
6799
+ // "feeCoin": "",
6800
+ // "fee": ""
6801
+ // }
6802
+ // ],
6803
+ // "createdTime": "1750753338186",
6804
+ // "updatedTime": "1750753338203",
6805
+ // "stpMode": "none",
6806
+ // "tpTriggerBy": null,
6807
+ // "slTriggerBy": null,
6808
+ // "takeProfit": null,
6809
+ // "stopLoss": null,
6810
+ // "tpOrderType": null,
6811
+ // "slOrderType": null,
6812
+ // "tpLimitPrice": null,
6813
+ // "slLimitPrice": null
6814
+ // }
6815
+ // ],
6816
+ // "cursor": "1321320757371228160"
6817
+ // }
6818
+ // }
6819
+ //
6820
+ // uta trigger
6821
+ //
6822
+ // {
6823
+ // "code": "00000",
6824
+ // "msg": "success",
6825
+ // "requestTime": 1753057527060,
6826
+ // "data": [
6827
+ // {
6828
+ // "orderId": "1330984742276198400",
6829
+ // "clientOid": "1330984742276198400",
6830
+ // "symbol": "BTCUSDT",
6831
+ // "category": "USDT-FUTURES",
6832
+ // "qty": "0.001",
6833
+ // "posSide": "long",
6834
+ // "tpTriggerBy": "market",
6835
+ // "slTriggerBy": "mark",
6836
+ // "takeProfit": "",
6837
+ // "stopLoss":"114000",
6838
+ // "tpOrderType": "market",
6839
+ // "slOrderType": "limit",
6840
+ // "tpLimitPrice": "",
6841
+ // "slLimitPrice": "113000",
6842
+ // "createdTime": "1753057411736",
6843
+ // "updatedTime": "1753057411747"
6844
+ // }
6845
+ // ]
6846
+ // }
6847
+ //
5848
6848
  const data = this.safeValue(response, 'data');
5849
- if (type === 'spot') {
6849
+ if (uta) {
6850
+ let result = undefined;
6851
+ if (trigger) {
6852
+ result = this.safeList(response, 'data', []);
6853
+ }
6854
+ else {
6855
+ result = this.safeList(data, 'list', []);
6856
+ }
6857
+ return this.parseOrders(result, market, since, limit);
6858
+ }
6859
+ else if (type === 'spot') {
5850
6860
  if ((marginMode !== undefined) || trigger) {
5851
6861
  const resultList = this.safeList(data, 'orderList', []);
5852
6862
  return this.parseOrders(resultList, market, since, limit);
@@ -5868,6 +6878,7 @@ class bitget extends bitget$1 {
5868
6878
  * @see https://www.bitget.com/api-doc/contract/plan/orders-plan-history
5869
6879
  * @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-History
5870
6880
  * @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Order-History
6881
+ * @see https://www.bitget.com/api-doc/uta/trade/Get-Order-History
5871
6882
  * @param {string} symbol unified market symbol of the closed orders
5872
6883
  * @param {int} [since] timestamp in ms of the earliest order
5873
6884
  * @param {int} [limit] the max number of closed orders to return
@@ -5895,6 +6906,7 @@ class bitget extends bitget$1 {
5895
6906
  * @see https://www.bitget.com/api-doc/contract/plan/orders-plan-history
5896
6907
  * @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-History
5897
6908
  * @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Order-History
6909
+ * @see https://www.bitget.com/api-doc/uta/trade/Get-Order-History
5898
6910
  * @param {string} symbol unified market symbol of the canceled orders
5899
6911
  * @param {int} [since] timestamp in ms of the earliest order
5900
6912
  * @param {int} [limit] the max number of canceled orders to return
@@ -5921,6 +6933,8 @@ class bitget extends bitget$1 {
5921
6933
  * @see https://www.bitget.com/api-doc/contract/plan/orders-plan-history
5922
6934
  * @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-History
5923
6935
  * @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Order-History
6936
+ * @see https://www.bitget.com/api-doc/uta/trade/Get-Order-History
6937
+ * @see https://www.bitget.com/api-doc/uta/strategy/Get-History-Strategy-Orders
5924
6938
  * @description fetches information on multiple canceled and closed orders made by the user
5925
6939
  * @param {string} symbol unified market symbol of the market orders were made in
5926
6940
  * @param {int} [since] the earliest time in ms to fetch orders for
@@ -5932,9 +6946,15 @@ class bitget extends bitget$1 {
5932
6946
  * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
5933
6947
  * @param {string} [params.isPlan] *swap only* 'plan' for stop orders and 'profit_loss' for tp/sl orders, default is 'plan'
5934
6948
  * @param {boolean} [params.trailing] set to true if you want to fetch trailing orders
6949
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
5935
6950
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
5936
6951
  */
5937
6952
  async fetchCanceledAndClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
6953
+ let uta = undefined;
6954
+ [uta, params] = this.handleOptionAndParams(params, 'fetchCanceledAndClosedOrders', 'uta', false);
6955
+ if (uta) {
6956
+ return await this.fetchUtaCanceledAndClosedOrders(symbol, since, limit, params);
6957
+ }
5938
6958
  await this.loadMarkets();
5939
6959
  let market = undefined;
5940
6960
  let request = {};
@@ -6223,6 +7243,132 @@ class bitget extends bitget$1 {
6223
7243
  const orders = this.safeList(response, 'data', []);
6224
7244
  return this.parseOrders(orders, market, since, limit);
6225
7245
  }
7246
+ async fetchUtaCanceledAndClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
7247
+ await this.loadMarkets();
7248
+ let market = undefined;
7249
+ if (symbol !== undefined) {
7250
+ market = this.market(symbol);
7251
+ }
7252
+ let productType = undefined;
7253
+ [productType, params] = this.handleProductTypeAndParams(market, params);
7254
+ if (productType === 'SPOT') {
7255
+ let marginMode = undefined;
7256
+ [marginMode, params] = this.handleMarginModeAndParams('fetchCanceledAndClosedOrders', params);
7257
+ if (marginMode !== undefined) {
7258
+ productType = 'MARGIN';
7259
+ }
7260
+ }
7261
+ let request = {
7262
+ 'category': productType,
7263
+ };
7264
+ let paginate = false;
7265
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchCanceledAndClosedOrders', 'paginate');
7266
+ if (paginate) {
7267
+ return await this.fetchPaginatedCallCursor('fetchCanceledAndClosedOrders', symbol, since, limit, params, 'cursor', 'cursor');
7268
+ }
7269
+ [request, params] = this.handleUntilOption('endTime', request, params);
7270
+ if (since !== undefined) {
7271
+ request['startTime'] = since;
7272
+ }
7273
+ if (limit !== undefined) {
7274
+ request['limit'] = limit;
7275
+ }
7276
+ let response = undefined;
7277
+ const trigger = this.safeBool2(params, 'stop', 'trigger');
7278
+ params = this.omit(params, ['stop', 'trigger']);
7279
+ if (trigger) {
7280
+ response = await this.privateUtaGetV3TradeHistoryStrategyOrders(this.extend(request, params));
7281
+ }
7282
+ else {
7283
+ response = await this.privateUtaGetV3TradeHistoryOrders(this.extend(request, params));
7284
+ }
7285
+ //
7286
+ // uta
7287
+ //
7288
+ // {
7289
+ // "code": "00000",
7290
+ // "msg": "success",
7291
+ // "requestTime": 1752531592855,
7292
+ // "data": {
7293
+ // "list": [
7294
+ // {
7295
+ // "orderId": "1322441400976261120",
7296
+ // "clientOid": "1322441400976261121",
7297
+ // "category": "USDT-FUTURES",
7298
+ // "symbol": "BTCUSDT",
7299
+ // "orderType": "market",
7300
+ // "side": "sell",
7301
+ // "price": "0",
7302
+ // "qty": "0.0001",
7303
+ // "amount": "0",
7304
+ // "cumExecQty": "0.0001",
7305
+ // "cumExecValue": "10.7005",
7306
+ // "avgPrice": "107005.4",
7307
+ // "timeInForce": "gtc",
7308
+ // "orderStatus": "filled",
7309
+ // "posSide": "long",
7310
+ // "holdMode": "hedge_mode",
7311
+ // "reduceOnly": "NO",
7312
+ // "feeDetail": [
7313
+ // {
7314
+ // "feeCoin": "USDT",
7315
+ // "fee": "0.00642032"
7316
+ // }
7317
+ // ],
7318
+ // "createdTime": "1751020520442",
7319
+ // "updatedTime": "1751020520457",
7320
+ // "cancelReason": "",
7321
+ // "execType": "normal",
7322
+ // "stpMode": "none",
7323
+ // "tpTriggerBy": null,
7324
+ // "slTriggerBy": null,
7325
+ // "takeProfit": null,
7326
+ // "stopLoss": null,
7327
+ // "tpOrderType": null,
7328
+ // "slOrderType": null,
7329
+ // "tpLimitPrice": null,
7330
+ // "slLimitPrice": null
7331
+ // },
7332
+ // ],
7333
+ // "cursor": "1322441328637100035"
7334
+ // }
7335
+ // }
7336
+ //
7337
+ // uta trigger
7338
+ //
7339
+ // {
7340
+ // "code": "00000",
7341
+ // "msg": "success",
7342
+ // "requestTime": 1753058447920,
7343
+ // "data": {
7344
+ // "list": [
7345
+ // {
7346
+ // "orderId": "1330984742276198400",
7347
+ // "clientOid": "1330984742276198400",
7348
+ // "symbol": "BTCUSDT",
7349
+ // "category": "USDT-FUTURES",
7350
+ // "qty": "0.001",
7351
+ // "posSide": "long",
7352
+ // "tpTriggerBy": "market",
7353
+ // "slTriggerBy": "mark",
7354
+ // "takeProfit": "",
7355
+ // "stopLoss": "112000",
7356
+ // "tpOrderType": "market",
7357
+ // "slOrderType": "limit",
7358
+ // "tpLimitPrice": "",
7359
+ // "slLimitPrice": "111000",
7360
+ // "createdTime": "1753057411736",
7361
+ // "updatedTime": "1753058267412"
7362
+ // },
7363
+ // ],
7364
+ // "cursor": 1330960754317619202
7365
+ // }
7366
+ // }
7367
+ //
7368
+ const data = this.safeDict(response, 'data', {});
7369
+ const orders = this.safeList(data, 'list', []);
7370
+ return this.parseOrders(orders, market, since, limit);
7371
+ }
6226
7372
  /**
6227
7373
  * @method
6228
7374
  * @name bitget#fetchLedger
@@ -6449,69 +7595,84 @@ class bitget extends bitget$1 {
6449
7595
  * @see https://www.bitget.com/api-doc/contract/trade/Get-Order-Fills
6450
7596
  * @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-Fills
6451
7597
  * @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Transaction-Details
7598
+ * @see https://www.bitget.com/api-doc/uta/trade/Get-Order-Fills
6452
7599
  * @param {string} symbol unified market symbol
6453
7600
  * @param {int} [since] the earliest time in ms to fetch trades for
6454
7601
  * @param {int} [limit] the maximum number of trades structures to retrieve
6455
7602
  * @param {object} [params] extra parameters specific to the exchange API endpoint
6456
7603
  * @param {int} [params.until] the latest time in ms to fetch trades for
7604
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
6457
7605
  * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
6458
7606
  * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
6459
7607
  */
6460
7608
  async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
6461
- if (symbol === undefined) {
7609
+ let uta = undefined;
7610
+ [uta, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'uta', false);
7611
+ if (!uta && (symbol === undefined)) {
6462
7612
  throw new errors.ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
6463
7613
  }
6464
7614
  await this.loadMarkets();
6465
7615
  const market = this.market(symbol);
6466
- let marginMode = undefined;
6467
- [marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);
7616
+ let request = {};
7617
+ [request, params] = this.handleUntilOption('endTime', request, params);
7618
+ if (since !== undefined) {
7619
+ request['startTime'] = since;
7620
+ }
7621
+ if (limit !== undefined) {
7622
+ request['limit'] = limit;
7623
+ }
6468
7624
  let paginate = false;
7625
+ let marginMode = undefined;
6469
7626
  [paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');
7627
+ [marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);
6470
7628
  if (paginate) {
6471
7629
  let cursorReceived = undefined;
6472
- if (market['spot']) {
7630
+ let cursorSent = undefined;
7631
+ if (uta) {
7632
+ cursorReceived = 'cursor';
7633
+ cursorSent = 'cursor';
7634
+ }
7635
+ else if (market['spot']) {
6473
7636
  if (marginMode !== undefined) {
6474
7637
  cursorReceived = 'minId';
7638
+ cursorSent = 'idLessThan';
6475
7639
  }
6476
7640
  }
6477
7641
  else {
6478
7642
  cursorReceived = 'endId';
7643
+ cursorSent = 'idLessThan';
6479
7644
  }
6480
- return await this.fetchPaginatedCallCursor('fetchMyTrades', symbol, since, limit, params, cursorReceived, 'idLessThan');
7645
+ return await this.fetchPaginatedCallCursor('fetchMyTrades', symbol, since, limit, params, cursorReceived, cursorSent);
6481
7646
  }
6482
7647
  let response = undefined;
6483
- let request = {
6484
- 'symbol': market['id'],
6485
- };
6486
- [request, params] = this.handleUntilOption('endTime', request, params);
6487
- if (since !== undefined) {
6488
- request['startTime'] = since;
6489
- }
6490
- if (limit !== undefined) {
6491
- request['limit'] = limit;
7648
+ if (uta) {
7649
+ response = await this.privateUtaGetV3TradeFills(this.extend(request, params));
6492
7650
  }
6493
- if (market['spot']) {
6494
- if (marginMode !== undefined) {
6495
- if (since === undefined) {
6496
- request['startTime'] = this.milliseconds() - 7776000000;
6497
- }
6498
- if (marginMode === 'isolated') {
6499
- response = await this.privateMarginGetV2MarginIsolatedFills(this.extend(request, params));
7651
+ else {
7652
+ request['symbol'] = market['id'];
7653
+ if (market['spot']) {
7654
+ if (marginMode !== undefined) {
7655
+ if (since === undefined) {
7656
+ request['startTime'] = this.milliseconds() - 7776000000;
7657
+ }
7658
+ if (marginMode === 'isolated') {
7659
+ response = await this.privateMarginGetV2MarginIsolatedFills(this.extend(request, params));
7660
+ }
7661
+ else if (marginMode === 'cross') {
7662
+ response = await this.privateMarginGetV2MarginCrossedFills(this.extend(request, params));
7663
+ }
6500
7664
  }
6501
- else if (marginMode === 'cross') {
6502
- response = await this.privateMarginGetV2MarginCrossedFills(this.extend(request, params));
7665
+ else {
7666
+ response = await this.privateSpotGetV2SpotTradeFills(this.extend(request, params));
6503
7667
  }
6504
7668
  }
6505
7669
  else {
6506
- response = await this.privateSpotGetV2SpotTradeFills(this.extend(request, params));
7670
+ let productType = undefined;
7671
+ [productType, params] = this.handleProductTypeAndParams(market, params);
7672
+ request['productType'] = productType;
7673
+ response = await this.privateMixGetV2MixOrderFills(this.extend(request, params));
6507
7674
  }
6508
7675
  }
6509
- else {
6510
- let productType = undefined;
6511
- [productType, params] = this.handleProductTypeAndParams(market, params);
6512
- request['productType'] = productType;
6513
- response = await this.privateMixGetV2MixOrderFills(this.extend(request, params));
6514
- }
6515
7676
  //
6516
7677
  // spot
6517
7678
  //
@@ -6611,10 +7772,46 @@ class bitget extends bitget$1 {
6611
7772
  // }
6612
7773
  // }
6613
7774
  //
7775
+ // uta
7776
+ //
7777
+ // {
7778
+ // "code": "00000",
7779
+ // "msg": "success",
7780
+ // "requestTime": 1751099666579,
7781
+ // "data": {
7782
+ // "list": [
7783
+ // {
7784
+ // "execId": "1322441401010528257",
7785
+ // "orderId": "1322441400976261120",
7786
+ // "category": "USDT-FUTURES",
7787
+ // "symbol": "BTCUSDT",
7788
+ // "orderType": "market",
7789
+ // "side": "sell",
7790
+ // "execPrice": "107005.4",
7791
+ // "execQty": "0.0001",
7792
+ // "execValue": "10.7005",
7793
+ // "tradeScope": "taker",
7794
+ // "feeDetail": [{
7795
+ // "feeCoin": "USDT",
7796
+ // "fee":"0.00642032"
7797
+ // }],
7798
+ // "createdTime": "1751020520451",
7799
+ // "updatedTime": "1751020520458",
7800
+ // "execPnl": "0.00017"
7801
+ // },
7802
+ // ],
7803
+ // "cursor": "1322061241878880257"
7804
+ // }
7805
+ // }
7806
+ //
6614
7807
  const data = this.safeValue(response, 'data');
6615
- if ((market['swap']) || (market['future'])) {
6616
- const fillList = this.safeList(data, 'fillList', []);
6617
- return this.parseTrades(fillList, market, since, limit);
7808
+ if (uta) {
7809
+ const fills = this.safeList(data, 'list', []);
7810
+ return this.parseTrades(fills, market, since, limit);
7811
+ }
7812
+ else if ((market['swap'] || (market['future']))) {
7813
+ const fills = this.safeList(data, 'fillList', []);
7814
+ return this.parseTrades(fills, market, since, limit);
6618
7815
  }
6619
7816
  else if (marginMode !== undefined) {
6620
7817
  const fills = this.safeList(data, 'fills', []);
@@ -6627,8 +7824,10 @@ class bitget extends bitget$1 {
6627
7824
  * @name bitget#fetchPosition
6628
7825
  * @description fetch data on a single open contract trade position
6629
7826
  * @see https://www.bitget.com/api-doc/contract/position/get-single-position
7827
+ * @see https://www.bitget.com/api-doc/uta/trade/Get-Position
6630
7828
  * @param {string} symbol unified market symbol of the market the position is held in
6631
7829
  * @param {object} [params] extra parameters specific to the exchange API endpoint
7830
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
6632
7831
  * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
6633
7832
  */
6634
7833
  async fetchPosition(symbol, params = {}) {
@@ -6638,42 +7837,92 @@ class bitget extends bitget$1 {
6638
7837
  [productType, params] = this.handleProductTypeAndParams(market, params);
6639
7838
  const request = {
6640
7839
  'symbol': market['id'],
6641
- 'marginCoin': market['settleId'],
6642
- 'productType': productType,
6643
7840
  };
6644
- const response = await this.privateMixGetV2MixPositionSinglePosition(this.extend(request, params));
6645
- //
6646
- // {
6647
- // "code": "00000",
6648
- // "msg": "success",
6649
- // "requestTime": 1700807531673,
6650
- // "data": [
6651
- // {
6652
- // "marginCoin": "USDT",
6653
- // "symbol": "BTCUSDT",
6654
- // "holdSide": "long",
6655
- // "openDelegateSize": "0",
6656
- // "marginSize": "3.73555",
6657
- // "available": "0.002",
6658
- // "locked": "0",
6659
- // "total": "0.002",
6660
- // "leverage": "20",
6661
- // "achievedProfits": "0",
6662
- // "openPriceAvg": "37355.5",
6663
- // "marginMode": "crossed",
6664
- // "posMode": "hedge_mode",
6665
- // "unrealizedPL": "0.007",
6666
- // "liquidationPrice": "31724.970702417",
6667
- // "keepMarginRate": "0.004",
6668
- // "markPrice": "37359",
6669
- // "marginRatio": "0.029599540355",
6670
- // "cTime": "1700807507275"
6671
- // }
6672
- // ]
6673
- // }
6674
- //
6675
- const data = this.safeList(response, 'data', []);
6676
- const first = this.safeDict(data, 0, {});
7841
+ let response = undefined;
7842
+ let uta = undefined;
7843
+ let result = undefined;
7844
+ [uta, params] = this.handleOptionAndParams(params, 'fetchPosition', 'uta', false);
7845
+ if (uta) {
7846
+ request['category'] = productType;
7847
+ response = await this.privateUtaGetV3PositionCurrentPosition(this.extend(request, params));
7848
+ //
7849
+ // {
7850
+ // "code": "00000",
7851
+ // "msg": "success",
7852
+ // "requestTime": 1750929905423,
7853
+ // "data": {
7854
+ // "list": [
7855
+ // {
7856
+ // "category": "USDT-FUTURES",
7857
+ // "symbol": "BTCUSDT",
7858
+ // "marginCoin": "USDT",
7859
+ // "holdMode": "hedge_mode",
7860
+ // "posSide": "long",
7861
+ // "marginMode": "crossed",
7862
+ // "positionBalance": "5.435199",
7863
+ // "available": "0.001",
7864
+ // "frozen": "0",
7865
+ // "total": "0.001",
7866
+ // "leverage": "20",
7867
+ // "curRealisedPnl": "0",
7868
+ // "avgPrice": "107410.3",
7869
+ // "positionStatus": "normal",
7870
+ // "unrealisedPnl": "0.0047",
7871
+ // "liquidationPrice": "0",
7872
+ // "mmr": "0.004",
7873
+ // "profitRate": "0.0008647337475591",
7874
+ // "markPrice": "107415.3",
7875
+ // "breakEvenPrice": "107539.2",
7876
+ // "totalFunding": "0",
7877
+ // "openFeeTotal": "-0.06444618",
7878
+ // "closeFeeTotal": "0",
7879
+ // "createdTime": "1750495670699",
7880
+ // "updatedTime": "1750929883465"
7881
+ // }
7882
+ // ]
7883
+ // }
7884
+ // }
7885
+ //
7886
+ const data = this.safeDict(response, 'data', {});
7887
+ result = this.safeList(data, 'list', []);
7888
+ }
7889
+ else {
7890
+ request['marginCoin'] = market['settleId'];
7891
+ request['productType'] = productType;
7892
+ response = await this.privateMixGetV2MixPositionSinglePosition(this.extend(request, params));
7893
+ //
7894
+ // {
7895
+ // "code": "00000",
7896
+ // "msg": "success",
7897
+ // "requestTime": 1700807531673,
7898
+ // "data": [
7899
+ // {
7900
+ // "marginCoin": "USDT",
7901
+ // "symbol": "BTCUSDT",
7902
+ // "holdSide": "long",
7903
+ // "openDelegateSize": "0",
7904
+ // "marginSize": "3.73555",
7905
+ // "available": "0.002",
7906
+ // "locked": "0",
7907
+ // "total": "0.002",
7908
+ // "leverage": "20",
7909
+ // "achievedProfits": "0",
7910
+ // "openPriceAvg": "37355.5",
7911
+ // "marginMode": "crossed",
7912
+ // "posMode": "hedge_mode",
7913
+ // "unrealizedPL": "0.007",
7914
+ // "liquidationPrice": "31724.970702417",
7915
+ // "keepMarginRate": "0.004",
7916
+ // "markPrice": "37359",
7917
+ // "marginRatio": "0.029599540355",
7918
+ // "cTime": "1700807507275"
7919
+ // }
7920
+ // ]
7921
+ // }
7922
+ //
7923
+ result = this.safeList(response, 'data', []);
7924
+ }
7925
+ const first = this.safeDict(result, 0, {});
6677
7926
  return this.parsePosition(first, market);
6678
7927
  }
6679
7928
  /**
@@ -6853,6 +8102,36 @@ class bitget extends bitget$1 {
6853
8102
  // "cTime": "1700807507275"
6854
8103
  // }
6855
8104
  //
8105
+ // uta: fetchPosition
8106
+ //
8107
+ // {
8108
+ // "category": "USDT-FUTURES",
8109
+ // "symbol": "BTCUSDT",
8110
+ // "marginCoin": "USDT",
8111
+ // "holdMode": "hedge_mode",
8112
+ // "posSide": "long",
8113
+ // "marginMode": "crossed",
8114
+ // "positionBalance": "5.435199",
8115
+ // "available": "0.001",
8116
+ // "frozen": "0",
8117
+ // "total": "0.001",
8118
+ // "leverage": "20",
8119
+ // "curRealisedPnl": "0",
8120
+ // "avgPrice": "107410.3",
8121
+ // "positionStatus": "normal",
8122
+ // "unrealisedPnl": "0.0047",
8123
+ // "liquidationPrice": "0",
8124
+ // "mmr": "0.004",
8125
+ // "profitRate": "0.0008647337475591",
8126
+ // "markPrice": "107415.3",
8127
+ // "breakEvenPrice": "107539.2",
8128
+ // "totalFunding": "0",
8129
+ // "openFeeTotal": "-0.06444618",
8130
+ // "closeFeeTotal": "0",
8131
+ // "createdTime": "1750495670699",
8132
+ // "updatedTime": "1750929883465"
8133
+ // }
8134
+ //
6856
8135
  // fetchPositions: privateMixGetV2MixPositionAllPosition
6857
8136
  //
6858
8137
  // {
@@ -6904,15 +8183,38 @@ class bitget extends bitget$1 {
6904
8183
  // "clientOid": "1120923953904893956"
6905
8184
  // }
6906
8185
  //
8186
+ // uta: fetchPositionsHistory
8187
+ //
8188
+ // {
8189
+ // "positionId": "1322441328637100049",
8190
+ // "category": "USDT-FUTURES",
8191
+ // "symbol": "BTCUSDT",
8192
+ // "marginCoin": "USDT",
8193
+ // "holdMode": "hedge_mode",
8194
+ // "posSide": "long",
8195
+ // "marginMode": "crossed",
8196
+ // "openPriceAvg": "107003.7",
8197
+ // "closePriceAvg": "107005.4",
8198
+ // "openTotalPos": "0.0001",
8199
+ // "closeTotalPos": "0.0001",
8200
+ // "cumRealisedPnl": "0.00017",
8201
+ // "netProfit": "-0.01267055",
8202
+ // "totalFunding": "0",
8203
+ // "openFeeTotal": "-0.00642022",
8204
+ // "closeFeeTotal": "-0.00642032",
8205
+ // "createdTime": "1751020503195",
8206
+ // "updatedTime": "1751020520458"
8207
+ // }
8208
+ //
6907
8209
  const marketId = this.safeString(position, 'symbol');
6908
8210
  market = this.safeMarket(marketId, market, undefined, 'contract');
6909
8211
  const symbol = market['symbol'];
6910
- const timestamp = this.safeInteger2(position, 'cTime', 'ctime');
8212
+ const timestamp = this.safeIntegerN(position, ['cTime', 'ctime', 'createdTime']);
6911
8213
  let marginMode = this.safeString(position, 'marginMode');
6912
8214
  let collateral = undefined;
6913
8215
  let initialMargin = undefined;
6914
- const unrealizedPnl = this.safeString(position, 'unrealizedPL');
6915
- const rawCollateral = this.safeString(position, 'marginSize');
8216
+ const unrealizedPnl = this.safeString2(position, 'unrealizedPL', 'unrealisedPnl');
8217
+ const rawCollateral = this.safeString2(position, 'marginSize', 'positionBalance');
6916
8218
  if (marginMode === 'isolated') {
6917
8219
  collateral = Precise["default"].stringAdd(rawCollateral, unrealizedPnl);
6918
8220
  }
@@ -6920,7 +8222,7 @@ class bitget extends bitget$1 {
6920
8222
  marginMode = 'cross';
6921
8223
  initialMargin = rawCollateral;
6922
8224
  }
6923
- const holdMode = this.safeString(position, 'posMode');
8225
+ const holdMode = this.safeString2(position, 'posMode', 'holdMode');
6924
8226
  let hedged = undefined;
6925
8227
  if (holdMode === 'hedge_mode') {
6926
8228
  hedged = true;
@@ -6928,12 +8230,12 @@ class bitget extends bitget$1 {
6928
8230
  else if (holdMode === 'one_way_mode') {
6929
8231
  hedged = false;
6930
8232
  }
6931
- const side = this.safeString(position, 'holdSide');
8233
+ const side = this.safeString2(position, 'holdSide', 'posSide');
6932
8234
  const leverage = this.safeString(position, 'leverage');
6933
8235
  const contractSizeNumber = this.safeValue(market, 'contractSize');
6934
8236
  const contractSize = this.numberToString(contractSizeNumber);
6935
- const baseAmount = this.safeString(position, 'total');
6936
- const entryPrice = this.safeString2(position, 'openPriceAvg', 'openAvgPrice');
8237
+ const baseAmount = this.safeString2(position, 'total', 'openTotalPos');
8238
+ const entryPrice = this.safeStringN(position, ['openPriceAvg', 'openAvgPrice', 'avgPrice']);
6937
8239
  const maintenanceMarginPercentage = this.safeString(position, 'keepMarginRate');
6938
8240
  const openNotional = Precise["default"].stringMul(entryPrice, baseAmount);
6939
8241
  if (initialMargin === undefined) {
@@ -6971,31 +8273,31 @@ class bitget extends bitget$1 {
6971
8273
  const percentage = Precise["default"].stringMul(Precise["default"].stringDiv(unrealizedPnl, initialMargin, 4), '100');
6972
8274
  return this.safePosition({
6973
8275
  'info': position,
6974
- 'id': this.safeString(position, 'orderId'),
8276
+ 'id': this.safeString2(position, 'orderId', 'positionId'),
6975
8277
  'symbol': symbol,
6976
8278
  'notional': this.parseNumber(notional),
6977
8279
  'marginMode': marginMode,
6978
8280
  'liquidationPrice': liquidationPrice,
6979
8281
  'entryPrice': this.parseNumber(entryPrice),
6980
8282
  'unrealizedPnl': this.parseNumber(unrealizedPnl),
6981
- 'realizedPnl': this.safeNumber(position, 'pnl'),
8283
+ 'realizedPnl': this.safeNumberN(position, ['pnl', 'curRealisedPnl', 'cumRealisedPnl']),
6982
8284
  'percentage': this.parseNumber(percentage),
6983
8285
  'contracts': contracts,
6984
8286
  'contractSize': contractSizeNumber,
6985
8287
  'markPrice': this.parseNumber(markPrice),
6986
- 'lastPrice': this.safeNumber(position, 'closeAvgPrice'),
8288
+ 'lastPrice': this.safeNumber2(position, 'closeAvgPrice', 'closePriceAvg'),
6987
8289
  'side': side,
6988
8290
  'hedged': hedged,
6989
8291
  'timestamp': timestamp,
6990
8292
  'datetime': this.iso8601(timestamp),
6991
- 'lastUpdateTimestamp': this.safeInteger(position, 'utime'),
8293
+ 'lastUpdateTimestamp': this.safeInteger2(position, 'utime', 'updatedTime'),
6992
8294
  'maintenanceMargin': this.parseNumber(maintenanceMargin),
6993
8295
  'maintenanceMarginPercentage': this.parseNumber(maintenanceMarginPercentage),
6994
8296
  'collateral': this.parseNumber(collateral),
6995
8297
  'initialMargin': this.parseNumber(initialMargin),
6996
8298
  'initialMarginPercentage': this.parseNumber(initialMarginPercentage),
6997
8299
  'leverage': this.parseNumber(leverage),
6998
- 'marginRatio': this.safeNumber(position, 'marginRatio'),
8300
+ 'marginRatio': this.safeNumber2(position, 'marginRatio', 'mmr'),
6999
8301
  'stopLossPrice': undefined,
7000
8302
  'takeProfitPrice': undefined,
7001
8303
  });
@@ -7005,10 +8307,12 @@ class bitget extends bitget$1 {
7005
8307
  * @name bitget#fetchFundingRateHistory
7006
8308
  * @description fetches historical funding rate prices
7007
8309
  * @see https://www.bitget.com/api-doc/contract/market/Get-History-Funding-Rate
8310
+ * @see https://www.bitget.com/api-doc/uta/public/Get-History-Funding-Rate
7008
8311
  * @param {string} symbol unified symbol of the market to fetch the funding rate history for
7009
8312
  * @param {int} [since] timestamp in ms of the earliest funding rate to fetch
7010
8313
  * @param {int} [limit] the maximum amount of funding rate structures to fetch
7011
8314
  * @param {object} [params] extra parameters specific to the exchange API endpoint
8315
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
7012
8316
  * @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)
7013
8317
  * @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure}
7014
8318
  */
@@ -7017,45 +8321,74 @@ class bitget extends bitget$1 {
7017
8321
  throw new errors.ArgumentsRequired(this.id + ' fetchFundingRateHistory() requires a symbol argument');
7018
8322
  }
7019
8323
  await this.loadMarkets();
7020
- let paginate = false;
7021
- [paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
7022
- if (paginate) {
7023
- return await this.fetchPaginatedCallIncremental('fetchFundingRateHistory', symbol, since, limit, params, 'pageNo', 100);
7024
- }
7025
8324
  const market = this.market(symbol);
7026
- let productType = undefined;
7027
- [productType, params] = this.handleProductTypeAndParams(market, params);
7028
8325
  const request = {
7029
8326
  'symbol': market['id'],
7030
- 'productType': productType,
7031
- // 'pageSize': limit, // default 20
7032
- // 'pageNo': 1,
7033
8327
  };
7034
- if (limit !== undefined) {
7035
- request['pageSize'] = limit;
8328
+ let productType = undefined;
8329
+ let uta = undefined;
8330
+ let response = undefined;
8331
+ let result = undefined;
8332
+ [productType, params] = this.handleProductTypeAndParams(market, params);
8333
+ [uta, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'uta', false);
8334
+ if (uta) {
8335
+ if (limit !== undefined) {
8336
+ request['limit'] = limit;
8337
+ }
8338
+ request['category'] = productType;
8339
+ response = await this.publicUtaGetV3MarketHistoryFundRate(this.extend(request, params));
8340
+ //
8341
+ // {
8342
+ // "code": "00000",
8343
+ // "msg": "success",
8344
+ // "requestTime": 1750435113658,
8345
+ // "data": {
8346
+ // "resultList": [
8347
+ // {
8348
+ // "symbol": "BTCUSDT",
8349
+ // "fundingRate": "-0.000017",
8350
+ // "fundingRateTimestamp": "1750431600000"
8351
+ // },
8352
+ // ]
8353
+ // }
8354
+ // }
8355
+ //
8356
+ const data = this.safeDict(response, 'data', {});
8357
+ result = this.safeList(data, 'resultList', []);
8358
+ }
8359
+ else {
8360
+ let paginate = false;
8361
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
8362
+ if (paginate) {
8363
+ return await this.fetchPaginatedCallIncremental('fetchFundingRateHistory', symbol, since, limit, params, 'pageNo', 100);
8364
+ }
8365
+ if (limit !== undefined) {
8366
+ request['pageSize'] = limit;
8367
+ }
8368
+ request['productType'] = productType;
8369
+ response = await this.publicMixGetV2MixMarketHistoryFundRate(this.extend(request, params));
8370
+ //
8371
+ // {
8372
+ // "code": "00000",
8373
+ // "msg": "success",
8374
+ // "requestTime": 1652406728393,
8375
+ // "data": [
8376
+ // {
8377
+ // "symbol": "BTCUSDT",
8378
+ // "fundingRate": "-0.0003",
8379
+ // "fundingTime": "1652396400000"
8380
+ // },
8381
+ // ]
8382
+ // }
8383
+ //
8384
+ result = this.safeList(response, 'data', []);
7036
8385
  }
7037
- const response = await this.publicMixGetV2MixMarketHistoryFundRate(this.extend(request, params));
7038
- //
7039
- // {
7040
- // "code": "00000",
7041
- // "msg": "success",
7042
- // "requestTime": 1652406728393,
7043
- // "data": [
7044
- // {
7045
- // "symbol": "BTCUSDT",
7046
- // "fundingRate": "-0.0003",
7047
- // "fundingTime": "1652396400000"
7048
- // },
7049
- // ]
7050
- // }
7051
- //
7052
- const data = this.safeValue(response, 'data', []);
7053
8386
  const rates = [];
7054
- for (let i = 0; i < data.length; i++) {
7055
- const entry = data[i];
8387
+ for (let i = 0; i < result.length; i++) {
8388
+ const entry = result[i];
7056
8389
  const marketId = this.safeString(entry, 'symbol');
7057
8390
  const symbolInner = this.safeSymbol(marketId, market);
7058
- const timestamp = this.safeInteger(entry, 'fundingTime');
8391
+ const timestamp = this.safeInteger2(entry, 'fundingTime', 'fundingRateTimestamp');
7059
8392
  rates.push({
7060
8393
  'info': entry,
7061
8394
  'symbol': symbolInner,
@@ -7073,8 +8406,10 @@ class bitget extends bitget$1 {
7073
8406
  * @description fetch the current funding rate
7074
8407
  * @see https://www.bitget.com/api-doc/contract/market/Get-Current-Funding-Rate
7075
8408
  * @see https://www.bitget.com/api-doc/contract/market/Get-Symbol-Next-Funding-Time
8409
+ * @see https://www.bitget.com/api-doc/uta/public/Get-Current-Funding-Rate
7076
8410
  * @param {string} symbol unified market symbol
7077
8411
  * @param {object} [params] extra parameters specific to the exchange API endpoint
8412
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
7078
8413
  * @param {string} [params.method] either (default) 'publicMixGetV2MixMarketCurrentFundRate' or 'publicMixGetV2MixMarketFundingTime'
7079
8414
  * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
7080
8415
  */
@@ -7088,24 +8423,23 @@ class bitget extends bitget$1 {
7088
8423
  [productType, params] = this.handleProductTypeAndParams(market, params);
7089
8424
  const request = {
7090
8425
  'symbol': market['id'],
7091
- 'productType': productType,
7092
8426
  };
7093
- let method = undefined;
7094
- [method, params] = this.handleOptionAndParams(params, 'fetchFundingRate', 'method', 'publicMixGetV2MixMarketCurrentFundRate');
8427
+ let uta = undefined;
7095
8428
  let response = undefined;
7096
- if (method === 'publicMixGetV2MixMarketCurrentFundRate') {
7097
- response = await this.publicMixGetV2MixMarketCurrentFundRate(this.extend(request, params));
8429
+ [uta, params] = this.handleOptionAndParams(params, 'fetchFundingRate', 'uta', false);
8430
+ if (uta) {
8431
+ response = await this.publicUtaGetV3MarketCurrentFundRate(this.extend(request, params));
7098
8432
  //
7099
8433
  // {
7100
8434
  // "code": "00000",
7101
8435
  // "msg": "success",
7102
- // "requestTime": 1745500709429,
8436
+ // "requestTime": 1750897372153,
7103
8437
  // "data": [
7104
8438
  // {
7105
8439
  // "symbol": "BTCUSDT",
7106
- // "fundingRate": "-0.000013",
8440
+ // "fundingRate": "0.00001",
7107
8441
  // "fundingRateInterval": "8",
7108
- // "nextUpdate": "1745510400000",
8442
+ // "nextUpdate": "1750924800000",
7109
8443
  // "minFundingRate": "-0.003",
7110
8444
  // "maxFundingRate": "0.003"
7111
8445
  // }
@@ -7113,22 +8447,47 @@ class bitget extends bitget$1 {
7113
8447
  // }
7114
8448
  //
7115
8449
  }
7116
- else if (method === 'publicMixGetV2MixMarketFundingTime') {
7117
- response = await this.publicMixGetV2MixMarketFundingTime(this.extend(request, params));
7118
- //
7119
- // {
7120
- // "code": "00000",
7121
- // "msg": "success",
7122
- // "requestTime": 1745402092428,
7123
- // "data": [
7124
- // {
7125
- // "symbol": "BTCUSDT",
7126
- // "nextFundingTime": "1745424000000",
7127
- // "ratePeriod": "8"
7128
- // }
7129
- // ]
7130
- // }
7131
- //
8450
+ else {
8451
+ request['productType'] = productType;
8452
+ let method = undefined;
8453
+ [method, params] = this.handleOptionAndParams(params, 'fetchFundingRate', 'method', 'publicMixGetV2MixMarketCurrentFundRate');
8454
+ if (method === 'publicMixGetV2MixMarketCurrentFundRate') {
8455
+ response = await this.publicMixGetV2MixMarketCurrentFundRate(this.extend(request, params));
8456
+ //
8457
+ // {
8458
+ // "code": "00000",
8459
+ // "msg": "success",
8460
+ // "requestTime": 1745500709429,
8461
+ // "data": [
8462
+ // {
8463
+ // "symbol": "BTCUSDT",
8464
+ // "fundingRate": "-0.000013",
8465
+ // "fundingRateInterval": "8",
8466
+ // "nextUpdate": "1745510400000",
8467
+ // "minFundingRate": "-0.003",
8468
+ // "maxFundingRate": "0.003"
8469
+ // }
8470
+ // ]
8471
+ // }
8472
+ //
8473
+ }
8474
+ else if (method === 'publicMixGetV2MixMarketFundingTime') {
8475
+ response = await this.publicMixGetV2MixMarketFundingTime(this.extend(request, params));
8476
+ //
8477
+ // {
8478
+ // "code": "00000",
8479
+ // "msg": "success",
8480
+ // "requestTime": 1745402092428,
8481
+ // "data": [
8482
+ // {
8483
+ // "symbol": "BTCUSDT",
8484
+ // "nextFundingTime": "1745424000000",
8485
+ // "ratePeriod": "8"
8486
+ // }
8487
+ // ]
8488
+ // }
8489
+ //
8490
+ }
7132
8491
  }
7133
8492
  const data = this.safeList(response, 'data', []);
7134
8493
  return this.parseFundingRate(data[0], market);
@@ -7194,7 +8553,7 @@ class bitget extends bitget$1 {
7194
8553
  }
7195
8554
  parseFundingRate(contract, market = undefined) {
7196
8555
  //
7197
- // fetchFundingRate: publicMixGetV2MixMarketCurrentFundRate
8556
+ // fetchFundingRate: publicMixGetV2MixMarketCurrentFundRate, publicUtaGetV3MarketCurrentFundRate
7198
8557
  //
7199
8558
  // {
7200
8559
  // "symbol": "BTCUSDT",
@@ -7552,10 +8911,13 @@ class bitget extends bitget$1 {
7552
8911
  * @name bitget#setLeverage
7553
8912
  * @description set the level of leverage for a market
7554
8913
  * @see https://www.bitget.com/api-doc/contract/account/Change-Leverage
8914
+ * @see https://www.bitget.com/api-doc/uta/account/Change-Leverage
7555
8915
  * @param {int} leverage the rate of leverage
7556
8916
  * @param {string} symbol unified market symbol
7557
8917
  * @param {object} [params] extra parameters specific to the exchange API endpoint
7558
8918
  * @param {string} [params.holdSide] *isolated only* position direction, 'long' or 'short'
8919
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
8920
+ * @param {boolean} [params.posSide] required for uta isolated margin, long or short
7559
8921
  * @returns {object} response from the exchange
7560
8922
  */
7561
8923
  async setLeverage(leverage, symbol = undefined, params = {}) {
@@ -7568,27 +8930,51 @@ class bitget extends bitget$1 {
7568
8930
  [productType, params] = this.handleProductTypeAndParams(market, params);
7569
8931
  const request = {
7570
8932
  'symbol': market['id'],
7571
- 'marginCoin': market['settleId'],
7572
8933
  'leverage': this.numberToString(leverage),
7573
- 'productType': productType,
7574
- // 'holdSide': 'long',
7575
8934
  };
7576
- const response = await this.privateMixPostV2MixAccountSetLeverage(this.extend(request, params));
7577
- //
7578
- // {
7579
- // "code": "00000",
7580
- // "msg": "success",
7581
- // "requestTime": 1700864711517,
7582
- // "data": {
7583
- // "symbol": "BTCUSDT",
7584
- // "marginCoin": "USDT",
7585
- // "longLeverage": "25",
7586
- // "shortLeverage": "25",
7587
- // "crossMarginLeverage": "25",
7588
- // "marginMode": "crossed"
7589
- // }
7590
- // }
7591
- //
8935
+ let uta = undefined;
8936
+ let response = undefined;
8937
+ [uta, params] = this.handleOptionAndParams(params, 'setLeverage', 'uta', false);
8938
+ if (uta) {
8939
+ if (productType === 'SPOT') {
8940
+ let marginMode = undefined;
8941
+ [marginMode, params] = this.handleMarginModeAndParams('fetchTrades', params);
8942
+ if (marginMode !== undefined) {
8943
+ productType = 'MARGIN';
8944
+ }
8945
+ }
8946
+ request['coin'] = market['settleId'];
8947
+ request['category'] = productType;
8948
+ response = await this.privateUtaPostV3AccountSetLeverage(this.extend(request, params));
8949
+ //
8950
+ // {
8951
+ // "code": "00000",
8952
+ // "msg": "success",
8953
+ // "requestTime": 1752815940833,
8954
+ // "data": "success"
8955
+ // }
8956
+ //
8957
+ }
8958
+ else {
8959
+ request['marginCoin'] = market['settleId'];
8960
+ request['productType'] = productType;
8961
+ response = await this.privateMixPostV2MixAccountSetLeverage(this.extend(request, params));
8962
+ //
8963
+ // {
8964
+ // "code": "00000",
8965
+ // "msg": "success",
8966
+ // "requestTime": 1700864711517,
8967
+ // "data": {
8968
+ // "symbol": "BTCUSDT",
8969
+ // "marginCoin": "USDT",
8970
+ // "longLeverage": "25",
8971
+ // "shortLeverage": "25",
8972
+ // "crossMarginLeverage": "25",
8973
+ // "marginMode": "crossed"
8974
+ // }
8975
+ // }
8976
+ //
8977
+ }
7592
8978
  return response;
7593
8979
  }
7594
8980
  /**
@@ -7644,36 +9030,54 @@ class bitget extends bitget$1 {
7644
9030
  * @name bitget#setPositionMode
7645
9031
  * @description set hedged to true or false for a market
7646
9032
  * @see https://www.bitget.com/api-doc/contract/account/Change-Hold-Mode
9033
+ * @see https://www.bitget.com/api-doc/uta/account/Change-Position-Mode
7647
9034
  * @param {bool} hedged set to true to use dualSidePosition
7648
9035
  * @param {string} symbol not used by bitget setPositionMode ()
7649
9036
  * @param {object} [params] extra parameters specific to the exchange API endpoint
7650
- * @param {string} [params.productType] required if symbol is undefined: 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
9037
+ * @param {string} [params.productType] required if not uta and symbol is undefined: 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
9038
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
7651
9039
  * @returns {object} response from the exchange
7652
9040
  */
7653
9041
  async setPositionMode(hedged, symbol = undefined, params = {}) {
7654
9042
  await this.loadMarkets();
7655
9043
  const posMode = hedged ? 'hedge_mode' : 'one_way_mode';
9044
+ const request = {};
7656
9045
  let market = undefined;
7657
9046
  if (symbol !== undefined) {
7658
9047
  market = this.market(symbol);
7659
9048
  }
7660
9049
  let productType = undefined;
9050
+ let uta = undefined;
9051
+ let response = undefined;
7661
9052
  [productType, params] = this.handleProductTypeAndParams(market, params);
7662
- const request = {
7663
- 'posMode': posMode,
7664
- 'productType': productType,
7665
- };
7666
- const response = await this.privateMixPostV2MixAccountSetPositionMode(this.extend(request, params));
7667
- //
7668
- // {
7669
- // "code": "00000",
7670
- // "msg": "success",
7671
- // "requestTime": 1700865608009,
7672
- // "data": {
7673
- // "posMode": "hedge_mode"
7674
- // }
7675
- // }
7676
- //
9053
+ [uta, params] = this.handleOptionAndParams(params, 'setPositionMode', 'uta', false);
9054
+ if (uta) {
9055
+ request['holdMode'] = posMode;
9056
+ response = await this.privateUtaPostV3AccountSetHoldMode(this.extend(request, params));
9057
+ //
9058
+ // {
9059
+ // "code": "00000",
9060
+ // "msg": "success",
9061
+ // "requestTime": 1752816734592,
9062
+ // "data": "success"
9063
+ // }
9064
+ //
9065
+ }
9066
+ else {
9067
+ request['posMode'] = posMode;
9068
+ request['productType'] = productType;
9069
+ response = await this.privateMixPostV2MixAccountSetPositionMode(this.extend(request, params));
9070
+ //
9071
+ // {
9072
+ // "code": "00000",
9073
+ // "msg": "success",
9074
+ // "requestTime": 1700865608009,
9075
+ // "data": {
9076
+ // "posMode": "hedge_mode"
9077
+ // }
9078
+ // }
9079
+ //
9080
+ }
7677
9081
  return response;
7678
9082
  }
7679
9083
  /**
@@ -7681,8 +9085,10 @@ class bitget extends bitget$1 {
7681
9085
  * @name bitget#fetchOpenInterest
7682
9086
  * @description retrieves the open interest of a contract trading pair
7683
9087
  * @see https://www.bitget.com/api-doc/contract/market/Get-Open-Interest
9088
+ * @see https://www.bitget.com/api-doc/uta/public/Get-Open-Interest
7684
9089
  * @param {string} symbol unified CCXT market symbol
7685
9090
  * @param {object} [params] exchange specific parameters
9091
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
7686
9092
  * @returns {object} an open interest structure{@link https://docs.ccxt.com/#/?id=open-interest-structure}
7687
9093
  */
7688
9094
  async fetchOpenInterest(symbol, params = {}) {
@@ -7691,33 +9097,60 @@ class bitget extends bitget$1 {
7691
9097
  if (!market['contract']) {
7692
9098
  throw new errors.BadRequest(this.id + ' fetchOpenInterest() supports contract markets only');
7693
9099
  }
7694
- let productType = undefined;
7695
- [productType, params] = this.handleProductTypeAndParams(market, params);
7696
- const request = {
7697
- 'symbol': market['id'],
7698
- 'productType': productType,
7699
- };
7700
- const response = await this.publicMixGetV2MixMarketOpenInterest(this.extend(request, params));
7701
- //
7702
- // {
7703
- // "code": "00000",
7704
- // "msg": "success",
7705
- // "requestTime": 1700866041022,
7706
- // "data": {
7707
- // "openInterestList": [
7708
- // {
7709
- // "symbol": "BTCUSDT",
7710
- // "size": "52234.134"
7711
- // }
7712
- // ],
7713
- // "ts": "1700866041023"
7714
- // }
7715
- // }
7716
- //
9100
+ let productType = undefined;
9101
+ [productType, params] = this.handleProductTypeAndParams(market, params);
9102
+ const request = {
9103
+ 'symbol': market['id'],
9104
+ };
9105
+ let uta = undefined;
9106
+ let response = undefined;
9107
+ [uta, params] = this.handleOptionAndParams(params, 'fetchOpenInterest', 'uta', false);
9108
+ if (uta) {
9109
+ request['category'] = productType;
9110
+ response = await this.publicUtaGetV3MarketOpenInterest(this.extend(request, params));
9111
+ //
9112
+ // {
9113
+ // "code": "00000",
9114
+ // "msg": "success",
9115
+ // "requestTime": 1751101221545,
9116
+ // "data": {
9117
+ // "list": [
9118
+ // {
9119
+ // "symbol": "BTCUSDT",
9120
+ // "openInterest": "18166.3583"
9121
+ // }
9122
+ // ],
9123
+ // "ts": "1751101220993"
9124
+ // }
9125
+ // }
9126
+ //
9127
+ }
9128
+ else {
9129
+ request['productType'] = productType;
9130
+ response = await this.publicMixGetV2MixMarketOpenInterest(this.extend(request, params));
9131
+ //
9132
+ // {
9133
+ // "code": "00000",
9134
+ // "msg": "success",
9135
+ // "requestTime": 1700866041022,
9136
+ // "data": {
9137
+ // "openInterestList": [
9138
+ // {
9139
+ // "symbol": "BTCUSDT",
9140
+ // "size": "52234.134"
9141
+ // }
9142
+ // ],
9143
+ // "ts": "1700866041023"
9144
+ // }
9145
+ // }
9146
+ //
9147
+ }
7717
9148
  const data = this.safeDict(response, 'data', {});
7718
9149
  return this.parseOpenInterest(data, market);
7719
9150
  }
7720
9151
  parseOpenInterest(interest, market = undefined) {
9152
+ //
9153
+ // default
7721
9154
  //
7722
9155
  // {
7723
9156
  // "openInterestList": [
@@ -7729,12 +9162,24 @@ class bitget extends bitget$1 {
7729
9162
  // "ts": "1700866041023"
7730
9163
  // }
7731
9164
  //
7732
- const data = this.safeValue(interest, 'openInterestList', []);
9165
+ // uta
9166
+ //
9167
+ // {
9168
+ // "list": [
9169
+ // {
9170
+ // "symbol": "BTCUSDT",
9171
+ // "openInterest": "18166.3583"
9172
+ // }
9173
+ // ],
9174
+ // "ts": "1751101220993"
9175
+ // }
9176
+ //
9177
+ const data = this.safeList2(interest, 'openInterestList', 'list', []);
7733
9178
  const timestamp = this.safeInteger(interest, 'ts');
7734
9179
  const marketId = this.safeString(data[0], 'symbol');
7735
9180
  return this.safeOpenInterest({
7736
9181
  'symbol': this.safeSymbol(marketId, market, undefined, 'contract'),
7737
- 'openInterestAmount': this.safeNumber(data[0], 'size'),
9182
+ 'openInterestAmount': this.safeNumber2(data[0], 'size', 'openInterest'),
7738
9183
  'openInterestValue': undefined,
7739
9184
  'timestamp': timestamp,
7740
9185
  'datetime': this.iso8601(timestamp),
@@ -8473,9 +9918,10 @@ class bitget extends bitget$1 {
8473
9918
  * @name bitget#fetchCrossBorrowRate
8474
9919
  * @description fetch the rate of interest to borrow a currency for margin trading
8475
9920
  * @see https://www.bitget.com/api-doc/margin/cross/account/Get-Cross-Margin-Interest-Rate-And-Borrowable
9921
+ * @see https://www.bitget.com/api-doc/uta/public/Get-Margin-Loans
8476
9922
  * @param {string} code unified currency code
8477
9923
  * @param {object} [params] extra parameters specific to the exchange API endpoint
8478
- * @param {string} [params.symbol] required for isolated margin
9924
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
8479
9925
  * @returns {object} a [borrow rate structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#borrow-rate-structure}
8480
9926
  */
8481
9927
  async fetchCrossBorrowRate(code, params = {}) {
@@ -8484,40 +9930,64 @@ class bitget extends bitget$1 {
8484
9930
  const request = {
8485
9931
  'coin': currency['id'],
8486
9932
  };
8487
- const response = await this.privateMarginGetV2MarginCrossedInterestRateAndLimit(this.extend(request, params));
8488
- //
8489
- // {
8490
- // "code": "00000",
8491
- // "msg": "success",
8492
- // "requestTime": 1700879047861,
8493
- // "data": [
8494
- // {
8495
- // "coin": "BTC",
8496
- // "leverage": "3",
8497
- // "transferable": true,
8498
- // "borrowable": true,
8499
- // "dailyInterestRate": "0.00007",
8500
- // "annualInterestRate": "0.02555",
8501
- // "maxBorrowableAmount": "26",
8502
- // "vipList": [
8503
- // {"level":"0","limit":"26","dailyInterestRate":"0.00007","annualInterestRate":"0.02555","discountRate":"1"},
8504
- // {"level":"1","limit":"26.78","dailyInterestRate":"0.0000679","annualInterestRate":"0.0247835","discountRate":"0.97"},
8505
- // {"level":"2","limit":"28.08","dailyInterestRate":"0.0000644","annualInterestRate":"0.023506","discountRate":"0.92"},
8506
- // {"level":"3","limit":"30.16","dailyInterestRate":"0.0000602","annualInterestRate":"0.021973","discountRate":"0.86"},
8507
- // {"level":"4","limit":"34.58","dailyInterestRate":"0.0000525","annualInterestRate":"0.0191625","discountRate":"0.75"},
8508
- // {"level":"5","limit":"43.16","dailyInterestRate":"0.000042","annualInterestRate":"0.01533","discountRate":"0.6"}
8509
- // ]
8510
- // }
8511
- // ]
8512
- // }
8513
- //
9933
+ let uta = undefined;
9934
+ let response = undefined;
9935
+ let result = undefined;
9936
+ [uta, params] = this.handleOptionAndParams(params, 'fetchCrossBorrowRate', 'uta', false);
9937
+ if (uta) {
9938
+ response = await this.publicUtaGetV3MarketMarginLoans(this.extend(request, params));
9939
+ //
9940
+ // {
9941
+ // "code": "00000",
9942
+ // "msg": "success",
9943
+ // "requestTime": 1752817798893,
9944
+ // "data": {
9945
+ // "dailyInterest": "0.00100008",
9946
+ // "annualInterest": "0.3650292",
9947
+ // "limit": "100"
9948
+ // }
9949
+ // }
9950
+ //
9951
+ result = this.safeDict(response, 'data', {});
9952
+ }
9953
+ else {
9954
+ response = await this.privateMarginGetV2MarginCrossedInterestRateAndLimit(this.extend(request, params));
9955
+ //
9956
+ // {
9957
+ // "code": "00000",
9958
+ // "msg": "success",
9959
+ // "requestTime": 1700879047861,
9960
+ // "data": [
9961
+ // {
9962
+ // "coin": "BTC",
9963
+ // "leverage": "3",
9964
+ // "transferable": true,
9965
+ // "borrowable": true,
9966
+ // "dailyInterestRate": "0.00007",
9967
+ // "annualInterestRate": "0.02555",
9968
+ // "maxBorrowableAmount": "26",
9969
+ // "vipList": [
9970
+ // {"level":"0","limit":"26","dailyInterestRate":"0.00007","annualInterestRate":"0.02555","discountRate":"1"},
9971
+ // {"level":"1","limit":"26.78","dailyInterestRate":"0.0000679","annualInterestRate":"0.0247835","discountRate":"0.97"},
9972
+ // {"level":"2","limit":"28.08","dailyInterestRate":"0.0000644","annualInterestRate":"0.023506","discountRate":"0.92"},
9973
+ // {"level":"3","limit":"30.16","dailyInterestRate":"0.0000602","annualInterestRate":"0.021973","discountRate":"0.86"},
9974
+ // {"level":"4","limit":"34.58","dailyInterestRate":"0.0000525","annualInterestRate":"0.0191625","discountRate":"0.75"},
9975
+ // {"level":"5","limit":"43.16","dailyInterestRate":"0.000042","annualInterestRate":"0.01533","discountRate":"0.6"}
9976
+ // ]
9977
+ // }
9978
+ // ]
9979
+ // }
9980
+ //
9981
+ const data = this.safeValue(response, 'data', []);
9982
+ result = this.safeValue(data, 0, {});
9983
+ }
8514
9984
  const timestamp = this.safeInteger(response, 'requestTime');
8515
- const data = this.safeValue(response, 'data', []);
8516
- const first = this.safeValue(data, 0, {});
8517
- first['timestamp'] = timestamp;
8518
- return this.parseBorrowRate(first, currency);
9985
+ result['timestamp'] = timestamp;
9986
+ return this.parseBorrowRate(result, currency);
8519
9987
  }
8520
9988
  parseBorrowRate(info, currency = undefined) {
9989
+ //
9990
+ // default
8521
9991
  //
8522
9992
  // {
8523
9993
  // "coin": "BTC",
@@ -8537,11 +10007,19 @@ class bitget extends bitget$1 {
8537
10007
  // ]
8538
10008
  // }
8539
10009
  //
10010
+ // uta
10011
+ //
10012
+ // {
10013
+ // "dailyInterest": "0.00100008",
10014
+ // "annualInterest": "0.3650292",
10015
+ // "limit": "100"
10016
+ // }
10017
+ //
8540
10018
  const currencyId = this.safeString(info, 'coin');
8541
10019
  const timestamp = this.safeInteger(info, 'timestamp');
8542
10020
  return {
8543
10021
  'currency': this.safeCurrencyCode(currencyId, currency),
8544
- 'rate': this.safeNumber(info, 'dailyInterestRate'),
10022
+ 'rate': this.safeNumber2(info, 'dailyInterestRate', 'dailyInterest'),
8545
10023
  'period': 86400000,
8546
10024
  'timestamp': timestamp,
8547
10025
  'datetime': this.iso8601(timestamp),
@@ -8706,43 +10184,72 @@ class bitget extends bitget$1 {
8706
10184
  * @name bitget#closePosition
8707
10185
  * @description closes an open position for a market
8708
10186
  * @see https://www.bitget.com/api-doc/contract/trade/Flash-Close-Position
10187
+ * @see https://www.bitget.com/api-doc/uta/trade/Close-All-Positions
8709
10188
  * @param {string} symbol unified CCXT market symbol
8710
10189
  * @param {string} [side] one-way mode: 'buy' or 'sell', hedge-mode: 'long' or 'short'
8711
10190
  * @param {object} [params] extra parameters specific to the exchange API endpoint
10191
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
8712
10192
  * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
8713
10193
  */
8714
10194
  async closePosition(symbol, side = undefined, params = {}) {
8715
10195
  await this.loadMarkets();
8716
10196
  const market = this.market(symbol);
8717
- let productType = undefined;
8718
- [productType, params] = this.handleProductTypeAndParams(market, params);
8719
10197
  const request = {
8720
10198
  'symbol': market['id'],
8721
- 'productType': productType,
8722
10199
  };
8723
- if (side !== undefined) {
8724
- request['holdSide'] = side;
10200
+ let productType = undefined;
10201
+ let uta = undefined;
10202
+ let response = undefined;
10203
+ [productType, params] = this.handleProductTypeAndParams(market, params);
10204
+ [uta, params] = this.handleOptionAndParams(params, 'closePosition', 'uta', false);
10205
+ if (uta) {
10206
+ if (side !== undefined) {
10207
+ request['posSide'] = side;
10208
+ }
10209
+ request['category'] = productType;
10210
+ response = await this.privateUtaPostV3TradeClosePositions(this.extend(request, params));
10211
+ //
10212
+ // {
10213
+ // "code": "00000",
10214
+ // "msg": "success",
10215
+ // "requestTime": 1751020218384,
10216
+ // "data": {
10217
+ // "list": [
10218
+ // {
10219
+ // "orderId": "1322440134099320832",
10220
+ // "clientOid": "1322440134099320833"
10221
+ // }
10222
+ // ]
10223
+ // }
10224
+ // }
10225
+ //
10226
+ }
10227
+ else {
10228
+ if (side !== undefined) {
10229
+ request['holdSide'] = side;
10230
+ }
10231
+ request['productType'] = productType;
10232
+ response = await this.privateMixPostV2MixOrderClosePositions(this.extend(request, params));
10233
+ //
10234
+ // {
10235
+ // "code": "00000",
10236
+ // "msg": "success",
10237
+ // "requestTime": 1702975017017,
10238
+ // "data": {
10239
+ // "successList": [
10240
+ // {
10241
+ // "orderId": "1120923953904893955",
10242
+ // "clientOid": "1120923953904893956"
10243
+ // }
10244
+ // ],
10245
+ // "failureList": [],
10246
+ // "result": false
10247
+ // }
10248
+ // }
10249
+ //
8725
10250
  }
8726
- const response = await this.privateMixPostV2MixOrderClosePositions(this.extend(request, params));
8727
- //
8728
- // {
8729
- // "code": "00000",
8730
- // "msg": "success",
8731
- // "requestTime": 1702975017017,
8732
- // "data": {
8733
- // "successList": [
8734
- // {
8735
- // "orderId": "1120923953904893955",
8736
- // "clientOid": "1120923953904893956"
8737
- // }
8738
- // ],
8739
- // "failureList": [],
8740
- // "result": false
8741
- // }
8742
- // }
8743
- //
8744
10251
  const data = this.safeValue(response, 'data', {});
8745
- const order = this.safeList(data, 'successList', []);
10252
+ const order = this.safeList2(data, 'successList', 'list', []);
8746
10253
  return this.parseOrder(order[0], market);
8747
10254
  }
8748
10255
  /**
@@ -8750,37 +10257,62 @@ class bitget extends bitget$1 {
8750
10257
  * @name bitget#closeAllPositions
8751
10258
  * @description closes all open positions for a market type
8752
10259
  * @see https://www.bitget.com/api-doc/contract/trade/Flash-Close-Position
10260
+ * @see https://www.bitget.com/api-doc/uta/trade/Close-All-Positions
8753
10261
  * @param {object} [params] extra parameters specific to the exchange API endpoint
8754
10262
  * @param {string} [params.productType] 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
10263
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
8755
10264
  * @returns {object[]} A list of [position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
8756
10265
  */
8757
10266
  async closeAllPositions(params = {}) {
8758
10267
  await this.loadMarkets();
10268
+ const request = {};
8759
10269
  let productType = undefined;
10270
+ let uta = undefined;
10271
+ let response = undefined;
8760
10272
  [productType, params] = this.handleProductTypeAndParams(undefined, params);
8761
- const request = {
8762
- 'productType': productType,
8763
- };
8764
- const response = await this.privateMixPostV2MixOrderClosePositions(this.extend(request, params));
8765
- //
8766
- // {
8767
- // "code": "00000",
8768
- // "msg": "success",
8769
- // "requestTime": 1702975017017,
8770
- // "data": {
8771
- // "successList": [
8772
- // {
8773
- // "orderId": "1120923953904893955",
8774
- // "clientOid": "1120923953904893956"
8775
- // }
8776
- // ],
8777
- // "failureList": [],
8778
- // "result": false
8779
- // }
8780
- // }
8781
- //
10273
+ [uta, params] = this.handleOptionAndParams(params, 'closeAllPositions', 'uta', false);
10274
+ if (uta) {
10275
+ request['category'] = productType;
10276
+ response = await this.privateUtaPostV3TradeClosePositions(this.extend(request, params));
10277
+ //
10278
+ // {
10279
+ // "code": "00000",
10280
+ // "msg": "success",
10281
+ // "requestTime": 1751020218384,
10282
+ // "data": {
10283
+ // "list": [
10284
+ // {
10285
+ // "orderId": "1322440134099320832",
10286
+ // "clientOid": "1322440134099320833"
10287
+ // }
10288
+ // ]
10289
+ // }
10290
+ // }
10291
+ //
10292
+ }
10293
+ else {
10294
+ request['productType'] = productType;
10295
+ response = await this.privateMixPostV2MixOrderClosePositions(this.extend(request, params));
10296
+ //
10297
+ // {
10298
+ // "code": "00000",
10299
+ // "msg": "success",
10300
+ // "requestTime": 1702975017017,
10301
+ // "data": {
10302
+ // "successList": [
10303
+ // {
10304
+ // "orderId": "1120923953904893955",
10305
+ // "clientOid": "1120923953904893956"
10306
+ // }
10307
+ // ],
10308
+ // "failureList": [],
10309
+ // "result": false
10310
+ // }
10311
+ // }
10312
+ //
10313
+ }
8782
10314
  const data = this.safeValue(response, 'data', {});
8783
- const orderInfo = this.safeList(data, 'successList', []);
10315
+ const orderInfo = this.safeList2(data, 'successList', 'list', []);
8784
10316
  return this.parsePositions(orderInfo, undefined, params);
8785
10317
  }
8786
10318
  /**
@@ -8848,25 +10380,27 @@ class bitget extends bitget$1 {
8848
10380
  * @name bitget#fetchPositionsHistory
8849
10381
  * @description fetches historical positions
8850
10382
  * @see https://www.bitget.com/api-doc/contract/position/Get-History-Position
10383
+ * @see https://www.bitget.com/api-doc/uta/trade/Get-Position-History
8851
10384
  * @param {string[]} [symbols] unified contract symbols
8852
10385
  * @param {int} [since] timestamp in ms of the earliest position to fetch, default=3 months ago, max range for params["until"] - since is 3 months
8853
10386
  * @param {int} [limit] the maximum amount of records to fetch, default=20, max=100
8854
10387
  * @param {object} params extra parameters specific to the exchange api endpoint
8855
10388
  * @param {int} [params.until] timestamp in ms of the latest position to fetch, max range for params["until"] - since is 3 months
8856
- *
8857
- * EXCHANGE SPECIFIC PARAMETERS
8858
10389
  * @param {string} [params.productType] USDT-FUTURES (default), COIN-FUTURES, USDC-FUTURES, SUSDT-FUTURES, SCOIN-FUTURES, or SUSDC-FUTURES
10390
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
8859
10391
  * @returns {object[]} a list of [position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
8860
10392
  */
8861
10393
  async fetchPositionsHistory(symbols = undefined, since = undefined, limit = undefined, params = {}) {
8862
10394
  await this.loadMarkets();
8863
- const until = this.safeInteger(params, 'until');
8864
- params = this.omit(params, 'until');
8865
- const request = {};
10395
+ let request = {};
10396
+ let market = undefined;
10397
+ let productType = undefined;
10398
+ let uta = undefined;
10399
+ let response = undefined;
8866
10400
  if (symbols !== undefined) {
8867
10401
  const symbolsLength = symbols.length;
8868
10402
  if (symbolsLength > 0) {
8869
- const market = this.market(symbols[0]);
10403
+ market = this.market(symbols[0]);
8870
10404
  request['symbol'] = market['id'];
8871
10405
  }
8872
10406
  }
@@ -8876,41 +10410,79 @@ class bitget extends bitget$1 {
8876
10410
  if (limit !== undefined) {
8877
10411
  request['limit'] = limit;
8878
10412
  }
8879
- if (until !== undefined) {
8880
- request['endTime'] = until;
10413
+ [request, params] = this.handleUntilOption('endTime', request, params);
10414
+ [productType, params] = this.handleProductTypeAndParams(market, params);
10415
+ [uta, params] = this.handleOptionAndParams(params, 'fetchPositionsHistory', 'uta', false);
10416
+ if (uta) {
10417
+ request['category'] = productType;
10418
+ response = await this.privateUtaGetV3PositionHistoryPosition(this.extend(request, params));
10419
+ //
10420
+ // {
10421
+ // "code": "00000",
10422
+ // "msg": "success",
10423
+ // "requestTime": 1751020950427,
10424
+ // "data": {
10425
+ // "list": [
10426
+ // {
10427
+ // "positionId": "1322441328637100049",
10428
+ // "category": "USDT-FUTURES",
10429
+ // "symbol": "BTCUSDT",
10430
+ // "marginCoin": "USDT",
10431
+ // "holdMode": "hedge_mode",
10432
+ // "posSide": "long",
10433
+ // "marginMode": "crossed",
10434
+ // "openPriceAvg": "107003.7",
10435
+ // "closePriceAvg": "107005.4",
10436
+ // "openTotalPos": "0.0001",
10437
+ // "closeTotalPos": "0.0001",
10438
+ // "cumRealisedPnl": "0.00017",
10439
+ // "netProfit": "-0.01267055",
10440
+ // "totalFunding": "0",
10441
+ // "openFeeTotal": "-0.00642022",
10442
+ // "closeFeeTotal": "-0.00642032",
10443
+ // "createdTime": "1751020503195",
10444
+ // "updatedTime": "1751020520458"
10445
+ // },
10446
+ // ],
10447
+ // "cursor": "1322440134158041089"
10448
+ // }
10449
+ // }
10450
+ //
10451
+ }
10452
+ else {
10453
+ response = await this.privateMixGetV2MixPositionHistoryPosition(this.extend(request, params));
10454
+ //
10455
+ // {
10456
+ // code: '00000',
10457
+ // msg: 'success',
10458
+ // requestTime: '1712794148791',
10459
+ // data: {
10460
+ // list: [
10461
+ // {
10462
+ // symbol: 'XRPUSDT',
10463
+ // marginCoin: 'USDT',
10464
+ // holdSide: 'long',
10465
+ // openAvgPrice: '0.64967',
10466
+ // closeAvgPrice: '0.58799',
10467
+ // marginMode: 'isolated',
10468
+ // openTotalPos: '10',
10469
+ // closeTotalPos: '10',
10470
+ // pnl: '-0.62976205',
10471
+ // netProfit: '-0.65356802',
10472
+ // totalFunding: '-0.01638',
10473
+ // openFee: '-0.00389802',
10474
+ // closeFee: '-0.00352794',
10475
+ // ctime: '1709590322199',
10476
+ // utime: '1709667583395'
10477
+ // },
10478
+ // ...
10479
+ // ]
10480
+ // }
10481
+ // }
10482
+ //
8881
10483
  }
8882
- const response = await this.privateMixGetV2MixPositionHistoryPosition(this.extend(request, params));
8883
- //
8884
- // {
8885
- // code: '00000',
8886
- // msg: 'success',
8887
- // requestTime: '1712794148791',
8888
- // data: {
8889
- // list: [
8890
- // {
8891
- // symbol: 'XRPUSDT',
8892
- // marginCoin: 'USDT',
8893
- // holdSide: 'long',
8894
- // openAvgPrice: '0.64967',
8895
- // closeAvgPrice: '0.58799',
8896
- // marginMode: 'isolated',
8897
- // openTotalPos: '10',
8898
- // closeTotalPos: '10',
8899
- // pnl: '-0.62976205',
8900
- // netProfit: '-0.65356802',
8901
- // totalFunding: '-0.01638',
8902
- // openFee: '-0.00389802',
8903
- // closeFee: '-0.00352794',
8904
- // ctime: '1709590322199',
8905
- // utime: '1709667583395'
8906
- // },
8907
- // ...
8908
- // ]
8909
- // }
8910
- // }
8911
- //
8912
- const data = this.safeDict(response, 'data');
8913
- const responseList = this.safeList(data, 'list');
10484
+ const data = this.safeDict(response, 'data', {});
10485
+ const responseList = this.safeList(data, 'list', []);
8914
10486
  const positions = this.parsePositions(responseList, symbols, params);
8915
10487
  return this.filterBySinceLimit(positions, since, limit);
8916
10488
  }
@@ -9190,8 +10762,10 @@ class bitget extends bitget$1 {
9190
10762
  * @name bitget#fetchFundingInterval
9191
10763
  * @description fetch the current funding rate interval
9192
10764
  * @see https://www.bitget.com/api-doc/contract/market/Get-Symbol-Next-Funding-Time
10765
+ * @see https://www.bitget.com/api-doc/uta/public/Get-Current-Funding-Rate
9193
10766
  * @param {string} symbol unified market symbol
9194
10767
  * @param {object} [params] extra parameters specific to the exchange API endpoint
10768
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
9195
10769
  * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
9196
10770
  */
9197
10771
  async fetchFundingInterval(symbol, params = {}) {
@@ -9201,23 +10775,48 @@ class bitget extends bitget$1 {
9201
10775
  [productType, params] = this.handleProductTypeAndParams(market, params);
9202
10776
  const request = {
9203
10777
  'symbol': market['id'],
9204
- 'productType': productType,
9205
10778
  };
9206
- const response = await this.publicMixGetV2MixMarketFundingTime(this.extend(request, params));
9207
- //
9208
- // {
9209
- // "code": "00000",
9210
- // "msg": "success",
9211
- // "requestTime": 1727930153888,
9212
- // "data": [
9213
- // {
9214
- // "symbol": "BTCUSDT",
9215
- // "nextFundingTime": "1727942400000",
9216
- // "ratePeriod": "8"
9217
- // }
9218
- // ]
9219
- // }
9220
- //
10779
+ let response = undefined;
10780
+ let uta = undefined;
10781
+ [uta, params] = this.handleOptionAndParams(params, 'fetchFundingInterval', 'uta', false);
10782
+ if (uta) {
10783
+ response = await this.publicUtaGetV3MarketCurrentFundRate(this.extend(request, params));
10784
+ //
10785
+ // {
10786
+ // "code": "00000",
10787
+ // "msg": "success",
10788
+ // "requestTime": 1752880157959,
10789
+ // "data": [
10790
+ // {
10791
+ // "symbol": "BTCUSDT",
10792
+ // "fundingRate": "0.0001",
10793
+ // "fundingRateInterval": "8",
10794
+ // "nextUpdate": "1752883200000",
10795
+ // "minFundingRate": "-0.003",
10796
+ // "maxFundingRate": "0.003"
10797
+ // }
10798
+ // ]
10799
+ // }
10800
+ //
10801
+ }
10802
+ else {
10803
+ request['productType'] = productType;
10804
+ response = await this.publicMixGetV2MixMarketFundingTime(this.extend(request, params));
10805
+ //
10806
+ // {
10807
+ // "code": "00000",
10808
+ // "msg": "success",
10809
+ // "requestTime": 1727930153888,
10810
+ // "data": [
10811
+ // {
10812
+ // "symbol": "BTCUSDT",
10813
+ // "nextFundingTime": "1727942400000",
10814
+ // "ratePeriod": "8"
10815
+ // }
10816
+ // ]
10817
+ // }
10818
+ //
10819
+ }
9221
10820
  const data = this.safeList(response, 'data', []);
9222
10821
  const first = this.safeDict(data, 0, {});
9223
10822
  return this.parseFundingRate(first, market);
@@ -9392,7 +10991,7 @@ class bitget extends bitget$1 {
9392
10991
  }
9393
10992
  }
9394
10993
  const sandboxMode = this.safeBool2(this.options, 'sandboxMode', 'sandbox', false);
9395
- if (sandboxMode && (path !== 'v2/public/time')) {
10994
+ if (sandboxMode && (path !== 'v2/public/time') && (path !== 'v3/market/current-fund-rate')) {
9396
10995
  // https://github.com/ccxt/ccxt/issues/25252#issuecomment-2662742336
9397
10996
  if (headers === undefined) {
9398
10997
  headers = {};