ccxt 4.4.98 → 4.4.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -6
- package/dist/373.ccxt.browser.js +7630 -0
- package/dist/373.ccxt.browser.min.js +1 -0
- package/dist/ccxt.browser.min.js +8 -8
- package/dist/cjs/ccxt.js +289 -286
- package/dist/cjs/src/abstract/alpaca.js +4 -2
- package/dist/cjs/src/abstract/apex.js +4 -2
- package/dist/cjs/src/abstract/ascendex.js +4 -2
- package/dist/cjs/src/abstract/bigone.js +4 -2
- package/dist/cjs/src/abstract/binance.js +4 -2
- package/dist/cjs/src/abstract/bingx.js +4 -2
- package/dist/cjs/src/abstract/bit2c.js +4 -2
- package/dist/cjs/src/abstract/bitbank.js +4 -2
- package/dist/cjs/src/abstract/bitbns.js +4 -2
- package/dist/cjs/src/abstract/bitfinex.js +4 -2
- package/dist/cjs/src/abstract/bitflyer.js +4 -2
- package/dist/cjs/src/abstract/bitget.js +4 -2
- package/dist/cjs/src/abstract/bithumb.js +4 -2
- package/dist/cjs/src/abstract/bitmart.js +4 -2
- package/dist/cjs/src/abstract/bitmex.js +4 -2
- package/dist/cjs/src/abstract/bitopro.js +4 -2
- package/dist/cjs/src/abstract/bitrue.js +4 -2
- package/dist/cjs/src/abstract/bitso.js +4 -2
- package/dist/cjs/src/abstract/bitstamp.js +4 -2
- package/dist/cjs/src/abstract/bitteam.js +4 -2
- package/dist/cjs/src/abstract/bittrade.js +4 -2
- package/dist/cjs/src/abstract/bitvavo.js +4 -2
- package/dist/cjs/src/abstract/blockchaincom.js +4 -2
- package/dist/cjs/src/abstract/blofin.js +4 -2
- package/dist/cjs/src/abstract/btcalpha.js +4 -2
- package/dist/cjs/src/abstract/btcbox.js +4 -2
- package/dist/cjs/src/abstract/btcmarkets.js +4 -2
- package/dist/cjs/src/abstract/btcturk.js +4 -2
- package/dist/cjs/src/abstract/bybit.js +4 -2
- package/dist/cjs/src/abstract/cex.js +4 -2
- package/dist/cjs/src/abstract/coinbase.js +4 -2
- package/dist/cjs/src/abstract/coinbaseexchange.js +4 -2
- package/dist/cjs/src/abstract/coinbaseinternational.js +4 -2
- package/dist/cjs/src/abstract/coincatch.js +4 -2
- package/dist/cjs/src/abstract/coincheck.js +4 -2
- package/dist/cjs/src/abstract/coinex.js +4 -2
- package/dist/cjs/src/abstract/coinmate.js +4 -2
- package/dist/cjs/src/abstract/coinmetro.js +4 -2
- package/dist/cjs/src/abstract/coinone.js +4 -2
- package/dist/cjs/src/abstract/coinsph.js +4 -2
- package/dist/cjs/src/abstract/coinspot.js +4 -2
- package/dist/cjs/src/abstract/cryptocom.js +4 -2
- package/dist/cjs/src/abstract/cryptomus.js +4 -2
- package/dist/cjs/src/abstract/defx.js +4 -2
- package/dist/cjs/src/abstract/delta.js +4 -2
- package/dist/cjs/src/abstract/deribit.js +4 -2
- package/dist/cjs/src/abstract/derive.js +4 -2
- package/dist/cjs/src/abstract/digifinex.js +4 -2
- package/dist/cjs/src/abstract/ellipx.js +4 -2
- package/dist/cjs/src/abstract/exmo.js +4 -2
- package/dist/cjs/src/abstract/foxbit.js +4 -2
- package/dist/cjs/src/abstract/gate.js +4 -2
- package/dist/cjs/src/abstract/gemini.js +4 -2
- package/dist/cjs/src/abstract/hashkey.js +4 -2
- package/dist/cjs/src/abstract/hibachi.js +11 -0
- package/dist/cjs/src/abstract/hitbtc.js +4 -2
- package/dist/cjs/src/abstract/hollaex.js +4 -2
- package/dist/cjs/src/abstract/htx.js +4 -2
- package/dist/cjs/src/abstract/hyperliquid.js +4 -2
- package/dist/cjs/src/abstract/independentreserve.js +4 -2
- package/dist/cjs/src/abstract/indodax.js +4 -2
- package/dist/cjs/src/abstract/kraken.js +4 -2
- package/dist/cjs/src/abstract/krakenfutures.js +4 -2
- package/dist/cjs/src/abstract/kucoin.js +4 -2
- package/dist/cjs/src/abstract/kucoinfutures.js +5 -3
- package/dist/cjs/src/abstract/latoken.js +4 -2
- package/dist/cjs/src/abstract/lbank.js +4 -2
- package/dist/cjs/src/abstract/luno.js +4 -2
- package/dist/cjs/src/abstract/mercado.js +4 -2
- package/dist/cjs/src/abstract/mexc.js +4 -2
- package/dist/cjs/src/abstract/modetrade.js +4 -2
- package/dist/cjs/src/abstract/ndax.js +4 -2
- package/dist/cjs/src/abstract/novadax.js +4 -2
- package/dist/cjs/src/abstract/oceanex.js +4 -2
- package/dist/cjs/src/abstract/okcoin.js +4 -2
- package/dist/cjs/src/abstract/okx.js +4 -2
- package/dist/cjs/src/abstract/onetrading.js +4 -2
- package/dist/cjs/src/abstract/oxfun.js +4 -2
- package/dist/cjs/src/abstract/p2b.js +4 -2
- package/dist/cjs/src/abstract/paradex.js +4 -2
- package/dist/cjs/src/abstract/paymium.js +4 -2
- package/dist/cjs/src/abstract/phemex.js +4 -2
- package/dist/cjs/src/abstract/poloniex.js +4 -2
- package/dist/cjs/src/abstract/probit.js +4 -2
- package/dist/cjs/src/abstract/timex.js +4 -2
- package/dist/cjs/src/abstract/tokocrypto.js +4 -2
- package/dist/cjs/src/abstract/tradeogre.js +4 -2
- package/dist/cjs/src/abstract/upbit.js +4 -2
- package/dist/cjs/src/abstract/vertex.js +4 -2
- package/dist/cjs/src/abstract/wavesexchange.js +4 -2
- package/dist/cjs/src/abstract/whitebit.js +4 -2
- package/dist/cjs/src/abstract/woo.js +4 -2
- package/dist/cjs/src/abstract/woofipro.js +4 -2
- package/dist/cjs/src/abstract/xt.js +4 -2
- package/dist/cjs/src/abstract/yobit.js +4 -2
- package/dist/cjs/src/abstract/zaif.js +4 -2
- package/dist/cjs/src/abstract/zonda.js +4 -2
- package/dist/cjs/src/alpaca.js +5 -3
- package/dist/cjs/src/apex.js +5 -3
- package/dist/cjs/src/ascendex.js +5 -3
- package/dist/cjs/src/base/Exchange.js +51 -11
- package/dist/cjs/src/base/Precise.js +0 -6
- package/dist/cjs/src/base/errors.js +0 -6
- package/dist/cjs/src/base/functions/crypto.js +1 -1
- package/dist/cjs/src/base/functions/encode.js +3 -3
- package/dist/cjs/src/base/functions/misc.js +0 -1
- package/dist/cjs/src/base/functions/number.js +0 -6
- package/dist/cjs/src/base/functions/platform.js +0 -6
- package/dist/cjs/src/base/functions/rsa.js +0 -1
- package/dist/cjs/src/base/functions/string.js +0 -6
- package/dist/cjs/src/base/functions/throttle.js +1 -1
- package/dist/cjs/src/base/functions/time.js +0 -6
- package/dist/cjs/src/base/functions/totp.js +0 -1
- package/dist/cjs/src/base/functions/type.js +0 -6
- package/dist/cjs/src/base/functions.js +1 -1
- package/dist/cjs/src/base/ws/Cache.js +0 -6
- package/dist/cjs/src/base/ws/Client.js +8 -3
- package/dist/cjs/src/base/ws/Future.js +1 -1
- package/dist/cjs/src/base/ws/OrderBook.js +1 -1
- package/dist/cjs/src/base/ws/OrderBookSide.js +0 -6
- package/dist/cjs/src/base/ws/WsClient.js +5 -3
- package/dist/cjs/src/bequant.js +5 -3
- package/dist/cjs/src/bigone.js +5 -3
- package/dist/cjs/src/binance.js +14 -9
- package/dist/cjs/src/binancecoinm.js +5 -3
- package/dist/cjs/src/binanceus.js +5 -3
- package/dist/cjs/src/binanceusdm.js +5 -3
- package/dist/cjs/src/bingx.js +37 -5
- package/dist/cjs/src/bit2c.js +5 -3
- package/dist/cjs/src/bitbank.js +5 -3
- package/dist/cjs/src/bitbns.js +5 -3
- package/dist/cjs/src/bitfinex.js +8 -3
- package/dist/cjs/src/bitflyer.js +5 -3
- package/dist/cjs/src/bitget.js +2177 -552
- package/dist/cjs/src/bithumb.js +5 -3
- package/dist/cjs/src/bitmart.js +5 -3
- package/dist/cjs/src/bitmex.js +6 -3
- package/dist/cjs/src/bitopro.js +5 -3
- package/dist/cjs/src/bitrue.js +5 -3
- package/dist/cjs/src/bitso.js +5 -3
- package/dist/cjs/src/bitstamp.js +5 -3
- package/dist/cjs/src/bitteam.js +5 -3
- package/dist/cjs/src/bittrade.js +5 -3
- package/dist/cjs/src/bitvavo.js +4 -2
- package/dist/cjs/src/blockchaincom.js +5 -3
- package/dist/cjs/src/blofin.js +5 -3
- package/dist/cjs/src/btcalpha.js +5 -3
- package/dist/cjs/src/btcbox.js +5 -3
- package/dist/cjs/src/btcmarkets.js +5 -3
- package/dist/cjs/src/btcturk.js +5 -3
- package/dist/cjs/src/bybit.js +11 -4
- package/dist/cjs/src/cex.js +5 -3
- package/dist/cjs/src/coinbase.js +4 -2
- package/dist/cjs/src/coinbaseadvanced.js +5 -3
- package/dist/cjs/src/coinbaseexchange.js +4 -2
- package/dist/cjs/src/coinbaseinternational.js +4 -2
- package/dist/cjs/src/coincatch.js +5 -3
- package/dist/cjs/src/coincheck.js +5 -3
- package/dist/cjs/src/coinex.js +73 -7
- package/dist/cjs/src/coinmate.js +5 -3
- package/dist/cjs/src/coinmetro.js +5 -3
- package/dist/cjs/src/coinone.js +5 -3
- package/dist/cjs/src/coinsph.js +4 -3
- package/dist/cjs/src/coinspot.js +5 -3
- package/dist/cjs/src/cryptocom.js +6 -4
- package/dist/cjs/src/cryptomus.js +5 -3
- package/dist/cjs/src/defx.js +5 -3
- package/dist/cjs/src/delta.js +5 -3
- package/dist/cjs/src/deribit.js +5 -3
- package/dist/cjs/src/derive.js +5 -3
- package/dist/cjs/src/digifinex.js +5 -3
- package/dist/cjs/src/ellipx.js +5 -3
- package/dist/cjs/src/exmo.js +5 -3
- package/dist/cjs/src/fmfwio.js +5 -3
- package/dist/cjs/src/foxbit.js +8 -7
- package/dist/cjs/src/gate.js +27 -5
- package/dist/cjs/src/gateio.js +5 -3
- package/dist/cjs/src/gemini.js +5 -3
- package/dist/cjs/src/hashkey.js +5 -3
- package/dist/cjs/src/hibachi.js +2138 -0
- package/dist/cjs/src/hitbtc.js +4 -3
- package/dist/cjs/src/hollaex.js +5 -3
- package/dist/cjs/src/htx.js +6 -3
- package/dist/cjs/src/huobi.js +5 -3
- package/dist/cjs/src/hyperliquid.js +84 -31
- package/dist/cjs/src/independentreserve.js +5 -3
- package/dist/cjs/src/indodax.js +5 -3
- package/dist/cjs/src/kraken.js +5 -3
- package/dist/cjs/src/krakenfutures.js +6 -3
- package/dist/cjs/src/kucoin.js +5 -3
- package/dist/cjs/src/kucoinfutures.js +6 -3
- package/dist/cjs/src/latoken.js +5 -3
- package/dist/cjs/src/lbank.js +6 -4
- package/dist/cjs/src/luno.js +5 -3
- package/dist/cjs/src/mercado.js +5 -3
- package/dist/cjs/src/mexc.js +12 -3
- package/dist/cjs/src/modetrade.js +101 -3
- package/dist/cjs/src/myokx.js +5 -3
- package/dist/cjs/src/ndax.js +5 -3
- package/dist/cjs/src/novadax.js +39 -3
- package/dist/cjs/src/oceanex.js +5 -3
- package/dist/cjs/src/okcoin.js +5 -3
- package/dist/cjs/src/okx.js +5 -3
- package/dist/cjs/src/okxus.js +5 -3
- package/dist/cjs/src/onetrading.js +38 -3
- package/dist/cjs/src/oxfun.js +5 -3
- package/dist/cjs/src/p2b.js +37 -3
- package/dist/cjs/src/paradex.js +6 -3
- package/dist/cjs/src/paymium.js +5 -3
- package/dist/cjs/src/phemex.js +4 -2
- package/dist/cjs/src/poloniex.js +5 -3
- package/dist/cjs/src/pro/alpaca.js +5 -3
- package/dist/cjs/src/pro/apex.js +5 -3
- package/dist/cjs/src/pro/ascendex.js +5 -3
- package/dist/cjs/src/pro/bequant.js +6 -4
- package/dist/cjs/src/pro/binance.js +8 -8
- package/dist/cjs/src/pro/binancecoinm.js +6 -4
- package/dist/cjs/src/pro/binanceus.js +6 -4
- package/dist/cjs/src/pro/binanceusdm.js +5 -3
- package/dist/cjs/src/pro/bingx.js +5 -3
- package/dist/cjs/src/pro/bitfinex.js +5 -3
- package/dist/cjs/src/pro/bitget.js +6 -4
- package/dist/cjs/src/pro/bithumb.js +5 -3
- package/dist/cjs/src/pro/bitmart.js +5 -3
- package/dist/cjs/src/pro/bitmex.js +6 -4
- package/dist/cjs/src/pro/bitopro.js +4 -2
- package/dist/cjs/src/pro/bitrue.js +5 -3
- package/dist/cjs/src/pro/bitstamp.js +6 -4
- package/dist/cjs/src/pro/bittrade.js +4 -2
- package/dist/cjs/src/pro/bitvavo.js +8 -4
- package/dist/cjs/src/pro/blockchaincom.js +5 -3
- package/dist/cjs/src/pro/blofin.js +5 -3
- package/dist/cjs/src/pro/bybit.js +6 -3
- package/dist/cjs/src/pro/cex.js +6 -3
- package/dist/cjs/src/pro/coinbase.js +5 -3
- package/dist/cjs/src/pro/coinbaseadvanced.js +5 -3
- package/dist/cjs/src/pro/coinbaseexchange.js +7 -5
- package/dist/cjs/src/pro/coinbaseinternational.js +5 -3
- package/dist/cjs/src/pro/coincatch.js +5 -3
- package/dist/cjs/src/pro/coincheck.js +5 -3
- package/dist/cjs/src/pro/coinex.js +6 -4
- package/dist/cjs/src/pro/coinone.js +5 -3
- package/dist/cjs/src/pro/cryptocom.js +5 -3
- package/dist/cjs/src/pro/defx.js +5 -3
- package/dist/cjs/src/pro/deribit.js +5 -3
- package/dist/cjs/src/pro/derive.js +4 -2
- package/dist/cjs/src/pro/exmo.js +5 -3
- package/dist/cjs/src/pro/gate.js +6 -4
- package/dist/cjs/src/pro/gateio.js +5 -3
- package/dist/cjs/src/pro/gemini.js +5 -3
- package/dist/cjs/src/pro/hashkey.js +5 -3
- package/dist/cjs/src/pro/hitbtc.js +5 -3
- package/dist/cjs/src/pro/hollaex.js +5 -3
- package/dist/cjs/src/pro/htx.js +6 -4
- package/dist/cjs/src/pro/huobi.js +5 -3
- package/dist/cjs/src/pro/hyperliquid.js +108 -15
- package/dist/cjs/src/pro/independentreserve.js +5 -3
- package/dist/cjs/src/pro/kraken.js +5 -3
- package/dist/cjs/src/pro/krakenfutures.js +7 -4
- package/dist/cjs/src/pro/kucoin.js +7 -4
- package/dist/cjs/src/pro/kucoinfutures.js +7 -4
- package/dist/cjs/src/pro/lbank.js +4 -3
- package/dist/cjs/src/pro/luno.js +5 -3
- package/dist/cjs/src/pro/mexc.js +343 -160
- package/dist/cjs/src/pro/modetrade.js +4 -2
- package/dist/cjs/src/pro/myokx.js +5 -3
- package/dist/cjs/src/pro/ndax.js +5 -3
- package/dist/cjs/src/pro/okcoin.js +5 -3
- package/dist/cjs/src/pro/okx.js +10 -7
- package/dist/cjs/src/pro/okxus.js +5 -3
- package/dist/cjs/src/pro/onetrading.js +5 -3
- package/dist/cjs/src/pro/oxfun.js +6 -4
- package/dist/cjs/src/pro/p2b.js +5 -3
- package/dist/cjs/src/pro/paradex.js +5 -3
- package/dist/cjs/src/pro/phemex.js +5 -3
- package/dist/cjs/src/pro/poloniex.js +5 -3
- package/dist/cjs/src/pro/probit.js +5 -3
- package/dist/cjs/src/pro/tradeogre.js +5 -3
- package/dist/cjs/src/pro/upbit.js +5 -3
- package/dist/cjs/src/pro/vertex.js +4 -2
- package/dist/cjs/src/pro/whitebit.js +5 -3
- package/dist/cjs/src/pro/woo.js +4 -2
- package/dist/cjs/src/pro/woofipro.js +4 -2
- package/dist/cjs/src/pro/xt.js +5 -3
- package/dist/cjs/src/probit.js +40 -3
- package/dist/cjs/src/protobuf/mexc/compiled.cjs.js +7180 -0
- package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +1 -7
- package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +2 -8
- package/dist/cjs/src/static_dependencies/ethers/coders/address.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/anonymous.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/array.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/boolean.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/bytes.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/null.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/number.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/string.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/tuple.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/fragments.js +2 -8
- package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +2 -8
- package/dist/cjs/src/static_dependencies/ethers/index.js +10 -1
- package/dist/cjs/src/static_dependencies/ethers/interface.js +2 -8
- package/dist/cjs/src/static_dependencies/ethers/typed.js +2 -8
- package/dist/cjs/src/static_dependencies/ethers/utils/base58.js +13 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/data.js +6 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/errors.js +9 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/events.js +2 -8
- package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +2 -8
- package/dist/cjs/src/static_dependencies/ethers/utils/index.js +7 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/maths.js +5 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/properties.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/utils/utf8.js +8 -1
- package/dist/cjs/src/static_dependencies/fflake/browser.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
- package/dist/cjs/src/static_dependencies/messagepack/msgpack.js +0 -6
- package/dist/cjs/src/static_dependencies/noble-curves/_shortw_utils.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/curve.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/edwards.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/modular.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/montgomery.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/ed25519.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/p256.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/secp256k1.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/_assert.js +0 -6
- package/dist/cjs/src/static_dependencies/noble-hashes/_sha2.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/_u64.js +0 -6
- package/dist/cjs/src/static_dependencies/noble-hashes/crypto.js +0 -6
- package/dist/cjs/src/static_dependencies/noble-hashes/hmac.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/md5.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/sha1.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/sha256.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/sha3.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/sha512.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +1 -1
- package/dist/cjs/src/static_dependencies/node-fetch/body.js +5 -1
- package/dist/cjs/src/static_dependencies/node-fetch/errors/abort-error.js +0 -1
- package/dist/cjs/src/static_dependencies/node-fetch/errors/base.js +0 -6
- package/dist/cjs/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -1
- package/dist/cjs/src/static_dependencies/node-fetch/headers.js +5 -1
- package/dist/cjs/src/static_dependencies/node-fetch/index.js +14 -8
- package/dist/cjs/src/static_dependencies/node-fetch/request.js +7 -1
- package/dist/cjs/src/static_dependencies/node-fetch/response.js +8 -2
- package/dist/cjs/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
- package/dist/cjs/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
- package/dist/cjs/src/static_dependencies/node-fetch/utils/is.js +0 -6
- package/dist/cjs/src/static_dependencies/node-fetch/utils/referrer.js +0 -1
- package/dist/cjs/src/static_dependencies/proxies/agent-base/index.js +0 -1
- package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -1
- package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -1
- package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
- package/dist/cjs/src/static_dependencies/qs/index.cjs.js +3 -1
- package/dist/cjs/src/static_dependencies/scure-base/index.js +0 -6
- package/dist/cjs/src/static_dependencies/scure-starknet/index.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/constants.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +2 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +3 -2
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +8 -8
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +4 -3
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +1 -2
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +4 -3
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +4 -2
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +32 -27
- package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +3 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/num.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +3 -3
- package/dist/cjs/src/static_dependencies/watchable/src/unpromise.js +0 -6
- package/dist/cjs/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
- package/dist/cjs/src/timex.js +4 -3
- package/dist/cjs/src/tokocrypto.js +5 -3
- package/dist/cjs/src/tradeogre.js +5 -3
- package/dist/cjs/src/upbit.js +5 -3
- package/dist/cjs/src/vertex.js +5 -3
- package/dist/cjs/src/wavesexchange.js +5 -3
- package/dist/cjs/src/whitebit.js +5 -3
- package/dist/cjs/src/woo.js +5 -3
- package/dist/cjs/src/woofipro.js +101 -3
- package/dist/cjs/src/xt.js +5 -3
- package/dist/cjs/src/yobit.js +5 -3
- package/dist/cjs/src/zaif.js +5 -3
- package/dist/cjs/src/zonda.js +5 -3
- package/js/ccxt.d.ts +5 -2
- package/js/ccxt.js +4 -8
- package/js/src/abstract/alpaca.js +0 -6
- package/js/src/abstract/apex.js +0 -6
- package/js/src/abstract/ascendex.js +0 -6
- package/js/src/abstract/bequant.js +0 -6
- package/js/src/abstract/bigone.js +0 -6
- package/js/src/abstract/binance.js +0 -6
- package/js/src/abstract/binancecoinm.js +0 -6
- package/js/src/abstract/binanceus.js +0 -6
- package/js/src/abstract/binanceusdm.js +0 -6
- package/js/src/abstract/bingx.d.ts +1 -0
- package/js/src/abstract/bingx.js +0 -6
- package/js/src/abstract/bit2c.js +0 -6
- package/js/src/abstract/bitbank.js +0 -6
- package/js/src/abstract/bitbns.js +0 -6
- package/js/src/abstract/bitfinex.js +0 -6
- package/js/src/abstract/bitflyer.js +0 -6
- package/js/src/abstract/bitget.d.ts +6 -0
- package/js/src/abstract/bitget.js +0 -6
- package/js/src/abstract/bithumb.js +0 -6
- package/js/src/abstract/bitmart.js +0 -6
- package/js/src/abstract/bitmex.js +0 -6
- package/js/src/abstract/bitopro.js +0 -6
- package/js/src/abstract/bitrue.js +0 -6
- package/js/src/abstract/bitso.js +0 -6
- package/js/src/abstract/bitstamp.js +0 -6
- package/js/src/abstract/bitteam.js +0 -6
- package/js/src/abstract/bittrade.js +0 -6
- package/js/src/abstract/bitvavo.js +0 -6
- package/js/src/abstract/blockchaincom.js +0 -6
- package/js/src/abstract/blofin.js +0 -6
- package/js/src/abstract/btcalpha.js +0 -6
- package/js/src/abstract/btcbox.js +0 -6
- package/js/src/abstract/btcmarkets.js +0 -6
- package/js/src/abstract/btcturk.js +0 -6
- package/js/src/abstract/bybit.js +0 -6
- package/js/src/abstract/cex.js +0 -6
- package/js/src/abstract/coinbase.js +0 -6
- package/js/src/abstract/coinbaseadvanced.js +0 -6
- package/js/src/abstract/coinbaseexchange.js +0 -6
- package/js/src/abstract/coinbaseinternational.js +0 -6
- package/js/src/abstract/coincatch.js +0 -6
- package/js/src/abstract/coincheck.js +0 -6
- package/js/src/abstract/coinex.js +0 -6
- package/js/src/abstract/coinmate.js +0 -6
- package/js/src/abstract/coinmetro.js +0 -6
- package/js/src/abstract/coinone.js +0 -6
- package/js/src/abstract/coinsph.js +0 -6
- package/js/src/abstract/coinspot.js +0 -6
- package/js/src/abstract/cryptocom.js +0 -6
- package/js/src/abstract/cryptomus.js +0 -6
- package/js/src/abstract/defx.js +0 -6
- package/js/src/abstract/delta.js +0 -6
- package/js/src/abstract/deribit.js +0 -6
- package/js/src/abstract/derive.js +0 -6
- package/js/src/abstract/digifinex.js +0 -6
- package/js/src/abstract/ellipx.js +0 -6
- package/js/src/abstract/exmo.js +0 -6
- package/js/src/abstract/fmfwio.js +0 -6
- package/js/src/abstract/foxbit.js +0 -6
- package/js/src/abstract/gate.js +0 -6
- package/js/src/abstract/gateio.js +0 -6
- package/js/src/abstract/gemini.js +0 -6
- package/js/src/abstract/hashkey.js +0 -6
- package/js/src/abstract/hibachi.d.ts +29 -0
- package/js/src/abstract/hibachi.js +5 -0
- package/js/src/abstract/hitbtc.js +0 -6
- package/js/src/abstract/hollaex.js +0 -6
- package/js/src/abstract/htx.js +0 -6
- package/js/src/abstract/huobi.js +0 -6
- package/js/src/abstract/hyperliquid.js +0 -6
- package/js/src/abstract/independentreserve.js +0 -6
- package/js/src/abstract/indodax.js +0 -6
- package/js/src/abstract/kraken.js +0 -6
- package/js/src/abstract/krakenfutures.js +0 -6
- package/js/src/abstract/kucoin.js +0 -6
- package/js/src/abstract/kucoinfutures.js +0 -6
- package/js/src/abstract/latoken.js +0 -6
- package/js/src/abstract/lbank.js +0 -6
- package/js/src/abstract/luno.js +0 -6
- package/js/src/abstract/mercado.js +0 -6
- package/js/src/abstract/mexc.js +0 -6
- package/js/src/abstract/modetrade.js +0 -6
- package/js/src/abstract/myokx.js +0 -6
- package/js/src/abstract/ndax.js +0 -6
- package/js/src/abstract/novadax.js +0 -6
- package/js/src/abstract/oceanex.js +0 -6
- package/js/src/abstract/okcoin.js +0 -6
- package/js/src/abstract/okx.js +0 -6
- package/js/src/abstract/okxus.js +0 -6
- package/js/src/abstract/onetrading.js +0 -6
- package/js/src/abstract/oxfun.js +0 -6
- package/js/src/abstract/p2b.js +0 -6
- package/js/src/abstract/paradex.js +0 -6
- package/js/src/abstract/paymium.js +0 -6
- package/js/src/abstract/phemex.js +0 -6
- package/js/src/abstract/poloniex.js +0 -6
- package/js/src/abstract/probit.js +0 -6
- package/js/src/abstract/timex.js +0 -6
- package/js/src/abstract/tokocrypto.js +0 -6
- package/js/src/abstract/tradeogre.js +0 -6
- package/js/src/abstract/upbit.js +0 -6
- package/js/src/abstract/vertex.js +0 -6
- package/js/src/abstract/wavesexchange.js +0 -6
- package/js/src/abstract/whitebit.js +0 -6
- package/js/src/abstract/woo.js +0 -6
- package/js/src/abstract/woofipro.js +0 -6
- package/js/src/abstract/xt.js +0 -6
- package/js/src/abstract/yobit.js +0 -6
- package/js/src/abstract/zaif.js +0 -6
- package/js/src/abstract/zonda.js +0 -6
- package/js/src/alpaca.d.ts +1 -1
- package/js/src/alpaca.js +0 -6
- package/js/src/apex.d.ts +1 -1
- package/js/src/apex.js +0 -6
- package/js/src/ascendex.d.ts +1 -1
- package/js/src/ascendex.js +0 -6
- package/js/src/base/Exchange.d.ts +9 -7
- package/js/src/base/Exchange.js +50 -16
- package/js/src/base/Precise.js +0 -6
- package/js/src/base/errorHierarchy.js +0 -6
- package/js/src/base/errors.js +0 -6
- package/js/src/base/functions/crypto.js +0 -6
- package/js/src/base/functions/encode.js +0 -6
- package/js/src/base/functions/generic.js +0 -6
- package/js/src/base/functions/misc.js +0 -6
- package/js/src/base/functions/number.js +0 -6
- package/js/src/base/functions/platform.js +0 -6
- package/js/src/base/functions/rsa.js +0 -6
- package/js/src/base/functions/string.js +0 -6
- package/js/src/base/functions/throttle.js +0 -6
- package/js/src/base/functions/time.js +0 -6
- package/js/src/base/functions/totp.js +0 -6
- package/js/src/base/functions/type.js +0 -6
- package/js/src/base/functions.js +0 -6
- package/js/src/base/types.d.ts +2 -1
- package/js/src/base/types.js +0 -6
- package/js/src/base/ws/Cache.js +0 -6
- package/js/src/base/ws/Client.d.ts +1 -0
- package/js/src/base/ws/Client.js +5 -7
- package/js/src/base/ws/Future.js +0 -6
- package/js/src/base/ws/OrderBook.js +0 -6
- package/js/src/base/ws/OrderBookSide.js +0 -6
- package/js/src/base/ws/WsClient.js +0 -6
- package/js/src/base/ws/functions.js +0 -6
- package/js/src/bequant.js +0 -6
- package/js/src/bigone.d.ts +1 -1
- package/js/src/bigone.js +0 -6
- package/js/src/binance.d.ts +2 -2
- package/js/src/binance.js +9 -12
- package/js/src/binancecoinm.js +0 -6
- package/js/src/binanceus.js +0 -6
- package/js/src/binanceusdm.js +0 -6
- package/js/src/bingx.d.ts +3 -2
- package/js/src/bingx.js +32 -8
- package/js/src/bit2c.js +0 -6
- package/js/src/bitbank.d.ts +1 -1
- package/js/src/bitbank.js +0 -6
- package/js/src/bitbns.js +0 -6
- package/js/src/bitfinex.d.ts +1 -1
- package/js/src/bitfinex.js +3 -6
- package/js/src/bitflyer.d.ts +1 -1
- package/js/src/bitflyer.js +0 -6
- package/js/src/bitget.d.ts +77 -9
- package/js/src/bitget.js +2172 -555
- package/js/src/bithumb.d.ts +1 -1
- package/js/src/bithumb.js +0 -6
- package/js/src/bitmart.d.ts +2 -2
- package/js/src/bitmart.js +0 -6
- package/js/src/bitmex.d.ts +2 -2
- package/js/src/bitmex.js +1 -6
- package/js/src/bitopro.d.ts +1 -1
- package/js/src/bitopro.js +0 -6
- package/js/src/bitrue.d.ts +2 -2
- package/js/src/bitrue.js +0 -6
- package/js/src/bitso.d.ts +1 -1
- package/js/src/bitso.js +0 -6
- package/js/src/bitstamp.d.ts +1 -1
- package/js/src/bitstamp.js +0 -6
- package/js/src/bitteam.js +0 -6
- package/js/src/bittrade.d.ts +1 -1
- package/js/src/bittrade.js +0 -6
- package/js/src/bitvavo.d.ts +1 -1
- package/js/src/bitvavo.js +0 -6
- package/js/src/blockchaincom.d.ts +1 -1
- package/js/src/blockchaincom.js +0 -6
- package/js/src/blofin.d.ts +1 -1
- package/js/src/blofin.js +0 -6
- package/js/src/btcalpha.js +0 -6
- package/js/src/btcbox.js +0 -6
- package/js/src/btcmarkets.d.ts +1 -1
- package/js/src/btcmarkets.js +0 -6
- package/js/src/btcturk.js +0 -6
- package/js/src/bybit.d.ts +2 -2
- package/js/src/bybit.js +6 -7
- package/js/src/cex.js +0 -6
- package/js/src/coinbase.d.ts +1 -1
- package/js/src/coinbase.js +0 -6
- package/js/src/coinbaseadvanced.js +0 -6
- package/js/src/coinbaseexchange.d.ts +1 -1
- package/js/src/coinbaseexchange.js +0 -6
- package/js/src/coinbaseinternational.d.ts +1 -1
- package/js/src/coinbaseinternational.js +0 -6
- package/js/src/coincatch.d.ts +2 -2
- package/js/src/coincatch.js +0 -6
- package/js/src/coincheck.js +0 -6
- package/js/src/coinex.d.ts +13 -3
- package/js/src/coinex.js +68 -10
- package/js/src/coinmate.d.ts +1 -1
- package/js/src/coinmate.js +0 -6
- package/js/src/coinmetro.js +0 -6
- package/js/src/coinone.js +0 -6
- package/js/src/coinsph.d.ts +1 -1
- package/js/src/coinsph.js +0 -6
- package/js/src/coinspot.js +0 -6
- package/js/src/cryptocom.d.ts +1 -1
- package/js/src/cryptocom.js +1 -7
- package/js/src/cryptomus.js +0 -6
- package/js/src/defx.d.ts +2 -2
- package/js/src/defx.js +0 -6
- package/js/src/delta.d.ts +1 -1
- package/js/src/delta.js +0 -6
- package/js/src/deribit.d.ts +1 -1
- package/js/src/deribit.js +0 -6
- package/js/src/derive.js +0 -6
- package/js/src/digifinex.d.ts +2 -2
- package/js/src/digifinex.js +0 -6
- package/js/src/ellipx.d.ts +1 -1
- package/js/src/ellipx.js +0 -6
- package/js/src/exmo.d.ts +1 -1
- package/js/src/exmo.js +0 -6
- package/js/src/fmfwio.js +0 -6
- package/js/src/foxbit.d.ts +1 -1
- package/js/src/foxbit.js +3 -9
- package/js/src/gate.d.ts +2 -2
- package/js/src/gate.js +22 -8
- package/js/src/gateio.js +0 -6
- package/js/src/gemini.d.ts +1 -1
- package/js/src/gemini.js +0 -6
- package/js/src/hashkey.d.ts +3 -3
- package/js/src/hashkey.js +0 -6
- package/js/src/hibachi.d.ts +346 -0
- package/js/src/hibachi.js +2131 -0
- package/js/src/hitbtc.d.ts +2 -2
- package/js/src/hitbtc.js +0 -6
- package/js/src/hollaex.d.ts +1 -1
- package/js/src/hollaex.js +0 -6
- package/js/src/htx.d.ts +3 -3
- package/js/src/htx.js +1 -6
- package/js/src/huobi.js +0 -6
- package/js/src/hyperliquid.d.ts +12 -2
- package/js/src/hyperliquid.js +79 -34
- package/js/src/independentreserve.d.ts +1 -1
- package/js/src/independentreserve.js +0 -6
- package/js/src/indodax.d.ts +1 -1
- package/js/src/indodax.js +0 -6
- package/js/src/kraken.d.ts +1 -1
- package/js/src/kraken.js +0 -6
- package/js/src/krakenfutures.d.ts +1 -1
- package/js/src/krakenfutures.js +1 -6
- package/js/src/kucoin.d.ts +2 -2
- package/js/src/kucoin.js +0 -6
- package/js/src/kucoinfutures.d.ts +3 -2
- package/js/src/kucoinfutures.js +1 -6
- package/js/src/latoken.js +0 -6
- package/js/src/lbank.d.ts +1 -1
- package/js/src/lbank.js +1 -7
- package/js/src/luno.js +0 -6
- package/js/src/mercado.d.ts +1 -1
- package/js/src/mercado.js +0 -6
- package/js/src/mexc.d.ts +2 -2
- package/js/src/mexc.js +7 -6
- package/js/src/modetrade.d.ts +26 -3
- package/js/src/modetrade.js +96 -6
- package/js/src/myokx.js +0 -6
- package/js/src/ndax.d.ts +1 -1
- package/js/src/ndax.js +0 -6
- package/js/src/novadax.d.ts +1 -1
- package/js/src/novadax.js +34 -6
- package/js/src/oceanex.js +0 -6
- package/js/src/okcoin.d.ts +1 -1
- package/js/src/okcoin.js +0 -6
- package/js/src/okx.d.ts +2 -2
- package/js/src/okx.js +0 -6
- package/js/src/okxus.js +0 -6
- package/js/src/onetrading.js +33 -6
- package/js/src/oxfun.d.ts +1 -1
- package/js/src/oxfun.js +0 -6
- package/js/src/p2b.js +32 -6
- package/js/src/paradex.d.ts +1 -1
- package/js/src/paradex.js +1 -6
- package/js/src/paymium.js +0 -6
- package/js/src/phemex.d.ts +2 -2
- package/js/src/phemex.js +0 -6
- package/js/src/poloniex.d.ts +2 -2
- package/js/src/poloniex.js +0 -6
- package/js/src/pro/alpaca.d.ts +2 -2
- package/js/src/pro/alpaca.js +0 -6
- package/js/src/pro/apex.d.ts +2 -2
- package/js/src/pro/apex.js +0 -6
- package/js/src/pro/ascendex.d.ts +2 -2
- package/js/src/pro/ascendex.js +0 -6
- package/js/src/pro/bequant.js +0 -6
- package/js/src/pro/binance.d.ts +2 -2
- package/js/src/pro/binance.js +4 -12
- package/js/src/pro/binancecoinm.js +0 -6
- package/js/src/pro/binanceus.js +0 -6
- package/js/src/pro/binanceusdm.js +0 -6
- package/js/src/pro/bingx.js +0 -6
- package/js/src/pro/bitfinex.js +0 -6
- package/js/src/pro/bitget.d.ts +2 -2
- package/js/src/pro/bitget.js +1 -7
- package/js/src/pro/bithumb.d.ts +2 -2
- package/js/src/pro/bithumb.js +0 -6
- package/js/src/pro/bitmart.d.ts +2 -2
- package/js/src/pro/bitmart.js +0 -6
- package/js/src/pro/bitmex.d.ts +3 -3
- package/js/src/pro/bitmex.js +1 -7
- package/js/src/pro/bitopro.js +0 -6
- package/js/src/pro/bitrue.js +0 -6
- package/js/src/pro/bitstamp.d.ts +2 -2
- package/js/src/pro/bitstamp.js +1 -7
- package/js/src/pro/bittrade.d.ts +2 -2
- package/js/src/pro/bittrade.js +0 -6
- package/js/src/pro/bitvavo.d.ts +2 -2
- package/js/src/pro/bitvavo.js +3 -7
- package/js/src/pro/blockchaincom.js +0 -6
- package/js/src/pro/blofin.js +0 -6
- package/js/src/pro/bybit.d.ts +4 -4
- package/js/src/pro/bybit.js +1 -6
- package/js/src/pro/cex.d.ts +2 -2
- package/js/src/pro/cex.js +1 -6
- package/js/src/pro/coinbase.js +0 -6
- package/js/src/pro/coinbaseadvanced.js +0 -6
- package/js/src/pro/coinbaseexchange.d.ts +4 -4
- package/js/src/pro/coinbaseexchange.js +2 -8
- package/js/src/pro/coinbaseinternational.d.ts +2 -2
- package/js/src/pro/coinbaseinternational.js +0 -6
- package/js/src/pro/coincatch.d.ts +2 -2
- package/js/src/pro/coincatch.js +0 -6
- package/js/src/pro/coincheck.js +0 -6
- package/js/src/pro/coinex.js +1 -7
- package/js/src/pro/coinone.d.ts +2 -2
- package/js/src/pro/coinone.js +0 -6
- package/js/src/pro/cryptocom.d.ts +2 -2
- package/js/src/pro/cryptocom.js +0 -6
- package/js/src/pro/defx.js +0 -6
- package/js/src/pro/deribit.js +0 -6
- package/js/src/pro/derive.d.ts +2 -2
- package/js/src/pro/derive.js +0 -6
- package/js/src/pro/exmo.js +0 -6
- package/js/src/pro/gate.d.ts +3 -3
- package/js/src/pro/gate.js +1 -7
- package/js/src/pro/gateio.js +0 -6
- package/js/src/pro/gemini.js +0 -6
- package/js/src/pro/hashkey.js +0 -6
- package/js/src/pro/hitbtc.js +0 -6
- package/js/src/pro/hollaex.d.ts +2 -2
- package/js/src/pro/hollaex.js +0 -6
- package/js/src/pro/htx.d.ts +2 -2
- package/js/src/pro/htx.js +1 -7
- package/js/src/pro/huobi.js +0 -6
- package/js/src/pro/hyperliquid.d.ts +28 -2
- package/js/src/pro/hyperliquid.js +103 -18
- package/js/src/pro/independentreserve.js +0 -6
- package/js/src/pro/kraken.d.ts +2 -2
- package/js/src/pro/kraken.js +0 -6
- package/js/src/pro/krakenfutures.d.ts +3 -3
- package/js/src/pro/krakenfutures.js +2 -7
- package/js/src/pro/kucoin.d.ts +2 -2
- package/js/src/pro/kucoin.js +2 -7
- package/js/src/pro/kucoinfutures.d.ts +2 -2
- package/js/src/pro/kucoinfutures.js +2 -7
- package/js/src/pro/lbank.js +0 -6
- package/js/src/pro/luno.js +0 -6
- package/js/src/pro/mexc.d.ts +9 -6
- package/js/src/pro/mexc.js +338 -163
- package/js/src/pro/modetrade.d.ts +2 -2
- package/js/src/pro/modetrade.js +0 -6
- package/js/src/pro/myokx.js +0 -6
- package/js/src/pro/ndax.js +0 -6
- package/js/src/pro/okcoin.d.ts +2 -2
- package/js/src/pro/okcoin.js +0 -6
- package/js/src/pro/okx.d.ts +4 -4
- package/js/src/pro/okx.js +5 -10
- package/js/src/pro/okxus.js +0 -6
- package/js/src/pro/onetrading.d.ts +2 -2
- package/js/src/pro/onetrading.js +0 -6
- package/js/src/pro/oxfun.js +1 -7
- package/js/src/pro/p2b.d.ts +2 -2
- package/js/src/pro/p2b.js +0 -6
- package/js/src/pro/paradex.d.ts +2 -2
- package/js/src/pro/paradex.js +0 -6
- package/js/src/pro/phemex.js +0 -6
- package/js/src/pro/poloniex.d.ts +2 -2
- package/js/src/pro/poloniex.js +0 -6
- package/js/src/pro/probit.d.ts +2 -2
- package/js/src/pro/probit.js +0 -6
- package/js/src/pro/tradeogre.js +0 -6
- package/js/src/pro/upbit.js +0 -6
- package/js/src/pro/vertex.d.ts +2 -2
- package/js/src/pro/vertex.js +0 -6
- package/js/src/pro/whitebit.d.ts +2 -2
- package/js/src/pro/whitebit.js +0 -6
- package/js/src/pro/woo.d.ts +2 -2
- package/js/src/pro/woo.js +0 -6
- package/js/src/pro/woofipro.d.ts +2 -2
- package/js/src/pro/woofipro.js +0 -6
- package/js/src/pro/xt.js +0 -6
- package/js/src/probit.d.ts +1 -1
- package/js/src/probit.js +35 -6
- package/js/src/protobuf/mexc/compiled.cjs +7180 -0
- package/js/src/protobuf/mexc/compiled.d.cts +2 -0
- package/js/src/static_dependencies/ethers/abi-coder.js +0 -6
- package/js/src/static_dependencies/ethers/address/address.js +0 -6
- package/js/src/static_dependencies/ethers/address/checks.js +0 -6
- package/js/src/static_dependencies/ethers/address/contract-address.js +0 -6
- package/js/src/static_dependencies/ethers/address/index.js +0 -6
- package/js/src/static_dependencies/ethers/bytes32.js +0 -6
- package/js/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
- package/js/src/static_dependencies/ethers/coders/address.js +0 -6
- package/js/src/static_dependencies/ethers/coders/anonymous.js +0 -6
- package/js/src/static_dependencies/ethers/coders/array.js +0 -6
- package/js/src/static_dependencies/ethers/coders/boolean.js +0 -6
- package/js/src/static_dependencies/ethers/coders/bytes.js +0 -6
- package/js/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -6
- package/js/src/static_dependencies/ethers/coders/null.js +0 -6
- package/js/src/static_dependencies/ethers/coders/number.js +0 -6
- package/js/src/static_dependencies/ethers/coders/string.js +0 -6
- package/js/src/static_dependencies/ethers/coders/tuple.js +0 -6
- package/js/src/static_dependencies/ethers/fragments.js +0 -6
- package/js/src/static_dependencies/ethers/hash/index.js +0 -6
- package/js/src/static_dependencies/ethers/hash/solidity.js +0 -6
- package/js/src/static_dependencies/ethers/hash/typed-data.js +0 -6
- package/js/src/static_dependencies/ethers/index.js +0 -6
- package/js/src/static_dependencies/ethers/interface.js +0 -6
- package/js/src/static_dependencies/ethers/typed.js +0 -6
- package/js/src/static_dependencies/ethers/utils/base58.js +0 -6
- package/js/src/static_dependencies/ethers/utils/base64-browser.js +0 -6
- package/js/src/static_dependencies/ethers/utils/base64.js +0 -6
- package/js/src/static_dependencies/ethers/utils/data.js +0 -6
- package/js/src/static_dependencies/ethers/utils/errors.js +0 -6
- package/js/src/static_dependencies/ethers/utils/events.js +0 -6
- package/js/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
- package/js/src/static_dependencies/ethers/utils/index.js +0 -6
- package/js/src/static_dependencies/ethers/utils/maths.js +0 -6
- package/js/src/static_dependencies/ethers/utils/properties.js +0 -6
- package/js/src/static_dependencies/ethers/utils/rlp-decode.js +0 -6
- package/js/src/static_dependencies/ethers/utils/rlp-encode.js +0 -6
- package/js/src/static_dependencies/ethers/utils/rlp.js +0 -6
- package/js/src/static_dependencies/ethers/utils/units.js +0 -6
- package/js/src/static_dependencies/ethers/utils/utf8.js +0 -6
- package/js/src/static_dependencies/ethers/utils/uuid.js +0 -6
- package/js/src/static_dependencies/fflake/browser.js +0 -6
- package/js/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -6
- package/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -6
- package/js/src/static_dependencies/jsencrypt/index.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/oids.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
- package/js/src/static_dependencies/messagepack/msgpack.js +0 -6
- package/js/src/static_dependencies/noble-curves/_shortw_utils.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/curve.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/edwards.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/modular.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/montgomery.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/poseidon.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +0 -6
- package/js/src/static_dependencies/noble-curves/bn.js +0 -6
- package/js/src/static_dependencies/noble-curves/ed25519.js +0 -6
- package/js/src/static_dependencies/noble-curves/ed448.js +0 -6
- package/js/src/static_dependencies/noble-curves/index.js +0 -6
- package/js/src/static_dependencies/noble-curves/jubjub.js +0 -6
- package/js/src/static_dependencies/noble-curves/p256.js +0 -6
- package/js/src/static_dependencies/noble-curves/p384.js +0 -6
- package/js/src/static_dependencies/noble-curves/p521.js +0 -6
- package/js/src/static_dependencies/noble-curves/pasta.js +0 -6
- package/js/src/static_dependencies/noble-curves/secp256k1.js +0 -6
- package/js/src/static_dependencies/noble-hashes/_assert.js +0 -6
- package/js/src/static_dependencies/noble-hashes/_blake2.js +0 -6
- package/js/src/static_dependencies/noble-hashes/_sha2.js +0 -6
- package/js/src/static_dependencies/noble-hashes/_u64.js +0 -6
- package/js/src/static_dependencies/noble-hashes/argon2.js +0 -6
- package/js/src/static_dependencies/noble-hashes/blake2b.js +0 -6
- package/js/src/static_dependencies/noble-hashes/blake2s.js +0 -6
- package/js/src/static_dependencies/noble-hashes/blake3.js +0 -6
- package/js/src/static_dependencies/noble-hashes/crypto.js +0 -6
- package/js/src/static_dependencies/noble-hashes/cryptoNode.js +0 -6
- package/js/src/static_dependencies/noble-hashes/eskdf.js +0 -6
- package/js/src/static_dependencies/noble-hashes/hkdf.js +0 -6
- package/js/src/static_dependencies/noble-hashes/hmac.js +0 -6
- package/js/src/static_dependencies/noble-hashes/index.js +0 -6
- package/js/src/static_dependencies/noble-hashes/md5.js +0 -6
- package/js/src/static_dependencies/noble-hashes/pbkdf2.js +0 -6
- package/js/src/static_dependencies/noble-hashes/ripemd160.js +0 -6
- package/js/src/static_dependencies/noble-hashes/scrypt.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha1.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha256.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha3-addons.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha3.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha512.js +0 -6
- package/js/src/static_dependencies/noble-hashes/utils.js +0 -6
- package/js/src/static_dependencies/node-fetch/body.js +0 -6
- package/js/src/static_dependencies/node-fetch/errors/abort-error.js +0 -6
- package/js/src/static_dependencies/node-fetch/errors/base.js +0 -6
- package/js/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -6
- package/js/src/static_dependencies/node-fetch/headers.js +0 -6
- package/js/src/static_dependencies/node-fetch/index.js +0 -6
- package/js/src/static_dependencies/node-fetch/request.js +0 -6
- package/js/src/static_dependencies/node-fetch/response.js +0 -6
- package/js/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
- package/js/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
- package/js/src/static_dependencies/node-fetch/utils/is.js +0 -6
- package/js/src/static_dependencies/node-fetch/utils/referrer.js +0 -6
- package/js/src/static_dependencies/proxies/agent-base/helpers.js +0 -6
- package/js/src/static_dependencies/proxies/agent-base/index.js +0 -6
- package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -6
- package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -6
- package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
- package/js/src/static_dependencies/qs/formats.cjs +0 -6
- package/js/src/static_dependencies/qs/index.cjs +0 -6
- package/js/src/static_dependencies/qs/parse.cjs +0 -6
- package/js/src/static_dependencies/qs/stringify.cjs +0 -6
- package/js/src/static_dependencies/qs/utils.cjs +0 -6
- package/js/src/static_dependencies/scure-base/index.js +0 -6
- package/js/src/static_dependencies/scure-starknet/index.js +0 -6
- package/js/src/static_dependencies/starknet/constants.js +0 -6
- package/js/src/static_dependencies/starknet/index.js +0 -6
- package/js/src/static_dependencies/starknet/types/cairoEnum.js +0 -6
- package/js/src/static_dependencies/starknet/types/calldata.js +0 -6
- package/js/src/static_dependencies/starknet/types/index.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/index.js +0 -6
- package/js/src/static_dependencies/starknet/types/typedData.js +0 -6
- package/js/src/static_dependencies/starknet/utils/address.js +0 -6
- package/js/src/static_dependencies/starknet/utils/assert.js +0 -6
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +0 -6
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +0 -6
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/index.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/validate.js +0 -6
- package/js/src/static_dependencies/starknet/utils/encode.js +0 -6
- package/js/src/static_dependencies/starknet/utils/hash/classHash.js +0 -6
- package/js/src/static_dependencies/starknet/utils/hash/index.js +0 -6
- package/js/src/static_dependencies/starknet/utils/merkle.js +0 -6
- package/js/src/static_dependencies/starknet/utils/num.js +0 -6
- package/js/src/static_dependencies/starknet/utils/selector.js +0 -6
- package/js/src/static_dependencies/starknet/utils/shortString.js +0 -6
- package/js/src/static_dependencies/starknet/utils/starknetId.js +0 -6
- package/js/src/static_dependencies/starknet/utils/typedData.js +0 -6
- package/js/src/static_dependencies/starknet/utils/uint256.js +0 -6
- package/js/src/static_dependencies/starknet/utils/url.js +0 -6
- package/js/src/static_dependencies/watchable/src/index.js +0 -6
- package/js/src/static_dependencies/watchable/src/types.js +0 -6
- package/js/src/static_dependencies/watchable/src/unpromise.js +0 -6
- package/js/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
- package/js/src/timex.js +0 -6
- package/js/src/tokocrypto.d.ts +1 -1
- package/js/src/tokocrypto.js +0 -6
- package/js/src/tradeogre.js +0 -6
- package/js/src/upbit.d.ts +1 -1
- package/js/src/upbit.js +0 -6
- package/js/src/vertex.d.ts +1 -1
- package/js/src/vertex.js +0 -6
- package/js/src/wavesexchange.d.ts +1 -1
- package/js/src/wavesexchange.js +0 -6
- package/js/src/whitebit.d.ts +2 -2
- package/js/src/whitebit.js +0 -6
- package/js/src/woo.d.ts +4 -4
- package/js/src/woo.js +0 -6
- package/js/src/woofipro.d.ts +26 -3
- package/js/src/woofipro.js +96 -6
- package/js/src/xt.d.ts +3 -3
- package/js/src/xt.js +0 -6
- package/js/src/yobit.d.ts +1 -1
- package/js/src/yobit.js +0 -6
- package/js/src/zaif.d.ts +1 -1
- package/js/src/zaif.js +0 -6
- package/js/src/zonda.d.ts +1 -1
- package/js/src/zonda.js +0 -6
- package/package.json +4 -3
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.
|
|
1790
|
+
let productType = this.safeString2(params, 'productType', 'category', defaultProductType);
|
|
1778
1791
|
if ((productType === undefined) && (market !== undefined)) {
|
|
1779
1792
|
const settle = market['settle'];
|
|
1780
|
-
if (
|
|
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"
|
|
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.
|
|
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 {
|
|
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
|
-
|
|
2498
|
-
|
|
2499
|
-
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
|
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
|
|
3153
|
+
// swap and future
|
|
3067
3154
|
//
|
|
3068
3155
|
// {
|
|
3069
3156
|
// "symbol": "BTCUSDT",
|
|
3070
|
-
// "lastPr": "
|
|
3071
|
-
// "askPr": "
|
|
3072
|
-
// "bidPr": "
|
|
3073
|
-
// "bidSz": "
|
|
3074
|
-
// "askSz": "
|
|
3075
|
-
// "high24h": "
|
|
3076
|
-
// "low24h": "
|
|
3077
|
-
// "ts": "
|
|
3078
|
-
// "change24h": "0.
|
|
3079
|
-
// "baseVolume": "
|
|
3080
|
-
// "quoteVolume": "
|
|
3081
|
-
// "usdtVolume": "
|
|
3082
|
-
// "openUtc": "
|
|
3083
|
-
// "changeUtc24h": "0.
|
|
3084
|
-
// "indexPrice": "
|
|
3085
|
-
// "fundingRate": "0.
|
|
3086
|
-
// "holdingAmount": "
|
|
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": "
|
|
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
|
|
3200
|
+
// swap and future uta
|
|
3094
3201
|
//
|
|
3095
3202
|
// {
|
|
3096
|
-
// "
|
|
3097
|
-
// "symbol": "
|
|
3098
|
-
// "
|
|
3099
|
-
// "
|
|
3100
|
-
// "
|
|
3101
|
-
// "
|
|
3102
|
-
// "
|
|
3103
|
-
// "
|
|
3104
|
-
// "
|
|
3105
|
-
// "
|
|
3106
|
-
// "
|
|
3107
|
-
// "
|
|
3108
|
-
// "
|
|
3109
|
-
// "
|
|
3110
|
-
// "
|
|
3111
|
-
// "
|
|
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.
|
|
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
|
|
3119
|
-
const
|
|
3120
|
-
let
|
|
3121
|
-
|
|
3122
|
-
|
|
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
|
-
|
|
3128
|
-
|
|
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':
|
|
3244
|
+
'symbol': this.safeSymbol(marketId, market, undefined, marketType),
|
|
3132
3245
|
'timestamp': timestamp,
|
|
3133
3246
|
'datetime': this.iso8601(timestamp),
|
|
3134
|
-
'high': this.
|
|
3135
|
-
'low': this.
|
|
3136
|
-
'bid': this.
|
|
3137
|
-
'bidVolume': this.
|
|
3138
|
-
'ask': this.
|
|
3139
|
-
'askVolume': this.
|
|
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':
|
|
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':
|
|
3259
|
+
'percentage': percentage,
|
|
3147
3260
|
'average': undefined,
|
|
3148
|
-
'baseVolume': this.
|
|
3149
|
-
'quoteVolume': this.
|
|
3261
|
+
'baseVolume': this.safeString2(ticker, 'baseVolume', 'volume24h'),
|
|
3262
|
+
'quoteVolume': this.safeString2(ticker, 'quoteVolume', 'turnover24h'),
|
|
3150
3263
|
'indexPrice': this.safeString(ticker, 'indexPrice'),
|
|
3151
|
-
'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
|
-
|
|
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":
|
|
3336
|
+
// "requestTime": 1750332210369,
|
|
3216
3337
|
// "data": [
|
|
3217
3338
|
// {
|
|
3218
3339
|
// "symbol": "BTCUSDT",
|
|
3219
|
-
// "lastPr": "
|
|
3220
|
-
// "askPr": "
|
|
3221
|
-
// "bidPr": "
|
|
3222
|
-
// "bidSz": "
|
|
3223
|
-
// "askSz": "
|
|
3224
|
-
// "high24h": "
|
|
3225
|
-
// "low24h": "
|
|
3226
|
-
// "ts": "
|
|
3227
|
-
// "change24h": "0.
|
|
3228
|
-
// "baseVolume": "
|
|
3229
|
-
// "quoteVolume": "
|
|
3230
|
-
// "usdtVolume": "
|
|
3231
|
-
// "openUtc": "
|
|
3232
|
-
// "changeUtc24h": "0.
|
|
3233
|
-
// "indexPrice": "
|
|
3234
|
-
// "fundingRate": "0.
|
|
3235
|
-
// "holdingAmount": "
|
|
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": "
|
|
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
|
-
|
|
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.
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
3485
|
-
'amount': this.
|
|
3486
|
-
'cost': this.
|
|
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 (
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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 (
|
|
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
|
|
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
|
|
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.
|
|
4381
|
-
const updateTimestamp = this.
|
|
4382
|
-
|
|
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
|
-
|
|
4395
|
-
|
|
4396
|
-
const
|
|
4397
|
-
|
|
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(
|
|
4407
|
-
'currency':
|
|
4874
|
+
'cost': this.parseNumber(Precise.stringNeg(utaFee)),
|
|
4875
|
+
'currency': market['settle'],
|
|
4408
4876
|
};
|
|
4409
4877
|
}
|
|
4410
|
-
|
|
4411
|
-
|
|
4412
|
-
|
|
4413
|
-
|
|
4414
|
-
|
|
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.
|
|
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.
|
|
4443
|
-
filled = this.
|
|
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.
|
|
4480
|
-
'stopLossPrice': this.
|
|
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
|
-
|
|
4567
|
-
|
|
4568
|
-
|
|
4569
|
-
|
|
4570
|
-
|
|
4571
|
-
response = await this.
|
|
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.
|
|
5063
|
+
response = await this.privateUtaPostV3TradePlaceOrder(request);
|
|
4578
5064
|
}
|
|
4579
5065
|
}
|
|
4580
5066
|
else {
|
|
4581
|
-
|
|
4582
|
-
|
|
4583
|
-
|
|
4584
|
-
|
|
4585
|
-
|
|
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
|
-
|
|
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.
|
|
5318
|
+
const slTriggerPrice = this.safeString2(stopLoss, 'triggerPrice', 'stopPrice');
|
|
4689
5319
|
request['stopLossTriggerPrice'] = this.priceToPrecision(symbol, slTriggerPrice);
|
|
4690
|
-
const slPrice = this.
|
|
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.
|
|
5326
|
+
const tpTriggerPrice = this.safeString2(takeProfit, 'triggerPrice', 'stopPrice');
|
|
4697
5327
|
request['stopSurplusTriggerPrice'] = this.priceToPrecision(symbol, tpTriggerPrice);
|
|
4698
|
-
const tpPrice = this.
|
|
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
|
-
|
|
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,8 @@ 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
|
|
5858
|
+
* @param {string} [params.clientOrderId] the clientOrderId of the order, id does not need to be provided if clientOrderId is provided
|
|
5120
5859
|
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
5121
5860
|
*/
|
|
5122
5861
|
async cancelOrder(id, symbol = undefined, params = {}) {
|
|
@@ -5135,21 +5874,46 @@ export default class bitget extends Exchange {
|
|
|
5135
5874
|
if (!(market['spot'] && trigger)) {
|
|
5136
5875
|
request['symbol'] = market['id'];
|
|
5137
5876
|
}
|
|
5138
|
-
|
|
5139
|
-
|
|
5877
|
+
let uta = undefined;
|
|
5878
|
+
[uta, params] = this.handleOptionAndParams(params, 'cancelOrder', 'uta', false);
|
|
5879
|
+
const isPlanOrder = trigger || trailing;
|
|
5880
|
+
const isContract = market['swap'] || market['future'];
|
|
5881
|
+
const isContractTriggerEndpoint = isContract && isPlanOrder && !uta;
|
|
5882
|
+
const clientOrderId = this.safeString2(params, 'clientOrderId', 'clientOid');
|
|
5883
|
+
if (isContractTriggerEndpoint) {
|
|
5884
|
+
const orderIdList = [];
|
|
5885
|
+
const orderId = {};
|
|
5886
|
+
if (clientOrderId !== undefined) {
|
|
5887
|
+
params = this.omit(params, 'clientOrderId');
|
|
5888
|
+
orderId['clientOid'] = clientOrderId;
|
|
5889
|
+
}
|
|
5890
|
+
else {
|
|
5891
|
+
orderId['orderId'] = id;
|
|
5892
|
+
}
|
|
5893
|
+
orderIdList.push(orderId);
|
|
5894
|
+
request['orderIdList'] = orderIdList;
|
|
5140
5895
|
}
|
|
5141
|
-
|
|
5896
|
+
else {
|
|
5897
|
+
if (clientOrderId !== undefined) {
|
|
5898
|
+
params = this.omit(params, 'clientOrderId');
|
|
5899
|
+
request['clientOid'] = clientOrderId;
|
|
5900
|
+
}
|
|
5901
|
+
else {
|
|
5902
|
+
request['orderId'] = id;
|
|
5903
|
+
}
|
|
5904
|
+
}
|
|
5905
|
+
if (uta) {
|
|
5906
|
+
if (trigger) {
|
|
5907
|
+
response = await this.privateUtaPostV3TradeCancelStrategyOrder(this.extend(request, params));
|
|
5908
|
+
}
|
|
5909
|
+
else {
|
|
5910
|
+
response = await this.privateUtaPostV3TradeCancelOrder(this.extend(request, params));
|
|
5911
|
+
}
|
|
5912
|
+
}
|
|
5913
|
+
else if ((market['swap']) || (market['future'])) {
|
|
5142
5914
|
let productType = undefined;
|
|
5143
5915
|
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
5144
5916
|
request['productType'] = productType;
|
|
5145
|
-
if (trigger || trailing) {
|
|
5146
|
-
const orderIdList = [];
|
|
5147
|
-
const orderId = {
|
|
5148
|
-
'orderId': id,
|
|
5149
|
-
};
|
|
5150
|
-
orderIdList.push(orderId);
|
|
5151
|
-
request['orderIdList'] = orderIdList;
|
|
5152
|
-
}
|
|
5153
5917
|
if (trailing) {
|
|
5154
5918
|
const planType = this.safeString(params, 'planType', 'track_plan');
|
|
5155
5919
|
request['planType'] = planType;
|
|
@@ -5224,17 +5988,66 @@ export default class bitget extends Exchange {
|
|
|
5224
5988
|
// }
|
|
5225
5989
|
// }
|
|
5226
5990
|
//
|
|
5991
|
+
// uta trigger
|
|
5992
|
+
//
|
|
5993
|
+
// {
|
|
5994
|
+
// "code": "00000",
|
|
5995
|
+
// "msg": "success",
|
|
5996
|
+
// "requestTime": "1753058267399",
|
|
5997
|
+
// "data": null
|
|
5998
|
+
// }
|
|
5999
|
+
//
|
|
5227
6000
|
const data = this.safeValue(response, 'data', {});
|
|
5228
6001
|
let order = undefined;
|
|
5229
|
-
if (
|
|
6002
|
+
if (isContractTriggerEndpoint) {
|
|
5230
6003
|
const orderInfo = this.safeValue(data, 'successList', []);
|
|
5231
6004
|
order = orderInfo[0];
|
|
5232
6005
|
}
|
|
5233
6006
|
else {
|
|
5234
|
-
|
|
6007
|
+
if (uta && trigger) {
|
|
6008
|
+
order = response;
|
|
6009
|
+
}
|
|
6010
|
+
else {
|
|
6011
|
+
order = data;
|
|
6012
|
+
}
|
|
5235
6013
|
}
|
|
5236
6014
|
return this.parseOrder(order, market);
|
|
5237
6015
|
}
|
|
6016
|
+
async cancelUtaOrders(ids, symbol = undefined, params = {}) {
|
|
6017
|
+
if (symbol === undefined) {
|
|
6018
|
+
throw new ArgumentsRequired(this.id + ' cancelOrders() requires a symbol argument');
|
|
6019
|
+
}
|
|
6020
|
+
await this.loadMarkets();
|
|
6021
|
+
const market = this.market(symbol);
|
|
6022
|
+
let productType = undefined;
|
|
6023
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
6024
|
+
const requestList = [];
|
|
6025
|
+
for (let i = 0; i < ids.length; i++) {
|
|
6026
|
+
const individualId = ids[i];
|
|
6027
|
+
const order = {
|
|
6028
|
+
'orderId': individualId,
|
|
6029
|
+
'symbol': market['id'],
|
|
6030
|
+
'category': productType,
|
|
6031
|
+
};
|
|
6032
|
+
requestList.push(order);
|
|
6033
|
+
}
|
|
6034
|
+
const response = await this.privateUtaPostV3TradeCancelBatch(requestList);
|
|
6035
|
+
//
|
|
6036
|
+
// {
|
|
6037
|
+
// "code": "00000",
|
|
6038
|
+
// "msg": "success",
|
|
6039
|
+
// "requestTime": 1752813731517,
|
|
6040
|
+
// "data": [
|
|
6041
|
+
// {
|
|
6042
|
+
// "orderId": "1329948909442023424",
|
|
6043
|
+
// "clientOid": "1329948909446217728"
|
|
6044
|
+
// },
|
|
6045
|
+
// ]
|
|
6046
|
+
// }
|
|
6047
|
+
//
|
|
6048
|
+
const data = this.safeList(response, 'data', []);
|
|
6049
|
+
return this.parseOrders(data, market);
|
|
6050
|
+
}
|
|
5238
6051
|
/**
|
|
5239
6052
|
* @method
|
|
5240
6053
|
* @name bitget#cancelOrders
|
|
@@ -5244,11 +6057,13 @@ export default class bitget extends Exchange {
|
|
|
5244
6057
|
* @see https://www.bitget.com/api-doc/contract/plan/Cancel-Plan-Order
|
|
5245
6058
|
* @see https://www.bitget.com/api-doc/margin/cross/trade/Cross-Batch-Cancel-Order
|
|
5246
6059
|
* @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Batch-Cancel-Orders
|
|
6060
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Cancel-Batch
|
|
5247
6061
|
* @param {string[]} ids order ids
|
|
5248
6062
|
* @param {string} symbol unified market symbol, default is undefined
|
|
5249
6063
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
5250
6064
|
* @param {string} [params.marginMode] 'isolated' or 'cross' for spot margin trading
|
|
5251
6065
|
* @param {boolean} [params.trigger] *contract only* set to true for canceling trigger orders
|
|
6066
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
5252
6067
|
* @returns {object} an array of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
5253
6068
|
*/
|
|
5254
6069
|
async cancelOrders(ids, symbol = undefined, params = {}) {
|
|
@@ -5257,6 +6072,11 @@ export default class bitget extends Exchange {
|
|
|
5257
6072
|
}
|
|
5258
6073
|
await this.loadMarkets();
|
|
5259
6074
|
const market = this.market(symbol);
|
|
6075
|
+
let uta = undefined;
|
|
6076
|
+
[uta, params] = this.handleOptionAndParams(params, 'cancelOrders', 'uta', false);
|
|
6077
|
+
if (uta) {
|
|
6078
|
+
return await this.cancelUtaOrders(ids, symbol, params);
|
|
6079
|
+
}
|
|
5260
6080
|
let marginMode = undefined;
|
|
5261
6081
|
[marginMode, params] = this.handleMarginModeAndParams('cancelOrders', params);
|
|
5262
6082
|
const trigger = this.safeValue2(params, 'stop', 'trigger');
|
|
@@ -5332,10 +6152,12 @@ export default class bitget extends Exchange {
|
|
|
5332
6152
|
* @see https://www.bitget.com/api-doc/contract/trade/Batch-Cancel-Orders
|
|
5333
6153
|
* @see https://bitgetlimited.github.io/apidoc/en/margin/#isolated-batch-cancel-orders
|
|
5334
6154
|
* @see https://bitgetlimited.github.io/apidoc/en/margin/#cross-batch-cancel-order
|
|
6155
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Cancel-All-Order
|
|
5335
6156
|
* @param {string} symbol unified market symbol
|
|
5336
6157
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
5337
6158
|
* @param {string} [params.marginMode] 'isolated' or 'cross' for spot margin trading
|
|
5338
6159
|
* @param {boolean} [params.trigger] *contract only* set to true for canceling trigger orders
|
|
6160
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
5339
6161
|
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
5340
6162
|
*/
|
|
5341
6163
|
async cancelAllOrders(symbol = undefined, params = {}) {
|
|
@@ -5346,13 +6168,41 @@ export default class bitget extends Exchange {
|
|
|
5346
6168
|
const market = this.market(symbol);
|
|
5347
6169
|
let marginMode = undefined;
|
|
5348
6170
|
[marginMode, params] = this.handleMarginModeAndParams('cancelAllOrders', params);
|
|
6171
|
+
let productType = undefined;
|
|
6172
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
5349
6173
|
const request = {
|
|
5350
6174
|
'symbol': market['id'],
|
|
5351
6175
|
};
|
|
5352
6176
|
const trigger = this.safeBool2(params, 'stop', 'trigger');
|
|
5353
6177
|
params = this.omit(params, ['stop', 'trigger']);
|
|
5354
6178
|
let response = undefined;
|
|
5355
|
-
|
|
6179
|
+
let uta = undefined;
|
|
6180
|
+
[uta, params] = this.handleOptionAndParams(params, 'cancelAllOrders', 'uta', false);
|
|
6181
|
+
if (uta) {
|
|
6182
|
+
if (productType === 'SPOT') {
|
|
6183
|
+
if (marginMode !== undefined) {
|
|
6184
|
+
productType = 'MARGIN';
|
|
6185
|
+
}
|
|
6186
|
+
}
|
|
6187
|
+
request['category'] = productType;
|
|
6188
|
+
response = await this.privateUtaPostV3TradeCancelSymbolOrder(this.extend(request, params));
|
|
6189
|
+
//
|
|
6190
|
+
// {
|
|
6191
|
+
// "code": "00000",
|
|
6192
|
+
// "msg": "success",
|
|
6193
|
+
// "requestTime": 1750751578138,
|
|
6194
|
+
// "data": {
|
|
6195
|
+
// "list": [
|
|
6196
|
+
// {
|
|
6197
|
+
// "orderId": "1321313242969427968",
|
|
6198
|
+
// "clientOid": "1321313242969427969"
|
|
6199
|
+
// }
|
|
6200
|
+
// ]
|
|
6201
|
+
// }
|
|
6202
|
+
// }
|
|
6203
|
+
//
|
|
6204
|
+
}
|
|
6205
|
+
else if (market['spot']) {
|
|
5356
6206
|
if (marginMode !== undefined) {
|
|
5357
6207
|
if (marginMode === 'cross') {
|
|
5358
6208
|
response = await this.privateMarginPostMarginV1CrossOrderBatchCancelOrder(this.extend(request, params));
|
|
@@ -5411,8 +6261,6 @@ export default class bitget extends Exchange {
|
|
|
5411
6261
|
}
|
|
5412
6262
|
}
|
|
5413
6263
|
else {
|
|
5414
|
-
let productType = undefined;
|
|
5415
|
-
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
5416
6264
|
request['productType'] = productType;
|
|
5417
6265
|
if (trigger) {
|
|
5418
6266
|
response = await this.privateMixPostV2MixOrderCancelPlanOrder(this.extend(request, params));
|
|
@@ -5436,9 +6284,15 @@ export default class bitget extends Exchange {
|
|
|
5436
6284
|
// }
|
|
5437
6285
|
}
|
|
5438
6286
|
const data = this.safeDict(response, 'data');
|
|
5439
|
-
const resultList = this.
|
|
6287
|
+
const resultList = this.safeListN(data, ['resultList', 'successList', 'list']);
|
|
5440
6288
|
const failureList = this.safeList2(data, 'failure', 'failureList');
|
|
5441
|
-
|
|
6289
|
+
let responseList = undefined;
|
|
6290
|
+
if ((resultList !== undefined) && (failureList !== undefined)) {
|
|
6291
|
+
responseList = this.arrayConcat(resultList, failureList);
|
|
6292
|
+
}
|
|
6293
|
+
else {
|
|
6294
|
+
responseList = resultList;
|
|
6295
|
+
}
|
|
5442
6296
|
return this.parseOrders(responseList);
|
|
5443
6297
|
}
|
|
5444
6298
|
/**
|
|
@@ -5447,9 +6301,12 @@ export default class bitget extends Exchange {
|
|
|
5447
6301
|
* @description fetches information on an order made by the user
|
|
5448
6302
|
* @see https://www.bitget.com/api-doc/spot/trade/Get-Order-Info
|
|
5449
6303
|
* @see https://www.bitget.com/api-doc/contract/trade/Get-Order-Details
|
|
6304
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Get-Order-Details
|
|
5450
6305
|
* @param {string} id the order id
|
|
5451
6306
|
* @param {string} symbol unified symbol of the market the order was made in
|
|
5452
6307
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
6308
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
6309
|
+
* @param {string} [params.clientOrderId] the clientOrderId of the order, id does not need to be provided if clientOrderId is provided
|
|
5453
6310
|
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
5454
6311
|
*/
|
|
5455
6312
|
async fetchOrder(id, symbol = undefined, params = {}) {
|
|
@@ -5459,11 +6316,24 @@ export default class bitget extends Exchange {
|
|
|
5459
6316
|
await this.loadMarkets();
|
|
5460
6317
|
const market = this.market(symbol);
|
|
5461
6318
|
const request = {
|
|
5462
|
-
|
|
6319
|
+
// 'orderId': id,
|
|
5463
6320
|
};
|
|
5464
|
-
|
|
5465
|
-
if (
|
|
5466
|
-
|
|
6321
|
+
const clientOrderId = this.safeString2(params, 'clientOrderId', 'clientOid');
|
|
6322
|
+
if (clientOrderId !== undefined) {
|
|
6323
|
+
params = this.omit(params, ['clientOrderId']);
|
|
6324
|
+
request['clientOid'] = clientOrderId;
|
|
6325
|
+
}
|
|
6326
|
+
else {
|
|
6327
|
+
request['orderId'] = id;
|
|
6328
|
+
}
|
|
6329
|
+
let response = undefined;
|
|
6330
|
+
let uta = undefined;
|
|
6331
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchOrder', 'uta', false);
|
|
6332
|
+
if (uta) {
|
|
6333
|
+
response = await this.privateUtaGetV3TradeOrderInfo(this.extend(request, params));
|
|
6334
|
+
}
|
|
6335
|
+
else if (market['spot']) {
|
|
6336
|
+
response = await this.privateSpotGetV2SpotTradeOrderInfo(this.extend(request, params));
|
|
5467
6337
|
}
|
|
5468
6338
|
else if (market['swap'] || market['future']) {
|
|
5469
6339
|
request['symbol'] = market['id'];
|
|
@@ -5542,7 +6412,51 @@ export default class bitget extends Exchange {
|
|
|
5542
6412
|
// }
|
|
5543
6413
|
// }
|
|
5544
6414
|
//
|
|
5545
|
-
|
|
6415
|
+
// uta
|
|
6416
|
+
//
|
|
6417
|
+
// {
|
|
6418
|
+
// "code": "00000",
|
|
6419
|
+
// "msg": "success",
|
|
6420
|
+
// "requestTime": 1750496858333,
|
|
6421
|
+
// "data": {
|
|
6422
|
+
// "orderId": "1320244799629316096",
|
|
6423
|
+
// "clientOid": "1320244799633510400",
|
|
6424
|
+
// "category": "USDT-FUTURES",
|
|
6425
|
+
// "symbol": "BTCUSDT",
|
|
6426
|
+
// "orderType": "limit",
|
|
6427
|
+
// "side": "buy",
|
|
6428
|
+
// "price": "50000",
|
|
6429
|
+
// "qty": "0.001",
|
|
6430
|
+
// "amount": "0",
|
|
6431
|
+
// "cumExecQty": "0",
|
|
6432
|
+
// "cumExecValue": "0",
|
|
6433
|
+
// "avgPrice": "0",
|
|
6434
|
+
// "timeInForce": "gtc",
|
|
6435
|
+
// "orderStatus": "live",
|
|
6436
|
+
// "posSide": "long",
|
|
6437
|
+
// "holdMode": "hedge_mode",
|
|
6438
|
+
// "reduceOnly": "NO",
|
|
6439
|
+
// "feeDetail": [{
|
|
6440
|
+
// "feeCoin": "",
|
|
6441
|
+
// "fee": ""
|
|
6442
|
+
// }],
|
|
6443
|
+
// "createdTime": "1750496809871",
|
|
6444
|
+
// "updatedTime": "1750496809886",
|
|
6445
|
+
// "cancelReason": "",
|
|
6446
|
+
// "execType": "normal",
|
|
6447
|
+
// "stpMode": "none",
|
|
6448
|
+
// "tpTriggerBy": null,
|
|
6449
|
+
// "slTriggerBy": null,
|
|
6450
|
+
// "takeProfit": null,
|
|
6451
|
+
// "stopLoss": null,
|
|
6452
|
+
// "tpOrderType": null,
|
|
6453
|
+
// "slOrderType": null,
|
|
6454
|
+
// "tpLimitPrice": null,
|
|
6455
|
+
// "slLimitPrice": null
|
|
6456
|
+
// }
|
|
6457
|
+
// }
|
|
6458
|
+
//
|
|
6459
|
+
if (!uta && (typeof response === 'string')) {
|
|
5546
6460
|
response = JSON.parse(response);
|
|
5547
6461
|
}
|
|
5548
6462
|
const data = this.safeDict(response, 'data');
|
|
@@ -5552,6 +6466,10 @@ export default class bitget extends Exchange {
|
|
|
5552
6466
|
}
|
|
5553
6467
|
}
|
|
5554
6468
|
const dataList = this.safeList(response, 'data', []);
|
|
6469
|
+
const dataListLength = dataList.length;
|
|
6470
|
+
if (dataListLength === 0) {
|
|
6471
|
+
throw new OrderNotFound(this.id + ' fetchOrder() could not find order id ' + id + ' in ' + this.json(response));
|
|
6472
|
+
}
|
|
5555
6473
|
const first = this.safeDict(dataList, 0, {});
|
|
5556
6474
|
return this.parseOrder(first, market);
|
|
5557
6475
|
// const first = this.safeDict (data, 0, data);
|
|
@@ -5567,6 +6485,7 @@ export default class bitget extends Exchange {
|
|
|
5567
6485
|
* @see https://www.bitget.com/api-doc/contract/plan/get-orders-plan-pending
|
|
5568
6486
|
* @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Open-Orders
|
|
5569
6487
|
* @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Open-Orders
|
|
6488
|
+
* @see https://www.bitget.com/api-doc/uta/strategy/Get-Unfilled-Strategy-Orders
|
|
5570
6489
|
* @param {string} symbol unified market symbol
|
|
5571
6490
|
* @param {int} [since] the earliest time in ms to fetch open orders for
|
|
5572
6491
|
* @param {int} [limit] the maximum number of open order structures to retrieve
|
|
@@ -5577,6 +6496,7 @@ export default class bitget extends Exchange {
|
|
|
5577
6496
|
* @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
6497
|
* @param {string} [params.isPlan] *swap only* 'plan' for stop orders and 'profit_loss' for tp/sl orders, default is 'plan'
|
|
5579
6498
|
* @param {boolean} [params.trailing] set to true if you want to fetch trailing orders
|
|
6499
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
5580
6500
|
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
5581
6501
|
*/
|
|
5582
6502
|
async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
@@ -5586,6 +6506,8 @@ export default class bitget extends Exchange {
|
|
|
5586
6506
|
let request = {};
|
|
5587
6507
|
let marginMode = undefined;
|
|
5588
6508
|
[marginMode, params] = this.handleMarginModeAndParams('fetchOpenOrders', params);
|
|
6509
|
+
let uta = undefined;
|
|
6510
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'uta', false);
|
|
5589
6511
|
if (symbol !== undefined) {
|
|
5590
6512
|
market = this.market(symbol);
|
|
5591
6513
|
request['symbol'] = market['id'];
|
|
@@ -5601,22 +6523,28 @@ export default class bitget extends Exchange {
|
|
|
5601
6523
|
[paginate, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'paginate');
|
|
5602
6524
|
if (paginate) {
|
|
5603
6525
|
let cursorReceived = undefined;
|
|
5604
|
-
|
|
6526
|
+
let cursorSent = undefined;
|
|
6527
|
+
if (uta) {
|
|
6528
|
+
cursorReceived = 'cursor';
|
|
6529
|
+
cursorSent = 'cursor';
|
|
6530
|
+
}
|
|
6531
|
+
else if (type === 'spot') {
|
|
5605
6532
|
if (marginMode !== undefined) {
|
|
5606
6533
|
cursorReceived = 'minId';
|
|
6534
|
+
cursorSent = 'idLessThan';
|
|
5607
6535
|
}
|
|
5608
6536
|
}
|
|
5609
6537
|
else {
|
|
5610
6538
|
cursorReceived = 'endId';
|
|
6539
|
+
cursorSent = 'idLessThan';
|
|
5611
6540
|
}
|
|
5612
|
-
return await this.fetchPaginatedCallCursor('fetchOpenOrders', symbol, since, limit, params, cursorReceived,
|
|
6541
|
+
return await this.fetchPaginatedCallCursor('fetchOpenOrders', symbol, since, limit, params, cursorReceived, cursorSent);
|
|
5613
6542
|
}
|
|
5614
6543
|
let response = undefined;
|
|
5615
6544
|
const trailing = this.safeBool(params, 'trailing');
|
|
5616
6545
|
const trigger = this.safeBool2(params, 'stop', 'trigger');
|
|
5617
6546
|
const planTypeDefined = this.safeString(params, 'planType') !== undefined;
|
|
5618
6547
|
const isTrigger = (trigger || planTypeDefined);
|
|
5619
|
-
params = this.omit(params, ['stop', 'trigger', 'trailing']);
|
|
5620
6548
|
[request, params] = this.handleUntilOption('endTime', request, params);
|
|
5621
6549
|
if (since !== undefined) {
|
|
5622
6550
|
request['startTime'] = since;
|
|
@@ -5624,53 +6552,66 @@ export default class bitget extends Exchange {
|
|
|
5624
6552
|
if (limit !== undefined) {
|
|
5625
6553
|
request['limit'] = limit;
|
|
5626
6554
|
}
|
|
5627
|
-
if ((type === 'swap') || (type === 'future') || (marginMode !== undefined)) {
|
|
6555
|
+
if (!uta && ((type === 'swap') || (type === 'future') || (marginMode !== undefined))) {
|
|
5628
6556
|
const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId');
|
|
5629
6557
|
params = this.omit(params, 'clientOrderId');
|
|
5630
6558
|
if (clientOrderId !== undefined) {
|
|
5631
6559
|
request['clientOid'] = clientOrderId;
|
|
5632
6560
|
}
|
|
5633
6561
|
}
|
|
5634
|
-
let
|
|
5635
|
-
|
|
5636
|
-
|
|
6562
|
+
let productType = undefined;
|
|
6563
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
6564
|
+
params = this.omit(params, ['type', 'stop', 'trigger', 'trailing']);
|
|
6565
|
+
if (uta) {
|
|
6566
|
+
if (type === 'spot') {
|
|
6567
|
+
if (marginMode !== undefined) {
|
|
6568
|
+
productType = 'MARGIN';
|
|
6569
|
+
}
|
|
6570
|
+
}
|
|
6571
|
+
request['category'] = productType;
|
|
6572
|
+
if (trigger) {
|
|
6573
|
+
response = await this.privateUtaGetV3TradeUnfilledStrategyOrders(this.extend(request, params));
|
|
6574
|
+
}
|
|
6575
|
+
else {
|
|
6576
|
+
response = await this.privateUtaGetV3TradeUnfilledOrders(this.extend(request, params));
|
|
6577
|
+
}
|
|
6578
|
+
}
|
|
6579
|
+
else if (type === 'spot') {
|
|
5637
6580
|
if (marginMode !== undefined) {
|
|
5638
6581
|
if (since === undefined) {
|
|
5639
6582
|
since = this.milliseconds() - 7776000000;
|
|
5640
6583
|
request['startTime'] = since;
|
|
5641
6584
|
}
|
|
5642
6585
|
if (marginMode === 'isolated') {
|
|
5643
|
-
response = await this.privateMarginGetV2MarginIsolatedOpenOrders(this.extend(request,
|
|
6586
|
+
response = await this.privateMarginGetV2MarginIsolatedOpenOrders(this.extend(request, params));
|
|
5644
6587
|
}
|
|
5645
6588
|
else if (marginMode === 'cross') {
|
|
5646
|
-
response = await this.privateMarginGetV2MarginCrossedOpenOrders(this.extend(request,
|
|
6589
|
+
response = await this.privateMarginGetV2MarginCrossedOpenOrders(this.extend(request, params));
|
|
5647
6590
|
}
|
|
5648
6591
|
}
|
|
5649
6592
|
else {
|
|
5650
6593
|
if (trigger) {
|
|
5651
|
-
response = await this.privateSpotGetV2SpotTradeCurrentPlanOrder(this.extend(request,
|
|
6594
|
+
response = await this.privateSpotGetV2SpotTradeCurrentPlanOrder(this.extend(request, params));
|
|
5652
6595
|
}
|
|
5653
6596
|
else {
|
|
5654
|
-
response = await this.privateSpotGetV2SpotTradeUnfilledOrders(this.extend(request,
|
|
6597
|
+
response = await this.privateSpotGetV2SpotTradeUnfilledOrders(this.extend(request, params));
|
|
5655
6598
|
}
|
|
5656
6599
|
}
|
|
5657
6600
|
}
|
|
5658
6601
|
else {
|
|
5659
|
-
let productType = undefined;
|
|
5660
|
-
[productType, query] = this.handleProductTypeAndParams(market, query);
|
|
5661
6602
|
request['productType'] = productType;
|
|
5662
6603
|
if (trailing) {
|
|
5663
6604
|
const planType = this.safeString(params, 'planType', 'track_plan');
|
|
5664
6605
|
request['planType'] = planType;
|
|
5665
|
-
response = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(request,
|
|
6606
|
+
response = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(request, params));
|
|
5666
6607
|
}
|
|
5667
6608
|
else if (isTrigger) {
|
|
5668
|
-
const planType = this.safeString(
|
|
6609
|
+
const planType = this.safeString(params, 'planType', 'normal_plan');
|
|
5669
6610
|
request['planType'] = planType;
|
|
5670
|
-
response = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(request,
|
|
6611
|
+
response = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(request, params));
|
|
5671
6612
|
}
|
|
5672
6613
|
else {
|
|
5673
|
-
response = await this.privateMixGetV2MixOrderOrdersPending(this.extend(request,
|
|
6614
|
+
response = await this.privateMixGetV2MixOrderOrdersPending(this.extend(request, params));
|
|
5674
6615
|
}
|
|
5675
6616
|
}
|
|
5676
6617
|
//
|
|
@@ -5848,8 +6789,95 @@ export default class bitget extends Exchange {
|
|
|
5848
6789
|
// }
|
|
5849
6790
|
// }
|
|
5850
6791
|
//
|
|
6792
|
+
// uta
|
|
6793
|
+
//
|
|
6794
|
+
// {
|
|
6795
|
+
// "code": "00000",
|
|
6796
|
+
// "msg": "success",
|
|
6797
|
+
// "requestTime": 1750753395850,
|
|
6798
|
+
// "data": {
|
|
6799
|
+
// "list": [
|
|
6800
|
+
// {
|
|
6801
|
+
// "orderId": "1321320757371228160",
|
|
6802
|
+
// "clientOid": "1321320757371228161",
|
|
6803
|
+
// "category": "USDT-FUTURES",
|
|
6804
|
+
// "symbol": "BTCUSDT",
|
|
6805
|
+
// "orderType": "limit",
|
|
6806
|
+
// "side": "buy",
|
|
6807
|
+
// "price": "50000",
|
|
6808
|
+
// "qty": "0.001",
|
|
6809
|
+
// "amount": "0",
|
|
6810
|
+
// "cumExecQty": "0",
|
|
6811
|
+
// "cumExecValue": "0",
|
|
6812
|
+
// "avgPrice": "0",
|
|
6813
|
+
// "timeInForce": "gtc",
|
|
6814
|
+
// "orderStatus": "live",
|
|
6815
|
+
// "posSide": "long",
|
|
6816
|
+
// "holdMode": "hedge_mode",
|
|
6817
|
+
// "reduceOnly": "NO",
|
|
6818
|
+
// "feeDetail": [
|
|
6819
|
+
// {
|
|
6820
|
+
// "feeCoin": "",
|
|
6821
|
+
// "fee": ""
|
|
6822
|
+
// }
|
|
6823
|
+
// ],
|
|
6824
|
+
// "createdTime": "1750753338186",
|
|
6825
|
+
// "updatedTime": "1750753338203",
|
|
6826
|
+
// "stpMode": "none",
|
|
6827
|
+
// "tpTriggerBy": null,
|
|
6828
|
+
// "slTriggerBy": null,
|
|
6829
|
+
// "takeProfit": null,
|
|
6830
|
+
// "stopLoss": null,
|
|
6831
|
+
// "tpOrderType": null,
|
|
6832
|
+
// "slOrderType": null,
|
|
6833
|
+
// "tpLimitPrice": null,
|
|
6834
|
+
// "slLimitPrice": null
|
|
6835
|
+
// }
|
|
6836
|
+
// ],
|
|
6837
|
+
// "cursor": "1321320757371228160"
|
|
6838
|
+
// }
|
|
6839
|
+
// }
|
|
6840
|
+
//
|
|
6841
|
+
// uta trigger
|
|
6842
|
+
//
|
|
6843
|
+
// {
|
|
6844
|
+
// "code": "00000",
|
|
6845
|
+
// "msg": "success",
|
|
6846
|
+
// "requestTime": 1753057527060,
|
|
6847
|
+
// "data": [
|
|
6848
|
+
// {
|
|
6849
|
+
// "orderId": "1330984742276198400",
|
|
6850
|
+
// "clientOid": "1330984742276198400",
|
|
6851
|
+
// "symbol": "BTCUSDT",
|
|
6852
|
+
// "category": "USDT-FUTURES",
|
|
6853
|
+
// "qty": "0.001",
|
|
6854
|
+
// "posSide": "long",
|
|
6855
|
+
// "tpTriggerBy": "market",
|
|
6856
|
+
// "slTriggerBy": "mark",
|
|
6857
|
+
// "takeProfit": "",
|
|
6858
|
+
// "stopLoss":"114000",
|
|
6859
|
+
// "tpOrderType": "market",
|
|
6860
|
+
// "slOrderType": "limit",
|
|
6861
|
+
// "tpLimitPrice": "",
|
|
6862
|
+
// "slLimitPrice": "113000",
|
|
6863
|
+
// "createdTime": "1753057411736",
|
|
6864
|
+
// "updatedTime": "1753057411747"
|
|
6865
|
+
// }
|
|
6866
|
+
// ]
|
|
6867
|
+
// }
|
|
6868
|
+
//
|
|
5851
6869
|
const data = this.safeValue(response, 'data');
|
|
5852
|
-
if (
|
|
6870
|
+
if (uta) {
|
|
6871
|
+
let result = undefined;
|
|
6872
|
+
if (trigger) {
|
|
6873
|
+
result = this.safeList(response, 'data', []);
|
|
6874
|
+
}
|
|
6875
|
+
else {
|
|
6876
|
+
result = this.safeList(data, 'list', []);
|
|
6877
|
+
}
|
|
6878
|
+
return this.parseOrders(result, market, since, limit);
|
|
6879
|
+
}
|
|
6880
|
+
else if (type === 'spot') {
|
|
5853
6881
|
if ((marginMode !== undefined) || trigger) {
|
|
5854
6882
|
const resultList = this.safeList(data, 'orderList', []);
|
|
5855
6883
|
return this.parseOrders(resultList, market, since, limit);
|
|
@@ -5871,6 +6899,7 @@ export default class bitget extends Exchange {
|
|
|
5871
6899
|
* @see https://www.bitget.com/api-doc/contract/plan/orders-plan-history
|
|
5872
6900
|
* @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-History
|
|
5873
6901
|
* @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Order-History
|
|
6902
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Get-Order-History
|
|
5874
6903
|
* @param {string} symbol unified market symbol of the closed orders
|
|
5875
6904
|
* @param {int} [since] timestamp in ms of the earliest order
|
|
5876
6905
|
* @param {int} [limit] the max number of closed orders to return
|
|
@@ -5898,6 +6927,7 @@ export default class bitget extends Exchange {
|
|
|
5898
6927
|
* @see https://www.bitget.com/api-doc/contract/plan/orders-plan-history
|
|
5899
6928
|
* @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-History
|
|
5900
6929
|
* @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Order-History
|
|
6930
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Get-Order-History
|
|
5901
6931
|
* @param {string} symbol unified market symbol of the canceled orders
|
|
5902
6932
|
* @param {int} [since] timestamp in ms of the earliest order
|
|
5903
6933
|
* @param {int} [limit] the max number of canceled orders to return
|
|
@@ -5924,6 +6954,8 @@ export default class bitget extends Exchange {
|
|
|
5924
6954
|
* @see https://www.bitget.com/api-doc/contract/plan/orders-plan-history
|
|
5925
6955
|
* @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-History
|
|
5926
6956
|
* @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Order-History
|
|
6957
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Get-Order-History
|
|
6958
|
+
* @see https://www.bitget.com/api-doc/uta/strategy/Get-History-Strategy-Orders
|
|
5927
6959
|
* @description fetches information on multiple canceled and closed orders made by the user
|
|
5928
6960
|
* @param {string} symbol unified market symbol of the market orders were made in
|
|
5929
6961
|
* @param {int} [since] the earliest time in ms to fetch orders for
|
|
@@ -5935,9 +6967,15 @@ export default class bitget extends Exchange {
|
|
|
5935
6967
|
* @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
6968
|
* @param {string} [params.isPlan] *swap only* 'plan' for stop orders and 'profit_loss' for tp/sl orders, default is 'plan'
|
|
5937
6969
|
* @param {boolean} [params.trailing] set to true if you want to fetch trailing orders
|
|
6970
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
5938
6971
|
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
5939
6972
|
*/
|
|
5940
6973
|
async fetchCanceledAndClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
6974
|
+
let uta = undefined;
|
|
6975
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchCanceledAndClosedOrders', 'uta', false);
|
|
6976
|
+
if (uta) {
|
|
6977
|
+
return await this.fetchUtaCanceledAndClosedOrders(symbol, since, limit, params);
|
|
6978
|
+
}
|
|
5941
6979
|
await this.loadMarkets();
|
|
5942
6980
|
let market = undefined;
|
|
5943
6981
|
let request = {};
|
|
@@ -6226,6 +7264,132 @@ export default class bitget extends Exchange {
|
|
|
6226
7264
|
const orders = this.safeList(response, 'data', []);
|
|
6227
7265
|
return this.parseOrders(orders, market, since, limit);
|
|
6228
7266
|
}
|
|
7267
|
+
async fetchUtaCanceledAndClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
7268
|
+
await this.loadMarkets();
|
|
7269
|
+
let market = undefined;
|
|
7270
|
+
if (symbol !== undefined) {
|
|
7271
|
+
market = this.market(symbol);
|
|
7272
|
+
}
|
|
7273
|
+
let productType = undefined;
|
|
7274
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
7275
|
+
if (productType === 'SPOT') {
|
|
7276
|
+
let marginMode = undefined;
|
|
7277
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchCanceledAndClosedOrders', params);
|
|
7278
|
+
if (marginMode !== undefined) {
|
|
7279
|
+
productType = 'MARGIN';
|
|
7280
|
+
}
|
|
7281
|
+
}
|
|
7282
|
+
let request = {
|
|
7283
|
+
'category': productType,
|
|
7284
|
+
};
|
|
7285
|
+
let paginate = false;
|
|
7286
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchCanceledAndClosedOrders', 'paginate');
|
|
7287
|
+
if (paginate) {
|
|
7288
|
+
return await this.fetchPaginatedCallCursor('fetchCanceledAndClosedOrders', symbol, since, limit, params, 'cursor', 'cursor');
|
|
7289
|
+
}
|
|
7290
|
+
[request, params] = this.handleUntilOption('endTime', request, params);
|
|
7291
|
+
if (since !== undefined) {
|
|
7292
|
+
request['startTime'] = since;
|
|
7293
|
+
}
|
|
7294
|
+
if (limit !== undefined) {
|
|
7295
|
+
request['limit'] = limit;
|
|
7296
|
+
}
|
|
7297
|
+
let response = undefined;
|
|
7298
|
+
const trigger = this.safeBool2(params, 'stop', 'trigger');
|
|
7299
|
+
params = this.omit(params, ['stop', 'trigger']);
|
|
7300
|
+
if (trigger) {
|
|
7301
|
+
response = await this.privateUtaGetV3TradeHistoryStrategyOrders(this.extend(request, params));
|
|
7302
|
+
}
|
|
7303
|
+
else {
|
|
7304
|
+
response = await this.privateUtaGetV3TradeHistoryOrders(this.extend(request, params));
|
|
7305
|
+
}
|
|
7306
|
+
//
|
|
7307
|
+
// uta
|
|
7308
|
+
//
|
|
7309
|
+
// {
|
|
7310
|
+
// "code": "00000",
|
|
7311
|
+
// "msg": "success",
|
|
7312
|
+
// "requestTime": 1752531592855,
|
|
7313
|
+
// "data": {
|
|
7314
|
+
// "list": [
|
|
7315
|
+
// {
|
|
7316
|
+
// "orderId": "1322441400976261120",
|
|
7317
|
+
// "clientOid": "1322441400976261121",
|
|
7318
|
+
// "category": "USDT-FUTURES",
|
|
7319
|
+
// "symbol": "BTCUSDT",
|
|
7320
|
+
// "orderType": "market",
|
|
7321
|
+
// "side": "sell",
|
|
7322
|
+
// "price": "0",
|
|
7323
|
+
// "qty": "0.0001",
|
|
7324
|
+
// "amount": "0",
|
|
7325
|
+
// "cumExecQty": "0.0001",
|
|
7326
|
+
// "cumExecValue": "10.7005",
|
|
7327
|
+
// "avgPrice": "107005.4",
|
|
7328
|
+
// "timeInForce": "gtc",
|
|
7329
|
+
// "orderStatus": "filled",
|
|
7330
|
+
// "posSide": "long",
|
|
7331
|
+
// "holdMode": "hedge_mode",
|
|
7332
|
+
// "reduceOnly": "NO",
|
|
7333
|
+
// "feeDetail": [
|
|
7334
|
+
// {
|
|
7335
|
+
// "feeCoin": "USDT",
|
|
7336
|
+
// "fee": "0.00642032"
|
|
7337
|
+
// }
|
|
7338
|
+
// ],
|
|
7339
|
+
// "createdTime": "1751020520442",
|
|
7340
|
+
// "updatedTime": "1751020520457",
|
|
7341
|
+
// "cancelReason": "",
|
|
7342
|
+
// "execType": "normal",
|
|
7343
|
+
// "stpMode": "none",
|
|
7344
|
+
// "tpTriggerBy": null,
|
|
7345
|
+
// "slTriggerBy": null,
|
|
7346
|
+
// "takeProfit": null,
|
|
7347
|
+
// "stopLoss": null,
|
|
7348
|
+
// "tpOrderType": null,
|
|
7349
|
+
// "slOrderType": null,
|
|
7350
|
+
// "tpLimitPrice": null,
|
|
7351
|
+
// "slLimitPrice": null
|
|
7352
|
+
// },
|
|
7353
|
+
// ],
|
|
7354
|
+
// "cursor": "1322441328637100035"
|
|
7355
|
+
// }
|
|
7356
|
+
// }
|
|
7357
|
+
//
|
|
7358
|
+
// uta trigger
|
|
7359
|
+
//
|
|
7360
|
+
// {
|
|
7361
|
+
// "code": "00000",
|
|
7362
|
+
// "msg": "success",
|
|
7363
|
+
// "requestTime": 1753058447920,
|
|
7364
|
+
// "data": {
|
|
7365
|
+
// "list": [
|
|
7366
|
+
// {
|
|
7367
|
+
// "orderId": "1330984742276198400",
|
|
7368
|
+
// "clientOid": "1330984742276198400",
|
|
7369
|
+
// "symbol": "BTCUSDT",
|
|
7370
|
+
// "category": "USDT-FUTURES",
|
|
7371
|
+
// "qty": "0.001",
|
|
7372
|
+
// "posSide": "long",
|
|
7373
|
+
// "tpTriggerBy": "market",
|
|
7374
|
+
// "slTriggerBy": "mark",
|
|
7375
|
+
// "takeProfit": "",
|
|
7376
|
+
// "stopLoss": "112000",
|
|
7377
|
+
// "tpOrderType": "market",
|
|
7378
|
+
// "slOrderType": "limit",
|
|
7379
|
+
// "tpLimitPrice": "",
|
|
7380
|
+
// "slLimitPrice": "111000",
|
|
7381
|
+
// "createdTime": "1753057411736",
|
|
7382
|
+
// "updatedTime": "1753058267412"
|
|
7383
|
+
// },
|
|
7384
|
+
// ],
|
|
7385
|
+
// "cursor": 1330960754317619202
|
|
7386
|
+
// }
|
|
7387
|
+
// }
|
|
7388
|
+
//
|
|
7389
|
+
const data = this.safeDict(response, 'data', {});
|
|
7390
|
+
const orders = this.safeList(data, 'list', []);
|
|
7391
|
+
return this.parseOrders(orders, market, since, limit);
|
|
7392
|
+
}
|
|
6229
7393
|
/**
|
|
6230
7394
|
* @method
|
|
6231
7395
|
* @name bitget#fetchLedger
|
|
@@ -6452,69 +7616,84 @@ export default class bitget extends Exchange {
|
|
|
6452
7616
|
* @see https://www.bitget.com/api-doc/contract/trade/Get-Order-Fills
|
|
6453
7617
|
* @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-Fills
|
|
6454
7618
|
* @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Transaction-Details
|
|
7619
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Get-Order-Fills
|
|
6455
7620
|
* @param {string} symbol unified market symbol
|
|
6456
7621
|
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
6457
7622
|
* @param {int} [limit] the maximum number of trades structures to retrieve
|
|
6458
7623
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
6459
7624
|
* @param {int} [params.until] the latest time in ms to fetch trades for
|
|
7625
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
6460
7626
|
* @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
7627
|
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
|
|
6462
7628
|
*/
|
|
6463
7629
|
async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
6464
|
-
|
|
7630
|
+
let uta = undefined;
|
|
7631
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'uta', false);
|
|
7632
|
+
if (!uta && (symbol === undefined)) {
|
|
6465
7633
|
throw new ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
|
|
6466
7634
|
}
|
|
6467
7635
|
await this.loadMarkets();
|
|
6468
7636
|
const market = this.market(symbol);
|
|
6469
|
-
let
|
|
6470
|
-
[
|
|
7637
|
+
let request = {};
|
|
7638
|
+
[request, params] = this.handleUntilOption('endTime', request, params);
|
|
7639
|
+
if (since !== undefined) {
|
|
7640
|
+
request['startTime'] = since;
|
|
7641
|
+
}
|
|
7642
|
+
if (limit !== undefined) {
|
|
7643
|
+
request['limit'] = limit;
|
|
7644
|
+
}
|
|
6471
7645
|
let paginate = false;
|
|
7646
|
+
let marginMode = undefined;
|
|
6472
7647
|
[paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');
|
|
7648
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);
|
|
6473
7649
|
if (paginate) {
|
|
6474
7650
|
let cursorReceived = undefined;
|
|
6475
|
-
|
|
7651
|
+
let cursorSent = undefined;
|
|
7652
|
+
if (uta) {
|
|
7653
|
+
cursorReceived = 'cursor';
|
|
7654
|
+
cursorSent = 'cursor';
|
|
7655
|
+
}
|
|
7656
|
+
else if (market['spot']) {
|
|
6476
7657
|
if (marginMode !== undefined) {
|
|
6477
7658
|
cursorReceived = 'minId';
|
|
7659
|
+
cursorSent = 'idLessThan';
|
|
6478
7660
|
}
|
|
6479
7661
|
}
|
|
6480
7662
|
else {
|
|
6481
7663
|
cursorReceived = 'endId';
|
|
7664
|
+
cursorSent = 'idLessThan';
|
|
6482
7665
|
}
|
|
6483
|
-
return await this.fetchPaginatedCallCursor('fetchMyTrades', symbol, since, limit, params, cursorReceived,
|
|
7666
|
+
return await this.fetchPaginatedCallCursor('fetchMyTrades', symbol, since, limit, params, cursorReceived, cursorSent);
|
|
6484
7667
|
}
|
|
6485
7668
|
let response = undefined;
|
|
6486
|
-
|
|
6487
|
-
|
|
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;
|
|
7669
|
+
if (uta) {
|
|
7670
|
+
response = await this.privateUtaGetV3TradeFills(this.extend(request, params));
|
|
6495
7671
|
}
|
|
6496
|
-
|
|
6497
|
-
|
|
6498
|
-
|
|
6499
|
-
|
|
6500
|
-
|
|
6501
|
-
|
|
6502
|
-
|
|
7672
|
+
else {
|
|
7673
|
+
request['symbol'] = market['id'];
|
|
7674
|
+
if (market['spot']) {
|
|
7675
|
+
if (marginMode !== undefined) {
|
|
7676
|
+
if (since === undefined) {
|
|
7677
|
+
request['startTime'] = this.milliseconds() - 7776000000;
|
|
7678
|
+
}
|
|
7679
|
+
if (marginMode === 'isolated') {
|
|
7680
|
+
response = await this.privateMarginGetV2MarginIsolatedFills(this.extend(request, params));
|
|
7681
|
+
}
|
|
7682
|
+
else if (marginMode === 'cross') {
|
|
7683
|
+
response = await this.privateMarginGetV2MarginCrossedFills(this.extend(request, params));
|
|
7684
|
+
}
|
|
6503
7685
|
}
|
|
6504
|
-
else
|
|
6505
|
-
response = await this.
|
|
7686
|
+
else {
|
|
7687
|
+
response = await this.privateSpotGetV2SpotTradeFills(this.extend(request, params));
|
|
6506
7688
|
}
|
|
6507
7689
|
}
|
|
6508
7690
|
else {
|
|
6509
|
-
|
|
7691
|
+
let productType = undefined;
|
|
7692
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
7693
|
+
request['productType'] = productType;
|
|
7694
|
+
response = await this.privateMixGetV2MixOrderFills(this.extend(request, params));
|
|
6510
7695
|
}
|
|
6511
7696
|
}
|
|
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
7697
|
//
|
|
6519
7698
|
// spot
|
|
6520
7699
|
//
|
|
@@ -6614,10 +7793,46 @@ export default class bitget extends Exchange {
|
|
|
6614
7793
|
// }
|
|
6615
7794
|
// }
|
|
6616
7795
|
//
|
|
7796
|
+
// uta
|
|
7797
|
+
//
|
|
7798
|
+
// {
|
|
7799
|
+
// "code": "00000",
|
|
7800
|
+
// "msg": "success",
|
|
7801
|
+
// "requestTime": 1751099666579,
|
|
7802
|
+
// "data": {
|
|
7803
|
+
// "list": [
|
|
7804
|
+
// {
|
|
7805
|
+
// "execId": "1322441401010528257",
|
|
7806
|
+
// "orderId": "1322441400976261120",
|
|
7807
|
+
// "category": "USDT-FUTURES",
|
|
7808
|
+
// "symbol": "BTCUSDT",
|
|
7809
|
+
// "orderType": "market",
|
|
7810
|
+
// "side": "sell",
|
|
7811
|
+
// "execPrice": "107005.4",
|
|
7812
|
+
// "execQty": "0.0001",
|
|
7813
|
+
// "execValue": "10.7005",
|
|
7814
|
+
// "tradeScope": "taker",
|
|
7815
|
+
// "feeDetail": [{
|
|
7816
|
+
// "feeCoin": "USDT",
|
|
7817
|
+
// "fee":"0.00642032"
|
|
7818
|
+
// }],
|
|
7819
|
+
// "createdTime": "1751020520451",
|
|
7820
|
+
// "updatedTime": "1751020520458",
|
|
7821
|
+
// "execPnl": "0.00017"
|
|
7822
|
+
// },
|
|
7823
|
+
// ],
|
|
7824
|
+
// "cursor": "1322061241878880257"
|
|
7825
|
+
// }
|
|
7826
|
+
// }
|
|
7827
|
+
//
|
|
6617
7828
|
const data = this.safeValue(response, 'data');
|
|
6618
|
-
if (
|
|
6619
|
-
const
|
|
6620
|
-
return this.parseTrades(
|
|
7829
|
+
if (uta) {
|
|
7830
|
+
const fills = this.safeList(data, 'list', []);
|
|
7831
|
+
return this.parseTrades(fills, market, since, limit);
|
|
7832
|
+
}
|
|
7833
|
+
else if ((market['swap'] || (market['future']))) {
|
|
7834
|
+
const fills = this.safeList(data, 'fillList', []);
|
|
7835
|
+
return this.parseTrades(fills, market, since, limit);
|
|
6621
7836
|
}
|
|
6622
7837
|
else if (marginMode !== undefined) {
|
|
6623
7838
|
const fills = this.safeList(data, 'fills', []);
|
|
@@ -6630,8 +7845,10 @@ export default class bitget extends Exchange {
|
|
|
6630
7845
|
* @name bitget#fetchPosition
|
|
6631
7846
|
* @description fetch data on a single open contract trade position
|
|
6632
7847
|
* @see https://www.bitget.com/api-doc/contract/position/get-single-position
|
|
7848
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Get-Position
|
|
6633
7849
|
* @param {string} symbol unified market symbol of the market the position is held in
|
|
6634
7850
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
7851
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
6635
7852
|
* @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
|
|
6636
7853
|
*/
|
|
6637
7854
|
async fetchPosition(symbol, params = {}) {
|
|
@@ -6641,42 +7858,92 @@ export default class bitget extends Exchange {
|
|
|
6641
7858
|
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
6642
7859
|
const request = {
|
|
6643
7860
|
'symbol': market['id'],
|
|
6644
|
-
'marginCoin': market['settleId'],
|
|
6645
|
-
'productType': productType,
|
|
6646
7861
|
};
|
|
6647
|
-
|
|
6648
|
-
|
|
6649
|
-
|
|
6650
|
-
|
|
6651
|
-
|
|
6652
|
-
|
|
6653
|
-
|
|
6654
|
-
|
|
6655
|
-
|
|
6656
|
-
|
|
6657
|
-
|
|
6658
|
-
|
|
6659
|
-
|
|
6660
|
-
|
|
6661
|
-
|
|
6662
|
-
|
|
6663
|
-
|
|
6664
|
-
|
|
6665
|
-
|
|
6666
|
-
|
|
6667
|
-
|
|
6668
|
-
|
|
6669
|
-
|
|
6670
|
-
|
|
6671
|
-
|
|
6672
|
-
|
|
6673
|
-
|
|
6674
|
-
|
|
6675
|
-
|
|
6676
|
-
|
|
6677
|
-
|
|
6678
|
-
|
|
6679
|
-
|
|
7862
|
+
let response = undefined;
|
|
7863
|
+
let uta = undefined;
|
|
7864
|
+
let result = undefined;
|
|
7865
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchPosition', 'uta', false);
|
|
7866
|
+
if (uta) {
|
|
7867
|
+
request['category'] = productType;
|
|
7868
|
+
response = await this.privateUtaGetV3PositionCurrentPosition(this.extend(request, params));
|
|
7869
|
+
//
|
|
7870
|
+
// {
|
|
7871
|
+
// "code": "00000",
|
|
7872
|
+
// "msg": "success",
|
|
7873
|
+
// "requestTime": 1750929905423,
|
|
7874
|
+
// "data": {
|
|
7875
|
+
// "list": [
|
|
7876
|
+
// {
|
|
7877
|
+
// "category": "USDT-FUTURES",
|
|
7878
|
+
// "symbol": "BTCUSDT",
|
|
7879
|
+
// "marginCoin": "USDT",
|
|
7880
|
+
// "holdMode": "hedge_mode",
|
|
7881
|
+
// "posSide": "long",
|
|
7882
|
+
// "marginMode": "crossed",
|
|
7883
|
+
// "positionBalance": "5.435199",
|
|
7884
|
+
// "available": "0.001",
|
|
7885
|
+
// "frozen": "0",
|
|
7886
|
+
// "total": "0.001",
|
|
7887
|
+
// "leverage": "20",
|
|
7888
|
+
// "curRealisedPnl": "0",
|
|
7889
|
+
// "avgPrice": "107410.3",
|
|
7890
|
+
// "positionStatus": "normal",
|
|
7891
|
+
// "unrealisedPnl": "0.0047",
|
|
7892
|
+
// "liquidationPrice": "0",
|
|
7893
|
+
// "mmr": "0.004",
|
|
7894
|
+
// "profitRate": "0.0008647337475591",
|
|
7895
|
+
// "markPrice": "107415.3",
|
|
7896
|
+
// "breakEvenPrice": "107539.2",
|
|
7897
|
+
// "totalFunding": "0",
|
|
7898
|
+
// "openFeeTotal": "-0.06444618",
|
|
7899
|
+
// "closeFeeTotal": "0",
|
|
7900
|
+
// "createdTime": "1750495670699",
|
|
7901
|
+
// "updatedTime": "1750929883465"
|
|
7902
|
+
// }
|
|
7903
|
+
// ]
|
|
7904
|
+
// }
|
|
7905
|
+
// }
|
|
7906
|
+
//
|
|
7907
|
+
const data = this.safeDict(response, 'data', {});
|
|
7908
|
+
result = this.safeList(data, 'list', []);
|
|
7909
|
+
}
|
|
7910
|
+
else {
|
|
7911
|
+
request['marginCoin'] = market['settleId'];
|
|
7912
|
+
request['productType'] = productType;
|
|
7913
|
+
response = await this.privateMixGetV2MixPositionSinglePosition(this.extend(request, params));
|
|
7914
|
+
//
|
|
7915
|
+
// {
|
|
7916
|
+
// "code": "00000",
|
|
7917
|
+
// "msg": "success",
|
|
7918
|
+
// "requestTime": 1700807531673,
|
|
7919
|
+
// "data": [
|
|
7920
|
+
// {
|
|
7921
|
+
// "marginCoin": "USDT",
|
|
7922
|
+
// "symbol": "BTCUSDT",
|
|
7923
|
+
// "holdSide": "long",
|
|
7924
|
+
// "openDelegateSize": "0",
|
|
7925
|
+
// "marginSize": "3.73555",
|
|
7926
|
+
// "available": "0.002",
|
|
7927
|
+
// "locked": "0",
|
|
7928
|
+
// "total": "0.002",
|
|
7929
|
+
// "leverage": "20",
|
|
7930
|
+
// "achievedProfits": "0",
|
|
7931
|
+
// "openPriceAvg": "37355.5",
|
|
7932
|
+
// "marginMode": "crossed",
|
|
7933
|
+
// "posMode": "hedge_mode",
|
|
7934
|
+
// "unrealizedPL": "0.007",
|
|
7935
|
+
// "liquidationPrice": "31724.970702417",
|
|
7936
|
+
// "keepMarginRate": "0.004",
|
|
7937
|
+
// "markPrice": "37359",
|
|
7938
|
+
// "marginRatio": "0.029599540355",
|
|
7939
|
+
// "cTime": "1700807507275"
|
|
7940
|
+
// }
|
|
7941
|
+
// ]
|
|
7942
|
+
// }
|
|
7943
|
+
//
|
|
7944
|
+
result = this.safeList(response, 'data', []);
|
|
7945
|
+
}
|
|
7946
|
+
const first = this.safeDict(result, 0, {});
|
|
6680
7947
|
return this.parsePosition(first, market);
|
|
6681
7948
|
}
|
|
6682
7949
|
/**
|
|
@@ -6856,6 +8123,36 @@ export default class bitget extends Exchange {
|
|
|
6856
8123
|
// "cTime": "1700807507275"
|
|
6857
8124
|
// }
|
|
6858
8125
|
//
|
|
8126
|
+
// uta: fetchPosition
|
|
8127
|
+
//
|
|
8128
|
+
// {
|
|
8129
|
+
// "category": "USDT-FUTURES",
|
|
8130
|
+
// "symbol": "BTCUSDT",
|
|
8131
|
+
// "marginCoin": "USDT",
|
|
8132
|
+
// "holdMode": "hedge_mode",
|
|
8133
|
+
// "posSide": "long",
|
|
8134
|
+
// "marginMode": "crossed",
|
|
8135
|
+
// "positionBalance": "5.435199",
|
|
8136
|
+
// "available": "0.001",
|
|
8137
|
+
// "frozen": "0",
|
|
8138
|
+
// "total": "0.001",
|
|
8139
|
+
// "leverage": "20",
|
|
8140
|
+
// "curRealisedPnl": "0",
|
|
8141
|
+
// "avgPrice": "107410.3",
|
|
8142
|
+
// "positionStatus": "normal",
|
|
8143
|
+
// "unrealisedPnl": "0.0047",
|
|
8144
|
+
// "liquidationPrice": "0",
|
|
8145
|
+
// "mmr": "0.004",
|
|
8146
|
+
// "profitRate": "0.0008647337475591",
|
|
8147
|
+
// "markPrice": "107415.3",
|
|
8148
|
+
// "breakEvenPrice": "107539.2",
|
|
8149
|
+
// "totalFunding": "0",
|
|
8150
|
+
// "openFeeTotal": "-0.06444618",
|
|
8151
|
+
// "closeFeeTotal": "0",
|
|
8152
|
+
// "createdTime": "1750495670699",
|
|
8153
|
+
// "updatedTime": "1750929883465"
|
|
8154
|
+
// }
|
|
8155
|
+
//
|
|
6859
8156
|
// fetchPositions: privateMixGetV2MixPositionAllPosition
|
|
6860
8157
|
//
|
|
6861
8158
|
// {
|
|
@@ -6907,15 +8204,38 @@ export default class bitget extends Exchange {
|
|
|
6907
8204
|
// "clientOid": "1120923953904893956"
|
|
6908
8205
|
// }
|
|
6909
8206
|
//
|
|
8207
|
+
// uta: fetchPositionsHistory
|
|
8208
|
+
//
|
|
8209
|
+
// {
|
|
8210
|
+
// "positionId": "1322441328637100049",
|
|
8211
|
+
// "category": "USDT-FUTURES",
|
|
8212
|
+
// "symbol": "BTCUSDT",
|
|
8213
|
+
// "marginCoin": "USDT",
|
|
8214
|
+
// "holdMode": "hedge_mode",
|
|
8215
|
+
// "posSide": "long",
|
|
8216
|
+
// "marginMode": "crossed",
|
|
8217
|
+
// "openPriceAvg": "107003.7",
|
|
8218
|
+
// "closePriceAvg": "107005.4",
|
|
8219
|
+
// "openTotalPos": "0.0001",
|
|
8220
|
+
// "closeTotalPos": "0.0001",
|
|
8221
|
+
// "cumRealisedPnl": "0.00017",
|
|
8222
|
+
// "netProfit": "-0.01267055",
|
|
8223
|
+
// "totalFunding": "0",
|
|
8224
|
+
// "openFeeTotal": "-0.00642022",
|
|
8225
|
+
// "closeFeeTotal": "-0.00642032",
|
|
8226
|
+
// "createdTime": "1751020503195",
|
|
8227
|
+
// "updatedTime": "1751020520458"
|
|
8228
|
+
// }
|
|
8229
|
+
//
|
|
6910
8230
|
const marketId = this.safeString(position, 'symbol');
|
|
6911
8231
|
market = this.safeMarket(marketId, market, undefined, 'contract');
|
|
6912
8232
|
const symbol = market['symbol'];
|
|
6913
|
-
const timestamp = this.
|
|
8233
|
+
const timestamp = this.safeIntegerN(position, ['cTime', 'ctime', 'createdTime']);
|
|
6914
8234
|
let marginMode = this.safeString(position, 'marginMode');
|
|
6915
8235
|
let collateral = undefined;
|
|
6916
8236
|
let initialMargin = undefined;
|
|
6917
|
-
const unrealizedPnl = this.
|
|
6918
|
-
const rawCollateral = this.
|
|
8237
|
+
const unrealizedPnl = this.safeString2(position, 'unrealizedPL', 'unrealisedPnl');
|
|
8238
|
+
const rawCollateral = this.safeString2(position, 'marginSize', 'positionBalance');
|
|
6919
8239
|
if (marginMode === 'isolated') {
|
|
6920
8240
|
collateral = Precise.stringAdd(rawCollateral, unrealizedPnl);
|
|
6921
8241
|
}
|
|
@@ -6923,7 +8243,7 @@ export default class bitget extends Exchange {
|
|
|
6923
8243
|
marginMode = 'cross';
|
|
6924
8244
|
initialMargin = rawCollateral;
|
|
6925
8245
|
}
|
|
6926
|
-
const holdMode = this.
|
|
8246
|
+
const holdMode = this.safeString2(position, 'posMode', 'holdMode');
|
|
6927
8247
|
let hedged = undefined;
|
|
6928
8248
|
if (holdMode === 'hedge_mode') {
|
|
6929
8249
|
hedged = true;
|
|
@@ -6931,12 +8251,12 @@ export default class bitget extends Exchange {
|
|
|
6931
8251
|
else if (holdMode === 'one_way_mode') {
|
|
6932
8252
|
hedged = false;
|
|
6933
8253
|
}
|
|
6934
|
-
const side = this.
|
|
8254
|
+
const side = this.safeString2(position, 'holdSide', 'posSide');
|
|
6935
8255
|
const leverage = this.safeString(position, 'leverage');
|
|
6936
8256
|
const contractSizeNumber = this.safeValue(market, 'contractSize');
|
|
6937
8257
|
const contractSize = this.numberToString(contractSizeNumber);
|
|
6938
|
-
const baseAmount = this.
|
|
6939
|
-
const entryPrice = this.
|
|
8258
|
+
const baseAmount = this.safeString2(position, 'total', 'openTotalPos');
|
|
8259
|
+
const entryPrice = this.safeStringN(position, ['openPriceAvg', 'openAvgPrice', 'avgPrice']);
|
|
6940
8260
|
const maintenanceMarginPercentage = this.safeString(position, 'keepMarginRate');
|
|
6941
8261
|
const openNotional = Precise.stringMul(entryPrice, baseAmount);
|
|
6942
8262
|
if (initialMargin === undefined) {
|
|
@@ -6974,31 +8294,31 @@ export default class bitget extends Exchange {
|
|
|
6974
8294
|
const percentage = Precise.stringMul(Precise.stringDiv(unrealizedPnl, initialMargin, 4), '100');
|
|
6975
8295
|
return this.safePosition({
|
|
6976
8296
|
'info': position,
|
|
6977
|
-
'id': this.
|
|
8297
|
+
'id': this.safeString2(position, 'orderId', 'positionId'),
|
|
6978
8298
|
'symbol': symbol,
|
|
6979
8299
|
'notional': this.parseNumber(notional),
|
|
6980
8300
|
'marginMode': marginMode,
|
|
6981
8301
|
'liquidationPrice': liquidationPrice,
|
|
6982
8302
|
'entryPrice': this.parseNumber(entryPrice),
|
|
6983
8303
|
'unrealizedPnl': this.parseNumber(unrealizedPnl),
|
|
6984
|
-
'realizedPnl': this.
|
|
8304
|
+
'realizedPnl': this.safeNumberN(position, ['pnl', 'curRealisedPnl', 'cumRealisedPnl']),
|
|
6985
8305
|
'percentage': this.parseNumber(percentage),
|
|
6986
8306
|
'contracts': contracts,
|
|
6987
8307
|
'contractSize': contractSizeNumber,
|
|
6988
8308
|
'markPrice': this.parseNumber(markPrice),
|
|
6989
|
-
'lastPrice': this.
|
|
8309
|
+
'lastPrice': this.safeNumber2(position, 'closeAvgPrice', 'closePriceAvg'),
|
|
6990
8310
|
'side': side,
|
|
6991
8311
|
'hedged': hedged,
|
|
6992
8312
|
'timestamp': timestamp,
|
|
6993
8313
|
'datetime': this.iso8601(timestamp),
|
|
6994
|
-
'lastUpdateTimestamp': this.
|
|
8314
|
+
'lastUpdateTimestamp': this.safeInteger2(position, 'utime', 'updatedTime'),
|
|
6995
8315
|
'maintenanceMargin': this.parseNumber(maintenanceMargin),
|
|
6996
8316
|
'maintenanceMarginPercentage': this.parseNumber(maintenanceMarginPercentage),
|
|
6997
8317
|
'collateral': this.parseNumber(collateral),
|
|
6998
8318
|
'initialMargin': this.parseNumber(initialMargin),
|
|
6999
8319
|
'initialMarginPercentage': this.parseNumber(initialMarginPercentage),
|
|
7000
8320
|
'leverage': this.parseNumber(leverage),
|
|
7001
|
-
'marginRatio': this.
|
|
8321
|
+
'marginRatio': this.safeNumber2(position, 'marginRatio', 'mmr'),
|
|
7002
8322
|
'stopLossPrice': undefined,
|
|
7003
8323
|
'takeProfitPrice': undefined,
|
|
7004
8324
|
});
|
|
@@ -7008,10 +8328,12 @@ export default class bitget extends Exchange {
|
|
|
7008
8328
|
* @name bitget#fetchFundingRateHistory
|
|
7009
8329
|
* @description fetches historical funding rate prices
|
|
7010
8330
|
* @see https://www.bitget.com/api-doc/contract/market/Get-History-Funding-Rate
|
|
8331
|
+
* @see https://www.bitget.com/api-doc/uta/public/Get-History-Funding-Rate
|
|
7011
8332
|
* @param {string} symbol unified symbol of the market to fetch the funding rate history for
|
|
7012
8333
|
* @param {int} [since] timestamp in ms of the earliest funding rate to fetch
|
|
7013
8334
|
* @param {int} [limit] the maximum amount of funding rate structures to fetch
|
|
7014
8335
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
8336
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
7015
8337
|
* @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
8338
|
* @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure}
|
|
7017
8339
|
*/
|
|
@@ -7020,45 +8342,74 @@ export default class bitget extends Exchange {
|
|
|
7020
8342
|
throw new ArgumentsRequired(this.id + ' fetchFundingRateHistory() requires a symbol argument');
|
|
7021
8343
|
}
|
|
7022
8344
|
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
8345
|
const market = this.market(symbol);
|
|
7029
|
-
let productType = undefined;
|
|
7030
|
-
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
7031
8346
|
const request = {
|
|
7032
8347
|
'symbol': market['id'],
|
|
7033
|
-
'productType': productType,
|
|
7034
|
-
// 'pageSize': limit, // default 20
|
|
7035
|
-
// 'pageNo': 1,
|
|
7036
8348
|
};
|
|
7037
|
-
|
|
7038
|
-
|
|
8349
|
+
let productType = undefined;
|
|
8350
|
+
let uta = undefined;
|
|
8351
|
+
let response = undefined;
|
|
8352
|
+
let result = undefined;
|
|
8353
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
8354
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'uta', false);
|
|
8355
|
+
if (uta) {
|
|
8356
|
+
if (limit !== undefined) {
|
|
8357
|
+
request['limit'] = limit;
|
|
8358
|
+
}
|
|
8359
|
+
request['category'] = productType;
|
|
8360
|
+
response = await this.publicUtaGetV3MarketHistoryFundRate(this.extend(request, params));
|
|
8361
|
+
//
|
|
8362
|
+
// {
|
|
8363
|
+
// "code": "00000",
|
|
8364
|
+
// "msg": "success",
|
|
8365
|
+
// "requestTime": 1750435113658,
|
|
8366
|
+
// "data": {
|
|
8367
|
+
// "resultList": [
|
|
8368
|
+
// {
|
|
8369
|
+
// "symbol": "BTCUSDT",
|
|
8370
|
+
// "fundingRate": "-0.000017",
|
|
8371
|
+
// "fundingRateTimestamp": "1750431600000"
|
|
8372
|
+
// },
|
|
8373
|
+
// ]
|
|
8374
|
+
// }
|
|
8375
|
+
// }
|
|
8376
|
+
//
|
|
8377
|
+
const data = this.safeDict(response, 'data', {});
|
|
8378
|
+
result = this.safeList(data, 'resultList', []);
|
|
8379
|
+
}
|
|
8380
|
+
else {
|
|
8381
|
+
let paginate = false;
|
|
8382
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
|
|
8383
|
+
if (paginate) {
|
|
8384
|
+
return await this.fetchPaginatedCallIncremental('fetchFundingRateHistory', symbol, since, limit, params, 'pageNo', 100);
|
|
8385
|
+
}
|
|
8386
|
+
if (limit !== undefined) {
|
|
8387
|
+
request['pageSize'] = limit;
|
|
8388
|
+
}
|
|
8389
|
+
request['productType'] = productType;
|
|
8390
|
+
response = await this.publicMixGetV2MixMarketHistoryFundRate(this.extend(request, params));
|
|
8391
|
+
//
|
|
8392
|
+
// {
|
|
8393
|
+
// "code": "00000",
|
|
8394
|
+
// "msg": "success",
|
|
8395
|
+
// "requestTime": 1652406728393,
|
|
8396
|
+
// "data": [
|
|
8397
|
+
// {
|
|
8398
|
+
// "symbol": "BTCUSDT",
|
|
8399
|
+
// "fundingRate": "-0.0003",
|
|
8400
|
+
// "fundingTime": "1652396400000"
|
|
8401
|
+
// },
|
|
8402
|
+
// ]
|
|
8403
|
+
// }
|
|
8404
|
+
//
|
|
8405
|
+
result = this.safeList(response, 'data', []);
|
|
7039
8406
|
}
|
|
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
8407
|
const rates = [];
|
|
7057
|
-
for (let i = 0; i <
|
|
7058
|
-
const entry =
|
|
8408
|
+
for (let i = 0; i < result.length; i++) {
|
|
8409
|
+
const entry = result[i];
|
|
7059
8410
|
const marketId = this.safeString(entry, 'symbol');
|
|
7060
8411
|
const symbolInner = this.safeSymbol(marketId, market);
|
|
7061
|
-
const timestamp = this.
|
|
8412
|
+
const timestamp = this.safeInteger2(entry, 'fundingTime', 'fundingRateTimestamp');
|
|
7062
8413
|
rates.push({
|
|
7063
8414
|
'info': entry,
|
|
7064
8415
|
'symbol': symbolInner,
|
|
@@ -7076,8 +8427,10 @@ export default class bitget extends Exchange {
|
|
|
7076
8427
|
* @description fetch the current funding rate
|
|
7077
8428
|
* @see https://www.bitget.com/api-doc/contract/market/Get-Current-Funding-Rate
|
|
7078
8429
|
* @see https://www.bitget.com/api-doc/contract/market/Get-Symbol-Next-Funding-Time
|
|
8430
|
+
* @see https://www.bitget.com/api-doc/uta/public/Get-Current-Funding-Rate
|
|
7079
8431
|
* @param {string} symbol unified market symbol
|
|
7080
8432
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
8433
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
7081
8434
|
* @param {string} [params.method] either (default) 'publicMixGetV2MixMarketCurrentFundRate' or 'publicMixGetV2MixMarketFundingTime'
|
|
7082
8435
|
* @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
|
|
7083
8436
|
*/
|
|
@@ -7091,24 +8444,23 @@ export default class bitget extends Exchange {
|
|
|
7091
8444
|
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
7092
8445
|
const request = {
|
|
7093
8446
|
'symbol': market['id'],
|
|
7094
|
-
'productType': productType,
|
|
7095
8447
|
};
|
|
7096
|
-
let
|
|
7097
|
-
[method, params] = this.handleOptionAndParams(params, 'fetchFundingRate', 'method', 'publicMixGetV2MixMarketCurrentFundRate');
|
|
8448
|
+
let uta = undefined;
|
|
7098
8449
|
let response = undefined;
|
|
7099
|
-
|
|
7100
|
-
|
|
8450
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchFundingRate', 'uta', false);
|
|
8451
|
+
if (uta) {
|
|
8452
|
+
response = await this.publicUtaGetV3MarketCurrentFundRate(this.extend(request, params));
|
|
7101
8453
|
//
|
|
7102
8454
|
// {
|
|
7103
8455
|
// "code": "00000",
|
|
7104
8456
|
// "msg": "success",
|
|
7105
|
-
// "requestTime":
|
|
8457
|
+
// "requestTime": 1750897372153,
|
|
7106
8458
|
// "data": [
|
|
7107
8459
|
// {
|
|
7108
8460
|
// "symbol": "BTCUSDT",
|
|
7109
|
-
// "fundingRate": "
|
|
8461
|
+
// "fundingRate": "0.00001",
|
|
7110
8462
|
// "fundingRateInterval": "8",
|
|
7111
|
-
// "nextUpdate": "
|
|
8463
|
+
// "nextUpdate": "1750924800000",
|
|
7112
8464
|
// "minFundingRate": "-0.003",
|
|
7113
8465
|
// "maxFundingRate": "0.003"
|
|
7114
8466
|
// }
|
|
@@ -7116,22 +8468,47 @@ export default class bitget extends Exchange {
|
|
|
7116
8468
|
// }
|
|
7117
8469
|
//
|
|
7118
8470
|
}
|
|
7119
|
-
else
|
|
7120
|
-
|
|
7121
|
-
|
|
7122
|
-
|
|
7123
|
-
|
|
7124
|
-
|
|
7125
|
-
|
|
7126
|
-
|
|
7127
|
-
|
|
7128
|
-
|
|
7129
|
-
|
|
7130
|
-
|
|
7131
|
-
|
|
7132
|
-
|
|
7133
|
-
|
|
7134
|
-
|
|
8471
|
+
else {
|
|
8472
|
+
request['productType'] = productType;
|
|
8473
|
+
let method = undefined;
|
|
8474
|
+
[method, params] = this.handleOptionAndParams(params, 'fetchFundingRate', 'method', 'publicMixGetV2MixMarketCurrentFundRate');
|
|
8475
|
+
if (method === 'publicMixGetV2MixMarketCurrentFundRate') {
|
|
8476
|
+
response = await this.publicMixGetV2MixMarketCurrentFundRate(this.extend(request, params));
|
|
8477
|
+
//
|
|
8478
|
+
// {
|
|
8479
|
+
// "code": "00000",
|
|
8480
|
+
// "msg": "success",
|
|
8481
|
+
// "requestTime": 1745500709429,
|
|
8482
|
+
// "data": [
|
|
8483
|
+
// {
|
|
8484
|
+
// "symbol": "BTCUSDT",
|
|
8485
|
+
// "fundingRate": "-0.000013",
|
|
8486
|
+
// "fundingRateInterval": "8",
|
|
8487
|
+
// "nextUpdate": "1745510400000",
|
|
8488
|
+
// "minFundingRate": "-0.003",
|
|
8489
|
+
// "maxFundingRate": "0.003"
|
|
8490
|
+
// }
|
|
8491
|
+
// ]
|
|
8492
|
+
// }
|
|
8493
|
+
//
|
|
8494
|
+
}
|
|
8495
|
+
else if (method === 'publicMixGetV2MixMarketFundingTime') {
|
|
8496
|
+
response = await this.publicMixGetV2MixMarketFundingTime(this.extend(request, params));
|
|
8497
|
+
//
|
|
8498
|
+
// {
|
|
8499
|
+
// "code": "00000",
|
|
8500
|
+
// "msg": "success",
|
|
8501
|
+
// "requestTime": 1745402092428,
|
|
8502
|
+
// "data": [
|
|
8503
|
+
// {
|
|
8504
|
+
// "symbol": "BTCUSDT",
|
|
8505
|
+
// "nextFundingTime": "1745424000000",
|
|
8506
|
+
// "ratePeriod": "8"
|
|
8507
|
+
// }
|
|
8508
|
+
// ]
|
|
8509
|
+
// }
|
|
8510
|
+
//
|
|
8511
|
+
}
|
|
7135
8512
|
}
|
|
7136
8513
|
const data = this.safeList(response, 'data', []);
|
|
7137
8514
|
return this.parseFundingRate(data[0], market);
|
|
@@ -7197,7 +8574,7 @@ export default class bitget extends Exchange {
|
|
|
7197
8574
|
}
|
|
7198
8575
|
parseFundingRate(contract, market = undefined) {
|
|
7199
8576
|
//
|
|
7200
|
-
// fetchFundingRate: publicMixGetV2MixMarketCurrentFundRate
|
|
8577
|
+
// fetchFundingRate: publicMixGetV2MixMarketCurrentFundRate, publicUtaGetV3MarketCurrentFundRate
|
|
7201
8578
|
//
|
|
7202
8579
|
// {
|
|
7203
8580
|
// "symbol": "BTCUSDT",
|
|
@@ -7555,10 +8932,13 @@ export default class bitget extends Exchange {
|
|
|
7555
8932
|
* @name bitget#setLeverage
|
|
7556
8933
|
* @description set the level of leverage for a market
|
|
7557
8934
|
* @see https://www.bitget.com/api-doc/contract/account/Change-Leverage
|
|
8935
|
+
* @see https://www.bitget.com/api-doc/uta/account/Change-Leverage
|
|
7558
8936
|
* @param {int} leverage the rate of leverage
|
|
7559
8937
|
* @param {string} symbol unified market symbol
|
|
7560
8938
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
7561
8939
|
* @param {string} [params.holdSide] *isolated only* position direction, 'long' or 'short'
|
|
8940
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
8941
|
+
* @param {boolean} [params.posSide] required for uta isolated margin, long or short
|
|
7562
8942
|
* @returns {object} response from the exchange
|
|
7563
8943
|
*/
|
|
7564
8944
|
async setLeverage(leverage, symbol = undefined, params = {}) {
|
|
@@ -7571,27 +8951,51 @@ export default class bitget extends Exchange {
|
|
|
7571
8951
|
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
7572
8952
|
const request = {
|
|
7573
8953
|
'symbol': market['id'],
|
|
7574
|
-
'marginCoin': market['settleId'],
|
|
7575
8954
|
'leverage': this.numberToString(leverage),
|
|
7576
|
-
'productType': productType,
|
|
7577
|
-
// 'holdSide': 'long',
|
|
7578
8955
|
};
|
|
7579
|
-
|
|
7580
|
-
|
|
7581
|
-
|
|
7582
|
-
|
|
7583
|
-
|
|
7584
|
-
|
|
7585
|
-
|
|
7586
|
-
|
|
7587
|
-
|
|
7588
|
-
|
|
7589
|
-
|
|
7590
|
-
|
|
7591
|
-
|
|
7592
|
-
|
|
7593
|
-
|
|
7594
|
-
|
|
8956
|
+
let uta = undefined;
|
|
8957
|
+
let response = undefined;
|
|
8958
|
+
[uta, params] = this.handleOptionAndParams(params, 'setLeverage', 'uta', false);
|
|
8959
|
+
if (uta) {
|
|
8960
|
+
if (productType === 'SPOT') {
|
|
8961
|
+
let marginMode = undefined;
|
|
8962
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchTrades', params);
|
|
8963
|
+
if (marginMode !== undefined) {
|
|
8964
|
+
productType = 'MARGIN';
|
|
8965
|
+
}
|
|
8966
|
+
}
|
|
8967
|
+
request['coin'] = market['settleId'];
|
|
8968
|
+
request['category'] = productType;
|
|
8969
|
+
response = await this.privateUtaPostV3AccountSetLeverage(this.extend(request, params));
|
|
8970
|
+
//
|
|
8971
|
+
// {
|
|
8972
|
+
// "code": "00000",
|
|
8973
|
+
// "msg": "success",
|
|
8974
|
+
// "requestTime": 1752815940833,
|
|
8975
|
+
// "data": "success"
|
|
8976
|
+
// }
|
|
8977
|
+
//
|
|
8978
|
+
}
|
|
8979
|
+
else {
|
|
8980
|
+
request['marginCoin'] = market['settleId'];
|
|
8981
|
+
request['productType'] = productType;
|
|
8982
|
+
response = await this.privateMixPostV2MixAccountSetLeverage(this.extend(request, params));
|
|
8983
|
+
//
|
|
8984
|
+
// {
|
|
8985
|
+
// "code": "00000",
|
|
8986
|
+
// "msg": "success",
|
|
8987
|
+
// "requestTime": 1700864711517,
|
|
8988
|
+
// "data": {
|
|
8989
|
+
// "symbol": "BTCUSDT",
|
|
8990
|
+
// "marginCoin": "USDT",
|
|
8991
|
+
// "longLeverage": "25",
|
|
8992
|
+
// "shortLeverage": "25",
|
|
8993
|
+
// "crossMarginLeverage": "25",
|
|
8994
|
+
// "marginMode": "crossed"
|
|
8995
|
+
// }
|
|
8996
|
+
// }
|
|
8997
|
+
//
|
|
8998
|
+
}
|
|
7595
8999
|
return response;
|
|
7596
9000
|
}
|
|
7597
9001
|
/**
|
|
@@ -7647,36 +9051,54 @@ export default class bitget extends Exchange {
|
|
|
7647
9051
|
* @name bitget#setPositionMode
|
|
7648
9052
|
* @description set hedged to true or false for a market
|
|
7649
9053
|
* @see https://www.bitget.com/api-doc/contract/account/Change-Hold-Mode
|
|
9054
|
+
* @see https://www.bitget.com/api-doc/uta/account/Change-Position-Mode
|
|
7650
9055
|
* @param {bool} hedged set to true to use dualSidePosition
|
|
7651
9056
|
* @param {string} symbol not used by bitget setPositionMode ()
|
|
7652
9057
|
* @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'
|
|
9058
|
+
* @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'
|
|
9059
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
7654
9060
|
* @returns {object} response from the exchange
|
|
7655
9061
|
*/
|
|
7656
9062
|
async setPositionMode(hedged, symbol = undefined, params = {}) {
|
|
7657
9063
|
await this.loadMarkets();
|
|
7658
9064
|
const posMode = hedged ? 'hedge_mode' : 'one_way_mode';
|
|
9065
|
+
const request = {};
|
|
7659
9066
|
let market = undefined;
|
|
7660
9067
|
if (symbol !== undefined) {
|
|
7661
9068
|
market = this.market(symbol);
|
|
7662
9069
|
}
|
|
7663
9070
|
let productType = undefined;
|
|
9071
|
+
let uta = undefined;
|
|
9072
|
+
let response = undefined;
|
|
7664
9073
|
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
7665
|
-
|
|
7666
|
-
|
|
7667
|
-
'
|
|
7668
|
-
|
|
7669
|
-
|
|
7670
|
-
|
|
7671
|
-
|
|
7672
|
-
|
|
7673
|
-
|
|
7674
|
-
|
|
7675
|
-
|
|
7676
|
-
|
|
7677
|
-
|
|
7678
|
-
|
|
7679
|
-
|
|
9074
|
+
[uta, params] = this.handleOptionAndParams(params, 'setPositionMode', 'uta', false);
|
|
9075
|
+
if (uta) {
|
|
9076
|
+
request['holdMode'] = posMode;
|
|
9077
|
+
response = await this.privateUtaPostV3AccountSetHoldMode(this.extend(request, params));
|
|
9078
|
+
//
|
|
9079
|
+
// {
|
|
9080
|
+
// "code": "00000",
|
|
9081
|
+
// "msg": "success",
|
|
9082
|
+
// "requestTime": 1752816734592,
|
|
9083
|
+
// "data": "success"
|
|
9084
|
+
// }
|
|
9085
|
+
//
|
|
9086
|
+
}
|
|
9087
|
+
else {
|
|
9088
|
+
request['posMode'] = posMode;
|
|
9089
|
+
request['productType'] = productType;
|
|
9090
|
+
response = await this.privateMixPostV2MixAccountSetPositionMode(this.extend(request, params));
|
|
9091
|
+
//
|
|
9092
|
+
// {
|
|
9093
|
+
// "code": "00000",
|
|
9094
|
+
// "msg": "success",
|
|
9095
|
+
// "requestTime": 1700865608009,
|
|
9096
|
+
// "data": {
|
|
9097
|
+
// "posMode": "hedge_mode"
|
|
9098
|
+
// }
|
|
9099
|
+
// }
|
|
9100
|
+
//
|
|
9101
|
+
}
|
|
7680
9102
|
return response;
|
|
7681
9103
|
}
|
|
7682
9104
|
/**
|
|
@@ -7684,8 +9106,10 @@ export default class bitget extends Exchange {
|
|
|
7684
9106
|
* @name bitget#fetchOpenInterest
|
|
7685
9107
|
* @description retrieves the open interest of a contract trading pair
|
|
7686
9108
|
* @see https://www.bitget.com/api-doc/contract/market/Get-Open-Interest
|
|
9109
|
+
* @see https://www.bitget.com/api-doc/uta/public/Get-Open-Interest
|
|
7687
9110
|
* @param {string} symbol unified CCXT market symbol
|
|
7688
9111
|
* @param {object} [params] exchange specific parameters
|
|
9112
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
7689
9113
|
* @returns {object} an open interest structure{@link https://docs.ccxt.com/#/?id=open-interest-structure}
|
|
7690
9114
|
*/
|
|
7691
9115
|
async fetchOpenInterest(symbol, params = {}) {
|
|
@@ -7694,33 +9118,60 @@ export default class bitget extends Exchange {
|
|
|
7694
9118
|
if (!market['contract']) {
|
|
7695
9119
|
throw new BadRequest(this.id + ' fetchOpenInterest() supports contract markets only');
|
|
7696
9120
|
}
|
|
7697
|
-
let productType = undefined;
|
|
7698
|
-
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
7699
|
-
const request = {
|
|
7700
|
-
'symbol': market['id'],
|
|
7701
|
-
|
|
7702
|
-
|
|
7703
|
-
|
|
7704
|
-
|
|
7705
|
-
|
|
7706
|
-
|
|
7707
|
-
|
|
7708
|
-
|
|
7709
|
-
|
|
7710
|
-
|
|
7711
|
-
|
|
7712
|
-
|
|
7713
|
-
|
|
7714
|
-
|
|
7715
|
-
|
|
7716
|
-
|
|
7717
|
-
|
|
7718
|
-
|
|
7719
|
-
|
|
9121
|
+
let productType = undefined;
|
|
9122
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
9123
|
+
const request = {
|
|
9124
|
+
'symbol': market['id'],
|
|
9125
|
+
};
|
|
9126
|
+
let uta = undefined;
|
|
9127
|
+
let response = undefined;
|
|
9128
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchOpenInterest', 'uta', false);
|
|
9129
|
+
if (uta) {
|
|
9130
|
+
request['category'] = productType;
|
|
9131
|
+
response = await this.publicUtaGetV3MarketOpenInterest(this.extend(request, params));
|
|
9132
|
+
//
|
|
9133
|
+
// {
|
|
9134
|
+
// "code": "00000",
|
|
9135
|
+
// "msg": "success",
|
|
9136
|
+
// "requestTime": 1751101221545,
|
|
9137
|
+
// "data": {
|
|
9138
|
+
// "list": [
|
|
9139
|
+
// {
|
|
9140
|
+
// "symbol": "BTCUSDT",
|
|
9141
|
+
// "openInterest": "18166.3583"
|
|
9142
|
+
// }
|
|
9143
|
+
// ],
|
|
9144
|
+
// "ts": "1751101220993"
|
|
9145
|
+
// }
|
|
9146
|
+
// }
|
|
9147
|
+
//
|
|
9148
|
+
}
|
|
9149
|
+
else {
|
|
9150
|
+
request['productType'] = productType;
|
|
9151
|
+
response = await this.publicMixGetV2MixMarketOpenInterest(this.extend(request, params));
|
|
9152
|
+
//
|
|
9153
|
+
// {
|
|
9154
|
+
// "code": "00000",
|
|
9155
|
+
// "msg": "success",
|
|
9156
|
+
// "requestTime": 1700866041022,
|
|
9157
|
+
// "data": {
|
|
9158
|
+
// "openInterestList": [
|
|
9159
|
+
// {
|
|
9160
|
+
// "symbol": "BTCUSDT",
|
|
9161
|
+
// "size": "52234.134"
|
|
9162
|
+
// }
|
|
9163
|
+
// ],
|
|
9164
|
+
// "ts": "1700866041023"
|
|
9165
|
+
// }
|
|
9166
|
+
// }
|
|
9167
|
+
//
|
|
9168
|
+
}
|
|
7720
9169
|
const data = this.safeDict(response, 'data', {});
|
|
7721
9170
|
return this.parseOpenInterest(data, market);
|
|
7722
9171
|
}
|
|
7723
9172
|
parseOpenInterest(interest, market = undefined) {
|
|
9173
|
+
//
|
|
9174
|
+
// default
|
|
7724
9175
|
//
|
|
7725
9176
|
// {
|
|
7726
9177
|
// "openInterestList": [
|
|
@@ -7732,12 +9183,24 @@ export default class bitget extends Exchange {
|
|
|
7732
9183
|
// "ts": "1700866041023"
|
|
7733
9184
|
// }
|
|
7734
9185
|
//
|
|
7735
|
-
|
|
9186
|
+
// uta
|
|
9187
|
+
//
|
|
9188
|
+
// {
|
|
9189
|
+
// "list": [
|
|
9190
|
+
// {
|
|
9191
|
+
// "symbol": "BTCUSDT",
|
|
9192
|
+
// "openInterest": "18166.3583"
|
|
9193
|
+
// }
|
|
9194
|
+
// ],
|
|
9195
|
+
// "ts": "1751101220993"
|
|
9196
|
+
// }
|
|
9197
|
+
//
|
|
9198
|
+
const data = this.safeList2(interest, 'openInterestList', 'list', []);
|
|
7736
9199
|
const timestamp = this.safeInteger(interest, 'ts');
|
|
7737
9200
|
const marketId = this.safeString(data[0], 'symbol');
|
|
7738
9201
|
return this.safeOpenInterest({
|
|
7739
9202
|
'symbol': this.safeSymbol(marketId, market, undefined, 'contract'),
|
|
7740
|
-
'openInterestAmount': this.
|
|
9203
|
+
'openInterestAmount': this.safeNumber2(data[0], 'size', 'openInterest'),
|
|
7741
9204
|
'openInterestValue': undefined,
|
|
7742
9205
|
'timestamp': timestamp,
|
|
7743
9206
|
'datetime': this.iso8601(timestamp),
|
|
@@ -8476,9 +9939,10 @@ export default class bitget extends Exchange {
|
|
|
8476
9939
|
* @name bitget#fetchCrossBorrowRate
|
|
8477
9940
|
* @description fetch the rate of interest to borrow a currency for margin trading
|
|
8478
9941
|
* @see https://www.bitget.com/api-doc/margin/cross/account/Get-Cross-Margin-Interest-Rate-And-Borrowable
|
|
9942
|
+
* @see https://www.bitget.com/api-doc/uta/public/Get-Margin-Loans
|
|
8479
9943
|
* @param {string} code unified currency code
|
|
8480
9944
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
8481
|
-
* @param {
|
|
9945
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
8482
9946
|
* @returns {object} a [borrow rate structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#borrow-rate-structure}
|
|
8483
9947
|
*/
|
|
8484
9948
|
async fetchCrossBorrowRate(code, params = {}) {
|
|
@@ -8487,40 +9951,64 @@ export default class bitget extends Exchange {
|
|
|
8487
9951
|
const request = {
|
|
8488
9952
|
'coin': currency['id'],
|
|
8489
9953
|
};
|
|
8490
|
-
|
|
8491
|
-
|
|
8492
|
-
|
|
8493
|
-
|
|
8494
|
-
|
|
8495
|
-
|
|
8496
|
-
|
|
8497
|
-
|
|
8498
|
-
|
|
8499
|
-
|
|
8500
|
-
|
|
8501
|
-
|
|
8502
|
-
|
|
8503
|
-
|
|
8504
|
-
|
|
8505
|
-
|
|
8506
|
-
|
|
8507
|
-
|
|
8508
|
-
|
|
8509
|
-
|
|
8510
|
-
|
|
8511
|
-
|
|
8512
|
-
|
|
8513
|
-
|
|
8514
|
-
|
|
8515
|
-
|
|
8516
|
-
|
|
9954
|
+
let uta = undefined;
|
|
9955
|
+
let response = undefined;
|
|
9956
|
+
let result = undefined;
|
|
9957
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchCrossBorrowRate', 'uta', false);
|
|
9958
|
+
if (uta) {
|
|
9959
|
+
response = await this.publicUtaGetV3MarketMarginLoans(this.extend(request, params));
|
|
9960
|
+
//
|
|
9961
|
+
// {
|
|
9962
|
+
// "code": "00000",
|
|
9963
|
+
// "msg": "success",
|
|
9964
|
+
// "requestTime": 1752817798893,
|
|
9965
|
+
// "data": {
|
|
9966
|
+
// "dailyInterest": "0.00100008",
|
|
9967
|
+
// "annualInterest": "0.3650292",
|
|
9968
|
+
// "limit": "100"
|
|
9969
|
+
// }
|
|
9970
|
+
// }
|
|
9971
|
+
//
|
|
9972
|
+
result = this.safeDict(response, 'data', {});
|
|
9973
|
+
}
|
|
9974
|
+
else {
|
|
9975
|
+
response = await this.privateMarginGetV2MarginCrossedInterestRateAndLimit(this.extend(request, params));
|
|
9976
|
+
//
|
|
9977
|
+
// {
|
|
9978
|
+
// "code": "00000",
|
|
9979
|
+
// "msg": "success",
|
|
9980
|
+
// "requestTime": 1700879047861,
|
|
9981
|
+
// "data": [
|
|
9982
|
+
// {
|
|
9983
|
+
// "coin": "BTC",
|
|
9984
|
+
// "leverage": "3",
|
|
9985
|
+
// "transferable": true,
|
|
9986
|
+
// "borrowable": true,
|
|
9987
|
+
// "dailyInterestRate": "0.00007",
|
|
9988
|
+
// "annualInterestRate": "0.02555",
|
|
9989
|
+
// "maxBorrowableAmount": "26",
|
|
9990
|
+
// "vipList": [
|
|
9991
|
+
// {"level":"0","limit":"26","dailyInterestRate":"0.00007","annualInterestRate":"0.02555","discountRate":"1"},
|
|
9992
|
+
// {"level":"1","limit":"26.78","dailyInterestRate":"0.0000679","annualInterestRate":"0.0247835","discountRate":"0.97"},
|
|
9993
|
+
// {"level":"2","limit":"28.08","dailyInterestRate":"0.0000644","annualInterestRate":"0.023506","discountRate":"0.92"},
|
|
9994
|
+
// {"level":"3","limit":"30.16","dailyInterestRate":"0.0000602","annualInterestRate":"0.021973","discountRate":"0.86"},
|
|
9995
|
+
// {"level":"4","limit":"34.58","dailyInterestRate":"0.0000525","annualInterestRate":"0.0191625","discountRate":"0.75"},
|
|
9996
|
+
// {"level":"5","limit":"43.16","dailyInterestRate":"0.000042","annualInterestRate":"0.01533","discountRate":"0.6"}
|
|
9997
|
+
// ]
|
|
9998
|
+
// }
|
|
9999
|
+
// ]
|
|
10000
|
+
// }
|
|
10001
|
+
//
|
|
10002
|
+
const data = this.safeValue(response, 'data', []);
|
|
10003
|
+
result = this.safeValue(data, 0, {});
|
|
10004
|
+
}
|
|
8517
10005
|
const timestamp = this.safeInteger(response, 'requestTime');
|
|
8518
|
-
|
|
8519
|
-
|
|
8520
|
-
first['timestamp'] = timestamp;
|
|
8521
|
-
return this.parseBorrowRate(first, currency);
|
|
10006
|
+
result['timestamp'] = timestamp;
|
|
10007
|
+
return this.parseBorrowRate(result, currency);
|
|
8522
10008
|
}
|
|
8523
10009
|
parseBorrowRate(info, currency = undefined) {
|
|
10010
|
+
//
|
|
10011
|
+
// default
|
|
8524
10012
|
//
|
|
8525
10013
|
// {
|
|
8526
10014
|
// "coin": "BTC",
|
|
@@ -8540,11 +10028,19 @@ export default class bitget extends Exchange {
|
|
|
8540
10028
|
// ]
|
|
8541
10029
|
// }
|
|
8542
10030
|
//
|
|
10031
|
+
// uta
|
|
10032
|
+
//
|
|
10033
|
+
// {
|
|
10034
|
+
// "dailyInterest": "0.00100008",
|
|
10035
|
+
// "annualInterest": "0.3650292",
|
|
10036
|
+
// "limit": "100"
|
|
10037
|
+
// }
|
|
10038
|
+
//
|
|
8543
10039
|
const currencyId = this.safeString(info, 'coin');
|
|
8544
10040
|
const timestamp = this.safeInteger(info, 'timestamp');
|
|
8545
10041
|
return {
|
|
8546
10042
|
'currency': this.safeCurrencyCode(currencyId, currency),
|
|
8547
|
-
'rate': this.
|
|
10043
|
+
'rate': this.safeNumber2(info, 'dailyInterestRate', 'dailyInterest'),
|
|
8548
10044
|
'period': 86400000,
|
|
8549
10045
|
'timestamp': timestamp,
|
|
8550
10046
|
'datetime': this.iso8601(timestamp),
|
|
@@ -8709,43 +10205,72 @@ export default class bitget extends Exchange {
|
|
|
8709
10205
|
* @name bitget#closePosition
|
|
8710
10206
|
* @description closes an open position for a market
|
|
8711
10207
|
* @see https://www.bitget.com/api-doc/contract/trade/Flash-Close-Position
|
|
10208
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Close-All-Positions
|
|
8712
10209
|
* @param {string} symbol unified CCXT market symbol
|
|
8713
10210
|
* @param {string} [side] one-way mode: 'buy' or 'sell', hedge-mode: 'long' or 'short'
|
|
8714
10211
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
10212
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
8715
10213
|
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
8716
10214
|
*/
|
|
8717
10215
|
async closePosition(symbol, side = undefined, params = {}) {
|
|
8718
10216
|
await this.loadMarkets();
|
|
8719
10217
|
const market = this.market(symbol);
|
|
8720
|
-
let productType = undefined;
|
|
8721
|
-
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
8722
10218
|
const request = {
|
|
8723
10219
|
'symbol': market['id'],
|
|
8724
|
-
'productType': productType,
|
|
8725
10220
|
};
|
|
8726
|
-
|
|
8727
|
-
|
|
10221
|
+
let productType = undefined;
|
|
10222
|
+
let uta = undefined;
|
|
10223
|
+
let response = undefined;
|
|
10224
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
10225
|
+
[uta, params] = this.handleOptionAndParams(params, 'closePosition', 'uta', false);
|
|
10226
|
+
if (uta) {
|
|
10227
|
+
if (side !== undefined) {
|
|
10228
|
+
request['posSide'] = side;
|
|
10229
|
+
}
|
|
10230
|
+
request['category'] = productType;
|
|
10231
|
+
response = await this.privateUtaPostV3TradeClosePositions(this.extend(request, params));
|
|
10232
|
+
//
|
|
10233
|
+
// {
|
|
10234
|
+
// "code": "00000",
|
|
10235
|
+
// "msg": "success",
|
|
10236
|
+
// "requestTime": 1751020218384,
|
|
10237
|
+
// "data": {
|
|
10238
|
+
// "list": [
|
|
10239
|
+
// {
|
|
10240
|
+
// "orderId": "1322440134099320832",
|
|
10241
|
+
// "clientOid": "1322440134099320833"
|
|
10242
|
+
// }
|
|
10243
|
+
// ]
|
|
10244
|
+
// }
|
|
10245
|
+
// }
|
|
10246
|
+
//
|
|
10247
|
+
}
|
|
10248
|
+
else {
|
|
10249
|
+
if (side !== undefined) {
|
|
10250
|
+
request['holdSide'] = side;
|
|
10251
|
+
}
|
|
10252
|
+
request['productType'] = productType;
|
|
10253
|
+
response = await this.privateMixPostV2MixOrderClosePositions(this.extend(request, params));
|
|
10254
|
+
//
|
|
10255
|
+
// {
|
|
10256
|
+
// "code": "00000",
|
|
10257
|
+
// "msg": "success",
|
|
10258
|
+
// "requestTime": 1702975017017,
|
|
10259
|
+
// "data": {
|
|
10260
|
+
// "successList": [
|
|
10261
|
+
// {
|
|
10262
|
+
// "orderId": "1120923953904893955",
|
|
10263
|
+
// "clientOid": "1120923953904893956"
|
|
10264
|
+
// }
|
|
10265
|
+
// ],
|
|
10266
|
+
// "failureList": [],
|
|
10267
|
+
// "result": false
|
|
10268
|
+
// }
|
|
10269
|
+
// }
|
|
10270
|
+
//
|
|
8728
10271
|
}
|
|
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
10272
|
const data = this.safeValue(response, 'data', {});
|
|
8748
|
-
const order = this.
|
|
10273
|
+
const order = this.safeList2(data, 'successList', 'list', []);
|
|
8749
10274
|
return this.parseOrder(order[0], market);
|
|
8750
10275
|
}
|
|
8751
10276
|
/**
|
|
@@ -8753,37 +10278,62 @@ export default class bitget extends Exchange {
|
|
|
8753
10278
|
* @name bitget#closeAllPositions
|
|
8754
10279
|
* @description closes all open positions for a market type
|
|
8755
10280
|
* @see https://www.bitget.com/api-doc/contract/trade/Flash-Close-Position
|
|
10281
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Close-All-Positions
|
|
8756
10282
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
8757
10283
|
* @param {string} [params.productType] 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
|
|
10284
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
8758
10285
|
* @returns {object[]} A list of [position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
|
|
8759
10286
|
*/
|
|
8760
10287
|
async closeAllPositions(params = {}) {
|
|
8761
10288
|
await this.loadMarkets();
|
|
10289
|
+
const request = {};
|
|
8762
10290
|
let productType = undefined;
|
|
10291
|
+
let uta = undefined;
|
|
10292
|
+
let response = undefined;
|
|
8763
10293
|
[productType, params] = this.handleProductTypeAndParams(undefined, params);
|
|
8764
|
-
|
|
8765
|
-
|
|
8766
|
-
|
|
8767
|
-
|
|
8768
|
-
|
|
8769
|
-
|
|
8770
|
-
|
|
8771
|
-
|
|
8772
|
-
|
|
8773
|
-
|
|
8774
|
-
|
|
8775
|
-
|
|
8776
|
-
|
|
8777
|
-
|
|
8778
|
-
|
|
8779
|
-
|
|
8780
|
-
|
|
8781
|
-
|
|
8782
|
-
|
|
8783
|
-
|
|
8784
|
-
|
|
10294
|
+
[uta, params] = this.handleOptionAndParams(params, 'closeAllPositions', 'uta', false);
|
|
10295
|
+
if (uta) {
|
|
10296
|
+
request['category'] = productType;
|
|
10297
|
+
response = await this.privateUtaPostV3TradeClosePositions(this.extend(request, params));
|
|
10298
|
+
//
|
|
10299
|
+
// {
|
|
10300
|
+
// "code": "00000",
|
|
10301
|
+
// "msg": "success",
|
|
10302
|
+
// "requestTime": 1751020218384,
|
|
10303
|
+
// "data": {
|
|
10304
|
+
// "list": [
|
|
10305
|
+
// {
|
|
10306
|
+
// "orderId": "1322440134099320832",
|
|
10307
|
+
// "clientOid": "1322440134099320833"
|
|
10308
|
+
// }
|
|
10309
|
+
// ]
|
|
10310
|
+
// }
|
|
10311
|
+
// }
|
|
10312
|
+
//
|
|
10313
|
+
}
|
|
10314
|
+
else {
|
|
10315
|
+
request['productType'] = productType;
|
|
10316
|
+
response = await this.privateMixPostV2MixOrderClosePositions(this.extend(request, params));
|
|
10317
|
+
//
|
|
10318
|
+
// {
|
|
10319
|
+
// "code": "00000",
|
|
10320
|
+
// "msg": "success",
|
|
10321
|
+
// "requestTime": 1702975017017,
|
|
10322
|
+
// "data": {
|
|
10323
|
+
// "successList": [
|
|
10324
|
+
// {
|
|
10325
|
+
// "orderId": "1120923953904893955",
|
|
10326
|
+
// "clientOid": "1120923953904893956"
|
|
10327
|
+
// }
|
|
10328
|
+
// ],
|
|
10329
|
+
// "failureList": [],
|
|
10330
|
+
// "result": false
|
|
10331
|
+
// }
|
|
10332
|
+
// }
|
|
10333
|
+
//
|
|
10334
|
+
}
|
|
8785
10335
|
const data = this.safeValue(response, 'data', {});
|
|
8786
|
-
const orderInfo = this.
|
|
10336
|
+
const orderInfo = this.safeList2(data, 'successList', 'list', []);
|
|
8787
10337
|
return this.parsePositions(orderInfo, undefined, params);
|
|
8788
10338
|
}
|
|
8789
10339
|
/**
|
|
@@ -8851,25 +10401,27 @@ export default class bitget extends Exchange {
|
|
|
8851
10401
|
* @name bitget#fetchPositionsHistory
|
|
8852
10402
|
* @description fetches historical positions
|
|
8853
10403
|
* @see https://www.bitget.com/api-doc/contract/position/Get-History-Position
|
|
10404
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Get-Position-History
|
|
8854
10405
|
* @param {string[]} [symbols] unified contract symbols
|
|
8855
10406
|
* @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
10407
|
* @param {int} [limit] the maximum amount of records to fetch, default=20, max=100
|
|
8857
10408
|
* @param {object} params extra parameters specific to the exchange api endpoint
|
|
8858
10409
|
* @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
10410
|
* @param {string} [params.productType] USDT-FUTURES (default), COIN-FUTURES, USDC-FUTURES, SUSDT-FUTURES, SCOIN-FUTURES, or SUSDC-FUTURES
|
|
10411
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
8862
10412
|
* @returns {object[]} a list of [position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
|
|
8863
10413
|
*/
|
|
8864
10414
|
async fetchPositionsHistory(symbols = undefined, since = undefined, limit = undefined, params = {}) {
|
|
8865
10415
|
await this.loadMarkets();
|
|
8866
|
-
|
|
8867
|
-
|
|
8868
|
-
|
|
10416
|
+
let request = {};
|
|
10417
|
+
let market = undefined;
|
|
10418
|
+
let productType = undefined;
|
|
10419
|
+
let uta = undefined;
|
|
10420
|
+
let response = undefined;
|
|
8869
10421
|
if (symbols !== undefined) {
|
|
8870
10422
|
const symbolsLength = symbols.length;
|
|
8871
10423
|
if (symbolsLength > 0) {
|
|
8872
|
-
|
|
10424
|
+
market = this.market(symbols[0]);
|
|
8873
10425
|
request['symbol'] = market['id'];
|
|
8874
10426
|
}
|
|
8875
10427
|
}
|
|
@@ -8879,41 +10431,79 @@ export default class bitget extends Exchange {
|
|
|
8879
10431
|
if (limit !== undefined) {
|
|
8880
10432
|
request['limit'] = limit;
|
|
8881
10433
|
}
|
|
8882
|
-
|
|
8883
|
-
|
|
10434
|
+
[request, params] = this.handleUntilOption('endTime', request, params);
|
|
10435
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
10436
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchPositionsHistory', 'uta', false);
|
|
10437
|
+
if (uta) {
|
|
10438
|
+
request['category'] = productType;
|
|
10439
|
+
response = await this.privateUtaGetV3PositionHistoryPosition(this.extend(request, params));
|
|
10440
|
+
//
|
|
10441
|
+
// {
|
|
10442
|
+
// "code": "00000",
|
|
10443
|
+
// "msg": "success",
|
|
10444
|
+
// "requestTime": 1751020950427,
|
|
10445
|
+
// "data": {
|
|
10446
|
+
// "list": [
|
|
10447
|
+
// {
|
|
10448
|
+
// "positionId": "1322441328637100049",
|
|
10449
|
+
// "category": "USDT-FUTURES",
|
|
10450
|
+
// "symbol": "BTCUSDT",
|
|
10451
|
+
// "marginCoin": "USDT",
|
|
10452
|
+
// "holdMode": "hedge_mode",
|
|
10453
|
+
// "posSide": "long",
|
|
10454
|
+
// "marginMode": "crossed",
|
|
10455
|
+
// "openPriceAvg": "107003.7",
|
|
10456
|
+
// "closePriceAvg": "107005.4",
|
|
10457
|
+
// "openTotalPos": "0.0001",
|
|
10458
|
+
// "closeTotalPos": "0.0001",
|
|
10459
|
+
// "cumRealisedPnl": "0.00017",
|
|
10460
|
+
// "netProfit": "-0.01267055",
|
|
10461
|
+
// "totalFunding": "0",
|
|
10462
|
+
// "openFeeTotal": "-0.00642022",
|
|
10463
|
+
// "closeFeeTotal": "-0.00642032",
|
|
10464
|
+
// "createdTime": "1751020503195",
|
|
10465
|
+
// "updatedTime": "1751020520458"
|
|
10466
|
+
// },
|
|
10467
|
+
// ],
|
|
10468
|
+
// "cursor": "1322440134158041089"
|
|
10469
|
+
// }
|
|
10470
|
+
// }
|
|
10471
|
+
//
|
|
10472
|
+
}
|
|
10473
|
+
else {
|
|
10474
|
+
response = await this.privateMixGetV2MixPositionHistoryPosition(this.extend(request, params));
|
|
10475
|
+
//
|
|
10476
|
+
// {
|
|
10477
|
+
// code: '00000',
|
|
10478
|
+
// msg: 'success',
|
|
10479
|
+
// requestTime: '1712794148791',
|
|
10480
|
+
// data: {
|
|
10481
|
+
// list: [
|
|
10482
|
+
// {
|
|
10483
|
+
// symbol: 'XRPUSDT',
|
|
10484
|
+
// marginCoin: 'USDT',
|
|
10485
|
+
// holdSide: 'long',
|
|
10486
|
+
// openAvgPrice: '0.64967',
|
|
10487
|
+
// closeAvgPrice: '0.58799',
|
|
10488
|
+
// marginMode: 'isolated',
|
|
10489
|
+
// openTotalPos: '10',
|
|
10490
|
+
// closeTotalPos: '10',
|
|
10491
|
+
// pnl: '-0.62976205',
|
|
10492
|
+
// netProfit: '-0.65356802',
|
|
10493
|
+
// totalFunding: '-0.01638',
|
|
10494
|
+
// openFee: '-0.00389802',
|
|
10495
|
+
// closeFee: '-0.00352794',
|
|
10496
|
+
// ctime: '1709590322199',
|
|
10497
|
+
// utime: '1709667583395'
|
|
10498
|
+
// },
|
|
10499
|
+
// ...
|
|
10500
|
+
// ]
|
|
10501
|
+
// }
|
|
10502
|
+
// }
|
|
10503
|
+
//
|
|
8884
10504
|
}
|
|
8885
|
-
const
|
|
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');
|
|
10505
|
+
const data = this.safeDict(response, 'data', {});
|
|
10506
|
+
const responseList = this.safeList(data, 'list', []);
|
|
8917
10507
|
const positions = this.parsePositions(responseList, symbols, params);
|
|
8918
10508
|
return this.filterBySinceLimit(positions, since, limit);
|
|
8919
10509
|
}
|
|
@@ -9193,8 +10783,10 @@ export default class bitget extends Exchange {
|
|
|
9193
10783
|
* @name bitget#fetchFundingInterval
|
|
9194
10784
|
* @description fetch the current funding rate interval
|
|
9195
10785
|
* @see https://www.bitget.com/api-doc/contract/market/Get-Symbol-Next-Funding-Time
|
|
10786
|
+
* @see https://www.bitget.com/api-doc/uta/public/Get-Current-Funding-Rate
|
|
9196
10787
|
* @param {string} symbol unified market symbol
|
|
9197
10788
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
10789
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
9198
10790
|
* @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
|
|
9199
10791
|
*/
|
|
9200
10792
|
async fetchFundingInterval(symbol, params = {}) {
|
|
@@ -9204,23 +10796,48 @@ export default class bitget extends Exchange {
|
|
|
9204
10796
|
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
9205
10797
|
const request = {
|
|
9206
10798
|
'symbol': market['id'],
|
|
9207
|
-
'productType': productType,
|
|
9208
10799
|
};
|
|
9209
|
-
|
|
9210
|
-
|
|
9211
|
-
|
|
9212
|
-
|
|
9213
|
-
|
|
9214
|
-
|
|
9215
|
-
|
|
9216
|
-
|
|
9217
|
-
|
|
9218
|
-
|
|
9219
|
-
|
|
9220
|
-
|
|
9221
|
-
|
|
9222
|
-
|
|
9223
|
-
|
|
10800
|
+
let response = undefined;
|
|
10801
|
+
let uta = undefined;
|
|
10802
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchFundingInterval', 'uta', false);
|
|
10803
|
+
if (uta) {
|
|
10804
|
+
response = await this.publicUtaGetV3MarketCurrentFundRate(this.extend(request, params));
|
|
10805
|
+
//
|
|
10806
|
+
// {
|
|
10807
|
+
// "code": "00000",
|
|
10808
|
+
// "msg": "success",
|
|
10809
|
+
// "requestTime": 1752880157959,
|
|
10810
|
+
// "data": [
|
|
10811
|
+
// {
|
|
10812
|
+
// "symbol": "BTCUSDT",
|
|
10813
|
+
// "fundingRate": "0.0001",
|
|
10814
|
+
// "fundingRateInterval": "8",
|
|
10815
|
+
// "nextUpdate": "1752883200000",
|
|
10816
|
+
// "minFundingRate": "-0.003",
|
|
10817
|
+
// "maxFundingRate": "0.003"
|
|
10818
|
+
// }
|
|
10819
|
+
// ]
|
|
10820
|
+
// }
|
|
10821
|
+
//
|
|
10822
|
+
}
|
|
10823
|
+
else {
|
|
10824
|
+
request['productType'] = productType;
|
|
10825
|
+
response = await this.publicMixGetV2MixMarketFundingTime(this.extend(request, params));
|
|
10826
|
+
//
|
|
10827
|
+
// {
|
|
10828
|
+
// "code": "00000",
|
|
10829
|
+
// "msg": "success",
|
|
10830
|
+
// "requestTime": 1727930153888,
|
|
10831
|
+
// "data": [
|
|
10832
|
+
// {
|
|
10833
|
+
// "symbol": "BTCUSDT",
|
|
10834
|
+
// "nextFundingTime": "1727942400000",
|
|
10835
|
+
// "ratePeriod": "8"
|
|
10836
|
+
// }
|
|
10837
|
+
// ]
|
|
10838
|
+
// }
|
|
10839
|
+
//
|
|
10840
|
+
}
|
|
9224
10841
|
const data = this.safeList(response, 'data', []);
|
|
9225
10842
|
const first = this.safeDict(data, 0, {});
|
|
9226
10843
|
return this.parseFundingRate(first, market);
|
|
@@ -9395,7 +11012,7 @@ export default class bitget extends Exchange {
|
|
|
9395
11012
|
}
|
|
9396
11013
|
}
|
|
9397
11014
|
const sandboxMode = this.safeBool2(this.options, 'sandboxMode', 'sandbox', false);
|
|
9398
|
-
if (sandboxMode && (path !== 'v2/public/time')) {
|
|
11015
|
+
if (sandboxMode && (path !== 'v2/public/time') && (path !== 'v3/market/current-fund-rate')) {
|
|
9399
11016
|
// https://github.com/ccxt/ccxt/issues/25252#issuecomment-2662742336
|
|
9400
11017
|
if (headers === undefined) {
|
|
9401
11018
|
headers = {};
|