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
package/js/src/bitget.js CHANGED
@@ -1,9 +1,3 @@
1
- // ----------------------------------------------------------------------------
2
-
3
- // PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
4
- // https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
- // EDIT THE CORRESPONDENT .ts FILE INSTEAD
6
-
7
1
  // ---------------------------------------------------------------------------
8
2
  import Exchange from './abstract/bitget.js';
9
3
  import { ExchangeError, ExchangeNotAvailable, NotSupported, OnMaintenance, ArgumentsRequired, BadRequest, AccountSuspended, InvalidAddress, PermissionDenied, DDoSProtection, InsufficientFunds, InvalidNonce, CancelPending, InvalidOrder, OrderNotFound, AuthenticationError, RequestTimeout, BadSymbol, RateLimitExceeded } from './base/errors.js';
@@ -808,6 +802,7 @@ export default class bitget extends Exchange {
808
802
  'get': {
809
803
  'v3/account/assets': 1,
810
804
  'v3/account/settings': 1,
805
+ 'v3/account/deposit-records': 2,
811
806
  'v3/account/financial-records': 1,
812
807
  'v3/account/repayable-coins': 2,
813
808
  'v3/account/payment-coins': 2,
@@ -826,7 +821,9 @@ export default class bitget extends Exchange {
826
821
  'v3/position/history-position': 1,
827
822
  'v3/trade/order-info': 1,
828
823
  'v3/trade/unfilled-orders': 1,
824
+ 'v3/trade/unfilled-strategy-orders': 1,
829
825
  'v3/trade/history-orders': 1,
826
+ 'v3/trade/history-strategy-orders': 1,
830
827
  'v3/trade/fills': 1,
831
828
  'v3/user/sub-list': 2,
832
829
  'v3/user/sub-api-list': 2,
@@ -840,8 +837,11 @@ export default class bitget extends Exchange {
840
837
  'v3/account/max-open-available': 4,
841
838
  'v3/ins-loan/bind-uid': 6.6667,
842
839
  'v3/trade/place-order': 2,
840
+ 'v3/trade/place-strategy-order': 2,
843
841
  'v3/trade/modify-order': 2,
842
+ 'v3/trade/modify-strategy-order': 2,
844
843
  'v3/trade/cancel-order': 2,
844
+ 'v3/trade/cancel-strategy-order': 2,
845
845
  'v3/trade/place-batch': 4,
846
846
  'v3/trade/batch-modify-order': 2,
847
847
  'v3/trade/cancel-batch': 4,
@@ -887,6 +887,7 @@ export default class bitget extends Exchange {
887
887
  // '0': ExchangeError, // 200 successful,when the order placement / cancellation / operation is successful
888
888
  '4001': ExchangeError,
889
889
  '4002': ExchangeError,
890
+ '40020': BadRequest,
890
891
  // --------------------------------------------------------
891
892
  '30001': AuthenticationError,
892
893
  '30002': AuthenticationError,
@@ -1431,6 +1432,19 @@ export default class bitget extends Exchange {
1431
1432
  '1w': '1Wutc',
1432
1433
  '1M': '1Mutc',
1433
1434
  },
1435
+ 'uta': {
1436
+ '1m': '1m',
1437
+ '3m': '3m',
1438
+ '5m': '5m',
1439
+ '15m': '15m',
1440
+ '30m': '30m',
1441
+ '1h': '1H',
1442
+ '2h': '2H',
1443
+ '4h': '4H',
1444
+ '6h': '6H',
1445
+ '12h': '12H',
1446
+ '1d': '1D',
1447
+ },
1434
1448
  },
1435
1449
  'fetchMarkets': {
1436
1450
  'types': ['spot', 'swap'], // there is future markets but they use the same endpoints as swap
@@ -1520,7 +1534,6 @@ export default class bitget extends Exchange {
1520
1534
  'ERC20': 'ERC20',
1521
1535
  'BEP20': 'BSC',
1522
1536
  // 'BEP20': 'BEP20', // different for BEP20
1523
- 'BSC': 'BEP20',
1524
1537
  'ATOM': 'ATOM',
1525
1538
  'ACA': 'AcalaToken',
1526
1539
  'APT': 'Aptos',
@@ -1774,10 +1787,20 @@ export default class bitget extends Exchange {
1774
1787
  defaultProductType = (subType === 'linear') ? 'USDT-FUTURES' : 'COIN-FUTURES';
1775
1788
  // }
1776
1789
  }
1777
- let productType = this.safeString(params, 'productType', defaultProductType);
1790
+ let productType = this.safeString2(params, 'productType', 'category', defaultProductType);
1778
1791
  if ((productType === undefined) && (market !== undefined)) {
1779
1792
  const settle = market['settle'];
1780
- if (settle === 'USDT') {
1793
+ if (market['spot']) {
1794
+ let marginMode = undefined;
1795
+ [marginMode, params] = this.handleMarginModeAndParams('handleProductTypeAndParams', params);
1796
+ if (marginMode !== undefined) {
1797
+ productType = 'MARGIN';
1798
+ }
1799
+ else {
1800
+ productType = 'SPOT';
1801
+ }
1802
+ }
1803
+ else if (settle === 'USDT') {
1781
1804
  productType = 'USDT-FUTURES';
1782
1805
  }
1783
1806
  else if (settle === 'USDC') {
@@ -1797,9 +1820,9 @@ export default class bitget extends Exchange {
1797
1820
  }
1798
1821
  }
1799
1822
  if (productType === undefined) {
1800
- throw new ArgumentsRequired(this.id + ' requires a productType param, one of "USDT-FUTURES", "USDC-FUTURES", "COIN-FUTURES", "SUSDT-FUTURES", "SUSDC-FUTURES" or "SCOIN-FUTURES"');
1823
+ throw new 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"');
1801
1824
  }
1802
- params = this.omit(params, 'productType');
1825
+ params = this.omit(params, ['productType', 'category']);
1803
1826
  return [productType, params];
1804
1827
  }
1805
1828
  /**
@@ -1832,9 +1855,9 @@ export default class bitget extends Exchange {
1832
1855
  * @see https://www.bitget.com/api-doc/spot/market/Get-Symbols
1833
1856
  * @see https://www.bitget.com/api-doc/contract/market/Get-All-Symbols-Contracts
1834
1857
  * @see https://www.bitget.com/api-doc/margin/common/support-currencies
1835
- * @see https://www.bitget.bike/api-doc/uta/public/Instruments
1858
+ * @see https://www.bitget.com/api-doc/uta/public/Instruments
1836
1859
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1837
- * @param {string} [params.uta] set to true to fetch markets for the unified trading account (uta), defaults to false
1860
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
1838
1861
  * @returns {object[]} an array of objects representing market data
1839
1862
  */
1840
1863
  async fetchMarkets(params = {}) {
@@ -2480,11 +2503,13 @@ export default class bitget extends Exchange {
2480
2503
  * @see https://www.bitget.com/api-doc/contract/position/Get-Query-Position-Lever
2481
2504
  * @see https://www.bitget.com/api-doc/margin/cross/account/Cross-Tier-Data
2482
2505
  * @see https://www.bitget.com/api-doc/margin/isolated/account/Isolated-Tier-Data
2506
+ * @see https://www.bitget.com/api-doc/uta/public/Get-Position-Tier-Data
2483
2507
  * @param {string} symbol unified market symbol
2484
2508
  * @param {object} [params] extra parameters specific to the exchange API endpoint
2485
2509
  * @param {string} [params.marginMode] for spot margin 'cross' or 'isolated', default is 'isolated'
2486
2510
  * @param {string} [params.code] required for cross spot margin
2487
- * @param {string} [params.productType] *contract only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
2511
+ * @param {string} [params.productType] *contract and uta only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
2512
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
2488
2513
  * @returns {object} a [leverage tiers structure]{@link https://docs.ccxt.com/#/?id=leverage-tiers-structure}
2489
2514
  */
2490
2515
  async fetchMarketLeverageTiers(symbol, params = {}) {
@@ -2493,10 +2518,22 @@ export default class bitget extends Exchange {
2493
2518
  const request = {};
2494
2519
  let response = undefined;
2495
2520
  let marginMode = undefined;
2521
+ let productType = undefined;
2522
+ let uta = undefined;
2496
2523
  [marginMode, params] = this.handleMarginModeAndParams('fetchMarketLeverageTiers', params, 'isolated');
2497
- if ((market['swap']) || (market['future'])) {
2498
- let productType = undefined;
2499
- [productType, params] = this.handleProductTypeAndParams(market, params);
2524
+ [productType, params] = this.handleProductTypeAndParams(market, params);
2525
+ [uta, params] = this.handleOptionAndParams(params, 'fetchMarketLeverageTiers', 'uta', false);
2526
+ if (uta) {
2527
+ if (productType === 'SPOT') {
2528
+ if (marginMode !== undefined) {
2529
+ productType = 'MARGIN';
2530
+ }
2531
+ }
2532
+ request['symbol'] = market['id'];
2533
+ request['category'] = productType;
2534
+ response = await this.publicUtaGetV3MarketPositionTier(this.extend(request, params));
2535
+ }
2536
+ else if ((market['swap']) || (market['future'])) {
2500
2537
  request['productType'] = productType;
2501
2538
  request['symbol'] = market['id'];
2502
2539
  response = await this.publicMixGetV2MixMarketQueryPositionLever(this.extend(request, params));
@@ -2575,6 +2612,23 @@ export default class bitget extends Exchange {
2575
2612
  // ]
2576
2613
  // }
2577
2614
  //
2615
+ // uta
2616
+ //
2617
+ // {
2618
+ // "code": "00000",
2619
+ // "msg": "success",
2620
+ // "requestTime": 1752735673127,
2621
+ // "data": [
2622
+ // {
2623
+ // "tier": "1",
2624
+ // "minTierValue": "0",
2625
+ // "maxTierValue": "150000",
2626
+ // "leverage": "125",
2627
+ // "mmr": "0.004"
2628
+ // },
2629
+ // ]
2630
+ // }
2631
+ //
2578
2632
  const result = this.safeValue(response, 'data', []);
2579
2633
  return this.parseMarketLeverageTiers(result, market);
2580
2634
  }
@@ -2615,15 +2669,25 @@ export default class bitget extends Exchange {
2615
2669
  // "maintainMarginRate": "0.1"
2616
2670
  // }
2617
2671
  //
2672
+ // uta
2673
+ //
2674
+ // {
2675
+ // "tier": "1",
2676
+ // "minTierValue": "0",
2677
+ // "maxTierValue": "150000",
2678
+ // "leverage": "125",
2679
+ // "mmr": "0.004"
2680
+ // }
2681
+ //
2618
2682
  const tiers = [];
2619
2683
  let minNotional = 0;
2620
2684
  for (let i = 0; i < info.length; i++) {
2621
2685
  const item = info[i];
2622
- const minimumNotional = this.safeNumber(item, 'startUnit');
2686
+ const minimumNotional = this.safeNumber2(item, 'startUnit', 'minTierValue');
2623
2687
  if (minimumNotional !== undefined) {
2624
2688
  minNotional = minimumNotional;
2625
2689
  }
2626
- const maxNotional = this.safeNumberN(item, ['endUnit', 'maxBorrowableAmount', 'baseMaxBorrowableAmount']);
2690
+ const maxNotional = this.safeNumberN(item, ['endUnit', 'maxBorrowableAmount', 'baseMaxBorrowableAmount', 'maxTierValue']);
2627
2691
  const marginCurrency = this.safeString2(item, 'coin', 'baseCoin');
2628
2692
  const currencyId = (marginCurrency !== undefined) ? marginCurrency : market['base'];
2629
2693
  const marketId = this.safeString(item, 'symbol');
@@ -2633,7 +2697,7 @@ export default class bitget extends Exchange {
2633
2697
  'currency': this.safeCurrencyCode(currencyId),
2634
2698
  'minNotional': minNotional,
2635
2699
  'maxNotional': maxNotional,
2636
- 'maintenanceMarginRate': this.safeNumber2(item, 'keepMarginRate', 'maintainMarginRate'),
2700
+ 'maintenanceMarginRate': this.safeNumberN(item, ['keepMarginRate', 'maintainMarginRate', 'mmr']),
2637
2701
  'maxLeverage': this.safeNumber(item, 'leverage'),
2638
2702
  'info': item,
2639
2703
  });
@@ -2992,9 +3056,11 @@ export default class bitget extends Exchange {
2992
3056
  * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
2993
3057
  * @see https://www.bitget.com/api-doc/spot/market/Get-Orderbook
2994
3058
  * @see https://www.bitget.com/api-doc/contract/market/Get-Merge-Depth
3059
+ * @see https://www.bitget.com/api-doc/uta/public/OrderBook
2995
3060
  * @param {string} symbol unified symbol of the market to fetch the order book for
2996
3061
  * @param {int} [limit] the maximum amount of order book entries to return
2997
3062
  * @param {object} [params] extra parameters specific to the exchange API endpoint
3063
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
2998
3064
  * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
2999
3065
  */
3000
3066
  async fetchOrderBook(symbol, limit = undefined, params = {}) {
@@ -3006,13 +3072,19 @@ export default class bitget extends Exchange {
3006
3072
  if (limit !== undefined) {
3007
3073
  request['limit'] = limit;
3008
3074
  }
3075
+ let productType = undefined;
3076
+ [productType, params] = this.handleProductTypeAndParams(market, params);
3009
3077
  let response = undefined;
3010
- if (market['spot']) {
3078
+ let uta = undefined;
3079
+ [uta, params] = this.handleOptionAndParams(params, 'fetchOrderBook', 'uta', false);
3080
+ if (uta) {
3081
+ request['category'] = productType;
3082
+ response = await this.publicUtaGetV3MarketOrderbook(this.extend(request, params));
3083
+ }
3084
+ else if (market['spot']) {
3011
3085
  response = await this.publicSpotGetV2SpotMarketOrderbook(this.extend(request, params));
3012
3086
  }
3013
3087
  else {
3014
- let productType = undefined;
3015
- [productType, params] = this.handleProductTypeAndParams(market, params);
3016
3088
  request['productType'] = productType;
3017
3089
  response = await this.publicMixGetV2MixMarketMergeDepth(this.extend(request, params));
3018
3090
  }
@@ -3028,9 +3100,24 @@ export default class bitget extends Exchange {
3028
3100
  // }
3029
3101
  // }
3030
3102
  //
3103
+ // uta
3104
+ //
3105
+ // {
3106
+ // "code": "00000",
3107
+ // "msg": "success",
3108
+ // "requestTime": 1750329437753,
3109
+ // "data": {
3110
+ // "a": [ [ 104992.60, 0.018411 ] ],
3111
+ // "b":[ [104927.40, 0.229914 ] ],
3112
+ // "ts": "1750329437763"
3113
+ // }
3114
+ // }
3115
+ //
3031
3116
  const data = this.safeValue(response, 'data', {});
3117
+ const bidsKey = uta ? 'b' : 'bids';
3118
+ const asksKey = uta ? 'a' : 'asks';
3032
3119
  const timestamp = this.safeInteger(data, 'ts');
3033
- return this.parseOrderBook(data, market['symbol'], timestamp);
3120
+ return this.parseOrderBook(data, market['symbol'], timestamp, bidsKey, asksKey);
3034
3121
  }
3035
3122
  parseTicker(ticker, market = undefined) {
3036
3123
  //
@@ -3042,7 +3129,7 @@ export default class bitget extends Exchange {
3042
3129
  // "ts": "1695793390482"
3043
3130
  // }
3044
3131
  //
3045
- // spot: fetchTicker, fetchTickers
3132
+ // spot
3046
3133
  //
3047
3134
  // {
3048
3135
  // "open": "37202.46",
@@ -3063,92 +3150,118 @@ export default class bitget extends Exchange {
3063
3150
  // "change24h": "0.00321"
3064
3151
  // }
3065
3152
  //
3066
- // swap and future: fetchTicker
3153
+ // swap and future
3067
3154
  //
3068
3155
  // {
3069
3156
  // "symbol": "BTCUSDT",
3070
- // "lastPr": "37577.2",
3071
- // "askPr": "37577.3",
3072
- // "bidPr": "37577.2",
3073
- // "bidSz": "3.679",
3074
- // "askSz": "0.02",
3075
- // "high24h": "37765",
3076
- // "low24h": "36628.9",
3077
- // "ts": "1700533070359",
3078
- // "change24h": "0.00288",
3079
- // "baseVolume": "108606.181",
3080
- // "quoteVolume": "4051316303.9608",
3081
- // "usdtVolume": "4051316303.9608",
3082
- // "openUtc": "37451.5",
3083
- // "changeUtc24h": "0.00336",
3084
- // "indexPrice": "37574.489253",
3085
- // "fundingRate": "0.0001",
3086
- // "holdingAmount": "53464.529",
3157
+ // "lastPr": "104823.8",
3158
+ // "askPr": "104823.8",
3159
+ // "bidPr": "104823.5",
3160
+ // "bidSz": "0.703",
3161
+ // "askSz": "13.894",
3162
+ // "high24h": "105289.3",
3163
+ // "low24h": "103447.9",
3164
+ // "ts": "1750332210370",
3165
+ // "change24h": "0.00471",
3166
+ // "baseVolume": "79089.5675",
3167
+ // "quoteVolume": "8274870921.80485",
3168
+ // "usdtVolume": "8274870921.80485",
3169
+ // "openUtc": "104833",
3170
+ // "changeUtc24h": "-0.00009",
3171
+ // "indexPrice": "104881.953125",
3172
+ // "fundingRate": "-0.000014",
3173
+ // "holdingAmount": "7452.6421",
3087
3174
  // "deliveryStartTime": null,
3088
3175
  // "deliveryTime": null,
3089
3176
  // "deliveryStatus": "",
3090
- // "open24h": "37235.7"
3177
+ // "open24h": "104332.3",
3178
+ // "markPrice": "104824.2"
3179
+ // }
3180
+ //
3181
+ // spot uta
3182
+ //
3183
+ // {
3184
+ // "category": "SPOT",
3185
+ // "symbol": "BTCUSDT",
3186
+ // "ts": "1750330651972",
3187
+ // "lastPrice": "104900.2",
3188
+ // "openPrice24h": "104321.2",
3189
+ // "highPrice24h": "107956.8",
3190
+ // "lowPrice24h": "103600.1",
3191
+ // "ask1Price": "104945.8",
3192
+ // "bid1Price": "104880.6",
3193
+ // "bid1Size": "0.266534",
3194
+ // "ask1Size": "0.014001",
3195
+ // "price24hPcnt": "0.00555",
3196
+ // "volume24h": "355.941109",
3197
+ // "turnover24h": "37302936.008134"
3091
3198
  // }
3092
3199
  //
3093
- // swap and future: fetchTickers
3200
+ // swap and future uta
3094
3201
  //
3095
3202
  // {
3096
- // "open": "14.9776",
3097
- // "symbol": "LINKUSDT",
3098
- // "high24h": "15.3942",
3099
- // "low24h": "14.3457",
3100
- // "lastPr": "14.3748",
3101
- // "quoteVolume": "7008612.4299",
3102
- // "baseVolume": "469908.8523",
3103
- // "usdtVolume": "7008612.42986561",
3104
- // "ts": "1700533772309",
3105
- // "bidPr": "14.375",
3106
- // "askPr": "14.3769",
3107
- // "bidSz": "50.004",
3108
- // "askSz": "0.7647",
3109
- // "openUtc": "14.478",
3110
- // "changeUtc24h": "-0.00713",
3111
- // "change24h": "-0.04978"
3203
+ // "category": "USDT-FUTURES",
3204
+ // "symbol": "BTCUSDT",
3205
+ // "ts": "1750332730472",
3206
+ // "lastPrice": "104738",
3207
+ // "openPrice24h": "104374",
3208
+ // "highPrice24h": "105289.3",
3209
+ // "lowPrice24h": "103447.9",
3210
+ // "ask1Price": "104738",
3211
+ // "bid1Price": "104737.7",
3212
+ // "bid1Size": "2.036",
3213
+ // "ask1Size": "8.094",
3214
+ // "price24hPcnt": "0.00349",
3215
+ // "volume24h": "79101.6477",
3216
+ // "turnover24h": "8276293391.45973",
3217
+ // "indexPrice": "104785.956168",
3218
+ // "markPrice": "104738",
3219
+ // "fundingRate": "-0.000007",
3220
+ // "openInterest": "7465.5938",
3221
+ // "deliveryStartTime": "",
3222
+ // "deliveryTime": "",
3223
+ // "deliveryStatus": ""
3112
3224
  // }
3113
3225
  //
3114
3226
  const marketId = this.safeString(ticker, 'symbol');
3115
- const close = this.safeString(ticker, 'lastPr');
3227
+ const close = this.safeString2(ticker, 'lastPr', 'lastPrice');
3116
3228
  const timestamp = this.safeIntegerOmitZero(ticker, 'ts'); // exchange bitget provided 0
3117
3229
  const change = this.safeString(ticker, 'change24h');
3118
- const open24 = this.safeString2(ticker, 'open24', 'open24h');
3119
- const open = this.safeString(ticker, 'open');
3120
- let symbol;
3121
- let openValue;
3122
- if (open === undefined) {
3123
- symbol = this.safeSymbol(marketId, market, undefined, 'contract');
3124
- openValue = open24;
3230
+ const category = this.safeString(ticker, 'category');
3231
+ const markPrice = this.safeString(ticker, 'markPrice');
3232
+ let marketType;
3233
+ if ((markPrice !== undefined) && (category !== 'SPOT')) {
3234
+ marketType = 'contract';
3125
3235
  }
3126
3236
  else {
3127
- symbol = this.safeSymbol(marketId, market, undefined, 'spot');
3128
- openValue = open;
3237
+ marketType = 'spot';
3238
+ }
3239
+ let percentage = this.safeString(ticker, 'price24hPcnt');
3240
+ if (percentage === undefined) {
3241
+ percentage = Precise.stringMul(change, '100');
3129
3242
  }
3130
3243
  return this.safeTicker({
3131
- 'symbol': symbol,
3244
+ 'symbol': this.safeSymbol(marketId, market, undefined, marketType),
3132
3245
  'timestamp': timestamp,
3133
3246
  'datetime': this.iso8601(timestamp),
3134
- 'high': this.safeString(ticker, 'high24h'),
3135
- 'low': this.safeString(ticker, 'low24h'),
3136
- 'bid': this.safeString(ticker, 'bidPr'),
3137
- 'bidVolume': this.safeString(ticker, 'bidSz'),
3138
- 'ask': this.safeString(ticker, 'askPr'),
3139
- 'askVolume': this.safeString(ticker, 'askSz'),
3247
+ 'high': this.safeString2(ticker, 'high24h', 'highPrice24h'),
3248
+ 'low': this.safeString2(ticker, 'low24h', 'lowPrice24h'),
3249
+ 'bid': this.safeString2(ticker, 'bidPr', 'bid1Price'),
3250
+ 'bidVolume': this.safeString2(ticker, 'bidSz', 'bid1Size'),
3251
+ 'ask': this.safeString2(ticker, 'askPr', 'ask1Price'),
3252
+ 'askVolume': this.safeString2(ticker, 'askSz', 'ask1Size'),
3140
3253
  'vwap': undefined,
3141
- 'open': openValue,
3254
+ 'open': this.safeStringN(ticker, ['open', 'open24h', 'openPrice24h']),
3142
3255
  'close': close,
3143
3256
  'last': close,
3144
3257
  'previousClose': undefined,
3145
3258
  'change': change,
3146
- 'percentage': Precise.stringMul(change, '100'),
3259
+ 'percentage': percentage,
3147
3260
  'average': undefined,
3148
- 'baseVolume': this.safeString(ticker, 'baseVolume'),
3149
- 'quoteVolume': this.safeString(ticker, 'quoteVolume'),
3261
+ 'baseVolume': this.safeString2(ticker, 'baseVolume', 'volume24h'),
3262
+ 'quoteVolume': this.safeString2(ticker, 'quoteVolume', 'turnover24h'),
3150
3263
  'indexPrice': this.safeString(ticker, 'indexPrice'),
3151
- 'markPrice': this.safeString(ticker, 'markPrice'),
3264
+ 'markPrice': markPrice,
3152
3265
  'info': ticker,
3153
3266
  }, market);
3154
3267
  }
@@ -3158,8 +3271,10 @@ export default class bitget extends Exchange {
3158
3271
  * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
3159
3272
  * @see https://www.bitget.com/api-doc/spot/market/Get-Tickers
3160
3273
  * @see https://www.bitget.com/api-doc/contract/market/Get-Ticker
3274
+ * @see https://www.bitget.com/api-doc/uta/public/Tickers
3161
3275
  * @param {string} symbol unified symbol of the market to fetch the ticker for
3162
3276
  * @param {object} [params] extra parameters specific to the exchange API endpoint
3277
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
3163
3278
  * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
3164
3279
  */
3165
3280
  async fetchTicker(symbol, params = {}) {
@@ -3168,13 +3283,19 @@ export default class bitget extends Exchange {
3168
3283
  const request = {
3169
3284
  'symbol': market['id'],
3170
3285
  };
3286
+ let productType = undefined;
3287
+ [productType, params] = this.handleProductTypeAndParams(market, params);
3171
3288
  let response = undefined;
3172
- if (market['spot']) {
3289
+ let uta = undefined;
3290
+ [uta, params] = this.handleOptionAndParams(params, 'fetchTicker', 'uta', false);
3291
+ if (uta) {
3292
+ request['category'] = productType;
3293
+ response = await this.publicUtaGetV3MarketTickers(this.extend(request, params));
3294
+ }
3295
+ else if (market['spot']) {
3173
3296
  response = await this.publicSpotGetV2SpotMarketTickers(this.extend(request, params));
3174
3297
  }
3175
3298
  else {
3176
- let productType = undefined;
3177
- [productType, params] = this.handleProductTypeAndParams(market, params);
3178
3299
  request['productType'] = productType;
3179
3300
  response = await this.publicMixGetV2MixMarketTicker(this.extend(request, params));
3180
3301
  }
@@ -3209,34 +3330,94 @@ export default class bitget extends Exchange {
3209
3330
  //
3210
3331
  // swap and future
3211
3332
  //
3212
- // {
3333
+ // {
3213
3334
  // "code": "00000",
3214
3335
  // "msg": "success",
3215
- // "requestTime": 1700533070357,
3336
+ // "requestTime": 1750332210369,
3216
3337
  // "data": [
3217
3338
  // {
3218
3339
  // "symbol": "BTCUSDT",
3219
- // "lastPr": "37577.2",
3220
- // "askPr": "37577.3",
3221
- // "bidPr": "37577.2",
3222
- // "bidSz": "3.679",
3223
- // "askSz": "0.02",
3224
- // "high24h": "37765",
3225
- // "low24h": "36628.9",
3226
- // "ts": "1700533070359",
3227
- // "change24h": "0.00288",
3228
- // "baseVolume": "108606.181",
3229
- // "quoteVolume": "4051316303.9608",
3230
- // "usdtVolume": "4051316303.9608",
3231
- // "openUtc": "37451.5",
3232
- // "changeUtc24h": "0.00336",
3233
- // "indexPrice": "37574.489253",
3234
- // "fundingRate": "0.0001",
3235
- // "holdingAmount": "53464.529",
3340
+ // "lastPr": "104823.8",
3341
+ // "askPr": "104823.8",
3342
+ // "bidPr": "104823.5",
3343
+ // "bidSz": "0.703",
3344
+ // "askSz": "13.894",
3345
+ // "high24h": "105289.3",
3346
+ // "low24h": "103447.9",
3347
+ // "ts": "1750332210370",
3348
+ // "change24h": "0.00471",
3349
+ // "baseVolume": "79089.5675",
3350
+ // "quoteVolume": "8274870921.80485",
3351
+ // "usdtVolume": "8274870921.80485",
3352
+ // "openUtc": "104833",
3353
+ // "changeUtc24h": "-0.00009",
3354
+ // "indexPrice": "104881.953125",
3355
+ // "fundingRate": "-0.000014",
3356
+ // "holdingAmount": "7452.6421",
3236
3357
  // "deliveryStartTime": null,
3237
3358
  // "deliveryTime": null,
3238
3359
  // "deliveryStatus": "",
3239
- // "open24h": "37235.7"
3360
+ // "open24h": "104332.3",
3361
+ // "markPrice": "104824.2"
3362
+ // }
3363
+ // ]
3364
+ // }
3365
+ //
3366
+ // spot uta
3367
+ //
3368
+ // {
3369
+ // "code": "00000",
3370
+ // "msg": "success",
3371
+ // "requestTime": 1750330653575,
3372
+ // "data": [
3373
+ // {
3374
+ // "category": "SPOT",
3375
+ // "symbol": "BTCUSDT",
3376
+ // "ts": "1750330651972",
3377
+ // "lastPrice": "104900.2",
3378
+ // "openPrice24h": "104321.2",
3379
+ // "highPrice24h": "107956.8",
3380
+ // "lowPrice24h": "103600.1",
3381
+ // "ask1Price": "104945.8",
3382
+ // "bid1Price": "104880.6",
3383
+ // "bid1Size": "0.266534",
3384
+ // "ask1Size": "0.014001",
3385
+ // "price24hPcnt": "0.00555",
3386
+ // "volume24h": "355.941109",
3387
+ // "turnover24h": "37302936.008134"
3388
+ // }
3389
+ // ]
3390
+ // }
3391
+ //
3392
+ // swap and future uta
3393
+ //
3394
+ // {
3395
+ // "code": "00000",
3396
+ // "msg": "success",
3397
+ // "requestTime": 1750332731203,
3398
+ // "data": [
3399
+ // {
3400
+ // "category": "USDT-FUTURES",
3401
+ // "symbol": "BTCUSDT",
3402
+ // "ts": "1750332730472",
3403
+ // "lastPrice": "104738",
3404
+ // "openPrice24h": "104374",
3405
+ // "highPrice24h": "105289.3",
3406
+ // "lowPrice24h": "103447.9",
3407
+ // "ask1Price": "104738",
3408
+ // "bid1Price": "104737.7",
3409
+ // "bid1Size": "2.036",
3410
+ // "ask1Size": "8.094",
3411
+ // "price24hPcnt": "0.00349",
3412
+ // "volume24h": "79101.6477",
3413
+ // "turnover24h": "8276293391.45973",
3414
+ // "indexPrice": "104785.956168",
3415
+ // "markPrice": "104738",
3416
+ // "fundingRate": "-0.000007",
3417
+ // "openInterest": "7465.5938",
3418
+ // "deliveryStartTime": "",
3419
+ // "deliveryTime": "",
3420
+ // "deliveryStatus": ""
3240
3421
  // }
3241
3422
  // ]
3242
3423
  // }
@@ -3278,8 +3459,10 @@ export default class bitget extends Exchange {
3278
3459
  * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
3279
3460
  * @see https://www.bitget.com/api-doc/spot/market/Get-Tickers
3280
3461
  * @see https://www.bitget.com/api-doc/contract/market/Get-All-Symbol-Ticker
3462
+ * @see https://www.bitget.com/api-doc/uta/public/Tickers
3281
3463
  * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
3282
3464
  * @param {object} [params] extra parameters specific to the exchange API endpoint
3465
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
3283
3466
  * @param {string} [params.subType] *contract only* 'linear', 'inverse'
3284
3467
  * @param {string} [params.productType] *contract only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
3285
3468
  * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
@@ -3302,7 +3485,17 @@ export default class bitget extends Exchange {
3302
3485
  let productType = undefined;
3303
3486
  [productType, params] = this.handleProductTypeAndParams(market, params);
3304
3487
  // only if passedSubType && productType is undefined, then use spot
3305
- if (type === 'spot' && passedSubType === undefined) {
3488
+ let uta = undefined;
3489
+ [uta, params] = this.handleOptionAndParams(params, 'fetchTickers', 'uta', false);
3490
+ if (uta) {
3491
+ const symbolsLength = symbols.length;
3492
+ if ((symbols !== undefined) && (symbolsLength === 1)) {
3493
+ request['symbol'] = market['id'];
3494
+ }
3495
+ request['category'] = productType;
3496
+ response = await this.publicUtaGetV3MarketTickers(this.extend(request, params));
3497
+ }
3498
+ else if (type === 'spot' && passedSubType === undefined) {
3306
3499
  response = await this.publicSpotGetV2SpotMarketTickers(this.extend(request, params));
3307
3500
  }
3308
3501
  else {
@@ -3366,6 +3559,65 @@ export default class bitget extends Exchange {
3366
3559
  // ]
3367
3560
  // }
3368
3561
  //
3562
+ // spot uta
3563
+ //
3564
+ // {
3565
+ // "code": "00000",
3566
+ // "msg": "success",
3567
+ // "requestTime": 1750330653575,
3568
+ // "data": [
3569
+ // {
3570
+ // "category": "SPOT",
3571
+ // "symbol": "BTCUSDT",
3572
+ // "ts": "1750330651972",
3573
+ // "lastPrice": "104900.2",
3574
+ // "openPrice24h": "104321.2",
3575
+ // "highPrice24h": "107956.8",
3576
+ // "lowPrice24h": "103600.1",
3577
+ // "ask1Price": "104945.8",
3578
+ // "bid1Price": "104880.6",
3579
+ // "bid1Size": "0.266534",
3580
+ // "ask1Size": "0.014001",
3581
+ // "price24hPcnt": "0.00555",
3582
+ // "volume24h": "355.941109",
3583
+ // "turnover24h": "37302936.008134"
3584
+ // }
3585
+ // ]
3586
+ // }
3587
+ //
3588
+ // swap and future uta
3589
+ //
3590
+ // {
3591
+ // "code": "00000",
3592
+ // "msg": "success",
3593
+ // "requestTime": 1750332731203,
3594
+ // "data": [
3595
+ // {
3596
+ // "category": "USDT-FUTURES",
3597
+ // "symbol": "BTCUSDT",
3598
+ // "ts": "1750332730472",
3599
+ // "lastPrice": "104738",
3600
+ // "openPrice24h": "104374",
3601
+ // "highPrice24h": "105289.3",
3602
+ // "lowPrice24h": "103447.9",
3603
+ // "ask1Price": "104738",
3604
+ // "bid1Price": "104737.7",
3605
+ // "bid1Size": "2.036",
3606
+ // "ask1Size": "8.094",
3607
+ // "price24hPcnt": "0.00349",
3608
+ // "volume24h": "79101.6477",
3609
+ // "turnover24h": "8276293391.45973",
3610
+ // "indexPrice": "104785.956168",
3611
+ // "markPrice": "104738",
3612
+ // "fundingRate": "-0.000007",
3613
+ // "openInterest": "7465.5938",
3614
+ // "deliveryStartTime": "",
3615
+ // "deliveryTime": "",
3616
+ // "deliveryStatus": ""
3617
+ // }
3618
+ // ]
3619
+ // }
3620
+ //
3369
3621
  const data = this.safeList(response, 'data', []);
3370
3622
  return this.parseTickers(data, symbols);
3371
3623
  }
@@ -3452,19 +3704,53 @@ export default class bitget extends Exchange {
3452
3704
  // "cTime": "1700720700342"
3453
3705
  // }
3454
3706
  //
3707
+ // uta fetchTrades
3708
+ //
3709
+ // {
3710
+ // "execId": "1319896716324937729",
3711
+ // "price": "105909.1",
3712
+ // "size": "6.3090",
3713
+ // "side": "sell",
3714
+ // "ts": "1750413820344"
3715
+ // }
3716
+ //
3717
+ // uta fetchMyTrades
3718
+ //
3719
+ // {
3720
+ // "execId": "1322441401010528257",
3721
+ // "orderId": "1322441400976261120",
3722
+ // "category": "USDT-FUTURES",
3723
+ // "symbol": "BTCUSDT",
3724
+ // "orderType": "market",
3725
+ // "side": "sell",
3726
+ // "execPrice": "107005.4",
3727
+ // "execQty": "0.0001",
3728
+ // "execValue": "10.7005",
3729
+ // "tradeScope": "taker",
3730
+ // "feeDetail": [{
3731
+ // "feeCoin": "USDT",
3732
+ // "fee":"0.00642032"
3733
+ // }],
3734
+ // "createdTime": "1751020520451",
3735
+ // "updatedTime": "1751020520458",
3736
+ // "execPnl": "0.00017"
3737
+ // }
3738
+ //
3455
3739
  const marketId = this.safeString(trade, 'symbol');
3456
3740
  const symbol = this.safeSymbol(marketId, market);
3457
- const timestamp = this.safeInteger2(trade, 'cTime', 'ts');
3741
+ const timestamp = this.safeIntegerN(trade, ['cTime', 'ts', 'createdTime']);
3458
3742
  let fee = undefined;
3459
3743
  const feeDetail = this.safeValue(trade, 'feeDetail');
3460
3744
  const posMode = this.safeString(trade, 'posMode');
3461
- const feeStructure = (posMode !== undefined) ? feeDetail[0] : feeDetail;
3745
+ const category = this.safeString(trade, 'category');
3746
+ const isFeeStructure = (posMode !== undefined) || (category !== undefined);
3747
+ const feeStructure = isFeeStructure ? feeDetail[0] : feeDetail;
3462
3748
  if (feeStructure !== undefined) {
3463
3749
  const currencyCode = this.safeCurrencyCode(this.safeString(feeStructure, 'feeCoin'));
3464
3750
  fee = {
3465
3751
  'currency': currencyCode,
3466
3752
  };
3467
- const feeCostString = this.safeString(feeStructure, 'totalFee');
3753
+ const feeCostString = this.safeString2(feeStructure, 'totalFee', 'fee');
3468
3754
  const deduction = this.safeString(feeStructure, 'deduction') === 'yes' ? true : false;
3469
3755
  if (deduction) {
3470
3756
  fee['cost'] = feeCostString;
@@ -3475,15 +3761,15 @@ export default class bitget extends Exchange {
3475
3761
  }
3476
3762
  return this.safeTrade({
3477
3763
  'info': trade,
3478
- 'id': this.safeString(trade, 'tradeId'),
3764
+ 'id': this.safeString2(trade, 'tradeId', 'execId'),
3479
3765
  'order': this.safeString(trade, 'orderId'),
3480
3766
  'symbol': symbol,
3481
3767
  'side': this.safeStringLower(trade, 'side'),
3482
3768
  'type': this.safeString(trade, 'orderType'),
3483
3769
  'takerOrMaker': this.safeString(trade, 'tradeScope'),
3484
- 'price': this.safeString2(trade, 'priceAvg', 'price'),
3485
- 'amount': this.safeString2(trade, 'baseVolume', 'size'),
3486
- 'cost': this.safeString2(trade, 'quoteVolume', 'amount'),
3770
+ 'price': this.safeStringN(trade, ['priceAvg', 'price', 'execPrice']),
3771
+ 'amount': this.safeStringN(trade, ['baseVolume', 'size', 'execQty']),
3772
+ 'cost': this.safeStringN(trade, ['quoteVolume', 'amount', 'execValue']),
3487
3773
  'timestamp': timestamp,
3488
3774
  'datetime': this.iso8601(timestamp),
3489
3775
  'fee': fee,
@@ -3497,10 +3783,12 @@ export default class bitget extends Exchange {
3497
3783
  * @see https://www.bitget.com/api-doc/spot/market/Get-Market-Trades
3498
3784
  * @see https://www.bitget.com/api-doc/contract/market/Get-Recent-Fills
3499
3785
  * @see https://www.bitget.com/api-doc/contract/market/Get-Fills-History
3786
+ * @see https://www.bitget.com/api-doc/uta/public/Fills
3500
3787
  * @param {string} symbol unified symbol of the market to fetch trades for
3501
3788
  * @param {int} [since] timestamp in ms of the earliest trade to fetch
3502
3789
  * @param {int} [limit] the maximum amount of trades to fetch
3503
3790
  * @param {object} [params] extra parameters specific to the exchange API endpoint
3791
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
3504
3792
  * @param {int} [params.until] *only applies to publicSpotGetV2SpotMarketFillsHistory and publicMixGetV2MixMarketFillsHistory* the latest time in ms to fetch trades for
3505
3793
  * @param {boolean} [params.paginate] *only applies to publicSpotGetV2SpotMarketFillsHistory and publicMixGetV2MixMarketFillsHistory* default false, when true will automatically paginate by calling this endpoint multiple times
3506
3794
  * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
@@ -3516,8 +3804,13 @@ export default class bitget extends Exchange {
3516
3804
  let request = {
3517
3805
  'symbol': market['id'],
3518
3806
  };
3807
+ let uta = undefined;
3808
+ [uta, params] = this.handleOptionAndParams(params, 'fetchTrades', 'uta', false);
3519
3809
  if (limit !== undefined) {
3520
- if (market['contract']) {
3810
+ if (uta) {
3811
+ request['limit'] = Math.min(limit, 100);
3812
+ }
3813
+ else if (market['contract']) {
3521
3814
  request['limit'] = Math.min(limit, 1000);
3522
3815
  }
3523
3816
  else {
@@ -3526,7 +3819,20 @@ export default class bitget extends Exchange {
3526
3819
  }
3527
3820
  const options = this.safeValue(this.options, 'fetchTrades', {});
3528
3821
  let response = undefined;
3529
- if (market['spot']) {
3822
+ let productType = undefined;
3823
+ [productType, params] = this.handleProductTypeAndParams(market, params);
3824
+ if (uta) {
3825
+ if (productType === 'SPOT') {
3826
+ let marginMode = undefined;
3827
+ [marginMode, params] = this.handleMarginModeAndParams('fetchTrades', params);
3828
+ if (marginMode !== undefined) {
3829
+ productType = 'MARGIN';
3830
+ }
3831
+ }
3832
+ request['category'] = productType;
3833
+ response = await this.publicUtaGetV3MarketFills(this.extend(request, params));
3834
+ }
3835
+ else if (market['spot']) {
3530
3836
  const spotOptions = this.safeValue(options, 'spot', {});
3531
3837
  const defaultSpotMethod = this.safeString(spotOptions, 'method', 'publicSpotGetV2SpotMarketFillsHistory');
3532
3838
  const spotMethod = this.safeString(params, 'method', defaultSpotMethod);
@@ -3547,8 +3853,6 @@ export default class bitget extends Exchange {
3547
3853
  const defaultSwapMethod = this.safeString(swapOptions, 'method', 'publicMixGetV2MixMarketFillsHistory');
3548
3854
  const swapMethod = this.safeString(params, 'method', defaultSwapMethod);
3549
3855
  params = this.omit(params, 'method');
3550
- let productType = undefined;
3551
- [productType, params] = this.handleProductTypeAndParams(market, params);
3552
3856
  request['productType'] = productType;
3553
3857
  if (swapMethod === 'publicMixGetV2MixMarketFillsHistory') {
3554
3858
  [request, params] = this.handleUntilOption('endTime', request, params);
@@ -3598,6 +3902,23 @@ export default class bitget extends Exchange {
3598
3902
  // ]
3599
3903
  // }
3600
3904
  //
3905
+ // uta
3906
+ //
3907
+ // {
3908
+ // "code": "00000",
3909
+ // "msg": "success",
3910
+ // "requestTime": 1750413823980,
3911
+ // "data": [
3912
+ // {
3913
+ // "execId": "1319896716324937729",
3914
+ // "price": "105909.1",
3915
+ // "size": "6.3090",
3916
+ // "side": "sell",
3917
+ // "ts": "1750413820344"
3918
+ // }
3919
+ // ]
3920
+ // }
3921
+ //
3601
3922
  const data = this.safeList(response, 'data', []);
3602
3923
  return this.parseTrades(data, market, since, limit);
3603
3924
  }
@@ -3789,13 +4110,15 @@ export default class bitget extends Exchange {
3789
4110
  // "1399132.341"
3790
4111
  // ]
3791
4112
  //
4113
+ const inverse = this.safeBool(market, 'inverse');
4114
+ const volumeIndex = inverse ? 6 : 5;
3792
4115
  return [
3793
4116
  this.safeInteger(ohlcv, 0),
3794
4117
  this.safeNumber(ohlcv, 1),
3795
4118
  this.safeNumber(ohlcv, 2),
3796
4119
  this.safeNumber(ohlcv, 3),
3797
4120
  this.safeNumber(ohlcv, 4),
3798
- this.safeNumber(ohlcv, 5),
4121
+ this.safeNumber(ohlcv, volumeIndex),
3799
4122
  ];
3800
4123
  }
3801
4124
  /**
@@ -3808,11 +4131,13 @@ export default class bitget extends Exchange {
3808
4131
  * @see https://www.bitget.com/api-doc/contract/market/Get-History-Candle-Data
3809
4132
  * @see https://www.bitget.com/api-doc/contract/market/Get-History-Index-Candle-Data
3810
4133
  * @see https://www.bitget.com/api-doc/contract/market/Get-History-Mark-Candle-Data
4134
+ * @see https://www.bitget.com/api-doc/uta/public/Get-Candle-Data
3811
4135
  * @param {string} symbol unified symbol of the market to fetch OHLCV data for
3812
4136
  * @param {string} timeframe the length of time each candle represents
3813
4137
  * @param {int} [since] timestamp in ms of the earliest candle to fetch
3814
4138
  * @param {int} [limit] the maximum amount of candles to fetch
3815
4139
  * @param {object} [params] extra parameters specific to the exchange API endpoint
4140
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
3816
4141
  * @param {int} [params.until] timestamp in ms of the latest candle to fetch
3817
4142
  * @param {boolean} [params.useHistoryEndpoint] whether to force to use historical endpoint (it has max limit of 200)
3818
4143
  * @param {boolean} [params.useHistoryEndpointForPagination] whether to force to use historical endpoint for pagination (default true)
@@ -3834,12 +4159,22 @@ export default class bitget extends Exchange {
3834
4159
  return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, limitForPagination);
3835
4160
  }
3836
4161
  const market = this.market(symbol);
3837
- const marketType = market['spot'] ? 'spot' : 'swap';
3838
- const timeframes = this.options['timeframes'][marketType];
3839
4162
  const request = {
3840
4163
  'symbol': market['id'],
3841
- 'granularity': this.safeString(timeframes, timeframe, timeframe),
3842
4164
  };
4165
+ let marketType = undefined;
4166
+ let timeframes = undefined;
4167
+ let uta = undefined;
4168
+ [uta, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'uta', false);
4169
+ if (uta) {
4170
+ timeframes = this.options['timeframes']['uta'];
4171
+ request['interval'] = this.safeString(timeframes, timeframe, timeframe);
4172
+ }
4173
+ else {
4174
+ marketType = market['spot'] ? 'spot' : 'swap';
4175
+ timeframes = this.options['timeframes'][marketType];
4176
+ request['granularity'] = this.safeString(timeframes, timeframe, timeframe);
4177
+ }
3843
4178
  const msInDay = 86400000;
3844
4179
  const now = this.milliseconds();
3845
4180
  const duration = this.parseTimeframe(timeframe) * 1000;
@@ -3909,7 +4244,23 @@ export default class bitget extends Exchange {
3909
4244
  request['limit'] = limit;
3910
4245
  // make request
3911
4246
  let response = undefined;
3912
- if (market['spot']) {
4247
+ let productType = undefined;
4248
+ let priceType = undefined;
4249
+ [priceType, params] = this.handleParamString(params, 'price');
4250
+ [productType, params] = this.handleProductTypeAndParams(market, params);
4251
+ if (uta) {
4252
+ if (priceType !== undefined) {
4253
+ if (priceType === 'mark') {
4254
+ request['type'] = 'MARK';
4255
+ }
4256
+ else if (priceType === 'index') {
4257
+ request['type'] = 'INDEX';
4258
+ }
4259
+ }
4260
+ request['category'] = productType;
4261
+ response = await this.publicUtaGetV3MarketCandles(this.extend(request, params));
4262
+ }
4263
+ else if (market['spot']) {
3913
4264
  // checks if we need history endpoint
3914
4265
  if (historicalEndpointNeeded) {
3915
4266
  response = await this.publicSpotGetV2SpotMarketHistoryCandles(this.extend(request, params));
@@ -3923,10 +4274,6 @@ export default class bitget extends Exchange {
3923
4274
  }
3924
4275
  }
3925
4276
  else {
3926
- let priceType = undefined;
3927
- [priceType, params] = this.handleParamString(params, 'price');
3928
- let productType = undefined;
3929
- [productType, params] = this.handleProductTypeAndParams(market, params);
3930
4277
  request['productType'] = productType;
3931
4278
  const extended = this.extend(request, params);
3932
4279
  if (!historicalEndpointNeeded && (priceType === 'mark' || priceType === 'index')) {
@@ -3974,8 +4321,10 @@ export default class bitget extends Exchange {
3974
4321
  * @see https://www.bitget.com/api-doc/margin/isolated/account/Get-Isolated-Assets
3975
4322
  * @see https://bitgetlimited.github.io/apidoc/en/margin/#get-cross-assets
3976
4323
  * @see https://bitgetlimited.github.io/apidoc/en/margin/#get-isolated-assets
4324
+ * @see https://www.bitget.com/api-doc/uta/account/Get-Account
3977
4325
  * @param {object} [params] extra parameters specific to the exchange API endpoint
3978
4326
  * @param {string} [params.productType] *contract only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
4327
+ * @param {string} [params.uta] set to true for the unified trading account (uta), defaults to false
3979
4328
  * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
3980
4329
  */
3981
4330
  async fetchBalance(params = {}) {
@@ -3984,9 +4333,17 @@ export default class bitget extends Exchange {
3984
4333
  let marketType = undefined;
3985
4334
  let marginMode = undefined;
3986
4335
  let response = undefined;
4336
+ let uta = undefined;
4337
+ [uta, params] = this.handleOptionAndParams(params, 'fetchBalance', 'uta', false);
3987
4338
  [marketType, params] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);
3988
4339
  [marginMode, params] = this.handleMarginModeAndParams('fetchBalance', params);
3989
- if ((marketType === 'swap') || (marketType === 'future')) {
4340
+ if (uta) {
4341
+ response = await this.privateUtaGetV3AccountAssets(this.extend(request, params));
4342
+ const results = this.safeDict(response, 'data', {});
4343
+ const assets = this.safeList(results, 'assets', []);
4344
+ return this.parseUtaBalance(assets);
4345
+ }
4346
+ else if ((marketType === 'swap') || (marketType === 'future')) {
3990
4347
  let productType = undefined;
3991
4348
  [productType, params] = this.handleProductTypeAndParams(undefined, params);
3992
4349
  request['productType'] = productType;
@@ -4091,9 +4448,67 @@ export default class bitget extends Exchange {
4091
4448
  // ]
4092
4449
  // }
4093
4450
  //
4451
+ // uta
4452
+ //
4453
+ // {
4454
+ // "code": "00000",
4455
+ // "msg": "success",
4456
+ // "requestTime": 1749980065089,
4457
+ // "data": {
4458
+ // "accountEquity": "11.13919278",
4459
+ // "usdtEquity": "11.13921165",
4460
+ // "btcEquity": "0.00011256",
4461
+ // "unrealisedPnl": "0",
4462
+ // "usdtUnrealisedPnl": "0",
4463
+ // "btcUnrealizedPnl": "0",
4464
+ // "effEquity": "6.19299777",
4465
+ // "mmr": "0",
4466
+ // "imr": "0",
4467
+ // "mgnRatio": "0",
4468
+ // "positionMgnRatio": "0",
4469
+ // "assets": [
4470
+ // {
4471
+ // "coin": "USDT",
4472
+ // "equity": "6.19300826",
4473
+ // "usdValue": "6.19299777",
4474
+ // "balance": "6.19300826",
4475
+ // "available": "6.19300826",
4476
+ // "debt": "0",
4477
+ // "locked": "0"
4478
+ // }
4479
+ // ]
4480
+ // }
4481
+ // }
4482
+ //
4094
4483
  const data = this.safeValue(response, 'data', []);
4095
4484
  return this.parseBalance(data);
4096
4485
  }
4486
+ parseUtaBalance(balance) {
4487
+ const result = { 'info': balance };
4488
+ //
4489
+ // {
4490
+ // "coin": "USDT",
4491
+ // "equity": "6.19300826",
4492
+ // "usdValue": "6.19299777",
4493
+ // "balance": "6.19300826",
4494
+ // "available": "6.19300826",
4495
+ // "debt": "0",
4496
+ // "locked": "0"
4497
+ // }
4498
+ //
4499
+ for (let i = 0; i < balance.length; i++) {
4500
+ const entry = balance[i];
4501
+ const account = this.account();
4502
+ const currencyId = this.safeString(entry, 'coin');
4503
+ const code = this.safeCurrencyCode(currencyId);
4504
+ account['debt'] = this.safeString(entry, 'debt');
4505
+ account['used'] = this.safeString(entry, 'locked');
4506
+ account['free'] = this.safeString(entry, 'available');
4507
+ account['total'] = this.safeString(entry, 'balance');
4508
+ result[code] = account;
4509
+ }
4510
+ return this.safeBalance(result);
4511
+ }
4097
4512
  parseBalance(balance) {
4098
4513
  const result = { 'info': balance };
4099
4514
  //
@@ -4232,7 +4647,7 @@ export default class bitget extends Exchange {
4232
4647
  // },
4233
4648
  // ]
4234
4649
  //
4235
- // spot, swap, future and spot margin: cancelOrder, cancelOrders
4650
+ // spot, swap, future, spot margin and uta: cancelOrder, cancelOrders, cancelAllOrders
4236
4651
  //
4237
4652
  // {
4238
4653
  // "orderId": "1098758604547850241",
@@ -4361,6 +4776,66 @@ export default class bitget extends Exchange {
4361
4776
  // "stopLossTriggerType": "fill_price",
4362
4777
  // }
4363
4778
  //
4779
+ // uta: fetchOrder, fetchOpenOrders, fetchCanceledAndClosedOrders
4780
+ //
4781
+ // {
4782
+ // "orderId": "1320244799629316096",
4783
+ // "clientOid": "1320244799633510400",
4784
+ // "category": "USDT-FUTURES",
4785
+ // "symbol": "BTCUSDT",
4786
+ // "orderType": "limit",
4787
+ // "side": "buy",
4788
+ // "price": "50000",
4789
+ // "qty": "0.001",
4790
+ // "amount": "0",
4791
+ // "cumExecQty": "0",
4792
+ // "cumExecValue": "0",
4793
+ // "avgPrice": "0",
4794
+ // "timeInForce": "gtc",
4795
+ // "orderStatus": "live",
4796
+ // "posSide": "long",
4797
+ // "holdMode": "hedge_mode",
4798
+ // "reduceOnly": "NO",
4799
+ // "feeDetail": [{
4800
+ // "feeCoin": "",
4801
+ // "fee": ""
4802
+ // }],
4803
+ // "createdTime": "1750496809871",
4804
+ // "updatedTime": "1750496809886",
4805
+ // "cancelReason": "",
4806
+ // "execType": "normal",
4807
+ // "stpMode": "none",
4808
+ // "tpTriggerBy": null,
4809
+ // "slTriggerBy": null,
4810
+ // "takeProfit": null,
4811
+ // "stopLoss": null,
4812
+ // "tpOrderType": null,
4813
+ // "slOrderType": null,
4814
+ // "tpLimitPrice": null,
4815
+ // "slLimitPrice": null
4816
+ // }
4817
+ //
4818
+ // uta trigger: fetchClosedOrders, fetchCanceledOrders
4819
+ //
4820
+ // {
4821
+ // "orderId": "1330984742276198400",
4822
+ // "clientOid": "1330984742276198400",
4823
+ // "symbol": "BTCUSDT",
4824
+ // "category": "USDT-FUTURES",
4825
+ // "qty": "0.001",
4826
+ // "posSide": "long",
4827
+ // "tpTriggerBy": "market",
4828
+ // "slTriggerBy": "mark",
4829
+ // "takeProfit": "",
4830
+ // "stopLoss": "112000",
4831
+ // "tpOrderType": "market",
4832
+ // "slOrderType": "limit",
4833
+ // "tpLimitPrice": "",
4834
+ // "slLimitPrice": "111000",
4835
+ // "createdTime": "1753057411736",
4836
+ // "updatedTime": "1753058267412"
4837
+ // }
4838
+ //
4364
4839
  const errorMessage = this.safeString(order, 'errorMsg');
4365
4840
  if (errorMessage !== undefined) {
4366
4841
  return this.safeOrder({
@@ -4370,17 +4845,17 @@ export default class bitget extends Exchange {
4370
4845
  'status': 'rejected',
4371
4846
  }, market);
4372
4847
  }
4373
- const isContractOrder = ('posSide' in order);
4848
+ const posSide = this.safeString(order, 'posSide');
4849
+ const isContractOrder = (posSide !== undefined);
4374
4850
  let marketType = isContractOrder ? 'contract' : 'spot';
4375
4851
  if (market !== undefined) {
4376
4852
  marketType = market['type'];
4377
4853
  }
4378
4854
  const marketId = this.safeString(order, 'symbol');
4379
4855
  market = this.safeMarket(marketId, market, undefined, marketType);
4380
- const timestamp = this.safeInteger2(order, 'cTime', 'ctime');
4381
- const updateTimestamp = this.safeInteger(order, 'uTime');
4382
- let rawStatus = this.safeString2(order, 'status', 'state');
4383
- rawStatus = this.safeString(order, 'planStatus', rawStatus);
4856
+ const timestamp = this.safeIntegerN(order, ['cTime', 'ctime', 'createdTime']);
4857
+ const updateTimestamp = this.safeInteger2(order, 'uTime', 'updatedTime');
4858
+ const rawStatus = this.safeStringN(order, ['status', 'state', 'orderStatus', 'planStatus']);
4384
4859
  let fee = undefined;
4385
4860
  const feeCostString = this.safeString(order, 'fee');
4386
4861
  if (feeCostString !== undefined) {
@@ -4391,28 +4866,39 @@ export default class bitget extends Exchange {
4391
4866
  };
4392
4867
  }
4393
4868
  const feeDetail = this.safeValue(order, 'feeDetail');
4394
- if (feeDetail !== undefined) {
4395
- const parsedFeeDetail = JSON.parse(feeDetail);
4396
- const feeValues = Object.values(parsedFeeDetail);
4397
- let feeObject = undefined;
4398
- for (let i = 0; i < feeValues.length; i++) {
4399
- const feeValue = feeValues[i];
4400
- if (this.safeValue(feeValue, 'feeCoinCode') !== undefined) {
4401
- feeObject = feeValue;
4402
- break;
4403
- }
4404
- }
4869
+ const uta = this.safeString(order, 'category') !== undefined;
4870
+ if (uta) {
4871
+ const feeResult = this.safeDict(feeDetail, 0, {});
4872
+ const utaFee = this.safeString(feeResult, 'fee');
4405
4873
  fee = {
4406
- 'cost': this.parseNumber(Precise.stringNeg(this.safeString(feeObject, 'totalFee'))),
4407
- 'currency': this.safeCurrencyCode(this.safeString(feeObject, 'feeCoinCode')),
4874
+ 'cost': this.parseNumber(Precise.stringNeg(utaFee)),
4875
+ 'currency': market['settle'],
4408
4876
  };
4409
4877
  }
4410
- let postOnly = undefined;
4411
- let timeInForce = this.safeStringUpper(order, 'force');
4412
- if (timeInForce === 'POST_ONLY') {
4413
- postOnly = true;
4414
- timeInForce = 'PO';
4415
- }
4878
+ else {
4879
+ if (feeDetail !== undefined) {
4880
+ const parsedFeeDetail = JSON.parse(feeDetail);
4881
+ const feeValues = Object.values(parsedFeeDetail);
4882
+ let feeObject = undefined;
4883
+ for (let i = 0; i < feeValues.length; i++) {
4884
+ const feeValue = feeValues[i];
4885
+ if (this.safeValue(feeValue, 'feeCoinCode') !== undefined) {
4886
+ feeObject = feeValue;
4887
+ break;
4888
+ }
4889
+ }
4890
+ fee = {
4891
+ 'cost': this.parseNumber(Precise.stringNeg(this.safeString(feeObject, 'totalFee'))),
4892
+ 'currency': this.safeCurrencyCode(this.safeString(feeObject, 'feeCoinCode')),
4893
+ };
4894
+ }
4895
+ }
4896
+ let postOnly = undefined;
4897
+ let timeInForce = this.safeStringUpper2(order, 'force', 'timeInForce');
4898
+ if (timeInForce === 'POST_ONLY') {
4899
+ postOnly = true;
4900
+ timeInForce = 'PO';
4901
+ }
4416
4902
  let reduceOnly = undefined;
4417
4903
  const reduceOnlyRaw = this.safeString(order, 'reduceOnly');
4418
4904
  if (reduceOnlyRaw !== undefined) {
@@ -4427,7 +4913,7 @@ export default class bitget extends Exchange {
4427
4913
  average = this.safeString(order, 'basePrice');
4428
4914
  }
4429
4915
  else {
4430
- price = this.safeString2(order, 'price', 'executePrice');
4916
+ price = this.safeStringN(order, ['price', 'executePrice', 'slLimitPrice', 'tpLimitPrice']);
4431
4917
  average = this.safeString(order, 'priceAvg');
4432
4918
  }
4433
4919
  let size = undefined;
@@ -4439,8 +4925,8 @@ export default class bitget extends Exchange {
4439
4925
  filled = this.safeString(order, 'size');
4440
4926
  }
4441
4927
  else {
4442
- size = this.safeString(order, 'size');
4443
- filled = this.safeString(order, 'baseVolume');
4928
+ size = this.safeString2(order, 'size', 'qty');
4929
+ filled = this.safeString2(order, 'baseVolume', 'cumExecQty');
4444
4930
  }
4445
4931
  let side = this.safeString(order, 'side');
4446
4932
  const posMode = this.safeString(order, 'posMode');
@@ -4476,8 +4962,8 @@ export default class bitget extends Exchange {
4476
4962
  'postOnly': postOnly,
4477
4963
  'reduceOnly': reduceOnly,
4478
4964
  'triggerPrice': this.safeNumber(order, 'triggerPrice'),
4479
- 'takeProfitPrice': this.safeNumber2(order, 'presetStopSurplusPrice', 'stopSurplusTriggerPrice'),
4480
- 'stopLossPrice': this.safeNumber2(order, 'presetStopLossPrice', 'stopLossTriggerPrice'),
4965
+ 'takeProfitPrice': this.safeNumberN(order, ['presetStopSurplusPrice', 'stopSurplusTriggerPrice', 'takeProfit']),
4966
+ 'stopLossPrice': this.safeNumberN(order, ['presetStopLossPrice', 'stopLossTriggerPrice', 'stopLoss']),
4481
4967
  'status': this.parseOrderStatus(rawStatus),
4482
4968
  'fee': fee,
4483
4969
  'trades': undefined,
@@ -4517,6 +5003,8 @@ export default class bitget extends Exchange {
4517
5003
  * @see https://www.bitget.com/api-doc/contract/plan/Place-Plan-Order
4518
5004
  * @see https://www.bitget.com/api-doc/margin/cross/trade/Cross-Place-Order
4519
5005
  * @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Place-Order
5006
+ * @see https://www.bitget.com/api-doc/uta/trade/Place-Order
5007
+ * @see https://www.bitget.com/api-doc/uta/strategy/Place-Strategy-Order
4520
5008
  * @param {string} symbol unified symbol of the market to create an order in
4521
5009
  * @param {string} type 'market' or 'limit'
4522
5010
  * @param {string} side 'buy' or 'sell'
@@ -4545,6 +5033,8 @@ export default class bitget extends Exchange {
4545
5033
  * @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
4546
5034
  * @param {bool} [params.hedged] *swap and future only* true for hedged mode, false for one way mode, default is false
4547
5035
  * @param {bool} [params.reduceOnly] true or false whether the order is reduce-only
5036
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
5037
+ * @param {string} [params.posSide] *uta only* hedged two-way position side, long or short
4548
5038
  * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
4549
5039
  */
4550
5040
  async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
@@ -4561,31 +5051,44 @@ export default class bitget extends Exchange {
4561
5051
  const isStopLossTriggerOrder = stopLossTriggerPrice !== undefined;
4562
5052
  const isTakeProfitTriggerOrder = takeProfitTriggerPrice !== undefined;
4563
5053
  const isStopLossOrTakeProfitTrigger = isStopLossTriggerOrder || isTakeProfitTriggerOrder;
4564
- const request = this.createOrderRequest(symbol, type, side, amount, price, params);
4565
5054
  let response = undefined;
4566
- if (market['spot']) {
4567
- if (isTriggerOrder) {
4568
- response = await this.privateSpotPostV2SpotTradePlacePlanOrder(request);
4569
- }
4570
- else if (marginMode === 'isolated') {
4571
- response = await this.privateMarginPostV2MarginIsolatedPlaceOrder(request);
4572
- }
4573
- else if (marginMode === 'cross') {
4574
- response = await this.privateMarginPostV2MarginCrossedPlaceOrder(request);
5055
+ let uta = undefined;
5056
+ [uta, params] = this.handleOptionAndParams(params, 'createOrder', 'uta', false);
5057
+ if (uta) {
5058
+ const request = this.createUtaOrderRequest(symbol, type, side, amount, price, params);
5059
+ if (isStopLossOrTakeProfitTrigger) {
5060
+ response = await this.privateUtaPostV3TradePlaceStrategyOrder(request);
4575
5061
  }
4576
5062
  else {
4577
- response = await this.privateSpotPostV2SpotTradePlaceOrder(request);
5063
+ response = await this.privateUtaPostV3TradePlaceOrder(request);
4578
5064
  }
4579
5065
  }
4580
5066
  else {
4581
- if (isTriggerOrder || isTrailingPercentOrder) {
4582
- response = await this.privateMixPostV2MixOrderPlacePlanOrder(request);
4583
- }
4584
- else if (isStopLossOrTakeProfitTrigger) {
4585
- response = await this.privateMixPostV2MixOrderPlaceTpslOrder(request);
5067
+ const request = this.createOrderRequest(symbol, type, side, amount, price, params);
5068
+ if (market['spot']) {
5069
+ if (isTriggerOrder) {
5070
+ response = await this.privateSpotPostV2SpotTradePlacePlanOrder(request);
5071
+ }
5072
+ else if (marginMode === 'isolated') {
5073
+ response = await this.privateMarginPostV2MarginIsolatedPlaceOrder(request);
5074
+ }
5075
+ else if (marginMode === 'cross') {
5076
+ response = await this.privateMarginPostV2MarginCrossedPlaceOrder(request);
5077
+ }
5078
+ else {
5079
+ response = await this.privateSpotPostV2SpotTradePlaceOrder(request);
5080
+ }
4586
5081
  }
4587
5082
  else {
4588
- response = await this.privateMixPostV2MixOrderPlaceOrder(request);
5083
+ if (isTriggerOrder || isTrailingPercentOrder) {
5084
+ response = await this.privateMixPostV2MixOrderPlacePlanOrder(request);
5085
+ }
5086
+ else if (isStopLossOrTakeProfitTrigger) {
5087
+ response = await this.privateMixPostV2MixOrderPlaceTpslOrder(request);
5088
+ }
5089
+ else {
5090
+ response = await this.privateMixPostV2MixOrderPlaceOrder(request);
5091
+ }
4589
5092
  }
4590
5093
  }
4591
5094
  //
@@ -4602,6 +5105,133 @@ export default class bitget extends Exchange {
4602
5105
  const data = this.safeDict(response, 'data', {});
4603
5106
  return this.parseOrder(data, market);
4604
5107
  }
5108
+ createUtaOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
5109
+ const market = this.market(symbol);
5110
+ let productType = undefined;
5111
+ [productType, params] = this.handleProductTypeAndParams(market, params);
5112
+ if (productType === 'SPOT') {
5113
+ let marginMode = undefined;
5114
+ [marginMode, params] = this.handleMarginModeAndParams('createOrder', params);
5115
+ if (marginMode !== undefined) {
5116
+ productType = 'MARGIN';
5117
+ }
5118
+ }
5119
+ const request = {
5120
+ 'category': productType,
5121
+ 'symbol': market['id'],
5122
+ 'qty': this.amountToPrecision(symbol, amount),
5123
+ 'side': side,
5124
+ };
5125
+ const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId');
5126
+ if (clientOrderId !== undefined) {
5127
+ request['clientOid'] = clientOrderId;
5128
+ params = this.omit(params, 'clientOrderId');
5129
+ }
5130
+ const stopLossTriggerPrice = this.safeNumber(params, 'stopLossPrice');
5131
+ const takeProfitTriggerPrice = this.safeNumber(params, 'takeProfitPrice');
5132
+ const stopLoss = this.safeValue(params, 'stopLoss');
5133
+ const takeProfit = this.safeValue(params, 'takeProfit');
5134
+ const isStopLoss = stopLoss !== undefined;
5135
+ const isTakeProfit = takeProfit !== undefined;
5136
+ const isStopLossTrigger = stopLossTriggerPrice !== undefined;
5137
+ const isTakeProfitTrigger = takeProfitTriggerPrice !== undefined;
5138
+ const isStopLossOrTakeProfitTrigger = isStopLossTrigger || isTakeProfitTrigger;
5139
+ if (isStopLossOrTakeProfitTrigger) {
5140
+ if (isStopLossTrigger) {
5141
+ const slType = this.safeString(params, 'slTriggerBy', 'mark');
5142
+ request['slTriggerBy'] = slType;
5143
+ request['stopLoss'] = this.priceToPrecision(symbol, stopLossTriggerPrice);
5144
+ if (price !== undefined) {
5145
+ request['slLimitPrice'] = this.priceToPrecision(symbol, price);
5146
+ request['slOrderType'] = this.safeString(params, 'slOrderType', 'limit');
5147
+ }
5148
+ else {
5149
+ request['slOrderType'] = this.safeString(params, 'slOrderType', 'market');
5150
+ }
5151
+ }
5152
+ else if (isTakeProfitTrigger) {
5153
+ const tpType = this.safeString(params, 'tpTriggerBy', 'mark');
5154
+ request['tpTriggerBy'] = tpType;
5155
+ request['takeProfit'] = this.priceToPrecision(symbol, takeProfitTriggerPrice);
5156
+ if (price !== undefined) {
5157
+ request['tpLimitPrice'] = this.priceToPrecision(symbol, price);
5158
+ request['tpOrderType'] = this.safeString(params, 'tpOrderType', 'limit');
5159
+ }
5160
+ else {
5161
+ request['tpOrderType'] = this.safeString(params, 'tpOrderType', 'market');
5162
+ }
5163
+ }
5164
+ params = this.omit(params, ['stopLossPrice', 'takeProfitPrice']);
5165
+ }
5166
+ else {
5167
+ if (isStopLoss) {
5168
+ const slTriggerPrice = this.safeNumber2(stopLoss, 'triggerPrice', 'stopPrice');
5169
+ const slLimitPrice = this.safeNumber(stopLoss, 'price');
5170
+ request['stopLoss'] = this.priceToPrecision(symbol, slTriggerPrice);
5171
+ if (slLimitPrice !== undefined) {
5172
+ request['slLimitPrice'] = this.priceToPrecision(symbol, slLimitPrice);
5173
+ request['slOrderType'] = this.safeString(params, 'slOrderType', 'limit');
5174
+ }
5175
+ else {
5176
+ request['slOrderType'] = this.safeString(params, 'slOrderType', 'market');
5177
+ }
5178
+ }
5179
+ if (isTakeProfit) {
5180
+ const tpTriggerPrice = this.safeNumber2(takeProfit, 'triggerPrice', 'stopPrice');
5181
+ const tpLimitPrice = this.safeNumber(takeProfit, 'price');
5182
+ request['takeProfit'] = this.priceToPrecision(symbol, tpTriggerPrice);
5183
+ if (tpLimitPrice !== undefined) {
5184
+ request['tpLimitPrice'] = this.priceToPrecision(symbol, tpLimitPrice);
5185
+ request['tpOrderType'] = this.safeString(params, 'tpOrderType', 'limit');
5186
+ }
5187
+ else {
5188
+ request['tpOrderType'] = this.safeString(params, 'tpOrderType', 'market');
5189
+ }
5190
+ }
5191
+ const isMarketOrder = type === 'market';
5192
+ if (!isMarketOrder) {
5193
+ request['price'] = this.priceToPrecision(symbol, price);
5194
+ }
5195
+ request['orderType'] = type;
5196
+ const exchangeSpecificTifParam = this.safeString(params, 'timeInForce');
5197
+ let postOnly = undefined;
5198
+ [postOnly, params] = this.handlePostOnly(isMarketOrder, exchangeSpecificTifParam === 'post_only', params);
5199
+ const defaultTimeInForce = this.safeStringUpper(this.options, 'defaultTimeInForce');
5200
+ const timeInForce = this.safeStringUpper(params, 'timeInForce', defaultTimeInForce);
5201
+ if (postOnly) {
5202
+ request['timeInForce'] = 'post_only';
5203
+ }
5204
+ else if (timeInForce === 'GTC') {
5205
+ request['timeInForce'] = 'gtc';
5206
+ }
5207
+ else if (timeInForce === 'FOK') {
5208
+ request['timeInForce'] = 'fok';
5209
+ }
5210
+ else if (timeInForce === 'IOC') {
5211
+ request['timeInForce'] = 'ioc';
5212
+ }
5213
+ }
5214
+ const reduceOnly = this.safeBool(params, 'reduceOnly', false);
5215
+ let hedged = undefined;
5216
+ [hedged, params] = this.handleParamBool(params, 'hedged', false);
5217
+ if (reduceOnly) {
5218
+ if (hedged || isStopLossOrTakeProfitTrigger) {
5219
+ const reduceOnlyPosSide = (side === 'sell') ? 'long' : 'short';
5220
+ request['posSide'] = reduceOnlyPosSide;
5221
+ }
5222
+ else if (!isStopLossOrTakeProfitTrigger) {
5223
+ request['reduceOnly'] = 'yes';
5224
+ }
5225
+ }
5226
+ else {
5227
+ if (hedged) {
5228
+ const posSide = (side === 'buy') ? 'long' : 'short';
5229
+ request['posSide'] = posSide;
5230
+ }
5231
+ }
5232
+ params = this.omit(params, ['stopLoss', 'takeProfit', 'postOnly', 'reduceOnly', 'hedged']);
5233
+ return this.extend(request, params);
5234
+ }
4605
5235
  createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
4606
5236
  const market = this.market(symbol);
4607
5237
  let marketType = undefined;
@@ -4685,17 +5315,17 @@ export default class bitget extends Exchange {
4685
5315
  request['executePrice'] = this.priceToPrecision(symbol, price);
4686
5316
  }
4687
5317
  if (isStopLoss) {
4688
- const slTriggerPrice = this.safeNumber2(stopLoss, 'triggerPrice', 'stopPrice');
5318
+ const slTriggerPrice = this.safeString2(stopLoss, 'triggerPrice', 'stopPrice');
4689
5319
  request['stopLossTriggerPrice'] = this.priceToPrecision(symbol, slTriggerPrice);
4690
- const slPrice = this.safeNumber(stopLoss, 'price');
5320
+ const slPrice = this.safeString(stopLoss, 'price');
4691
5321
  request['stopLossExecutePrice'] = this.priceToPrecision(symbol, slPrice);
4692
5322
  const slType = this.safeString(stopLoss, 'type', 'mark_price');
4693
5323
  request['stopLossTriggerType'] = slType;
4694
5324
  }
4695
5325
  if (isTakeProfit) {
4696
- const tpTriggerPrice = this.safeNumber2(takeProfit, 'triggerPrice', 'stopPrice');
5326
+ const tpTriggerPrice = this.safeString2(takeProfit, 'triggerPrice', 'stopPrice');
4697
5327
  request['stopSurplusTriggerPrice'] = this.priceToPrecision(symbol, tpTriggerPrice);
4698
- const tpPrice = this.safeNumber(takeProfit, 'price');
5328
+ const tpPrice = this.safeString(takeProfit, 'price');
4699
5329
  request['stopSurplusExecutePrice'] = this.priceToPrecision(symbol, tpPrice);
4700
5330
  const tpType = this.safeString(takeProfit, 'type', 'mark_price');
4701
5331
  request['stopSurplusTriggerType'] = tpType;
@@ -4824,6 +5454,60 @@ export default class bitget extends Exchange {
4824
5454
  }
4825
5455
  return this.extend(request, params);
4826
5456
  }
5457
+ async createUtaOrders(orders, params = {}) {
5458
+ await this.loadMarkets();
5459
+ const ordersRequests = [];
5460
+ let symbol = undefined;
5461
+ let marginMode = undefined;
5462
+ for (let i = 0; i < orders.length; i++) {
5463
+ const rawOrder = orders[i];
5464
+ const marketId = this.safeString(rawOrder, 'symbol');
5465
+ if (symbol === undefined) {
5466
+ symbol = marketId;
5467
+ }
5468
+ else {
5469
+ if (symbol !== marketId) {
5470
+ throw new BadRequest(this.id + ' createOrders() requires all orders to have the same symbol');
5471
+ }
5472
+ }
5473
+ const type = this.safeString(rawOrder, 'type');
5474
+ const side = this.safeString(rawOrder, 'side');
5475
+ const amount = this.safeValue(rawOrder, 'amount');
5476
+ const price = this.safeValue(rawOrder, 'price');
5477
+ const orderParams = this.safeValue(rawOrder, 'params', {});
5478
+ const marginResult = this.handleMarginModeAndParams('createOrders', orderParams);
5479
+ const currentMarginMode = marginResult[0];
5480
+ if (currentMarginMode !== undefined) {
5481
+ if (marginMode === undefined) {
5482
+ marginMode = currentMarginMode;
5483
+ }
5484
+ else {
5485
+ if (marginMode !== currentMarginMode) {
5486
+ throw new BadRequest(this.id + ' createOrders() requires all orders to have the same margin mode (isolated or cross)');
5487
+ }
5488
+ }
5489
+ }
5490
+ const orderRequest = this.createUtaOrderRequest(marketId, type, side, amount, price, orderParams);
5491
+ ordersRequests.push(orderRequest);
5492
+ }
5493
+ const market = this.market(symbol);
5494
+ const response = await this.privateUtaPostV3TradePlaceBatch(ordersRequests);
5495
+ //
5496
+ // {
5497
+ // "code": "00000",
5498
+ // "msg": "success",
5499
+ // "requestTime": 1752810184560,
5500
+ // "data": [
5501
+ // {
5502
+ // "orderId": "1329947796441513984",
5503
+ // "clientOid": "1329947796483457024"
5504
+ // },
5505
+ // ]
5506
+ // }
5507
+ //
5508
+ const data = this.safeList(response, 'data', []);
5509
+ return this.parseOrders(data, market);
5510
+ }
4827
5511
  /**
4828
5512
  * @method
4829
5513
  * @name bitget#createOrders
@@ -4832,12 +5516,19 @@ export default class bitget extends Exchange {
4832
5516
  * @see https://www.bitget.com/api-doc/contract/trade/Batch-Order
4833
5517
  * @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Batch-Order
4834
5518
  * @see https://www.bitget.com/api-doc/margin/cross/trade/Cross-Batch-Order
5519
+ * @see https://www.bitget.com/api-doc/uta/trade/Place-Batch
4835
5520
  * @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
4836
5521
  * @param {object} [params] extra parameters specific to the api endpoint
5522
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
4837
5523
  * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
4838
5524
  */
4839
5525
  async createOrders(orders, params = {}) {
4840
5526
  await this.loadMarkets();
5527
+ let uta = undefined;
5528
+ [uta, params] = this.handleOptionAndParams(params, 'createOrders', 'uta', false);
5529
+ if (uta) {
5530
+ return await this.createUtaOrders(orders, params);
5531
+ }
4841
5532
  const ordersRequests = [];
4842
5533
  let symbol = undefined;
4843
5534
  let marginMode = undefined;
@@ -4936,6 +5627,8 @@ export default class bitget extends Exchange {
4936
5627
  * @see https://www.bitget.com/api-doc/contract/trade/Modify-Order
4937
5628
  * @see https://www.bitget.com/api-doc/contract/plan/Modify-Tpsl-Order
4938
5629
  * @see https://www.bitget.com/api-doc/contract/plan/Modify-Plan-Order
5630
+ * @see https://www.bitget.com/api-doc/uta/trade/Modify-Order
5631
+ * @see https://www.bitget.com/api-doc/uta/strategy/Modify-Strategy-Order
4939
5632
  * @param {string} id cancel order id
4940
5633
  * @param {string} symbol unified symbol of the market to create an order in
4941
5634
  * @param {string} type 'market' or 'limit'
@@ -4957,6 +5650,7 @@ export default class bitget extends Exchange {
4957
5650
  * @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
4958
5651
  * @param {string} [params.trailingTriggerPrice] *swap and future only* the price to trigger a trailing stop order, default uses the price argument
4959
5652
  * @param {string} [params.newTriggerType] *swap and future only* 'fill_price', 'mark_price' or 'index_price'
5653
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
4960
5654
  * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
4961
5655
  */
4962
5656
  async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
@@ -4988,7 +5682,50 @@ export default class bitget extends Exchange {
4988
5682
  }
4989
5683
  params = this.omit(params, ['stopPrice', 'triggerType', 'stopLossPrice', 'takeProfitPrice', 'stopLoss', 'takeProfit', 'clientOrderId', 'trailingTriggerPrice', 'trailingPercent']);
4990
5684
  let response = undefined;
4991
- if (market['spot']) {
5685
+ let productType = undefined;
5686
+ let uta = undefined;
5687
+ [productType, params] = this.handleProductTypeAndParams(market, params);
5688
+ [uta, params] = this.handleOptionAndParams(params, 'editOrder', 'uta', false);
5689
+ if (uta) {
5690
+ if (amount !== undefined) {
5691
+ request['qty'] = this.amountToPrecision(symbol, amount);
5692
+ }
5693
+ if (isStopLossOrder || isTakeProfitOrder) {
5694
+ if (isStopLossOrder) {
5695
+ const slType = this.safeString(params, 'slTriggerBy', 'mark');
5696
+ request['slTriggerBy'] = slType;
5697
+ request['stopLoss'] = this.priceToPrecision(symbol, stopLossPrice);
5698
+ if (price !== undefined) {
5699
+ request['slLimitPrice'] = this.priceToPrecision(symbol, price);
5700
+ request['slOrderType'] = this.safeString(params, 'slOrderType', 'limit');
5701
+ }
5702
+ else {
5703
+ request['slOrderType'] = this.safeString(params, 'slOrderType', 'market');
5704
+ }
5705
+ }
5706
+ else if (isTakeProfitOrder) {
5707
+ const tpType = this.safeString(params, 'tpTriggerBy', 'mark');
5708
+ request['tpTriggerBy'] = tpType;
5709
+ request['takeProfit'] = this.priceToPrecision(symbol, takeProfitPrice);
5710
+ if (price !== undefined) {
5711
+ request['tpLimitPrice'] = this.priceToPrecision(symbol, price);
5712
+ request['tpOrderType'] = this.safeString(params, 'tpOrderType', 'limit');
5713
+ }
5714
+ else {
5715
+ request['tpOrderType'] = this.safeString(params, 'tpOrderType', 'market');
5716
+ }
5717
+ }
5718
+ params = this.omit(params, ['stopLossPrice', 'takeProfitPrice']);
5719
+ response = await this.privateUtaPostV3TradeModifyStrategyOrder(this.extend(request, params));
5720
+ }
5721
+ else {
5722
+ if (price !== undefined) {
5723
+ request['price'] = this.priceToPrecision(symbol, price);
5724
+ }
5725
+ response = await this.privateUtaPostV3TradeModifyOrder(this.extend(request, params));
5726
+ }
5727
+ }
5728
+ else if (market['spot']) {
4992
5729
  if (triggerPrice === undefined) {
4993
5730
  throw new NotSupported(this.id + ' editOrder() only supports plan/trigger spot orders');
4994
5731
  }
@@ -5017,8 +5754,6 @@ export default class bitget extends Exchange {
5017
5754
  throw new NotSupported(this.id + ' editOrder() does not support ' + market['type'] + ' orders');
5018
5755
  }
5019
5756
  request['symbol'] = market['id'];
5020
- let productType = undefined;
5021
- [productType, params] = this.handleProductTypeAndParams(market, params);
5022
5757
  request['productType'] = productType;
5023
5758
  if (!isTakeProfitOrder && !isStopLossOrder) {
5024
5759
  request['newSize'] = this.amountToPrecision(symbol, amount);
@@ -5110,6 +5845,8 @@ export default class bitget extends Exchange {
5110
5845
  * @see https://www.bitget.com/api-doc/contract/plan/Cancel-Plan-Order
5111
5846
  * @see https://www.bitget.com/api-doc/margin/cross/trade/Cross-Cancel-Order
5112
5847
  * @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Cancel-Order
5848
+ * @see https://www.bitget.com/api-doc/uta/trade/Cancel-Order
5849
+ * @see https://www.bitget.com/api-doc/uta/strategy/Cancel-Strategy-Order
5113
5850
  * @param {string} id order id
5114
5851
  * @param {string} symbol unified symbol of the market the order was made in
5115
5852
  * @param {object} [params] extra parameters specific to the exchange API endpoint
@@ -5117,6 +5854,7 @@ export default class bitget extends Exchange {
5117
5854
  * @param {boolean} [params.trigger] set to true for canceling trigger orders
5118
5855
  * @param {string} [params.planType] *swap only* either profit_plan, loss_plan, normal_plan, pos_profit, pos_loss, moving_plan or track_plan
5119
5856
  * @param {boolean} [params.trailing] set to true if you want to cancel a trailing order
5857
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
5120
5858
  * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
5121
5859
  */
5122
5860
  async cancelOrder(id, symbol = undefined, params = {}) {
@@ -5138,7 +5876,18 @@ export default class bitget extends Exchange {
5138
5876
  if (!((market['swap'] || market['future']) && trigger)) {
5139
5877
  request['orderId'] = id;
5140
5878
  }
5141
- if ((market['swap']) || (market['future'])) {
5879
+ let uta = undefined;
5880
+ [uta, params] = this.handleOptionAndParams(params, 'cancelOrder', 'uta', false);
5881
+ if (uta) {
5882
+ request['orderId'] = id;
5883
+ if (trigger) {
5884
+ response = await this.privateUtaPostV3TradeCancelStrategyOrder(this.extend(request, params));
5885
+ }
5886
+ else {
5887
+ response = await this.privateUtaPostV3TradeCancelOrder(this.extend(request, params));
5888
+ }
5889
+ }
5890
+ else if ((market['swap']) || (market['future'])) {
5142
5891
  let productType = undefined;
5143
5892
  [productType, params] = this.handleProductTypeAndParams(market, params);
5144
5893
  request['productType'] = productType;
@@ -5224,17 +5973,66 @@ export default class bitget extends Exchange {
5224
5973
  // }
5225
5974
  // }
5226
5975
  //
5976
+ // uta trigger
5977
+ //
5978
+ // {
5979
+ // "code": "00000",
5980
+ // "msg": "success",
5981
+ // "requestTime": "1753058267399",
5982
+ // "data": null
5983
+ // }
5984
+ //
5227
5985
  const data = this.safeValue(response, 'data', {});
5228
5986
  let order = undefined;
5229
- if ((market['swap'] || market['future']) && trigger) {
5987
+ if ((market['swap'] || market['future']) && trigger && !uta) {
5230
5988
  const orderInfo = this.safeValue(data, 'successList', []);
5231
5989
  order = orderInfo[0];
5232
5990
  }
5233
5991
  else {
5234
- order = data;
5992
+ if (uta && trigger) {
5993
+ order = response;
5994
+ }
5995
+ else {
5996
+ order = data;
5997
+ }
5235
5998
  }
5236
5999
  return this.parseOrder(order, market);
5237
6000
  }
6001
+ async cancelUtaOrders(ids, symbol = undefined, params = {}) {
6002
+ if (symbol === undefined) {
6003
+ throw new ArgumentsRequired(this.id + ' cancelOrders() requires a symbol argument');
6004
+ }
6005
+ await this.loadMarkets();
6006
+ const market = this.market(symbol);
6007
+ let productType = undefined;
6008
+ [productType, params] = this.handleProductTypeAndParams(market, params);
6009
+ const requestList = [];
6010
+ for (let i = 0; i < ids.length; i++) {
6011
+ const individualId = ids[i];
6012
+ const order = {
6013
+ 'orderId': individualId,
6014
+ 'symbol': market['id'],
6015
+ 'category': productType,
6016
+ };
6017
+ requestList.push(order);
6018
+ }
6019
+ const response = await this.privateUtaPostV3TradeCancelBatch(requestList);
6020
+ //
6021
+ // {
6022
+ // "code": "00000",
6023
+ // "msg": "success",
6024
+ // "requestTime": 1752813731517,
6025
+ // "data": [
6026
+ // {
6027
+ // "orderId": "1329948909442023424",
6028
+ // "clientOid": "1329948909446217728"
6029
+ // },
6030
+ // ]
6031
+ // }
6032
+ //
6033
+ const data = this.safeList(response, 'data', []);
6034
+ return this.parseOrders(data, market);
6035
+ }
5238
6036
  /**
5239
6037
  * @method
5240
6038
  * @name bitget#cancelOrders
@@ -5244,11 +6042,13 @@ export default class bitget extends Exchange {
5244
6042
  * @see https://www.bitget.com/api-doc/contract/plan/Cancel-Plan-Order
5245
6043
  * @see https://www.bitget.com/api-doc/margin/cross/trade/Cross-Batch-Cancel-Order
5246
6044
  * @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Batch-Cancel-Orders
6045
+ * @see https://www.bitget.com/api-doc/uta/trade/Cancel-Batch
5247
6046
  * @param {string[]} ids order ids
5248
6047
  * @param {string} symbol unified market symbol, default is undefined
5249
6048
  * @param {object} [params] extra parameters specific to the exchange API endpoint
5250
6049
  * @param {string} [params.marginMode] 'isolated' or 'cross' for spot margin trading
5251
6050
  * @param {boolean} [params.trigger] *contract only* set to true for canceling trigger orders
6051
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
5252
6052
  * @returns {object} an array of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
5253
6053
  */
5254
6054
  async cancelOrders(ids, symbol = undefined, params = {}) {
@@ -5257,6 +6057,11 @@ export default class bitget extends Exchange {
5257
6057
  }
5258
6058
  await this.loadMarkets();
5259
6059
  const market = this.market(symbol);
6060
+ let uta = undefined;
6061
+ [uta, params] = this.handleOptionAndParams(params, 'cancelOrders', 'uta', false);
6062
+ if (uta) {
6063
+ return await this.cancelUtaOrders(ids, symbol, params);
6064
+ }
5260
6065
  let marginMode = undefined;
5261
6066
  [marginMode, params] = this.handleMarginModeAndParams('cancelOrders', params);
5262
6067
  const trigger = this.safeValue2(params, 'stop', 'trigger');
@@ -5332,10 +6137,12 @@ export default class bitget extends Exchange {
5332
6137
  * @see https://www.bitget.com/api-doc/contract/trade/Batch-Cancel-Orders
5333
6138
  * @see https://bitgetlimited.github.io/apidoc/en/margin/#isolated-batch-cancel-orders
5334
6139
  * @see https://bitgetlimited.github.io/apidoc/en/margin/#cross-batch-cancel-order
6140
+ * @see https://www.bitget.com/api-doc/uta/trade/Cancel-All-Order
5335
6141
  * @param {string} symbol unified market symbol
5336
6142
  * @param {object} [params] extra parameters specific to the exchange API endpoint
5337
6143
  * @param {string} [params.marginMode] 'isolated' or 'cross' for spot margin trading
5338
6144
  * @param {boolean} [params.trigger] *contract only* set to true for canceling trigger orders
6145
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
5339
6146
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
5340
6147
  */
5341
6148
  async cancelAllOrders(symbol = undefined, params = {}) {
@@ -5346,13 +6153,41 @@ export default class bitget extends Exchange {
5346
6153
  const market = this.market(symbol);
5347
6154
  let marginMode = undefined;
5348
6155
  [marginMode, params] = this.handleMarginModeAndParams('cancelAllOrders', params);
6156
+ let productType = undefined;
6157
+ [productType, params] = this.handleProductTypeAndParams(market, params);
5349
6158
  const request = {
5350
6159
  'symbol': market['id'],
5351
6160
  };
5352
6161
  const trigger = this.safeBool2(params, 'stop', 'trigger');
5353
6162
  params = this.omit(params, ['stop', 'trigger']);
5354
6163
  let response = undefined;
5355
- if (market['spot']) {
6164
+ let uta = undefined;
6165
+ [uta, params] = this.handleOptionAndParams(params, 'cancelAllOrders', 'uta', false);
6166
+ if (uta) {
6167
+ if (productType === 'SPOT') {
6168
+ if (marginMode !== undefined) {
6169
+ productType = 'MARGIN';
6170
+ }
6171
+ }
6172
+ request['category'] = productType;
6173
+ response = await this.privateUtaPostV3TradeCancelSymbolOrder(this.extend(request, params));
6174
+ //
6175
+ // {
6176
+ // "code": "00000",
6177
+ // "msg": "success",
6178
+ // "requestTime": 1750751578138,
6179
+ // "data": {
6180
+ // "list": [
6181
+ // {
6182
+ // "orderId": "1321313242969427968",
6183
+ // "clientOid": "1321313242969427969"
6184
+ // }
6185
+ // ]
6186
+ // }
6187
+ // }
6188
+ //
6189
+ }
6190
+ else if (market['spot']) {
5356
6191
  if (marginMode !== undefined) {
5357
6192
  if (marginMode === 'cross') {
5358
6193
  response = await this.privateMarginPostMarginV1CrossOrderBatchCancelOrder(this.extend(request, params));
@@ -5411,8 +6246,6 @@ export default class bitget extends Exchange {
5411
6246
  }
5412
6247
  }
5413
6248
  else {
5414
- let productType = undefined;
5415
- [productType, params] = this.handleProductTypeAndParams(market, params);
5416
6249
  request['productType'] = productType;
5417
6250
  if (trigger) {
5418
6251
  response = await this.privateMixPostV2MixOrderCancelPlanOrder(this.extend(request, params));
@@ -5436,9 +6269,15 @@ export default class bitget extends Exchange {
5436
6269
  // }
5437
6270
  }
5438
6271
  const data = this.safeDict(response, 'data');
5439
- const resultList = this.safeList2(data, 'resultList', 'successList');
6272
+ const resultList = this.safeListN(data, ['resultList', 'successList', 'list']);
5440
6273
  const failureList = this.safeList2(data, 'failure', 'failureList');
5441
- const responseList = this.arrayConcat(resultList, failureList);
6274
+ let responseList = undefined;
6275
+ if ((resultList !== undefined) && (failureList !== undefined)) {
6276
+ responseList = this.arrayConcat(resultList, failureList);
6277
+ }
6278
+ else {
6279
+ responseList = resultList;
6280
+ }
5442
6281
  return this.parseOrders(responseList);
5443
6282
  }
5444
6283
  /**
@@ -5447,9 +6286,11 @@ export default class bitget extends Exchange {
5447
6286
  * @description fetches information on an order made by the user
5448
6287
  * @see https://www.bitget.com/api-doc/spot/trade/Get-Order-Info
5449
6288
  * @see https://www.bitget.com/api-doc/contract/trade/Get-Order-Details
6289
+ * @see https://www.bitget.com/api-doc/uta/trade/Get-Order-Details
5450
6290
  * @param {string} id the order id
5451
6291
  * @param {string} symbol unified symbol of the market the order was made in
5452
6292
  * @param {object} [params] extra parameters specific to the exchange API endpoint
6293
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
5453
6294
  * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
5454
6295
  */
5455
6296
  async fetchOrder(id, symbol = undefined, params = {}) {
@@ -5462,7 +6303,12 @@ export default class bitget extends Exchange {
5462
6303
  'orderId': id,
5463
6304
  };
5464
6305
  let response = undefined;
5465
- if (market['spot']) {
6306
+ let uta = undefined;
6307
+ [uta, params] = this.handleOptionAndParams(params, 'fetchOrder', 'uta', false);
6308
+ if (uta) {
6309
+ response = await this.privateUtaGetV3TradeOrderInfo(this.extend(request, params));
6310
+ }
6311
+ else if (market['spot']) {
5466
6312
  response = await this.privateSpotGetV2SpotTradeOrderInfo(this.extend(request, params));
5467
6313
  }
5468
6314
  else if (market['swap'] || market['future']) {
@@ -5542,7 +6388,51 @@ export default class bitget extends Exchange {
5542
6388
  // }
5543
6389
  // }
5544
6390
  //
5545
- if (typeof response === 'string') {
6391
+ // uta
6392
+ //
6393
+ // {
6394
+ // "code": "00000",
6395
+ // "msg": "success",
6396
+ // "requestTime": 1750496858333,
6397
+ // "data": {
6398
+ // "orderId": "1320244799629316096",
6399
+ // "clientOid": "1320244799633510400",
6400
+ // "category": "USDT-FUTURES",
6401
+ // "symbol": "BTCUSDT",
6402
+ // "orderType": "limit",
6403
+ // "side": "buy",
6404
+ // "price": "50000",
6405
+ // "qty": "0.001",
6406
+ // "amount": "0",
6407
+ // "cumExecQty": "0",
6408
+ // "cumExecValue": "0",
6409
+ // "avgPrice": "0",
6410
+ // "timeInForce": "gtc",
6411
+ // "orderStatus": "live",
6412
+ // "posSide": "long",
6413
+ // "holdMode": "hedge_mode",
6414
+ // "reduceOnly": "NO",
6415
+ // "feeDetail": [{
6416
+ // "feeCoin": "",
6417
+ // "fee": ""
6418
+ // }],
6419
+ // "createdTime": "1750496809871",
6420
+ // "updatedTime": "1750496809886",
6421
+ // "cancelReason": "",
6422
+ // "execType": "normal",
6423
+ // "stpMode": "none",
6424
+ // "tpTriggerBy": null,
6425
+ // "slTriggerBy": null,
6426
+ // "takeProfit": null,
6427
+ // "stopLoss": null,
6428
+ // "tpOrderType": null,
6429
+ // "slOrderType": null,
6430
+ // "tpLimitPrice": null,
6431
+ // "slLimitPrice": null
6432
+ // }
6433
+ // }
6434
+ //
6435
+ if (!uta && (typeof response === 'string')) {
5546
6436
  response = JSON.parse(response);
5547
6437
  }
5548
6438
  const data = this.safeDict(response, 'data');
@@ -5552,6 +6442,10 @@ export default class bitget extends Exchange {
5552
6442
  }
5553
6443
  }
5554
6444
  const dataList = this.safeList(response, 'data', []);
6445
+ const dataListLength = dataList.length;
6446
+ if (dataListLength === 0) {
6447
+ throw new OrderNotFound(this.id + ' fetchOrder() could not find order id ' + id + ' in ' + this.json(response));
6448
+ }
5555
6449
  const first = this.safeDict(dataList, 0, {});
5556
6450
  return this.parseOrder(first, market);
5557
6451
  // const first = this.safeDict (data, 0, data);
@@ -5567,6 +6461,7 @@ export default class bitget extends Exchange {
5567
6461
  * @see https://www.bitget.com/api-doc/contract/plan/get-orders-plan-pending
5568
6462
  * @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Open-Orders
5569
6463
  * @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Open-Orders
6464
+ * @see https://www.bitget.com/api-doc/uta/strategy/Get-Unfilled-Strategy-Orders
5570
6465
  * @param {string} symbol unified market symbol
5571
6466
  * @param {int} [since] the earliest time in ms to fetch open orders for
5572
6467
  * @param {int} [limit] the maximum number of open order structures to retrieve
@@ -5577,6 +6472,7 @@ export default class bitget extends Exchange {
5577
6472
  * @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)
5578
6473
  * @param {string} [params.isPlan] *swap only* 'plan' for stop orders and 'profit_loss' for tp/sl orders, default is 'plan'
5579
6474
  * @param {boolean} [params.trailing] set to true if you want to fetch trailing orders
6475
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
5580
6476
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
5581
6477
  */
5582
6478
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -5586,6 +6482,8 @@ export default class bitget extends Exchange {
5586
6482
  let request = {};
5587
6483
  let marginMode = undefined;
5588
6484
  [marginMode, params] = this.handleMarginModeAndParams('fetchOpenOrders', params);
6485
+ let uta = undefined;
6486
+ [uta, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'uta', false);
5589
6487
  if (symbol !== undefined) {
5590
6488
  market = this.market(symbol);
5591
6489
  request['symbol'] = market['id'];
@@ -5601,22 +6499,28 @@ export default class bitget extends Exchange {
5601
6499
  [paginate, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'paginate');
5602
6500
  if (paginate) {
5603
6501
  let cursorReceived = undefined;
5604
- if (type === 'spot') {
6502
+ let cursorSent = undefined;
6503
+ if (uta) {
6504
+ cursorReceived = 'cursor';
6505
+ cursorSent = 'cursor';
6506
+ }
6507
+ else if (type === 'spot') {
5605
6508
  if (marginMode !== undefined) {
5606
6509
  cursorReceived = 'minId';
6510
+ cursorSent = 'idLessThan';
5607
6511
  }
5608
6512
  }
5609
6513
  else {
5610
6514
  cursorReceived = 'endId';
6515
+ cursorSent = 'idLessThan';
5611
6516
  }
5612
- return await this.fetchPaginatedCallCursor('fetchOpenOrders', symbol, since, limit, params, cursorReceived, 'idLessThan');
6517
+ return await this.fetchPaginatedCallCursor('fetchOpenOrders', symbol, since, limit, params, cursorReceived, cursorSent);
5613
6518
  }
5614
6519
  let response = undefined;
5615
6520
  const trailing = this.safeBool(params, 'trailing');
5616
6521
  const trigger = this.safeBool2(params, 'stop', 'trigger');
5617
6522
  const planTypeDefined = this.safeString(params, 'planType') !== undefined;
5618
6523
  const isTrigger = (trigger || planTypeDefined);
5619
- params = this.omit(params, ['stop', 'trigger', 'trailing']);
5620
6524
  [request, params] = this.handleUntilOption('endTime', request, params);
5621
6525
  if (since !== undefined) {
5622
6526
  request['startTime'] = since;
@@ -5624,53 +6528,66 @@ export default class bitget extends Exchange {
5624
6528
  if (limit !== undefined) {
5625
6529
  request['limit'] = limit;
5626
6530
  }
5627
- if ((type === 'swap') || (type === 'future') || (marginMode !== undefined)) {
6531
+ if (!uta && ((type === 'swap') || (type === 'future') || (marginMode !== undefined))) {
5628
6532
  const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId');
5629
6533
  params = this.omit(params, 'clientOrderId');
5630
6534
  if (clientOrderId !== undefined) {
5631
6535
  request['clientOid'] = clientOrderId;
5632
6536
  }
5633
6537
  }
5634
- let query = undefined;
5635
- query = this.omit(params, ['type']);
5636
- if (type === 'spot') {
6538
+ let productType = undefined;
6539
+ [productType, params] = this.handleProductTypeAndParams(market, params);
6540
+ params = this.omit(params, ['type', 'stop', 'trigger', 'trailing']);
6541
+ if (uta) {
6542
+ if (type === 'spot') {
6543
+ if (marginMode !== undefined) {
6544
+ productType = 'MARGIN';
6545
+ }
6546
+ }
6547
+ request['category'] = productType;
6548
+ if (trigger) {
6549
+ response = await this.privateUtaGetV3TradeUnfilledStrategyOrders(this.extend(request, params));
6550
+ }
6551
+ else {
6552
+ response = await this.privateUtaGetV3TradeUnfilledOrders(this.extend(request, params));
6553
+ }
6554
+ }
6555
+ else if (type === 'spot') {
5637
6556
  if (marginMode !== undefined) {
5638
6557
  if (since === undefined) {
5639
6558
  since = this.milliseconds() - 7776000000;
5640
6559
  request['startTime'] = since;
5641
6560
  }
5642
6561
  if (marginMode === 'isolated') {
5643
- response = await this.privateMarginGetV2MarginIsolatedOpenOrders(this.extend(request, query));
6562
+ response = await this.privateMarginGetV2MarginIsolatedOpenOrders(this.extend(request, params));
5644
6563
  }
5645
6564
  else if (marginMode === 'cross') {
5646
- response = await this.privateMarginGetV2MarginCrossedOpenOrders(this.extend(request, query));
6565
+ response = await this.privateMarginGetV2MarginCrossedOpenOrders(this.extend(request, params));
5647
6566
  }
5648
6567
  }
5649
6568
  else {
5650
6569
  if (trigger) {
5651
- response = await this.privateSpotGetV2SpotTradeCurrentPlanOrder(this.extend(request, query));
6570
+ response = await this.privateSpotGetV2SpotTradeCurrentPlanOrder(this.extend(request, params));
5652
6571
  }
5653
6572
  else {
5654
- response = await this.privateSpotGetV2SpotTradeUnfilledOrders(this.extend(request, query));
6573
+ response = await this.privateSpotGetV2SpotTradeUnfilledOrders(this.extend(request, params));
5655
6574
  }
5656
6575
  }
5657
6576
  }
5658
6577
  else {
5659
- let productType = undefined;
5660
- [productType, query] = this.handleProductTypeAndParams(market, query);
5661
6578
  request['productType'] = productType;
5662
6579
  if (trailing) {
5663
6580
  const planType = this.safeString(params, 'planType', 'track_plan');
5664
6581
  request['planType'] = planType;
5665
- response = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(request, query));
6582
+ response = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(request, params));
5666
6583
  }
5667
6584
  else if (isTrigger) {
5668
- const planType = this.safeString(query, 'planType', 'normal_plan');
6585
+ const planType = this.safeString(params, 'planType', 'normal_plan');
5669
6586
  request['planType'] = planType;
5670
- response = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(request, query));
6587
+ response = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(request, params));
5671
6588
  }
5672
6589
  else {
5673
- response = await this.privateMixGetV2MixOrderOrdersPending(this.extend(request, query));
6590
+ response = await this.privateMixGetV2MixOrderOrdersPending(this.extend(request, params));
5674
6591
  }
5675
6592
  }
5676
6593
  //
@@ -5848,8 +6765,95 @@ export default class bitget extends Exchange {
5848
6765
  // }
5849
6766
  // }
5850
6767
  //
6768
+ // uta
6769
+ //
6770
+ // {
6771
+ // "code": "00000",
6772
+ // "msg": "success",
6773
+ // "requestTime": 1750753395850,
6774
+ // "data": {
6775
+ // "list": [
6776
+ // {
6777
+ // "orderId": "1321320757371228160",
6778
+ // "clientOid": "1321320757371228161",
6779
+ // "category": "USDT-FUTURES",
6780
+ // "symbol": "BTCUSDT",
6781
+ // "orderType": "limit",
6782
+ // "side": "buy",
6783
+ // "price": "50000",
6784
+ // "qty": "0.001",
6785
+ // "amount": "0",
6786
+ // "cumExecQty": "0",
6787
+ // "cumExecValue": "0",
6788
+ // "avgPrice": "0",
6789
+ // "timeInForce": "gtc",
6790
+ // "orderStatus": "live",
6791
+ // "posSide": "long",
6792
+ // "holdMode": "hedge_mode",
6793
+ // "reduceOnly": "NO",
6794
+ // "feeDetail": [
6795
+ // {
6796
+ // "feeCoin": "",
6797
+ // "fee": ""
6798
+ // }
6799
+ // ],
6800
+ // "createdTime": "1750753338186",
6801
+ // "updatedTime": "1750753338203",
6802
+ // "stpMode": "none",
6803
+ // "tpTriggerBy": null,
6804
+ // "slTriggerBy": null,
6805
+ // "takeProfit": null,
6806
+ // "stopLoss": null,
6807
+ // "tpOrderType": null,
6808
+ // "slOrderType": null,
6809
+ // "tpLimitPrice": null,
6810
+ // "slLimitPrice": null
6811
+ // }
6812
+ // ],
6813
+ // "cursor": "1321320757371228160"
6814
+ // }
6815
+ // }
6816
+ //
6817
+ // uta trigger
6818
+ //
6819
+ // {
6820
+ // "code": "00000",
6821
+ // "msg": "success",
6822
+ // "requestTime": 1753057527060,
6823
+ // "data": [
6824
+ // {
6825
+ // "orderId": "1330984742276198400",
6826
+ // "clientOid": "1330984742276198400",
6827
+ // "symbol": "BTCUSDT",
6828
+ // "category": "USDT-FUTURES",
6829
+ // "qty": "0.001",
6830
+ // "posSide": "long",
6831
+ // "tpTriggerBy": "market",
6832
+ // "slTriggerBy": "mark",
6833
+ // "takeProfit": "",
6834
+ // "stopLoss":"114000",
6835
+ // "tpOrderType": "market",
6836
+ // "slOrderType": "limit",
6837
+ // "tpLimitPrice": "",
6838
+ // "slLimitPrice": "113000",
6839
+ // "createdTime": "1753057411736",
6840
+ // "updatedTime": "1753057411747"
6841
+ // }
6842
+ // ]
6843
+ // }
6844
+ //
5851
6845
  const data = this.safeValue(response, 'data');
5852
- if (type === 'spot') {
6846
+ if (uta) {
6847
+ let result = undefined;
6848
+ if (trigger) {
6849
+ result = this.safeList(response, 'data', []);
6850
+ }
6851
+ else {
6852
+ result = this.safeList(data, 'list', []);
6853
+ }
6854
+ return this.parseOrders(result, market, since, limit);
6855
+ }
6856
+ else if (type === 'spot') {
5853
6857
  if ((marginMode !== undefined) || trigger) {
5854
6858
  const resultList = this.safeList(data, 'orderList', []);
5855
6859
  return this.parseOrders(resultList, market, since, limit);
@@ -5871,6 +6875,7 @@ export default class bitget extends Exchange {
5871
6875
  * @see https://www.bitget.com/api-doc/contract/plan/orders-plan-history
5872
6876
  * @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-History
5873
6877
  * @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Order-History
6878
+ * @see https://www.bitget.com/api-doc/uta/trade/Get-Order-History
5874
6879
  * @param {string} symbol unified market symbol of the closed orders
5875
6880
  * @param {int} [since] timestamp in ms of the earliest order
5876
6881
  * @param {int} [limit] the max number of closed orders to return
@@ -5898,6 +6903,7 @@ export default class bitget extends Exchange {
5898
6903
  * @see https://www.bitget.com/api-doc/contract/plan/orders-plan-history
5899
6904
  * @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-History
5900
6905
  * @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Order-History
6906
+ * @see https://www.bitget.com/api-doc/uta/trade/Get-Order-History
5901
6907
  * @param {string} symbol unified market symbol of the canceled orders
5902
6908
  * @param {int} [since] timestamp in ms of the earliest order
5903
6909
  * @param {int} [limit] the max number of canceled orders to return
@@ -5924,6 +6930,8 @@ export default class bitget extends Exchange {
5924
6930
  * @see https://www.bitget.com/api-doc/contract/plan/orders-plan-history
5925
6931
  * @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-History
5926
6932
  * @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Order-History
6933
+ * @see https://www.bitget.com/api-doc/uta/trade/Get-Order-History
6934
+ * @see https://www.bitget.com/api-doc/uta/strategy/Get-History-Strategy-Orders
5927
6935
  * @description fetches information on multiple canceled and closed orders made by the user
5928
6936
  * @param {string} symbol unified market symbol of the market orders were made in
5929
6937
  * @param {int} [since] the earliest time in ms to fetch orders for
@@ -5935,9 +6943,15 @@ export default class bitget extends Exchange {
5935
6943
  * @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)
5936
6944
  * @param {string} [params.isPlan] *swap only* 'plan' for stop orders and 'profit_loss' for tp/sl orders, default is 'plan'
5937
6945
  * @param {boolean} [params.trailing] set to true if you want to fetch trailing orders
6946
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
5938
6947
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
5939
6948
  */
5940
6949
  async fetchCanceledAndClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
6950
+ let uta = undefined;
6951
+ [uta, params] = this.handleOptionAndParams(params, 'fetchCanceledAndClosedOrders', 'uta', false);
6952
+ if (uta) {
6953
+ return await this.fetchUtaCanceledAndClosedOrders(symbol, since, limit, params);
6954
+ }
5941
6955
  await this.loadMarkets();
5942
6956
  let market = undefined;
5943
6957
  let request = {};
@@ -6226,6 +7240,132 @@ export default class bitget extends Exchange {
6226
7240
  const orders = this.safeList(response, 'data', []);
6227
7241
  return this.parseOrders(orders, market, since, limit);
6228
7242
  }
7243
+ async fetchUtaCanceledAndClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
7244
+ await this.loadMarkets();
7245
+ let market = undefined;
7246
+ if (symbol !== undefined) {
7247
+ market = this.market(symbol);
7248
+ }
7249
+ let productType = undefined;
7250
+ [productType, params] = this.handleProductTypeAndParams(market, params);
7251
+ if (productType === 'SPOT') {
7252
+ let marginMode = undefined;
7253
+ [marginMode, params] = this.handleMarginModeAndParams('fetchCanceledAndClosedOrders', params);
7254
+ if (marginMode !== undefined) {
7255
+ productType = 'MARGIN';
7256
+ }
7257
+ }
7258
+ let request = {
7259
+ 'category': productType,
7260
+ };
7261
+ let paginate = false;
7262
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchCanceledAndClosedOrders', 'paginate');
7263
+ if (paginate) {
7264
+ return await this.fetchPaginatedCallCursor('fetchCanceledAndClosedOrders', symbol, since, limit, params, 'cursor', 'cursor');
7265
+ }
7266
+ [request, params] = this.handleUntilOption('endTime', request, params);
7267
+ if (since !== undefined) {
7268
+ request['startTime'] = since;
7269
+ }
7270
+ if (limit !== undefined) {
7271
+ request['limit'] = limit;
7272
+ }
7273
+ let response = undefined;
7274
+ const trigger = this.safeBool2(params, 'stop', 'trigger');
7275
+ params = this.omit(params, ['stop', 'trigger']);
7276
+ if (trigger) {
7277
+ response = await this.privateUtaGetV3TradeHistoryStrategyOrders(this.extend(request, params));
7278
+ }
7279
+ else {
7280
+ response = await this.privateUtaGetV3TradeHistoryOrders(this.extend(request, params));
7281
+ }
7282
+ //
7283
+ // uta
7284
+ //
7285
+ // {
7286
+ // "code": "00000",
7287
+ // "msg": "success",
7288
+ // "requestTime": 1752531592855,
7289
+ // "data": {
7290
+ // "list": [
7291
+ // {
7292
+ // "orderId": "1322441400976261120",
7293
+ // "clientOid": "1322441400976261121",
7294
+ // "category": "USDT-FUTURES",
7295
+ // "symbol": "BTCUSDT",
7296
+ // "orderType": "market",
7297
+ // "side": "sell",
7298
+ // "price": "0",
7299
+ // "qty": "0.0001",
7300
+ // "amount": "0",
7301
+ // "cumExecQty": "0.0001",
7302
+ // "cumExecValue": "10.7005",
7303
+ // "avgPrice": "107005.4",
7304
+ // "timeInForce": "gtc",
7305
+ // "orderStatus": "filled",
7306
+ // "posSide": "long",
7307
+ // "holdMode": "hedge_mode",
7308
+ // "reduceOnly": "NO",
7309
+ // "feeDetail": [
7310
+ // {
7311
+ // "feeCoin": "USDT",
7312
+ // "fee": "0.00642032"
7313
+ // }
7314
+ // ],
7315
+ // "createdTime": "1751020520442",
7316
+ // "updatedTime": "1751020520457",
7317
+ // "cancelReason": "",
7318
+ // "execType": "normal",
7319
+ // "stpMode": "none",
7320
+ // "tpTriggerBy": null,
7321
+ // "slTriggerBy": null,
7322
+ // "takeProfit": null,
7323
+ // "stopLoss": null,
7324
+ // "tpOrderType": null,
7325
+ // "slOrderType": null,
7326
+ // "tpLimitPrice": null,
7327
+ // "slLimitPrice": null
7328
+ // },
7329
+ // ],
7330
+ // "cursor": "1322441328637100035"
7331
+ // }
7332
+ // }
7333
+ //
7334
+ // uta trigger
7335
+ //
7336
+ // {
7337
+ // "code": "00000",
7338
+ // "msg": "success",
7339
+ // "requestTime": 1753058447920,
7340
+ // "data": {
7341
+ // "list": [
7342
+ // {
7343
+ // "orderId": "1330984742276198400",
7344
+ // "clientOid": "1330984742276198400",
7345
+ // "symbol": "BTCUSDT",
7346
+ // "category": "USDT-FUTURES",
7347
+ // "qty": "0.001",
7348
+ // "posSide": "long",
7349
+ // "tpTriggerBy": "market",
7350
+ // "slTriggerBy": "mark",
7351
+ // "takeProfit": "",
7352
+ // "stopLoss": "112000",
7353
+ // "tpOrderType": "market",
7354
+ // "slOrderType": "limit",
7355
+ // "tpLimitPrice": "",
7356
+ // "slLimitPrice": "111000",
7357
+ // "createdTime": "1753057411736",
7358
+ // "updatedTime": "1753058267412"
7359
+ // },
7360
+ // ],
7361
+ // "cursor": 1330960754317619202
7362
+ // }
7363
+ // }
7364
+ //
7365
+ const data = this.safeDict(response, 'data', {});
7366
+ const orders = this.safeList(data, 'list', []);
7367
+ return this.parseOrders(orders, market, since, limit);
7368
+ }
6229
7369
  /**
6230
7370
  * @method
6231
7371
  * @name bitget#fetchLedger
@@ -6452,69 +7592,84 @@ export default class bitget extends Exchange {
6452
7592
  * @see https://www.bitget.com/api-doc/contract/trade/Get-Order-Fills
6453
7593
  * @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-Fills
6454
7594
  * @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Transaction-Details
7595
+ * @see https://www.bitget.com/api-doc/uta/trade/Get-Order-Fills
6455
7596
  * @param {string} symbol unified market symbol
6456
7597
  * @param {int} [since] the earliest time in ms to fetch trades for
6457
7598
  * @param {int} [limit] the maximum number of trades structures to retrieve
6458
7599
  * @param {object} [params] extra parameters specific to the exchange API endpoint
6459
7600
  * @param {int} [params.until] the latest time in ms to fetch trades for
7601
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
6460
7602
  * @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)
6461
7603
  * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
6462
7604
  */
6463
7605
  async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
6464
- if (symbol === undefined) {
7606
+ let uta = undefined;
7607
+ [uta, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'uta', false);
7608
+ if (!uta && (symbol === undefined)) {
6465
7609
  throw new ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
6466
7610
  }
6467
7611
  await this.loadMarkets();
6468
7612
  const market = this.market(symbol);
6469
- let marginMode = undefined;
6470
- [marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);
7613
+ let request = {};
7614
+ [request, params] = this.handleUntilOption('endTime', request, params);
7615
+ if (since !== undefined) {
7616
+ request['startTime'] = since;
7617
+ }
7618
+ if (limit !== undefined) {
7619
+ request['limit'] = limit;
7620
+ }
6471
7621
  let paginate = false;
7622
+ let marginMode = undefined;
6472
7623
  [paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');
7624
+ [marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);
6473
7625
  if (paginate) {
6474
7626
  let cursorReceived = undefined;
6475
- if (market['spot']) {
7627
+ let cursorSent = undefined;
7628
+ if (uta) {
7629
+ cursorReceived = 'cursor';
7630
+ cursorSent = 'cursor';
7631
+ }
7632
+ else if (market['spot']) {
6476
7633
  if (marginMode !== undefined) {
6477
7634
  cursorReceived = 'minId';
7635
+ cursorSent = 'idLessThan';
6478
7636
  }
6479
7637
  }
6480
7638
  else {
6481
7639
  cursorReceived = 'endId';
7640
+ cursorSent = 'idLessThan';
6482
7641
  }
6483
- return await this.fetchPaginatedCallCursor('fetchMyTrades', symbol, since, limit, params, cursorReceived, 'idLessThan');
7642
+ return await this.fetchPaginatedCallCursor('fetchMyTrades', symbol, since, limit, params, cursorReceived, cursorSent);
6484
7643
  }
6485
7644
  let response = undefined;
6486
- let request = {
6487
- 'symbol': market['id'],
6488
- };
6489
- [request, params] = this.handleUntilOption('endTime', request, params);
6490
- if (since !== undefined) {
6491
- request['startTime'] = since;
6492
- }
6493
- if (limit !== undefined) {
6494
- request['limit'] = limit;
7645
+ if (uta) {
7646
+ response = await this.privateUtaGetV3TradeFills(this.extend(request, params));
6495
7647
  }
6496
- if (market['spot']) {
6497
- if (marginMode !== undefined) {
6498
- if (since === undefined) {
6499
- request['startTime'] = this.milliseconds() - 7776000000;
6500
- }
6501
- if (marginMode === 'isolated') {
6502
- response = await this.privateMarginGetV2MarginIsolatedFills(this.extend(request, params));
7648
+ else {
7649
+ request['symbol'] = market['id'];
7650
+ if (market['spot']) {
7651
+ if (marginMode !== undefined) {
7652
+ if (since === undefined) {
7653
+ request['startTime'] = this.milliseconds() - 7776000000;
7654
+ }
7655
+ if (marginMode === 'isolated') {
7656
+ response = await this.privateMarginGetV2MarginIsolatedFills(this.extend(request, params));
7657
+ }
7658
+ else if (marginMode === 'cross') {
7659
+ response = await this.privateMarginGetV2MarginCrossedFills(this.extend(request, params));
7660
+ }
6503
7661
  }
6504
- else if (marginMode === 'cross') {
6505
- response = await this.privateMarginGetV2MarginCrossedFills(this.extend(request, params));
7662
+ else {
7663
+ response = await this.privateSpotGetV2SpotTradeFills(this.extend(request, params));
6506
7664
  }
6507
7665
  }
6508
7666
  else {
6509
- response = await this.privateSpotGetV2SpotTradeFills(this.extend(request, params));
7667
+ let productType = undefined;
7668
+ [productType, params] = this.handleProductTypeAndParams(market, params);
7669
+ request['productType'] = productType;
7670
+ response = await this.privateMixGetV2MixOrderFills(this.extend(request, params));
6510
7671
  }
6511
7672
  }
6512
- else {
6513
- let productType = undefined;
6514
- [productType, params] = this.handleProductTypeAndParams(market, params);
6515
- request['productType'] = productType;
6516
- response = await this.privateMixGetV2MixOrderFills(this.extend(request, params));
6517
- }
6518
7673
  //
6519
7674
  // spot
6520
7675
  //
@@ -6614,10 +7769,46 @@ export default class bitget extends Exchange {
6614
7769
  // }
6615
7770
  // }
6616
7771
  //
7772
+ // uta
7773
+ //
7774
+ // {
7775
+ // "code": "00000",
7776
+ // "msg": "success",
7777
+ // "requestTime": 1751099666579,
7778
+ // "data": {
7779
+ // "list": [
7780
+ // {
7781
+ // "execId": "1322441401010528257",
7782
+ // "orderId": "1322441400976261120",
7783
+ // "category": "USDT-FUTURES",
7784
+ // "symbol": "BTCUSDT",
7785
+ // "orderType": "market",
7786
+ // "side": "sell",
7787
+ // "execPrice": "107005.4",
7788
+ // "execQty": "0.0001",
7789
+ // "execValue": "10.7005",
7790
+ // "tradeScope": "taker",
7791
+ // "feeDetail": [{
7792
+ // "feeCoin": "USDT",
7793
+ // "fee":"0.00642032"
7794
+ // }],
7795
+ // "createdTime": "1751020520451",
7796
+ // "updatedTime": "1751020520458",
7797
+ // "execPnl": "0.00017"
7798
+ // },
7799
+ // ],
7800
+ // "cursor": "1322061241878880257"
7801
+ // }
7802
+ // }
7803
+ //
6617
7804
  const data = this.safeValue(response, 'data');
6618
- if ((market['swap']) || (market['future'])) {
6619
- const fillList = this.safeList(data, 'fillList', []);
6620
- return this.parseTrades(fillList, market, since, limit);
7805
+ if (uta) {
7806
+ const fills = this.safeList(data, 'list', []);
7807
+ return this.parseTrades(fills, market, since, limit);
7808
+ }
7809
+ else if ((market['swap'] || (market['future']))) {
7810
+ const fills = this.safeList(data, 'fillList', []);
7811
+ return this.parseTrades(fills, market, since, limit);
6621
7812
  }
6622
7813
  else if (marginMode !== undefined) {
6623
7814
  const fills = this.safeList(data, 'fills', []);
@@ -6630,8 +7821,10 @@ export default class bitget extends Exchange {
6630
7821
  * @name bitget#fetchPosition
6631
7822
  * @description fetch data on a single open contract trade position
6632
7823
  * @see https://www.bitget.com/api-doc/contract/position/get-single-position
7824
+ * @see https://www.bitget.com/api-doc/uta/trade/Get-Position
6633
7825
  * @param {string} symbol unified market symbol of the market the position is held in
6634
7826
  * @param {object} [params] extra parameters specific to the exchange API endpoint
7827
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
6635
7828
  * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
6636
7829
  */
6637
7830
  async fetchPosition(symbol, params = {}) {
@@ -6641,42 +7834,92 @@ export default class bitget extends Exchange {
6641
7834
  [productType, params] = this.handleProductTypeAndParams(market, params);
6642
7835
  const request = {
6643
7836
  'symbol': market['id'],
6644
- 'marginCoin': market['settleId'],
6645
- 'productType': productType,
6646
7837
  };
6647
- const response = await this.privateMixGetV2MixPositionSinglePosition(this.extend(request, params));
6648
- //
6649
- // {
6650
- // "code": "00000",
6651
- // "msg": "success",
6652
- // "requestTime": 1700807531673,
6653
- // "data": [
6654
- // {
6655
- // "marginCoin": "USDT",
6656
- // "symbol": "BTCUSDT",
6657
- // "holdSide": "long",
6658
- // "openDelegateSize": "0",
6659
- // "marginSize": "3.73555",
6660
- // "available": "0.002",
6661
- // "locked": "0",
6662
- // "total": "0.002",
6663
- // "leverage": "20",
6664
- // "achievedProfits": "0",
6665
- // "openPriceAvg": "37355.5",
6666
- // "marginMode": "crossed",
6667
- // "posMode": "hedge_mode",
6668
- // "unrealizedPL": "0.007",
6669
- // "liquidationPrice": "31724.970702417",
6670
- // "keepMarginRate": "0.004",
6671
- // "markPrice": "37359",
6672
- // "marginRatio": "0.029599540355",
6673
- // "cTime": "1700807507275"
6674
- // }
6675
- // ]
6676
- // }
6677
- //
6678
- const data = this.safeList(response, 'data', []);
6679
- const first = this.safeDict(data, 0, {});
7838
+ let response = undefined;
7839
+ let uta = undefined;
7840
+ let result = undefined;
7841
+ [uta, params] = this.handleOptionAndParams(params, 'fetchPosition', 'uta', false);
7842
+ if (uta) {
7843
+ request['category'] = productType;
7844
+ response = await this.privateUtaGetV3PositionCurrentPosition(this.extend(request, params));
7845
+ //
7846
+ // {
7847
+ // "code": "00000",
7848
+ // "msg": "success",
7849
+ // "requestTime": 1750929905423,
7850
+ // "data": {
7851
+ // "list": [
7852
+ // {
7853
+ // "category": "USDT-FUTURES",
7854
+ // "symbol": "BTCUSDT",
7855
+ // "marginCoin": "USDT",
7856
+ // "holdMode": "hedge_mode",
7857
+ // "posSide": "long",
7858
+ // "marginMode": "crossed",
7859
+ // "positionBalance": "5.435199",
7860
+ // "available": "0.001",
7861
+ // "frozen": "0",
7862
+ // "total": "0.001",
7863
+ // "leverage": "20",
7864
+ // "curRealisedPnl": "0",
7865
+ // "avgPrice": "107410.3",
7866
+ // "positionStatus": "normal",
7867
+ // "unrealisedPnl": "0.0047",
7868
+ // "liquidationPrice": "0",
7869
+ // "mmr": "0.004",
7870
+ // "profitRate": "0.0008647337475591",
7871
+ // "markPrice": "107415.3",
7872
+ // "breakEvenPrice": "107539.2",
7873
+ // "totalFunding": "0",
7874
+ // "openFeeTotal": "-0.06444618",
7875
+ // "closeFeeTotal": "0",
7876
+ // "createdTime": "1750495670699",
7877
+ // "updatedTime": "1750929883465"
7878
+ // }
7879
+ // ]
7880
+ // }
7881
+ // }
7882
+ //
7883
+ const data = this.safeDict(response, 'data', {});
7884
+ result = this.safeList(data, 'list', []);
7885
+ }
7886
+ else {
7887
+ request['marginCoin'] = market['settleId'];
7888
+ request['productType'] = productType;
7889
+ response = await this.privateMixGetV2MixPositionSinglePosition(this.extend(request, params));
7890
+ //
7891
+ // {
7892
+ // "code": "00000",
7893
+ // "msg": "success",
7894
+ // "requestTime": 1700807531673,
7895
+ // "data": [
7896
+ // {
7897
+ // "marginCoin": "USDT",
7898
+ // "symbol": "BTCUSDT",
7899
+ // "holdSide": "long",
7900
+ // "openDelegateSize": "0",
7901
+ // "marginSize": "3.73555",
7902
+ // "available": "0.002",
7903
+ // "locked": "0",
7904
+ // "total": "0.002",
7905
+ // "leverage": "20",
7906
+ // "achievedProfits": "0",
7907
+ // "openPriceAvg": "37355.5",
7908
+ // "marginMode": "crossed",
7909
+ // "posMode": "hedge_mode",
7910
+ // "unrealizedPL": "0.007",
7911
+ // "liquidationPrice": "31724.970702417",
7912
+ // "keepMarginRate": "0.004",
7913
+ // "markPrice": "37359",
7914
+ // "marginRatio": "0.029599540355",
7915
+ // "cTime": "1700807507275"
7916
+ // }
7917
+ // ]
7918
+ // }
7919
+ //
7920
+ result = this.safeList(response, 'data', []);
7921
+ }
7922
+ const first = this.safeDict(result, 0, {});
6680
7923
  return this.parsePosition(first, market);
6681
7924
  }
6682
7925
  /**
@@ -6856,6 +8099,36 @@ export default class bitget extends Exchange {
6856
8099
  // "cTime": "1700807507275"
6857
8100
  // }
6858
8101
  //
8102
+ // uta: fetchPosition
8103
+ //
8104
+ // {
8105
+ // "category": "USDT-FUTURES",
8106
+ // "symbol": "BTCUSDT",
8107
+ // "marginCoin": "USDT",
8108
+ // "holdMode": "hedge_mode",
8109
+ // "posSide": "long",
8110
+ // "marginMode": "crossed",
8111
+ // "positionBalance": "5.435199",
8112
+ // "available": "0.001",
8113
+ // "frozen": "0",
8114
+ // "total": "0.001",
8115
+ // "leverage": "20",
8116
+ // "curRealisedPnl": "0",
8117
+ // "avgPrice": "107410.3",
8118
+ // "positionStatus": "normal",
8119
+ // "unrealisedPnl": "0.0047",
8120
+ // "liquidationPrice": "0",
8121
+ // "mmr": "0.004",
8122
+ // "profitRate": "0.0008647337475591",
8123
+ // "markPrice": "107415.3",
8124
+ // "breakEvenPrice": "107539.2",
8125
+ // "totalFunding": "0",
8126
+ // "openFeeTotal": "-0.06444618",
8127
+ // "closeFeeTotal": "0",
8128
+ // "createdTime": "1750495670699",
8129
+ // "updatedTime": "1750929883465"
8130
+ // }
8131
+ //
6859
8132
  // fetchPositions: privateMixGetV2MixPositionAllPosition
6860
8133
  //
6861
8134
  // {
@@ -6907,15 +8180,38 @@ export default class bitget extends Exchange {
6907
8180
  // "clientOid": "1120923953904893956"
6908
8181
  // }
6909
8182
  //
8183
+ // uta: fetchPositionsHistory
8184
+ //
8185
+ // {
8186
+ // "positionId": "1322441328637100049",
8187
+ // "category": "USDT-FUTURES",
8188
+ // "symbol": "BTCUSDT",
8189
+ // "marginCoin": "USDT",
8190
+ // "holdMode": "hedge_mode",
8191
+ // "posSide": "long",
8192
+ // "marginMode": "crossed",
8193
+ // "openPriceAvg": "107003.7",
8194
+ // "closePriceAvg": "107005.4",
8195
+ // "openTotalPos": "0.0001",
8196
+ // "closeTotalPos": "0.0001",
8197
+ // "cumRealisedPnl": "0.00017",
8198
+ // "netProfit": "-0.01267055",
8199
+ // "totalFunding": "0",
8200
+ // "openFeeTotal": "-0.00642022",
8201
+ // "closeFeeTotal": "-0.00642032",
8202
+ // "createdTime": "1751020503195",
8203
+ // "updatedTime": "1751020520458"
8204
+ // }
8205
+ //
6910
8206
  const marketId = this.safeString(position, 'symbol');
6911
8207
  market = this.safeMarket(marketId, market, undefined, 'contract');
6912
8208
  const symbol = market['symbol'];
6913
- const timestamp = this.safeInteger2(position, 'cTime', 'ctime');
8209
+ const timestamp = this.safeIntegerN(position, ['cTime', 'ctime', 'createdTime']);
6914
8210
  let marginMode = this.safeString(position, 'marginMode');
6915
8211
  let collateral = undefined;
6916
8212
  let initialMargin = undefined;
6917
- const unrealizedPnl = this.safeString(position, 'unrealizedPL');
6918
- const rawCollateral = this.safeString(position, 'marginSize');
8213
+ const unrealizedPnl = this.safeString2(position, 'unrealizedPL', 'unrealisedPnl');
8214
+ const rawCollateral = this.safeString2(position, 'marginSize', 'positionBalance');
6919
8215
  if (marginMode === 'isolated') {
6920
8216
  collateral = Precise.stringAdd(rawCollateral, unrealizedPnl);
6921
8217
  }
@@ -6923,7 +8219,7 @@ export default class bitget extends Exchange {
6923
8219
  marginMode = 'cross';
6924
8220
  initialMargin = rawCollateral;
6925
8221
  }
6926
- const holdMode = this.safeString(position, 'posMode');
8222
+ const holdMode = this.safeString2(position, 'posMode', 'holdMode');
6927
8223
  let hedged = undefined;
6928
8224
  if (holdMode === 'hedge_mode') {
6929
8225
  hedged = true;
@@ -6931,12 +8227,12 @@ export default class bitget extends Exchange {
6931
8227
  else if (holdMode === 'one_way_mode') {
6932
8228
  hedged = false;
6933
8229
  }
6934
- const side = this.safeString(position, 'holdSide');
8230
+ const side = this.safeString2(position, 'holdSide', 'posSide');
6935
8231
  const leverage = this.safeString(position, 'leverage');
6936
8232
  const contractSizeNumber = this.safeValue(market, 'contractSize');
6937
8233
  const contractSize = this.numberToString(contractSizeNumber);
6938
- const baseAmount = this.safeString(position, 'total');
6939
- const entryPrice = this.safeString2(position, 'openPriceAvg', 'openAvgPrice');
8234
+ const baseAmount = this.safeString2(position, 'total', 'openTotalPos');
8235
+ const entryPrice = this.safeStringN(position, ['openPriceAvg', 'openAvgPrice', 'avgPrice']);
6940
8236
  const maintenanceMarginPercentage = this.safeString(position, 'keepMarginRate');
6941
8237
  const openNotional = Precise.stringMul(entryPrice, baseAmount);
6942
8238
  if (initialMargin === undefined) {
@@ -6974,31 +8270,31 @@ export default class bitget extends Exchange {
6974
8270
  const percentage = Precise.stringMul(Precise.stringDiv(unrealizedPnl, initialMargin, 4), '100');
6975
8271
  return this.safePosition({
6976
8272
  'info': position,
6977
- 'id': this.safeString(position, 'orderId'),
8273
+ 'id': this.safeString2(position, 'orderId', 'positionId'),
6978
8274
  'symbol': symbol,
6979
8275
  'notional': this.parseNumber(notional),
6980
8276
  'marginMode': marginMode,
6981
8277
  'liquidationPrice': liquidationPrice,
6982
8278
  'entryPrice': this.parseNumber(entryPrice),
6983
8279
  'unrealizedPnl': this.parseNumber(unrealizedPnl),
6984
- 'realizedPnl': this.safeNumber(position, 'pnl'),
8280
+ 'realizedPnl': this.safeNumberN(position, ['pnl', 'curRealisedPnl', 'cumRealisedPnl']),
6985
8281
  'percentage': this.parseNumber(percentage),
6986
8282
  'contracts': contracts,
6987
8283
  'contractSize': contractSizeNumber,
6988
8284
  'markPrice': this.parseNumber(markPrice),
6989
- 'lastPrice': this.safeNumber(position, 'closeAvgPrice'),
8285
+ 'lastPrice': this.safeNumber2(position, 'closeAvgPrice', 'closePriceAvg'),
6990
8286
  'side': side,
6991
8287
  'hedged': hedged,
6992
8288
  'timestamp': timestamp,
6993
8289
  'datetime': this.iso8601(timestamp),
6994
- 'lastUpdateTimestamp': this.safeInteger(position, 'utime'),
8290
+ 'lastUpdateTimestamp': this.safeInteger2(position, 'utime', 'updatedTime'),
6995
8291
  'maintenanceMargin': this.parseNumber(maintenanceMargin),
6996
8292
  'maintenanceMarginPercentage': this.parseNumber(maintenanceMarginPercentage),
6997
8293
  'collateral': this.parseNumber(collateral),
6998
8294
  'initialMargin': this.parseNumber(initialMargin),
6999
8295
  'initialMarginPercentage': this.parseNumber(initialMarginPercentage),
7000
8296
  'leverage': this.parseNumber(leverage),
7001
- 'marginRatio': this.safeNumber(position, 'marginRatio'),
8297
+ 'marginRatio': this.safeNumber2(position, 'marginRatio', 'mmr'),
7002
8298
  'stopLossPrice': undefined,
7003
8299
  'takeProfitPrice': undefined,
7004
8300
  });
@@ -7008,10 +8304,12 @@ export default class bitget extends Exchange {
7008
8304
  * @name bitget#fetchFundingRateHistory
7009
8305
  * @description fetches historical funding rate prices
7010
8306
  * @see https://www.bitget.com/api-doc/contract/market/Get-History-Funding-Rate
8307
+ * @see https://www.bitget.com/api-doc/uta/public/Get-History-Funding-Rate
7011
8308
  * @param {string} symbol unified symbol of the market to fetch the funding rate history for
7012
8309
  * @param {int} [since] timestamp in ms of the earliest funding rate to fetch
7013
8310
  * @param {int} [limit] the maximum amount of funding rate structures to fetch
7014
8311
  * @param {object} [params] extra parameters specific to the exchange API endpoint
8312
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
7015
8313
  * @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)
7016
8314
  * @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure}
7017
8315
  */
@@ -7020,45 +8318,74 @@ export default class bitget extends Exchange {
7020
8318
  throw new ArgumentsRequired(this.id + ' fetchFundingRateHistory() requires a symbol argument');
7021
8319
  }
7022
8320
  await this.loadMarkets();
7023
- let paginate = false;
7024
- [paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
7025
- if (paginate) {
7026
- return await this.fetchPaginatedCallIncremental('fetchFundingRateHistory', symbol, since, limit, params, 'pageNo', 100);
7027
- }
7028
8321
  const market = this.market(symbol);
7029
- let productType = undefined;
7030
- [productType, params] = this.handleProductTypeAndParams(market, params);
7031
8322
  const request = {
7032
8323
  'symbol': market['id'],
7033
- 'productType': productType,
7034
- // 'pageSize': limit, // default 20
7035
- // 'pageNo': 1,
7036
8324
  };
7037
- if (limit !== undefined) {
7038
- request['pageSize'] = limit;
8325
+ let productType = undefined;
8326
+ let uta = undefined;
8327
+ let response = undefined;
8328
+ let result = undefined;
8329
+ [productType, params] = this.handleProductTypeAndParams(market, params);
8330
+ [uta, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'uta', false);
8331
+ if (uta) {
8332
+ if (limit !== undefined) {
8333
+ request['limit'] = limit;
8334
+ }
8335
+ request['category'] = productType;
8336
+ response = await this.publicUtaGetV3MarketHistoryFundRate(this.extend(request, params));
8337
+ //
8338
+ // {
8339
+ // "code": "00000",
8340
+ // "msg": "success",
8341
+ // "requestTime": 1750435113658,
8342
+ // "data": {
8343
+ // "resultList": [
8344
+ // {
8345
+ // "symbol": "BTCUSDT",
8346
+ // "fundingRate": "-0.000017",
8347
+ // "fundingRateTimestamp": "1750431600000"
8348
+ // },
8349
+ // ]
8350
+ // }
8351
+ // }
8352
+ //
8353
+ const data = this.safeDict(response, 'data', {});
8354
+ result = this.safeList(data, 'resultList', []);
8355
+ }
8356
+ else {
8357
+ let paginate = false;
8358
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
8359
+ if (paginate) {
8360
+ return await this.fetchPaginatedCallIncremental('fetchFundingRateHistory', symbol, since, limit, params, 'pageNo', 100);
8361
+ }
8362
+ if (limit !== undefined) {
8363
+ request['pageSize'] = limit;
8364
+ }
8365
+ request['productType'] = productType;
8366
+ response = await this.publicMixGetV2MixMarketHistoryFundRate(this.extend(request, params));
8367
+ //
8368
+ // {
8369
+ // "code": "00000",
8370
+ // "msg": "success",
8371
+ // "requestTime": 1652406728393,
8372
+ // "data": [
8373
+ // {
8374
+ // "symbol": "BTCUSDT",
8375
+ // "fundingRate": "-0.0003",
8376
+ // "fundingTime": "1652396400000"
8377
+ // },
8378
+ // ]
8379
+ // }
8380
+ //
8381
+ result = this.safeList(response, 'data', []);
7039
8382
  }
7040
- const response = await this.publicMixGetV2MixMarketHistoryFundRate(this.extend(request, params));
7041
- //
7042
- // {
7043
- // "code": "00000",
7044
- // "msg": "success",
7045
- // "requestTime": 1652406728393,
7046
- // "data": [
7047
- // {
7048
- // "symbol": "BTCUSDT",
7049
- // "fundingRate": "-0.0003",
7050
- // "fundingTime": "1652396400000"
7051
- // },
7052
- // ]
7053
- // }
7054
- //
7055
- const data = this.safeValue(response, 'data', []);
7056
8383
  const rates = [];
7057
- for (let i = 0; i < data.length; i++) {
7058
- const entry = data[i];
8384
+ for (let i = 0; i < result.length; i++) {
8385
+ const entry = result[i];
7059
8386
  const marketId = this.safeString(entry, 'symbol');
7060
8387
  const symbolInner = this.safeSymbol(marketId, market);
7061
- const timestamp = this.safeInteger(entry, 'fundingTime');
8388
+ const timestamp = this.safeInteger2(entry, 'fundingTime', 'fundingRateTimestamp');
7062
8389
  rates.push({
7063
8390
  'info': entry,
7064
8391
  'symbol': symbolInner,
@@ -7076,8 +8403,10 @@ export default class bitget extends Exchange {
7076
8403
  * @description fetch the current funding rate
7077
8404
  * @see https://www.bitget.com/api-doc/contract/market/Get-Current-Funding-Rate
7078
8405
  * @see https://www.bitget.com/api-doc/contract/market/Get-Symbol-Next-Funding-Time
8406
+ * @see https://www.bitget.com/api-doc/uta/public/Get-Current-Funding-Rate
7079
8407
  * @param {string} symbol unified market symbol
7080
8408
  * @param {object} [params] extra parameters specific to the exchange API endpoint
8409
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
7081
8410
  * @param {string} [params.method] either (default) 'publicMixGetV2MixMarketCurrentFundRate' or 'publicMixGetV2MixMarketFundingTime'
7082
8411
  * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
7083
8412
  */
@@ -7091,24 +8420,23 @@ export default class bitget extends Exchange {
7091
8420
  [productType, params] = this.handleProductTypeAndParams(market, params);
7092
8421
  const request = {
7093
8422
  'symbol': market['id'],
7094
- 'productType': productType,
7095
8423
  };
7096
- let method = undefined;
7097
- [method, params] = this.handleOptionAndParams(params, 'fetchFundingRate', 'method', 'publicMixGetV2MixMarketCurrentFundRate');
8424
+ let uta = undefined;
7098
8425
  let response = undefined;
7099
- if (method === 'publicMixGetV2MixMarketCurrentFundRate') {
7100
- response = await this.publicMixGetV2MixMarketCurrentFundRate(this.extend(request, params));
8426
+ [uta, params] = this.handleOptionAndParams(params, 'fetchFundingRate', 'uta', false);
8427
+ if (uta) {
8428
+ response = await this.publicUtaGetV3MarketCurrentFundRate(this.extend(request, params));
7101
8429
  //
7102
8430
  // {
7103
8431
  // "code": "00000",
7104
8432
  // "msg": "success",
7105
- // "requestTime": 1745500709429,
8433
+ // "requestTime": 1750897372153,
7106
8434
  // "data": [
7107
8435
  // {
7108
8436
  // "symbol": "BTCUSDT",
7109
- // "fundingRate": "-0.000013",
8437
+ // "fundingRate": "0.00001",
7110
8438
  // "fundingRateInterval": "8",
7111
- // "nextUpdate": "1745510400000",
8439
+ // "nextUpdate": "1750924800000",
7112
8440
  // "minFundingRate": "-0.003",
7113
8441
  // "maxFundingRate": "0.003"
7114
8442
  // }
@@ -7116,22 +8444,47 @@ export default class bitget extends Exchange {
7116
8444
  // }
7117
8445
  //
7118
8446
  }
7119
- else if (method === 'publicMixGetV2MixMarketFundingTime') {
7120
- response = await this.publicMixGetV2MixMarketFundingTime(this.extend(request, params));
7121
- //
7122
- // {
7123
- // "code": "00000",
7124
- // "msg": "success",
7125
- // "requestTime": 1745402092428,
7126
- // "data": [
7127
- // {
7128
- // "symbol": "BTCUSDT",
7129
- // "nextFundingTime": "1745424000000",
7130
- // "ratePeriod": "8"
7131
- // }
7132
- // ]
7133
- // }
7134
- //
8447
+ else {
8448
+ request['productType'] = productType;
8449
+ let method = undefined;
8450
+ [method, params] = this.handleOptionAndParams(params, 'fetchFundingRate', 'method', 'publicMixGetV2MixMarketCurrentFundRate');
8451
+ if (method === 'publicMixGetV2MixMarketCurrentFundRate') {
8452
+ response = await this.publicMixGetV2MixMarketCurrentFundRate(this.extend(request, params));
8453
+ //
8454
+ // {
8455
+ // "code": "00000",
8456
+ // "msg": "success",
8457
+ // "requestTime": 1745500709429,
8458
+ // "data": [
8459
+ // {
8460
+ // "symbol": "BTCUSDT",
8461
+ // "fundingRate": "-0.000013",
8462
+ // "fundingRateInterval": "8",
8463
+ // "nextUpdate": "1745510400000",
8464
+ // "minFundingRate": "-0.003",
8465
+ // "maxFundingRate": "0.003"
8466
+ // }
8467
+ // ]
8468
+ // }
8469
+ //
8470
+ }
8471
+ else if (method === 'publicMixGetV2MixMarketFundingTime') {
8472
+ response = await this.publicMixGetV2MixMarketFundingTime(this.extend(request, params));
8473
+ //
8474
+ // {
8475
+ // "code": "00000",
8476
+ // "msg": "success",
8477
+ // "requestTime": 1745402092428,
8478
+ // "data": [
8479
+ // {
8480
+ // "symbol": "BTCUSDT",
8481
+ // "nextFundingTime": "1745424000000",
8482
+ // "ratePeriod": "8"
8483
+ // }
8484
+ // ]
8485
+ // }
8486
+ //
8487
+ }
7135
8488
  }
7136
8489
  const data = this.safeList(response, 'data', []);
7137
8490
  return this.parseFundingRate(data[0], market);
@@ -7197,7 +8550,7 @@ export default class bitget extends Exchange {
7197
8550
  }
7198
8551
  parseFundingRate(contract, market = undefined) {
7199
8552
  //
7200
- // fetchFundingRate: publicMixGetV2MixMarketCurrentFundRate
8553
+ // fetchFundingRate: publicMixGetV2MixMarketCurrentFundRate, publicUtaGetV3MarketCurrentFundRate
7201
8554
  //
7202
8555
  // {
7203
8556
  // "symbol": "BTCUSDT",
@@ -7555,10 +8908,13 @@ export default class bitget extends Exchange {
7555
8908
  * @name bitget#setLeverage
7556
8909
  * @description set the level of leverage for a market
7557
8910
  * @see https://www.bitget.com/api-doc/contract/account/Change-Leverage
8911
+ * @see https://www.bitget.com/api-doc/uta/account/Change-Leverage
7558
8912
  * @param {int} leverage the rate of leverage
7559
8913
  * @param {string} symbol unified market symbol
7560
8914
  * @param {object} [params] extra parameters specific to the exchange API endpoint
7561
8915
  * @param {string} [params.holdSide] *isolated only* position direction, 'long' or 'short'
8916
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
8917
+ * @param {boolean} [params.posSide] required for uta isolated margin, long or short
7562
8918
  * @returns {object} response from the exchange
7563
8919
  */
7564
8920
  async setLeverage(leverage, symbol = undefined, params = {}) {
@@ -7571,27 +8927,51 @@ export default class bitget extends Exchange {
7571
8927
  [productType, params] = this.handleProductTypeAndParams(market, params);
7572
8928
  const request = {
7573
8929
  'symbol': market['id'],
7574
- 'marginCoin': market['settleId'],
7575
8930
  'leverage': this.numberToString(leverage),
7576
- 'productType': productType,
7577
- // 'holdSide': 'long',
7578
8931
  };
7579
- const response = await this.privateMixPostV2MixAccountSetLeverage(this.extend(request, params));
7580
- //
7581
- // {
7582
- // "code": "00000",
7583
- // "msg": "success",
7584
- // "requestTime": 1700864711517,
7585
- // "data": {
7586
- // "symbol": "BTCUSDT",
7587
- // "marginCoin": "USDT",
7588
- // "longLeverage": "25",
7589
- // "shortLeverage": "25",
7590
- // "crossMarginLeverage": "25",
7591
- // "marginMode": "crossed"
7592
- // }
7593
- // }
7594
- //
8932
+ let uta = undefined;
8933
+ let response = undefined;
8934
+ [uta, params] = this.handleOptionAndParams(params, 'setLeverage', 'uta', false);
8935
+ if (uta) {
8936
+ if (productType === 'SPOT') {
8937
+ let marginMode = undefined;
8938
+ [marginMode, params] = this.handleMarginModeAndParams('fetchTrades', params);
8939
+ if (marginMode !== undefined) {
8940
+ productType = 'MARGIN';
8941
+ }
8942
+ }
8943
+ request['coin'] = market['settleId'];
8944
+ request['category'] = productType;
8945
+ response = await this.privateUtaPostV3AccountSetLeverage(this.extend(request, params));
8946
+ //
8947
+ // {
8948
+ // "code": "00000",
8949
+ // "msg": "success",
8950
+ // "requestTime": 1752815940833,
8951
+ // "data": "success"
8952
+ // }
8953
+ //
8954
+ }
8955
+ else {
8956
+ request['marginCoin'] = market['settleId'];
8957
+ request['productType'] = productType;
8958
+ response = await this.privateMixPostV2MixAccountSetLeverage(this.extend(request, params));
8959
+ //
8960
+ // {
8961
+ // "code": "00000",
8962
+ // "msg": "success",
8963
+ // "requestTime": 1700864711517,
8964
+ // "data": {
8965
+ // "symbol": "BTCUSDT",
8966
+ // "marginCoin": "USDT",
8967
+ // "longLeverage": "25",
8968
+ // "shortLeverage": "25",
8969
+ // "crossMarginLeverage": "25",
8970
+ // "marginMode": "crossed"
8971
+ // }
8972
+ // }
8973
+ //
8974
+ }
7595
8975
  return response;
7596
8976
  }
7597
8977
  /**
@@ -7647,36 +9027,54 @@ export default class bitget extends Exchange {
7647
9027
  * @name bitget#setPositionMode
7648
9028
  * @description set hedged to true or false for a market
7649
9029
  * @see https://www.bitget.com/api-doc/contract/account/Change-Hold-Mode
9030
+ * @see https://www.bitget.com/api-doc/uta/account/Change-Position-Mode
7650
9031
  * @param {bool} hedged set to true to use dualSidePosition
7651
9032
  * @param {string} symbol not used by bitget setPositionMode ()
7652
9033
  * @param {object} [params] extra parameters specific to the exchange API endpoint
7653
- * @param {string} [params.productType] required if symbol is undefined: 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
9034
+ * @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'
9035
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
7654
9036
  * @returns {object} response from the exchange
7655
9037
  */
7656
9038
  async setPositionMode(hedged, symbol = undefined, params = {}) {
7657
9039
  await this.loadMarkets();
7658
9040
  const posMode = hedged ? 'hedge_mode' : 'one_way_mode';
9041
+ const request = {};
7659
9042
  let market = undefined;
7660
9043
  if (symbol !== undefined) {
7661
9044
  market = this.market(symbol);
7662
9045
  }
7663
9046
  let productType = undefined;
9047
+ let uta = undefined;
9048
+ let response = undefined;
7664
9049
  [productType, params] = this.handleProductTypeAndParams(market, params);
7665
- const request = {
7666
- 'posMode': posMode,
7667
- 'productType': productType,
7668
- };
7669
- const response = await this.privateMixPostV2MixAccountSetPositionMode(this.extend(request, params));
7670
- //
7671
- // {
7672
- // "code": "00000",
7673
- // "msg": "success",
7674
- // "requestTime": 1700865608009,
7675
- // "data": {
7676
- // "posMode": "hedge_mode"
7677
- // }
7678
- // }
7679
- //
9050
+ [uta, params] = this.handleOptionAndParams(params, 'setPositionMode', 'uta', false);
9051
+ if (uta) {
9052
+ request['holdMode'] = posMode;
9053
+ response = await this.privateUtaPostV3AccountSetHoldMode(this.extend(request, params));
9054
+ //
9055
+ // {
9056
+ // "code": "00000",
9057
+ // "msg": "success",
9058
+ // "requestTime": 1752816734592,
9059
+ // "data": "success"
9060
+ // }
9061
+ //
9062
+ }
9063
+ else {
9064
+ request['posMode'] = posMode;
9065
+ request['productType'] = productType;
9066
+ response = await this.privateMixPostV2MixAccountSetPositionMode(this.extend(request, params));
9067
+ //
9068
+ // {
9069
+ // "code": "00000",
9070
+ // "msg": "success",
9071
+ // "requestTime": 1700865608009,
9072
+ // "data": {
9073
+ // "posMode": "hedge_mode"
9074
+ // }
9075
+ // }
9076
+ //
9077
+ }
7680
9078
  return response;
7681
9079
  }
7682
9080
  /**
@@ -7684,8 +9082,10 @@ export default class bitget extends Exchange {
7684
9082
  * @name bitget#fetchOpenInterest
7685
9083
  * @description retrieves the open interest of a contract trading pair
7686
9084
  * @see https://www.bitget.com/api-doc/contract/market/Get-Open-Interest
9085
+ * @see https://www.bitget.com/api-doc/uta/public/Get-Open-Interest
7687
9086
  * @param {string} symbol unified CCXT market symbol
7688
9087
  * @param {object} [params] exchange specific parameters
9088
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
7689
9089
  * @returns {object} an open interest structure{@link https://docs.ccxt.com/#/?id=open-interest-structure}
7690
9090
  */
7691
9091
  async fetchOpenInterest(symbol, params = {}) {
@@ -7694,33 +9094,60 @@ export default class bitget extends Exchange {
7694
9094
  if (!market['contract']) {
7695
9095
  throw new BadRequest(this.id + ' fetchOpenInterest() supports contract markets only');
7696
9096
  }
7697
- let productType = undefined;
7698
- [productType, params] = this.handleProductTypeAndParams(market, params);
7699
- const request = {
7700
- 'symbol': market['id'],
7701
- 'productType': productType,
7702
- };
7703
- const response = await this.publicMixGetV2MixMarketOpenInterest(this.extend(request, params));
7704
- //
7705
- // {
7706
- // "code": "00000",
7707
- // "msg": "success",
7708
- // "requestTime": 1700866041022,
7709
- // "data": {
7710
- // "openInterestList": [
7711
- // {
7712
- // "symbol": "BTCUSDT",
7713
- // "size": "52234.134"
7714
- // }
7715
- // ],
7716
- // "ts": "1700866041023"
7717
- // }
7718
- // }
7719
- //
9097
+ let productType = undefined;
9098
+ [productType, params] = this.handleProductTypeAndParams(market, params);
9099
+ const request = {
9100
+ 'symbol': market['id'],
9101
+ };
9102
+ let uta = undefined;
9103
+ let response = undefined;
9104
+ [uta, params] = this.handleOptionAndParams(params, 'fetchOpenInterest', 'uta', false);
9105
+ if (uta) {
9106
+ request['category'] = productType;
9107
+ response = await this.publicUtaGetV3MarketOpenInterest(this.extend(request, params));
9108
+ //
9109
+ // {
9110
+ // "code": "00000",
9111
+ // "msg": "success",
9112
+ // "requestTime": 1751101221545,
9113
+ // "data": {
9114
+ // "list": [
9115
+ // {
9116
+ // "symbol": "BTCUSDT",
9117
+ // "openInterest": "18166.3583"
9118
+ // }
9119
+ // ],
9120
+ // "ts": "1751101220993"
9121
+ // }
9122
+ // }
9123
+ //
9124
+ }
9125
+ else {
9126
+ request['productType'] = productType;
9127
+ response = await this.publicMixGetV2MixMarketOpenInterest(this.extend(request, params));
9128
+ //
9129
+ // {
9130
+ // "code": "00000",
9131
+ // "msg": "success",
9132
+ // "requestTime": 1700866041022,
9133
+ // "data": {
9134
+ // "openInterestList": [
9135
+ // {
9136
+ // "symbol": "BTCUSDT",
9137
+ // "size": "52234.134"
9138
+ // }
9139
+ // ],
9140
+ // "ts": "1700866041023"
9141
+ // }
9142
+ // }
9143
+ //
9144
+ }
7720
9145
  const data = this.safeDict(response, 'data', {});
7721
9146
  return this.parseOpenInterest(data, market);
7722
9147
  }
7723
9148
  parseOpenInterest(interest, market = undefined) {
9149
+ //
9150
+ // default
7724
9151
  //
7725
9152
  // {
7726
9153
  // "openInterestList": [
@@ -7732,12 +9159,24 @@ export default class bitget extends Exchange {
7732
9159
  // "ts": "1700866041023"
7733
9160
  // }
7734
9161
  //
7735
- const data = this.safeValue(interest, 'openInterestList', []);
9162
+ // uta
9163
+ //
9164
+ // {
9165
+ // "list": [
9166
+ // {
9167
+ // "symbol": "BTCUSDT",
9168
+ // "openInterest": "18166.3583"
9169
+ // }
9170
+ // ],
9171
+ // "ts": "1751101220993"
9172
+ // }
9173
+ //
9174
+ const data = this.safeList2(interest, 'openInterestList', 'list', []);
7736
9175
  const timestamp = this.safeInteger(interest, 'ts');
7737
9176
  const marketId = this.safeString(data[0], 'symbol');
7738
9177
  return this.safeOpenInterest({
7739
9178
  'symbol': this.safeSymbol(marketId, market, undefined, 'contract'),
7740
- 'openInterestAmount': this.safeNumber(data[0], 'size'),
9179
+ 'openInterestAmount': this.safeNumber2(data[0], 'size', 'openInterest'),
7741
9180
  'openInterestValue': undefined,
7742
9181
  'timestamp': timestamp,
7743
9182
  'datetime': this.iso8601(timestamp),
@@ -8476,9 +9915,10 @@ export default class bitget extends Exchange {
8476
9915
  * @name bitget#fetchCrossBorrowRate
8477
9916
  * @description fetch the rate of interest to borrow a currency for margin trading
8478
9917
  * @see https://www.bitget.com/api-doc/margin/cross/account/Get-Cross-Margin-Interest-Rate-And-Borrowable
9918
+ * @see https://www.bitget.com/api-doc/uta/public/Get-Margin-Loans
8479
9919
  * @param {string} code unified currency code
8480
9920
  * @param {object} [params] extra parameters specific to the exchange API endpoint
8481
- * @param {string} [params.symbol] required for isolated margin
9921
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
8482
9922
  * @returns {object} a [borrow rate structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#borrow-rate-structure}
8483
9923
  */
8484
9924
  async fetchCrossBorrowRate(code, params = {}) {
@@ -8487,40 +9927,64 @@ export default class bitget extends Exchange {
8487
9927
  const request = {
8488
9928
  'coin': currency['id'],
8489
9929
  };
8490
- const response = await this.privateMarginGetV2MarginCrossedInterestRateAndLimit(this.extend(request, params));
8491
- //
8492
- // {
8493
- // "code": "00000",
8494
- // "msg": "success",
8495
- // "requestTime": 1700879047861,
8496
- // "data": [
8497
- // {
8498
- // "coin": "BTC",
8499
- // "leverage": "3",
8500
- // "transferable": true,
8501
- // "borrowable": true,
8502
- // "dailyInterestRate": "0.00007",
8503
- // "annualInterestRate": "0.02555",
8504
- // "maxBorrowableAmount": "26",
8505
- // "vipList": [
8506
- // {"level":"0","limit":"26","dailyInterestRate":"0.00007","annualInterestRate":"0.02555","discountRate":"1"},
8507
- // {"level":"1","limit":"26.78","dailyInterestRate":"0.0000679","annualInterestRate":"0.0247835","discountRate":"0.97"},
8508
- // {"level":"2","limit":"28.08","dailyInterestRate":"0.0000644","annualInterestRate":"0.023506","discountRate":"0.92"},
8509
- // {"level":"3","limit":"30.16","dailyInterestRate":"0.0000602","annualInterestRate":"0.021973","discountRate":"0.86"},
8510
- // {"level":"4","limit":"34.58","dailyInterestRate":"0.0000525","annualInterestRate":"0.0191625","discountRate":"0.75"},
8511
- // {"level":"5","limit":"43.16","dailyInterestRate":"0.000042","annualInterestRate":"0.01533","discountRate":"0.6"}
8512
- // ]
8513
- // }
8514
- // ]
8515
- // }
8516
- //
9930
+ let uta = undefined;
9931
+ let response = undefined;
9932
+ let result = undefined;
9933
+ [uta, params] = this.handleOptionAndParams(params, 'fetchCrossBorrowRate', 'uta', false);
9934
+ if (uta) {
9935
+ response = await this.publicUtaGetV3MarketMarginLoans(this.extend(request, params));
9936
+ //
9937
+ // {
9938
+ // "code": "00000",
9939
+ // "msg": "success",
9940
+ // "requestTime": 1752817798893,
9941
+ // "data": {
9942
+ // "dailyInterest": "0.00100008",
9943
+ // "annualInterest": "0.3650292",
9944
+ // "limit": "100"
9945
+ // }
9946
+ // }
9947
+ //
9948
+ result = this.safeDict(response, 'data', {});
9949
+ }
9950
+ else {
9951
+ response = await this.privateMarginGetV2MarginCrossedInterestRateAndLimit(this.extend(request, params));
9952
+ //
9953
+ // {
9954
+ // "code": "00000",
9955
+ // "msg": "success",
9956
+ // "requestTime": 1700879047861,
9957
+ // "data": [
9958
+ // {
9959
+ // "coin": "BTC",
9960
+ // "leverage": "3",
9961
+ // "transferable": true,
9962
+ // "borrowable": true,
9963
+ // "dailyInterestRate": "0.00007",
9964
+ // "annualInterestRate": "0.02555",
9965
+ // "maxBorrowableAmount": "26",
9966
+ // "vipList": [
9967
+ // {"level":"0","limit":"26","dailyInterestRate":"0.00007","annualInterestRate":"0.02555","discountRate":"1"},
9968
+ // {"level":"1","limit":"26.78","dailyInterestRate":"0.0000679","annualInterestRate":"0.0247835","discountRate":"0.97"},
9969
+ // {"level":"2","limit":"28.08","dailyInterestRate":"0.0000644","annualInterestRate":"0.023506","discountRate":"0.92"},
9970
+ // {"level":"3","limit":"30.16","dailyInterestRate":"0.0000602","annualInterestRate":"0.021973","discountRate":"0.86"},
9971
+ // {"level":"4","limit":"34.58","dailyInterestRate":"0.0000525","annualInterestRate":"0.0191625","discountRate":"0.75"},
9972
+ // {"level":"5","limit":"43.16","dailyInterestRate":"0.000042","annualInterestRate":"0.01533","discountRate":"0.6"}
9973
+ // ]
9974
+ // }
9975
+ // ]
9976
+ // }
9977
+ //
9978
+ const data = this.safeValue(response, 'data', []);
9979
+ result = this.safeValue(data, 0, {});
9980
+ }
8517
9981
  const timestamp = this.safeInteger(response, 'requestTime');
8518
- const data = this.safeValue(response, 'data', []);
8519
- const first = this.safeValue(data, 0, {});
8520
- first['timestamp'] = timestamp;
8521
- return this.parseBorrowRate(first, currency);
9982
+ result['timestamp'] = timestamp;
9983
+ return this.parseBorrowRate(result, currency);
8522
9984
  }
8523
9985
  parseBorrowRate(info, currency = undefined) {
9986
+ //
9987
+ // default
8524
9988
  //
8525
9989
  // {
8526
9990
  // "coin": "BTC",
@@ -8540,11 +10004,19 @@ export default class bitget extends Exchange {
8540
10004
  // ]
8541
10005
  // }
8542
10006
  //
10007
+ // uta
10008
+ //
10009
+ // {
10010
+ // "dailyInterest": "0.00100008",
10011
+ // "annualInterest": "0.3650292",
10012
+ // "limit": "100"
10013
+ // }
10014
+ //
8543
10015
  const currencyId = this.safeString(info, 'coin');
8544
10016
  const timestamp = this.safeInteger(info, 'timestamp');
8545
10017
  return {
8546
10018
  'currency': this.safeCurrencyCode(currencyId, currency),
8547
- 'rate': this.safeNumber(info, 'dailyInterestRate'),
10019
+ 'rate': this.safeNumber2(info, 'dailyInterestRate', 'dailyInterest'),
8548
10020
  'period': 86400000,
8549
10021
  'timestamp': timestamp,
8550
10022
  'datetime': this.iso8601(timestamp),
@@ -8709,43 +10181,72 @@ export default class bitget extends Exchange {
8709
10181
  * @name bitget#closePosition
8710
10182
  * @description closes an open position for a market
8711
10183
  * @see https://www.bitget.com/api-doc/contract/trade/Flash-Close-Position
10184
+ * @see https://www.bitget.com/api-doc/uta/trade/Close-All-Positions
8712
10185
  * @param {string} symbol unified CCXT market symbol
8713
10186
  * @param {string} [side] one-way mode: 'buy' or 'sell', hedge-mode: 'long' or 'short'
8714
10187
  * @param {object} [params] extra parameters specific to the exchange API endpoint
10188
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
8715
10189
  * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
8716
10190
  */
8717
10191
  async closePosition(symbol, side = undefined, params = {}) {
8718
10192
  await this.loadMarkets();
8719
10193
  const market = this.market(symbol);
8720
- let productType = undefined;
8721
- [productType, params] = this.handleProductTypeAndParams(market, params);
8722
10194
  const request = {
8723
10195
  'symbol': market['id'],
8724
- 'productType': productType,
8725
10196
  };
8726
- if (side !== undefined) {
8727
- request['holdSide'] = side;
10197
+ let productType = undefined;
10198
+ let uta = undefined;
10199
+ let response = undefined;
10200
+ [productType, params] = this.handleProductTypeAndParams(market, params);
10201
+ [uta, params] = this.handleOptionAndParams(params, 'closePosition', 'uta', false);
10202
+ if (uta) {
10203
+ if (side !== undefined) {
10204
+ request['posSide'] = side;
10205
+ }
10206
+ request['category'] = productType;
10207
+ response = await this.privateUtaPostV3TradeClosePositions(this.extend(request, params));
10208
+ //
10209
+ // {
10210
+ // "code": "00000",
10211
+ // "msg": "success",
10212
+ // "requestTime": 1751020218384,
10213
+ // "data": {
10214
+ // "list": [
10215
+ // {
10216
+ // "orderId": "1322440134099320832",
10217
+ // "clientOid": "1322440134099320833"
10218
+ // }
10219
+ // ]
10220
+ // }
10221
+ // }
10222
+ //
10223
+ }
10224
+ else {
10225
+ if (side !== undefined) {
10226
+ request['holdSide'] = side;
10227
+ }
10228
+ request['productType'] = productType;
10229
+ response = await this.privateMixPostV2MixOrderClosePositions(this.extend(request, params));
10230
+ //
10231
+ // {
10232
+ // "code": "00000",
10233
+ // "msg": "success",
10234
+ // "requestTime": 1702975017017,
10235
+ // "data": {
10236
+ // "successList": [
10237
+ // {
10238
+ // "orderId": "1120923953904893955",
10239
+ // "clientOid": "1120923953904893956"
10240
+ // }
10241
+ // ],
10242
+ // "failureList": [],
10243
+ // "result": false
10244
+ // }
10245
+ // }
10246
+ //
8728
10247
  }
8729
- const response = await this.privateMixPostV2MixOrderClosePositions(this.extend(request, params));
8730
- //
8731
- // {
8732
- // "code": "00000",
8733
- // "msg": "success",
8734
- // "requestTime": 1702975017017,
8735
- // "data": {
8736
- // "successList": [
8737
- // {
8738
- // "orderId": "1120923953904893955",
8739
- // "clientOid": "1120923953904893956"
8740
- // }
8741
- // ],
8742
- // "failureList": [],
8743
- // "result": false
8744
- // }
8745
- // }
8746
- //
8747
10248
  const data = this.safeValue(response, 'data', {});
8748
- const order = this.safeList(data, 'successList', []);
10249
+ const order = this.safeList2(data, 'successList', 'list', []);
8749
10250
  return this.parseOrder(order[0], market);
8750
10251
  }
8751
10252
  /**
@@ -8753,37 +10254,62 @@ export default class bitget extends Exchange {
8753
10254
  * @name bitget#closeAllPositions
8754
10255
  * @description closes all open positions for a market type
8755
10256
  * @see https://www.bitget.com/api-doc/contract/trade/Flash-Close-Position
10257
+ * @see https://www.bitget.com/api-doc/uta/trade/Close-All-Positions
8756
10258
  * @param {object} [params] extra parameters specific to the exchange API endpoint
8757
10259
  * @param {string} [params.productType] 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
10260
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
8758
10261
  * @returns {object[]} A list of [position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
8759
10262
  */
8760
10263
  async closeAllPositions(params = {}) {
8761
10264
  await this.loadMarkets();
10265
+ const request = {};
8762
10266
  let productType = undefined;
10267
+ let uta = undefined;
10268
+ let response = undefined;
8763
10269
  [productType, params] = this.handleProductTypeAndParams(undefined, params);
8764
- const request = {
8765
- 'productType': productType,
8766
- };
8767
- const response = await this.privateMixPostV2MixOrderClosePositions(this.extend(request, params));
8768
- //
8769
- // {
8770
- // "code": "00000",
8771
- // "msg": "success",
8772
- // "requestTime": 1702975017017,
8773
- // "data": {
8774
- // "successList": [
8775
- // {
8776
- // "orderId": "1120923953904893955",
8777
- // "clientOid": "1120923953904893956"
8778
- // }
8779
- // ],
8780
- // "failureList": [],
8781
- // "result": false
8782
- // }
8783
- // }
8784
- //
10270
+ [uta, params] = this.handleOptionAndParams(params, 'closeAllPositions', 'uta', false);
10271
+ if (uta) {
10272
+ request['category'] = productType;
10273
+ response = await this.privateUtaPostV3TradeClosePositions(this.extend(request, params));
10274
+ //
10275
+ // {
10276
+ // "code": "00000",
10277
+ // "msg": "success",
10278
+ // "requestTime": 1751020218384,
10279
+ // "data": {
10280
+ // "list": [
10281
+ // {
10282
+ // "orderId": "1322440134099320832",
10283
+ // "clientOid": "1322440134099320833"
10284
+ // }
10285
+ // ]
10286
+ // }
10287
+ // }
10288
+ //
10289
+ }
10290
+ else {
10291
+ request['productType'] = productType;
10292
+ response = await this.privateMixPostV2MixOrderClosePositions(this.extend(request, params));
10293
+ //
10294
+ // {
10295
+ // "code": "00000",
10296
+ // "msg": "success",
10297
+ // "requestTime": 1702975017017,
10298
+ // "data": {
10299
+ // "successList": [
10300
+ // {
10301
+ // "orderId": "1120923953904893955",
10302
+ // "clientOid": "1120923953904893956"
10303
+ // }
10304
+ // ],
10305
+ // "failureList": [],
10306
+ // "result": false
10307
+ // }
10308
+ // }
10309
+ //
10310
+ }
8785
10311
  const data = this.safeValue(response, 'data', {});
8786
- const orderInfo = this.safeList(data, 'successList', []);
10312
+ const orderInfo = this.safeList2(data, 'successList', 'list', []);
8787
10313
  return this.parsePositions(orderInfo, undefined, params);
8788
10314
  }
8789
10315
  /**
@@ -8851,25 +10377,27 @@ export default class bitget extends Exchange {
8851
10377
  * @name bitget#fetchPositionsHistory
8852
10378
  * @description fetches historical positions
8853
10379
  * @see https://www.bitget.com/api-doc/contract/position/Get-History-Position
10380
+ * @see https://www.bitget.com/api-doc/uta/trade/Get-Position-History
8854
10381
  * @param {string[]} [symbols] unified contract symbols
8855
10382
  * @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
8856
10383
  * @param {int} [limit] the maximum amount of records to fetch, default=20, max=100
8857
10384
  * @param {object} params extra parameters specific to the exchange api endpoint
8858
10385
  * @param {int} [params.until] timestamp in ms of the latest position to fetch, max range for params["until"] - since is 3 months
8859
- *
8860
- * EXCHANGE SPECIFIC PARAMETERS
8861
10386
  * @param {string} [params.productType] USDT-FUTURES (default), COIN-FUTURES, USDC-FUTURES, SUSDT-FUTURES, SCOIN-FUTURES, or SUSDC-FUTURES
10387
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
8862
10388
  * @returns {object[]} a list of [position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
8863
10389
  */
8864
10390
  async fetchPositionsHistory(symbols = undefined, since = undefined, limit = undefined, params = {}) {
8865
10391
  await this.loadMarkets();
8866
- const until = this.safeInteger(params, 'until');
8867
- params = this.omit(params, 'until');
8868
- const request = {};
10392
+ let request = {};
10393
+ let market = undefined;
10394
+ let productType = undefined;
10395
+ let uta = undefined;
10396
+ let response = undefined;
8869
10397
  if (symbols !== undefined) {
8870
10398
  const symbolsLength = symbols.length;
8871
10399
  if (symbolsLength > 0) {
8872
- const market = this.market(symbols[0]);
10400
+ market = this.market(symbols[0]);
8873
10401
  request['symbol'] = market['id'];
8874
10402
  }
8875
10403
  }
@@ -8879,41 +10407,79 @@ export default class bitget extends Exchange {
8879
10407
  if (limit !== undefined) {
8880
10408
  request['limit'] = limit;
8881
10409
  }
8882
- if (until !== undefined) {
8883
- request['endTime'] = until;
10410
+ [request, params] = this.handleUntilOption('endTime', request, params);
10411
+ [productType, params] = this.handleProductTypeAndParams(market, params);
10412
+ [uta, params] = this.handleOptionAndParams(params, 'fetchPositionsHistory', 'uta', false);
10413
+ if (uta) {
10414
+ request['category'] = productType;
10415
+ response = await this.privateUtaGetV3PositionHistoryPosition(this.extend(request, params));
10416
+ //
10417
+ // {
10418
+ // "code": "00000",
10419
+ // "msg": "success",
10420
+ // "requestTime": 1751020950427,
10421
+ // "data": {
10422
+ // "list": [
10423
+ // {
10424
+ // "positionId": "1322441328637100049",
10425
+ // "category": "USDT-FUTURES",
10426
+ // "symbol": "BTCUSDT",
10427
+ // "marginCoin": "USDT",
10428
+ // "holdMode": "hedge_mode",
10429
+ // "posSide": "long",
10430
+ // "marginMode": "crossed",
10431
+ // "openPriceAvg": "107003.7",
10432
+ // "closePriceAvg": "107005.4",
10433
+ // "openTotalPos": "0.0001",
10434
+ // "closeTotalPos": "0.0001",
10435
+ // "cumRealisedPnl": "0.00017",
10436
+ // "netProfit": "-0.01267055",
10437
+ // "totalFunding": "0",
10438
+ // "openFeeTotal": "-0.00642022",
10439
+ // "closeFeeTotal": "-0.00642032",
10440
+ // "createdTime": "1751020503195",
10441
+ // "updatedTime": "1751020520458"
10442
+ // },
10443
+ // ],
10444
+ // "cursor": "1322440134158041089"
10445
+ // }
10446
+ // }
10447
+ //
10448
+ }
10449
+ else {
10450
+ response = await this.privateMixGetV2MixPositionHistoryPosition(this.extend(request, params));
10451
+ //
10452
+ // {
10453
+ // code: '00000',
10454
+ // msg: 'success',
10455
+ // requestTime: '1712794148791',
10456
+ // data: {
10457
+ // list: [
10458
+ // {
10459
+ // symbol: 'XRPUSDT',
10460
+ // marginCoin: 'USDT',
10461
+ // holdSide: 'long',
10462
+ // openAvgPrice: '0.64967',
10463
+ // closeAvgPrice: '0.58799',
10464
+ // marginMode: 'isolated',
10465
+ // openTotalPos: '10',
10466
+ // closeTotalPos: '10',
10467
+ // pnl: '-0.62976205',
10468
+ // netProfit: '-0.65356802',
10469
+ // totalFunding: '-0.01638',
10470
+ // openFee: '-0.00389802',
10471
+ // closeFee: '-0.00352794',
10472
+ // ctime: '1709590322199',
10473
+ // utime: '1709667583395'
10474
+ // },
10475
+ // ...
10476
+ // ]
10477
+ // }
10478
+ // }
10479
+ //
8884
10480
  }
8885
- const response = await this.privateMixGetV2MixPositionHistoryPosition(this.extend(request, params));
8886
- //
8887
- // {
8888
- // code: '00000',
8889
- // msg: 'success',
8890
- // requestTime: '1712794148791',
8891
- // data: {
8892
- // list: [
8893
- // {
8894
- // symbol: 'XRPUSDT',
8895
- // marginCoin: 'USDT',
8896
- // holdSide: 'long',
8897
- // openAvgPrice: '0.64967',
8898
- // closeAvgPrice: '0.58799',
8899
- // marginMode: 'isolated',
8900
- // openTotalPos: '10',
8901
- // closeTotalPos: '10',
8902
- // pnl: '-0.62976205',
8903
- // netProfit: '-0.65356802',
8904
- // totalFunding: '-0.01638',
8905
- // openFee: '-0.00389802',
8906
- // closeFee: '-0.00352794',
8907
- // ctime: '1709590322199',
8908
- // utime: '1709667583395'
8909
- // },
8910
- // ...
8911
- // ]
8912
- // }
8913
- // }
8914
- //
8915
- const data = this.safeDict(response, 'data');
8916
- const responseList = this.safeList(data, 'list');
10481
+ const data = this.safeDict(response, 'data', {});
10482
+ const responseList = this.safeList(data, 'list', []);
8917
10483
  const positions = this.parsePositions(responseList, symbols, params);
8918
10484
  return this.filterBySinceLimit(positions, since, limit);
8919
10485
  }
@@ -9193,8 +10759,10 @@ export default class bitget extends Exchange {
9193
10759
  * @name bitget#fetchFundingInterval
9194
10760
  * @description fetch the current funding rate interval
9195
10761
  * @see https://www.bitget.com/api-doc/contract/market/Get-Symbol-Next-Funding-Time
10762
+ * @see https://www.bitget.com/api-doc/uta/public/Get-Current-Funding-Rate
9196
10763
  * @param {string} symbol unified market symbol
9197
10764
  * @param {object} [params] extra parameters specific to the exchange API endpoint
10765
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
9198
10766
  * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
9199
10767
  */
9200
10768
  async fetchFundingInterval(symbol, params = {}) {
@@ -9204,23 +10772,48 @@ export default class bitget extends Exchange {
9204
10772
  [productType, params] = this.handleProductTypeAndParams(market, params);
9205
10773
  const request = {
9206
10774
  'symbol': market['id'],
9207
- 'productType': productType,
9208
10775
  };
9209
- const response = await this.publicMixGetV2MixMarketFundingTime(this.extend(request, params));
9210
- //
9211
- // {
9212
- // "code": "00000",
9213
- // "msg": "success",
9214
- // "requestTime": 1727930153888,
9215
- // "data": [
9216
- // {
9217
- // "symbol": "BTCUSDT",
9218
- // "nextFundingTime": "1727942400000",
9219
- // "ratePeriod": "8"
9220
- // }
9221
- // ]
9222
- // }
9223
- //
10776
+ let response = undefined;
10777
+ let uta = undefined;
10778
+ [uta, params] = this.handleOptionAndParams(params, 'fetchFundingInterval', 'uta', false);
10779
+ if (uta) {
10780
+ response = await this.publicUtaGetV3MarketCurrentFundRate(this.extend(request, params));
10781
+ //
10782
+ // {
10783
+ // "code": "00000",
10784
+ // "msg": "success",
10785
+ // "requestTime": 1752880157959,
10786
+ // "data": [
10787
+ // {
10788
+ // "symbol": "BTCUSDT",
10789
+ // "fundingRate": "0.0001",
10790
+ // "fundingRateInterval": "8",
10791
+ // "nextUpdate": "1752883200000",
10792
+ // "minFundingRate": "-0.003",
10793
+ // "maxFundingRate": "0.003"
10794
+ // }
10795
+ // ]
10796
+ // }
10797
+ //
10798
+ }
10799
+ else {
10800
+ request['productType'] = productType;
10801
+ response = await this.publicMixGetV2MixMarketFundingTime(this.extend(request, params));
10802
+ //
10803
+ // {
10804
+ // "code": "00000",
10805
+ // "msg": "success",
10806
+ // "requestTime": 1727930153888,
10807
+ // "data": [
10808
+ // {
10809
+ // "symbol": "BTCUSDT",
10810
+ // "nextFundingTime": "1727942400000",
10811
+ // "ratePeriod": "8"
10812
+ // }
10813
+ // ]
10814
+ // }
10815
+ //
10816
+ }
9224
10817
  const data = this.safeList(response, 'data', []);
9225
10818
  const first = this.safeDict(data, 0, {});
9226
10819
  return this.parseFundingRate(first, market);
@@ -9395,7 +10988,7 @@ export default class bitget extends Exchange {
9395
10988
  }
9396
10989
  }
9397
10990
  const sandboxMode = this.safeBool2(this.options, 'sandboxMode', 'sandbox', false);
9398
- if (sandboxMode && (path !== 'v2/public/time')) {
10991
+ if (sandboxMode && (path !== 'v2/public/time') && (path !== 'v3/market/current-fund-rate')) {
9399
10992
  // https://github.com/ccxt/ccxt/issues/25252#issuecomment-2662742336
9400
10993
  if (headers === undefined) {
9401
10994
  headers = {};