ccxt 4.4.97 → 4.4.99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -5
- package/dist/ccxt.browser.min.js +2 -2
- package/dist/cjs/ccxt.js +5 -1
- package/dist/cjs/src/abstract/alpaca.js +1 -1
- package/dist/cjs/src/abstract/apex.js +1 -1
- package/dist/cjs/src/abstract/ascendex.js +1 -1
- package/dist/cjs/src/abstract/bigone.js +1 -1
- package/dist/cjs/src/abstract/binance.js +1 -1
- package/dist/cjs/src/abstract/bingx.js +1 -1
- package/dist/cjs/src/abstract/bit2c.js +1 -1
- package/dist/cjs/src/abstract/bitbank.js +1 -1
- package/dist/cjs/src/abstract/bitbns.js +1 -1
- package/dist/cjs/src/abstract/bitfinex.js +1 -1
- package/dist/cjs/src/abstract/bitflyer.js +1 -1
- package/dist/cjs/src/abstract/bitget.js +1 -1
- package/dist/cjs/src/abstract/bithumb.js +1 -1
- package/dist/cjs/src/abstract/bitmart.js +1 -1
- package/dist/cjs/src/abstract/bitmex.js +1 -1
- package/dist/cjs/src/abstract/bitopro.js +1 -1
- package/dist/cjs/src/abstract/bitrue.js +1 -1
- package/dist/cjs/src/abstract/bitso.js +1 -1
- package/dist/cjs/src/abstract/bitstamp.js +1 -1
- package/dist/cjs/src/abstract/bitteam.js +1 -1
- package/dist/cjs/src/abstract/bittrade.js +1 -1
- package/dist/cjs/src/abstract/bitvavo.js +1 -1
- package/dist/cjs/src/abstract/blockchaincom.js +1 -1
- package/dist/cjs/src/abstract/blofin.js +1 -1
- package/dist/cjs/src/abstract/btcalpha.js +1 -1
- package/dist/cjs/src/abstract/btcbox.js +1 -1
- package/dist/cjs/src/abstract/btcmarkets.js +1 -1
- package/dist/cjs/src/abstract/btcturk.js +1 -1
- package/dist/cjs/src/abstract/bybit.js +1 -1
- package/dist/cjs/src/abstract/cex.js +1 -1
- package/dist/cjs/src/abstract/coinbase.js +1 -1
- package/dist/cjs/src/abstract/coinbaseexchange.js +1 -1
- package/dist/cjs/src/abstract/coinbaseinternational.js +1 -1
- package/dist/cjs/src/abstract/coincatch.js +1 -1
- package/dist/cjs/src/abstract/coincheck.js +1 -1
- package/dist/cjs/src/abstract/coinex.js +1 -1
- package/dist/cjs/src/abstract/coinmate.js +1 -1
- package/dist/cjs/src/abstract/coinmetro.js +1 -1
- package/dist/cjs/src/abstract/coinone.js +1 -1
- package/dist/cjs/src/abstract/coinsph.js +1 -1
- package/dist/cjs/src/abstract/coinspot.js +1 -1
- package/dist/cjs/src/abstract/cryptocom.js +1 -1
- package/dist/cjs/src/abstract/cryptomus.js +1 -1
- package/dist/cjs/src/abstract/defx.js +1 -1
- package/dist/cjs/src/abstract/delta.js +1 -1
- package/dist/cjs/src/abstract/deribit.js +1 -1
- package/dist/cjs/src/abstract/derive.js +1 -1
- package/dist/cjs/src/abstract/digifinex.js +1 -1
- package/dist/cjs/src/abstract/ellipx.js +1 -1
- package/dist/cjs/src/abstract/exmo.js +1 -1
- package/dist/cjs/src/abstract/foxbit.js +1 -1
- package/dist/cjs/src/abstract/gate.js +1 -1
- package/dist/cjs/src/abstract/gemini.js +1 -1
- package/dist/cjs/src/abstract/hashkey.js +1 -1
- package/dist/cjs/src/abstract/hibachi.js +9 -0
- package/dist/cjs/src/abstract/hitbtc.js +1 -1
- package/dist/cjs/src/abstract/hollaex.js +1 -1
- package/dist/cjs/src/abstract/htx.js +1 -1
- package/dist/cjs/src/abstract/hyperliquid.js +1 -1
- package/dist/cjs/src/abstract/independentreserve.js +1 -1
- package/dist/cjs/src/abstract/indodax.js +1 -1
- package/dist/cjs/src/abstract/kraken.js +1 -1
- package/dist/cjs/src/abstract/krakenfutures.js +1 -1
- package/dist/cjs/src/abstract/kucoin.js +1 -1
- package/dist/cjs/src/abstract/kucoinfutures.js +1 -1
- package/dist/cjs/src/abstract/latoken.js +1 -1
- package/dist/cjs/src/abstract/lbank.js +1 -1
- package/dist/cjs/src/abstract/luno.js +1 -1
- package/dist/cjs/src/abstract/mercado.js +1 -1
- package/dist/cjs/src/abstract/mexc.js +1 -1
- package/dist/cjs/src/abstract/modetrade.js +1 -1
- package/dist/cjs/src/abstract/ndax.js +1 -1
- package/dist/cjs/src/abstract/novadax.js +1 -1
- package/dist/cjs/src/abstract/oceanex.js +1 -1
- package/dist/cjs/src/abstract/okcoin.js +1 -1
- package/dist/cjs/src/abstract/okx.js +1 -1
- package/dist/cjs/src/abstract/onetrading.js +1 -1
- package/dist/cjs/src/abstract/oxfun.js +1 -1
- package/dist/cjs/src/abstract/p2b.js +1 -1
- package/dist/cjs/src/abstract/paradex.js +1 -1
- package/dist/cjs/src/abstract/paymium.js +1 -1
- package/dist/cjs/src/abstract/phemex.js +1 -1
- package/dist/cjs/src/abstract/poloniex.js +1 -1
- package/dist/cjs/src/abstract/probit.js +1 -1
- package/dist/cjs/src/abstract/timex.js +1 -1
- package/dist/cjs/src/abstract/tokocrypto.js +1 -1
- package/dist/cjs/src/abstract/tradeogre.js +1 -1
- package/dist/cjs/src/abstract/upbit.js +1 -1
- package/dist/cjs/src/abstract/vertex.js +1 -1
- package/dist/cjs/src/abstract/wavesexchange.js +1 -1
- package/dist/cjs/src/abstract/whitebit.js +1 -1
- package/dist/cjs/src/abstract/woo.js +1 -1
- package/dist/cjs/src/abstract/woofipro.js +1 -1
- package/dist/cjs/src/abstract/xt.js +1 -1
- package/dist/cjs/src/abstract/yobit.js +1 -1
- package/dist/cjs/src/abstract/zaif.js +1 -1
- package/dist/cjs/src/abstract/zonda.js +1 -1
- package/dist/cjs/src/alpaca.js +1 -1
- package/dist/cjs/src/apex.js +1 -1
- package/dist/cjs/src/ascendex.js +1 -1
- package/dist/cjs/src/base/Precise.js +0 -6
- package/dist/cjs/src/base/errors.js +8 -7
- package/dist/cjs/src/base/functions/crypto.js +1 -1
- package/dist/cjs/src/base/functions/encode.js +1 -1
- 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 +0 -1
- 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 +1 -1
- package/dist/cjs/src/bequant.js +1 -1
- package/dist/cjs/src/bigone.js +1 -1
- package/dist/cjs/src/binance.js +9 -7
- package/dist/cjs/src/binancecoinm.js +1 -1
- package/dist/cjs/src/binanceus.js +1 -1
- package/dist/cjs/src/binanceusdm.js +1 -1
- package/dist/cjs/src/bingx.js +1 -1
- package/dist/cjs/src/bit2c.js +1 -1
- package/dist/cjs/src/bitbank.js +1 -1
- package/dist/cjs/src/bitbns.js +1 -1
- package/dist/cjs/src/bitfinex.js +1 -1
- package/dist/cjs/src/bitflyer.js +1 -1
- package/dist/cjs/src/bitget.js +2150 -535
- package/dist/cjs/src/bithumb.js +1 -1
- package/dist/cjs/src/bitmart.js +1 -1
- package/dist/cjs/src/bitmex.js +1 -1
- package/dist/cjs/src/bitopro.js +1 -1
- package/dist/cjs/src/bitrue.js +1 -1
- package/dist/cjs/src/bitso.js +1 -1
- package/dist/cjs/src/bitstamp.js +1 -1
- package/dist/cjs/src/bitteam.js +1 -1
- package/dist/cjs/src/bittrade.js +1 -1
- package/dist/cjs/src/blockchaincom.js +1 -1
- package/dist/cjs/src/blofin.js +1 -1
- package/dist/cjs/src/btcalpha.js +1 -1
- package/dist/cjs/src/btcbox.js +1 -1
- package/dist/cjs/src/btcmarkets.js +1 -1
- package/dist/cjs/src/btcturk.js +1 -1
- package/dist/cjs/src/bybit.js +7 -2
- package/dist/cjs/src/cex.js +1 -1
- package/dist/cjs/src/coinbaseadvanced.js +1 -1
- package/dist/cjs/src/coincatch.js +1 -1
- package/dist/cjs/src/coincheck.js +1 -1
- package/dist/cjs/src/coinex.js +68 -4
- package/dist/cjs/src/coinmate.js +1 -1
- package/dist/cjs/src/coinmetro.js +3 -4
- package/dist/cjs/src/coinone.js +1 -1
- package/dist/cjs/src/coinsph.js +0 -1
- package/dist/cjs/src/coinspot.js +1 -1
- package/dist/cjs/src/cryptocom.js +3 -2
- package/dist/cjs/src/cryptomus.js +1 -1
- package/dist/cjs/src/defx.js +1 -1
- package/dist/cjs/src/delta.js +1 -1
- package/dist/cjs/src/deribit.js +1 -1
- package/dist/cjs/src/derive.js +1 -1
- package/dist/cjs/src/digifinex.js +1 -1
- package/dist/cjs/src/ellipx.js +1 -1
- package/dist/cjs/src/exmo.js +1 -1
- package/dist/cjs/src/fmfwio.js +1 -1
- package/dist/cjs/src/foxbit.js +1 -1
- package/dist/cjs/src/gate.js +2 -3
- package/dist/cjs/src/gateio.js +1 -1
- package/dist/cjs/src/gemini.js +1 -1
- package/dist/cjs/src/hashkey.js +1 -1
- package/dist/cjs/src/hibachi.js +2136 -0
- package/dist/cjs/src/hitbtc.js +0 -1
- package/dist/cjs/src/hollaex.js +1 -1
- package/dist/cjs/src/htx.js +1 -1
- package/dist/cjs/src/huobi.js +1 -1
- package/dist/cjs/src/hyperliquid.js +1 -1
- package/dist/cjs/src/independentreserve.js +1 -1
- package/dist/cjs/src/indodax.js +1 -1
- package/dist/cjs/src/kraken.js +1 -1
- package/dist/cjs/src/krakenfutures.js +1 -1
- package/dist/cjs/src/kucoin.js +1 -1
- package/dist/cjs/src/kucoinfutures.js +1 -1
- package/dist/cjs/src/latoken.js +1 -1
- package/dist/cjs/src/lbank.js +1 -1
- package/dist/cjs/src/luno.js +1 -1
- package/dist/cjs/src/mercado.js +1 -1
- package/dist/cjs/src/mexc.js +1 -1
- package/dist/cjs/src/modetrade.js +1 -1
- package/dist/cjs/src/myokx.js +1 -1
- package/dist/cjs/src/ndax.js +9 -1
- package/dist/cjs/src/novadax.js +35 -1
- package/dist/cjs/src/oceanex.js +1 -1
- package/dist/cjs/src/okcoin.js +1 -1
- package/dist/cjs/src/okx.js +2 -1
- package/dist/cjs/src/okxus.js +1 -1
- package/dist/cjs/src/onetrading.js +1 -1
- package/dist/cjs/src/oxfun.js +1 -1
- package/dist/cjs/src/p2b.js +1 -1
- package/dist/cjs/src/paradex.js +1 -1
- package/dist/cjs/src/paymium.js +1 -1
- package/dist/cjs/src/poloniex.js +1 -1
- package/dist/cjs/src/pro/alpaca.js +1 -1
- package/dist/cjs/src/pro/apex.js +1 -1
- package/dist/cjs/src/pro/ascendex.js +1 -1
- package/dist/cjs/src/pro/bequant.js +1 -1
- package/dist/cjs/src/pro/binance.js +2 -5
- package/dist/cjs/src/pro/binancecoinm.js +1 -1
- package/dist/cjs/src/pro/binanceus.js +1 -1
- package/dist/cjs/src/pro/binanceusdm.js +1 -1
- package/dist/cjs/src/pro/bingx.js +1 -1
- package/dist/cjs/src/pro/bitfinex.js +1 -1
- package/dist/cjs/src/pro/bitget.js +2 -2
- package/dist/cjs/src/pro/bithumb.js +1 -1
- package/dist/cjs/src/pro/bitmart.js +1 -1
- package/dist/cjs/src/pro/bitmex.js +2 -2
- package/dist/cjs/src/pro/bitrue.js +1 -1
- package/dist/cjs/src/pro/bitstamp.js +2 -2
- package/dist/cjs/src/pro/bitvavo.js +3 -1
- package/dist/cjs/src/pro/blockchaincom.js +1 -1
- package/dist/cjs/src/pro/blofin.js +1 -1
- package/dist/cjs/src/pro/bybit.js +1 -1
- package/dist/cjs/src/pro/cex.js +2 -1
- package/dist/cjs/src/pro/coinbase.js +1 -1
- package/dist/cjs/src/pro/coinbaseadvanced.js +1 -1
- package/dist/cjs/src/pro/coinbaseexchange.js +3 -3
- package/dist/cjs/src/pro/coinbaseinternational.js +1 -1
- package/dist/cjs/src/pro/coincatch.js +1 -1
- package/dist/cjs/src/pro/coincheck.js +1 -1
- package/dist/cjs/src/pro/coinex.js +1 -1
- package/dist/cjs/src/pro/coinone.js +1 -1
- package/dist/cjs/src/pro/cryptocom.js +1 -1
- package/dist/cjs/src/pro/defx.js +1 -1
- package/dist/cjs/src/pro/deribit.js +1 -1
- package/dist/cjs/src/pro/exmo.js +1 -1
- package/dist/cjs/src/pro/gate.js +2 -2
- package/dist/cjs/src/pro/gateio.js +1 -1
- package/dist/cjs/src/pro/gemini.js +1 -1
- package/dist/cjs/src/pro/hashkey.js +1 -1
- package/dist/cjs/src/pro/hitbtc.js +1 -1
- package/dist/cjs/src/pro/hollaex.js +1 -1
- package/dist/cjs/src/pro/htx.js +2 -2
- package/dist/cjs/src/pro/huobi.js +1 -1
- package/dist/cjs/src/pro/hyperliquid.js +1 -1
- package/dist/cjs/src/pro/independentreserve.js +1 -1
- package/dist/cjs/src/pro/kraken.js +1 -1
- package/dist/cjs/src/pro/krakenfutures.js +3 -2
- package/dist/cjs/src/pro/kucoin.js +2 -1
- package/dist/cjs/src/pro/kucoinfutures.js +2 -1
- package/dist/cjs/src/pro/lbank.js +0 -1
- package/dist/cjs/src/pro/luno.js +1 -1
- package/dist/cjs/src/pro/mexc.js +1 -1
- package/dist/cjs/src/pro/myokx.js +1 -1
- package/dist/cjs/src/pro/ndax.js +1 -1
- package/dist/cjs/src/pro/okcoin.js +1 -1
- package/dist/cjs/src/pro/okx.js +4 -4
- package/dist/cjs/src/pro/okxus.js +1 -1
- package/dist/cjs/src/pro/onetrading.js +1 -1
- package/dist/cjs/src/pro/oxfun.js +1 -1
- package/dist/cjs/src/pro/p2b.js +1 -1
- package/dist/cjs/src/pro/paradex.js +1 -1
- package/dist/cjs/src/pro/phemex.js +1 -1
- package/dist/cjs/src/pro/poloniex.js +1 -1
- package/dist/cjs/src/pro/probit.js +1 -1
- package/dist/cjs/src/pro/tradeogre.js +1 -1
- package/dist/cjs/src/pro/upbit.js +1 -1
- package/dist/cjs/src/pro/whitebit.js +1 -1
- package/dist/cjs/src/pro/xt.js +1 -1
- package/dist/cjs/src/probit.js +1 -1
- package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
- 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 +0 -6
- package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/index.js +10 -1
- package/dist/cjs/src/static_dependencies/ethers/interface.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/typed.js +0 -6
- 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 +0 -6
- package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
- 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 +7 -1
- package/dist/cjs/src/static_dependencies/node-fetch/request.js +7 -1
- package/dist/cjs/src/static_dependencies/node-fetch/response.js +5 -1
- 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/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 +0 -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 +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +1 -1
- 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 +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +4 -1
- 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 +1 -1
- 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 +0 -1
- package/dist/cjs/src/tokocrypto.js +1 -1
- package/dist/cjs/src/tradeogre.js +1 -1
- package/dist/cjs/src/upbit.js +1 -1
- package/dist/cjs/src/vertex.js +1 -1
- package/dist/cjs/src/wavesexchange.js +1 -1
- package/dist/cjs/src/whitebit.js +1 -1
- package/dist/cjs/src/woo.js +1 -1
- package/dist/cjs/src/woofipro.js +1 -1
- package/dist/cjs/src/xt.js +1 -1
- package/dist/cjs/src/yobit.js +1 -1
- package/dist/cjs/src/zaif.js +1 -1
- package/dist/cjs/src/zonda.js +1 -1
- package/js/ccxt.d.ts +6 -3
- package/js/ccxt.js +5 -3
- package/js/src/abstract/bitget.d.ts +6 -0
- package/js/src/abstract/hibachi.d.ts +29 -0
- package/js/src/abstract/hibachi.js +5 -0
- package/js/src/base/Exchange.d.ts +2 -2
- package/js/src/base/errorHierarchy.d.ts +1 -0
- package/js/src/base/errorHierarchy.js +1 -0
- package/js/src/base/errors.d.ts +5 -1
- package/js/src/base/errors.js +8 -2
- package/js/src/binance.js +8 -6
- package/js/src/bitget.d.ts +73 -7
- package/js/src/bitget.js +2149 -534
- package/js/src/bybit.js +6 -1
- package/js/src/coinbaseexchange.d.ts +1 -1
- package/js/src/coinex.d.ts +10 -0
- package/js/src/coinex.js +67 -3
- package/js/src/coinmetro.js +2 -3
- package/js/src/cryptocom.js +2 -1
- package/js/src/gate.js +1 -2
- package/js/src/hibachi.d.ts +346 -0
- package/js/src/hibachi.js +2131 -0
- package/js/src/ndax.js +8 -0
- package/js/src/novadax.js +34 -0
- package/js/src/okx.js +2 -1
- package/js/src/pro/alpaca.d.ts +2 -2
- package/js/src/pro/apex.d.ts +2 -2
- package/js/src/pro/ascendex.d.ts +2 -2
- package/js/src/pro/binance.d.ts +2 -2
- package/js/src/pro/binance.js +2 -5
- package/js/src/pro/bitget.d.ts +2 -2
- package/js/src/pro/bitget.js +1 -1
- package/js/src/pro/bithumb.d.ts +2 -2
- package/js/src/pro/bitmart.d.ts +2 -2
- package/js/src/pro/bitmex.d.ts +3 -3
- package/js/src/pro/bitmex.js +1 -1
- package/js/src/pro/bitstamp.d.ts +2 -2
- package/js/src/pro/bitstamp.js +1 -1
- package/js/src/pro/bittrade.d.ts +2 -2
- package/js/src/pro/bitvavo.d.ts +2 -2
- package/js/src/pro/bitvavo.js +2 -0
- package/js/src/pro/bybit.d.ts +4 -4
- package/js/src/pro/cex.d.ts +2 -2
- package/js/src/pro/cex.js +1 -0
- package/js/src/pro/coinbaseexchange.d.ts +4 -4
- package/js/src/pro/coinbaseexchange.js +2 -2
- package/js/src/pro/coinbaseinternational.d.ts +2 -2
- package/js/src/pro/coincatch.d.ts +2 -2
- package/js/src/pro/coinone.d.ts +2 -2
- package/js/src/pro/cryptocom.d.ts +2 -2
- package/js/src/pro/derive.d.ts +2 -2
- package/js/src/pro/gate.d.ts +3 -3
- package/js/src/pro/gate.js +1 -1
- package/js/src/pro/hollaex.d.ts +2 -2
- package/js/src/pro/htx.d.ts +2 -2
- package/js/src/pro/htx.js +1 -1
- package/js/src/pro/hyperliquid.d.ts +2 -2
- package/js/src/pro/kraken.d.ts +2 -2
- package/js/src/pro/krakenfutures.d.ts +3 -3
- package/js/src/pro/krakenfutures.js +2 -1
- package/js/src/pro/kucoin.d.ts +2 -2
- package/js/src/pro/kucoin.js +1 -0
- package/js/src/pro/kucoinfutures.d.ts +2 -2
- package/js/src/pro/kucoinfutures.js +1 -0
- package/js/src/pro/modetrade.d.ts +2 -2
- package/js/src/pro/okcoin.d.ts +2 -2
- package/js/src/pro/okx.d.ts +4 -4
- package/js/src/pro/okx.js +3 -3
- package/js/src/pro/onetrading.d.ts +2 -2
- package/js/src/pro/p2b.d.ts +2 -2
- package/js/src/pro/paradex.d.ts +2 -2
- package/js/src/pro/poloniex.d.ts +2 -2
- package/js/src/pro/probit.d.ts +2 -2
- package/js/src/pro/vertex.d.ts +2 -2
- package/js/src/pro/whitebit.d.ts +2 -2
- package/js/src/pro/woo.d.ts +2 -2
- package/js/src/pro/woofipro.d.ts +2 -2
- package/js/src/static_dependencies/fflake/browser.d.ts +5 -5
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +1 -1
- package/js/src/static_dependencies/noble-curves/abstract/weierstrass.d.ts +0 -1
- package/js/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +1 -1
- package/package.json +2 -2
package/dist/cjs/src/bitget.js
CHANGED
|
@@ -6,7 +6,7 @@ var Precise = require('./base/Precise.js');
|
|
|
6
6
|
var number = require('./base/functions/number.js');
|
|
7
7
|
var sha256 = require('./static_dependencies/noble-hashes/sha256.js');
|
|
8
8
|
|
|
9
|
-
//
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
10
|
// ---------------------------------------------------------------------------
|
|
11
11
|
/**
|
|
12
12
|
* @class bitget
|
|
@@ -805,6 +805,7 @@ class bitget extends bitget$1 {
|
|
|
805
805
|
'get': {
|
|
806
806
|
'v3/account/assets': 1,
|
|
807
807
|
'v3/account/settings': 1,
|
|
808
|
+
'v3/account/deposit-records': 2,
|
|
808
809
|
'v3/account/financial-records': 1,
|
|
809
810
|
'v3/account/repayable-coins': 2,
|
|
810
811
|
'v3/account/payment-coins': 2,
|
|
@@ -823,7 +824,9 @@ class bitget extends bitget$1 {
|
|
|
823
824
|
'v3/position/history-position': 1,
|
|
824
825
|
'v3/trade/order-info': 1,
|
|
825
826
|
'v3/trade/unfilled-orders': 1,
|
|
827
|
+
'v3/trade/unfilled-strategy-orders': 1,
|
|
826
828
|
'v3/trade/history-orders': 1,
|
|
829
|
+
'v3/trade/history-strategy-orders': 1,
|
|
827
830
|
'v3/trade/fills': 1,
|
|
828
831
|
'v3/user/sub-list': 2,
|
|
829
832
|
'v3/user/sub-api-list': 2,
|
|
@@ -837,8 +840,11 @@ class bitget extends bitget$1 {
|
|
|
837
840
|
'v3/account/max-open-available': 4,
|
|
838
841
|
'v3/ins-loan/bind-uid': 6.6667,
|
|
839
842
|
'v3/trade/place-order': 2,
|
|
843
|
+
'v3/trade/place-strategy-order': 2,
|
|
840
844
|
'v3/trade/modify-order': 2,
|
|
845
|
+
'v3/trade/modify-strategy-order': 2,
|
|
841
846
|
'v3/trade/cancel-order': 2,
|
|
847
|
+
'v3/trade/cancel-strategy-order': 2,
|
|
842
848
|
'v3/trade/place-batch': 4,
|
|
843
849
|
'v3/trade/batch-modify-order': 2,
|
|
844
850
|
'v3/trade/cancel-batch': 4,
|
|
@@ -884,6 +890,7 @@ class bitget extends bitget$1 {
|
|
|
884
890
|
// '0': ExchangeError, // 200 successful,when the order placement / cancellation / operation is successful
|
|
885
891
|
'4001': errors.ExchangeError,
|
|
886
892
|
'4002': errors.ExchangeError,
|
|
893
|
+
'40020': errors.BadRequest,
|
|
887
894
|
// --------------------------------------------------------
|
|
888
895
|
'30001': errors.AuthenticationError,
|
|
889
896
|
'30002': errors.AuthenticationError,
|
|
@@ -1428,6 +1435,19 @@ class bitget extends bitget$1 {
|
|
|
1428
1435
|
'1w': '1Wutc',
|
|
1429
1436
|
'1M': '1Mutc',
|
|
1430
1437
|
},
|
|
1438
|
+
'uta': {
|
|
1439
|
+
'1m': '1m',
|
|
1440
|
+
'3m': '3m',
|
|
1441
|
+
'5m': '5m',
|
|
1442
|
+
'15m': '15m',
|
|
1443
|
+
'30m': '30m',
|
|
1444
|
+
'1h': '1H',
|
|
1445
|
+
'2h': '2H',
|
|
1446
|
+
'4h': '4H',
|
|
1447
|
+
'6h': '6H',
|
|
1448
|
+
'12h': '12H',
|
|
1449
|
+
'1d': '1D',
|
|
1450
|
+
},
|
|
1431
1451
|
},
|
|
1432
1452
|
'fetchMarkets': {
|
|
1433
1453
|
'types': ['spot', 'swap'], // there is future markets but they use the same endpoints as swap
|
|
@@ -1517,7 +1537,6 @@ class bitget extends bitget$1 {
|
|
|
1517
1537
|
'ERC20': 'ERC20',
|
|
1518
1538
|
'BEP20': 'BSC',
|
|
1519
1539
|
// 'BEP20': 'BEP20', // different for BEP20
|
|
1520
|
-
'BSC': 'BEP20',
|
|
1521
1540
|
'ATOM': 'ATOM',
|
|
1522
1541
|
'ACA': 'AcalaToken',
|
|
1523
1542
|
'APT': 'Aptos',
|
|
@@ -1771,10 +1790,20 @@ class bitget extends bitget$1 {
|
|
|
1771
1790
|
defaultProductType = (subType === 'linear') ? 'USDT-FUTURES' : 'COIN-FUTURES';
|
|
1772
1791
|
// }
|
|
1773
1792
|
}
|
|
1774
|
-
let productType = this.
|
|
1793
|
+
let productType = this.safeString2(params, 'productType', 'category', defaultProductType);
|
|
1775
1794
|
if ((productType === undefined) && (market !== undefined)) {
|
|
1776
1795
|
const settle = market['settle'];
|
|
1777
|
-
if (
|
|
1796
|
+
if (market['spot']) {
|
|
1797
|
+
let marginMode = undefined;
|
|
1798
|
+
[marginMode, params] = this.handleMarginModeAndParams('handleProductTypeAndParams', params);
|
|
1799
|
+
if (marginMode !== undefined) {
|
|
1800
|
+
productType = 'MARGIN';
|
|
1801
|
+
}
|
|
1802
|
+
else {
|
|
1803
|
+
productType = 'SPOT';
|
|
1804
|
+
}
|
|
1805
|
+
}
|
|
1806
|
+
else if (settle === 'USDT') {
|
|
1778
1807
|
productType = 'USDT-FUTURES';
|
|
1779
1808
|
}
|
|
1780
1809
|
else if (settle === 'USDC') {
|
|
@@ -1794,9 +1823,9 @@ class bitget extends bitget$1 {
|
|
|
1794
1823
|
}
|
|
1795
1824
|
}
|
|
1796
1825
|
if (productType === undefined) {
|
|
1797
|
-
throw new errors.ArgumentsRequired(this.id + ' requires a productType param, one of "USDT-FUTURES", "USDC-FUTURES", "COIN-FUTURES", "SUSDT-FUTURES", "SUSDC-FUTURES"
|
|
1826
|
+
throw new errors.ArgumentsRequired(this.id + ' requires a productType param, one of "USDT-FUTURES", "USDC-FUTURES", "COIN-FUTURES", "SUSDT-FUTURES", "SUSDC-FUTURES", "SCOIN-FUTURES" or for uta only "SPOT"');
|
|
1798
1827
|
}
|
|
1799
|
-
params = this.omit(params, 'productType');
|
|
1828
|
+
params = this.omit(params, ['productType', 'category']);
|
|
1800
1829
|
return [productType, params];
|
|
1801
1830
|
}
|
|
1802
1831
|
/**
|
|
@@ -1829,9 +1858,9 @@ class bitget extends bitget$1 {
|
|
|
1829
1858
|
* @see https://www.bitget.com/api-doc/spot/market/Get-Symbols
|
|
1830
1859
|
* @see https://www.bitget.com/api-doc/contract/market/Get-All-Symbols-Contracts
|
|
1831
1860
|
* @see https://www.bitget.com/api-doc/margin/common/support-currencies
|
|
1832
|
-
* @see https://www.bitget.
|
|
1861
|
+
* @see https://www.bitget.com/api-doc/uta/public/Instruments
|
|
1833
1862
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1834
|
-
* @param {
|
|
1863
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
1835
1864
|
* @returns {object[]} an array of objects representing market data
|
|
1836
1865
|
*/
|
|
1837
1866
|
async fetchMarkets(params = {}) {
|
|
@@ -2477,11 +2506,13 @@ class bitget extends bitget$1 {
|
|
|
2477
2506
|
* @see https://www.bitget.com/api-doc/contract/position/Get-Query-Position-Lever
|
|
2478
2507
|
* @see https://www.bitget.com/api-doc/margin/cross/account/Cross-Tier-Data
|
|
2479
2508
|
* @see https://www.bitget.com/api-doc/margin/isolated/account/Isolated-Tier-Data
|
|
2509
|
+
* @see https://www.bitget.com/api-doc/uta/public/Get-Position-Tier-Data
|
|
2480
2510
|
* @param {string} symbol unified market symbol
|
|
2481
2511
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2482
2512
|
* @param {string} [params.marginMode] for spot margin 'cross' or 'isolated', default is 'isolated'
|
|
2483
2513
|
* @param {string} [params.code] required for cross spot margin
|
|
2484
|
-
* @param {string} [params.productType] *contract only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
|
|
2514
|
+
* @param {string} [params.productType] *contract and uta only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
|
|
2515
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
2485
2516
|
* @returns {object} a [leverage tiers structure]{@link https://docs.ccxt.com/#/?id=leverage-tiers-structure}
|
|
2486
2517
|
*/
|
|
2487
2518
|
async fetchMarketLeverageTiers(symbol, params = {}) {
|
|
@@ -2490,10 +2521,22 @@ class bitget extends bitget$1 {
|
|
|
2490
2521
|
const request = {};
|
|
2491
2522
|
let response = undefined;
|
|
2492
2523
|
let marginMode = undefined;
|
|
2524
|
+
let productType = undefined;
|
|
2525
|
+
let uta = undefined;
|
|
2493
2526
|
[marginMode, params] = this.handleMarginModeAndParams('fetchMarketLeverageTiers', params, 'isolated');
|
|
2494
|
-
|
|
2495
|
-
|
|
2496
|
-
|
|
2527
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
2528
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchMarketLeverageTiers', 'uta', false);
|
|
2529
|
+
if (uta) {
|
|
2530
|
+
if (productType === 'SPOT') {
|
|
2531
|
+
if (marginMode !== undefined) {
|
|
2532
|
+
productType = 'MARGIN';
|
|
2533
|
+
}
|
|
2534
|
+
}
|
|
2535
|
+
request['symbol'] = market['id'];
|
|
2536
|
+
request['category'] = productType;
|
|
2537
|
+
response = await this.publicUtaGetV3MarketPositionTier(this.extend(request, params));
|
|
2538
|
+
}
|
|
2539
|
+
else if ((market['swap']) || (market['future'])) {
|
|
2497
2540
|
request['productType'] = productType;
|
|
2498
2541
|
request['symbol'] = market['id'];
|
|
2499
2542
|
response = await this.publicMixGetV2MixMarketQueryPositionLever(this.extend(request, params));
|
|
@@ -2572,6 +2615,23 @@ class bitget extends bitget$1 {
|
|
|
2572
2615
|
// ]
|
|
2573
2616
|
// }
|
|
2574
2617
|
//
|
|
2618
|
+
// uta
|
|
2619
|
+
//
|
|
2620
|
+
// {
|
|
2621
|
+
// "code": "00000",
|
|
2622
|
+
// "msg": "success",
|
|
2623
|
+
// "requestTime": 1752735673127,
|
|
2624
|
+
// "data": [
|
|
2625
|
+
// {
|
|
2626
|
+
// "tier": "1",
|
|
2627
|
+
// "minTierValue": "0",
|
|
2628
|
+
// "maxTierValue": "150000",
|
|
2629
|
+
// "leverage": "125",
|
|
2630
|
+
// "mmr": "0.004"
|
|
2631
|
+
// },
|
|
2632
|
+
// ]
|
|
2633
|
+
// }
|
|
2634
|
+
//
|
|
2575
2635
|
const result = this.safeValue(response, 'data', []);
|
|
2576
2636
|
return this.parseMarketLeverageTiers(result, market);
|
|
2577
2637
|
}
|
|
@@ -2612,15 +2672,25 @@ class bitget extends bitget$1 {
|
|
|
2612
2672
|
// "maintainMarginRate": "0.1"
|
|
2613
2673
|
// }
|
|
2614
2674
|
//
|
|
2675
|
+
// uta
|
|
2676
|
+
//
|
|
2677
|
+
// {
|
|
2678
|
+
// "tier": "1",
|
|
2679
|
+
// "minTierValue": "0",
|
|
2680
|
+
// "maxTierValue": "150000",
|
|
2681
|
+
// "leverage": "125",
|
|
2682
|
+
// "mmr": "0.004"
|
|
2683
|
+
// }
|
|
2684
|
+
//
|
|
2615
2685
|
const tiers = [];
|
|
2616
2686
|
let minNotional = 0;
|
|
2617
2687
|
for (let i = 0; i < info.length; i++) {
|
|
2618
2688
|
const item = info[i];
|
|
2619
|
-
const minimumNotional = this.
|
|
2689
|
+
const minimumNotional = this.safeNumber2(item, 'startUnit', 'minTierValue');
|
|
2620
2690
|
if (minimumNotional !== undefined) {
|
|
2621
2691
|
minNotional = minimumNotional;
|
|
2622
2692
|
}
|
|
2623
|
-
const maxNotional = this.safeNumberN(item, ['endUnit', 'maxBorrowableAmount', 'baseMaxBorrowableAmount']);
|
|
2693
|
+
const maxNotional = this.safeNumberN(item, ['endUnit', 'maxBorrowableAmount', 'baseMaxBorrowableAmount', 'maxTierValue']);
|
|
2624
2694
|
const marginCurrency = this.safeString2(item, 'coin', 'baseCoin');
|
|
2625
2695
|
const currencyId = (marginCurrency !== undefined) ? marginCurrency : market['base'];
|
|
2626
2696
|
const marketId = this.safeString(item, 'symbol');
|
|
@@ -2630,7 +2700,7 @@ class bitget extends bitget$1 {
|
|
|
2630
2700
|
'currency': this.safeCurrencyCode(currencyId),
|
|
2631
2701
|
'minNotional': minNotional,
|
|
2632
2702
|
'maxNotional': maxNotional,
|
|
2633
|
-
'maintenanceMarginRate': this.
|
|
2703
|
+
'maintenanceMarginRate': this.safeNumberN(item, ['keepMarginRate', 'maintainMarginRate', 'mmr']),
|
|
2634
2704
|
'maxLeverage': this.safeNumber(item, 'leverage'),
|
|
2635
2705
|
'info': item,
|
|
2636
2706
|
});
|
|
@@ -2989,9 +3059,11 @@ class bitget extends bitget$1 {
|
|
|
2989
3059
|
* @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
2990
3060
|
* @see https://www.bitget.com/api-doc/spot/market/Get-Orderbook
|
|
2991
3061
|
* @see https://www.bitget.com/api-doc/contract/market/Get-Merge-Depth
|
|
3062
|
+
* @see https://www.bitget.com/api-doc/uta/public/OrderBook
|
|
2992
3063
|
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
2993
3064
|
* @param {int} [limit] the maximum amount of order book entries to return
|
|
2994
3065
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3066
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
2995
3067
|
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
2996
3068
|
*/
|
|
2997
3069
|
async fetchOrderBook(symbol, limit = undefined, params = {}) {
|
|
@@ -3003,13 +3075,19 @@ class bitget extends bitget$1 {
|
|
|
3003
3075
|
if (limit !== undefined) {
|
|
3004
3076
|
request['limit'] = limit;
|
|
3005
3077
|
}
|
|
3078
|
+
let productType = undefined;
|
|
3079
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
3006
3080
|
let response = undefined;
|
|
3007
|
-
|
|
3081
|
+
let uta = undefined;
|
|
3082
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchOrderBook', 'uta', false);
|
|
3083
|
+
if (uta) {
|
|
3084
|
+
request['category'] = productType;
|
|
3085
|
+
response = await this.publicUtaGetV3MarketOrderbook(this.extend(request, params));
|
|
3086
|
+
}
|
|
3087
|
+
else if (market['spot']) {
|
|
3008
3088
|
response = await this.publicSpotGetV2SpotMarketOrderbook(this.extend(request, params));
|
|
3009
3089
|
}
|
|
3010
3090
|
else {
|
|
3011
|
-
let productType = undefined;
|
|
3012
|
-
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
3013
3091
|
request['productType'] = productType;
|
|
3014
3092
|
response = await this.publicMixGetV2MixMarketMergeDepth(this.extend(request, params));
|
|
3015
3093
|
}
|
|
@@ -3025,9 +3103,24 @@ class bitget extends bitget$1 {
|
|
|
3025
3103
|
// }
|
|
3026
3104
|
// }
|
|
3027
3105
|
//
|
|
3106
|
+
// uta
|
|
3107
|
+
//
|
|
3108
|
+
// {
|
|
3109
|
+
// "code": "00000",
|
|
3110
|
+
// "msg": "success",
|
|
3111
|
+
// "requestTime": 1750329437753,
|
|
3112
|
+
// "data": {
|
|
3113
|
+
// "a": [ [ 104992.60, 0.018411 ] ],
|
|
3114
|
+
// "b":[ [104927.40, 0.229914 ] ],
|
|
3115
|
+
// "ts": "1750329437763"
|
|
3116
|
+
// }
|
|
3117
|
+
// }
|
|
3118
|
+
//
|
|
3028
3119
|
const data = this.safeValue(response, 'data', {});
|
|
3120
|
+
const bidsKey = uta ? 'b' : 'bids';
|
|
3121
|
+
const asksKey = uta ? 'a' : 'asks';
|
|
3029
3122
|
const timestamp = this.safeInteger(data, 'ts');
|
|
3030
|
-
return this.parseOrderBook(data, market['symbol'], timestamp);
|
|
3123
|
+
return this.parseOrderBook(data, market['symbol'], timestamp, bidsKey, asksKey);
|
|
3031
3124
|
}
|
|
3032
3125
|
parseTicker(ticker, market = undefined) {
|
|
3033
3126
|
//
|
|
@@ -3039,7 +3132,7 @@ class bitget extends bitget$1 {
|
|
|
3039
3132
|
// "ts": "1695793390482"
|
|
3040
3133
|
// }
|
|
3041
3134
|
//
|
|
3042
|
-
// spot
|
|
3135
|
+
// spot
|
|
3043
3136
|
//
|
|
3044
3137
|
// {
|
|
3045
3138
|
// "open": "37202.46",
|
|
@@ -3060,92 +3153,118 @@ class bitget extends bitget$1 {
|
|
|
3060
3153
|
// "change24h": "0.00321"
|
|
3061
3154
|
// }
|
|
3062
3155
|
//
|
|
3063
|
-
// swap and future
|
|
3156
|
+
// swap and future
|
|
3064
3157
|
//
|
|
3065
3158
|
// {
|
|
3066
3159
|
// "symbol": "BTCUSDT",
|
|
3067
|
-
// "lastPr": "
|
|
3068
|
-
// "askPr": "
|
|
3069
|
-
// "bidPr": "
|
|
3070
|
-
// "bidSz": "
|
|
3071
|
-
// "askSz": "
|
|
3072
|
-
// "high24h": "
|
|
3073
|
-
// "low24h": "
|
|
3074
|
-
// "ts": "
|
|
3075
|
-
// "change24h": "0.
|
|
3076
|
-
// "baseVolume": "
|
|
3077
|
-
// "quoteVolume": "
|
|
3078
|
-
// "usdtVolume": "
|
|
3079
|
-
// "openUtc": "
|
|
3080
|
-
// "changeUtc24h": "0.
|
|
3081
|
-
// "indexPrice": "
|
|
3082
|
-
// "fundingRate": "0.
|
|
3083
|
-
// "holdingAmount": "
|
|
3160
|
+
// "lastPr": "104823.8",
|
|
3161
|
+
// "askPr": "104823.8",
|
|
3162
|
+
// "bidPr": "104823.5",
|
|
3163
|
+
// "bidSz": "0.703",
|
|
3164
|
+
// "askSz": "13.894",
|
|
3165
|
+
// "high24h": "105289.3",
|
|
3166
|
+
// "low24h": "103447.9",
|
|
3167
|
+
// "ts": "1750332210370",
|
|
3168
|
+
// "change24h": "0.00471",
|
|
3169
|
+
// "baseVolume": "79089.5675",
|
|
3170
|
+
// "quoteVolume": "8274870921.80485",
|
|
3171
|
+
// "usdtVolume": "8274870921.80485",
|
|
3172
|
+
// "openUtc": "104833",
|
|
3173
|
+
// "changeUtc24h": "-0.00009",
|
|
3174
|
+
// "indexPrice": "104881.953125",
|
|
3175
|
+
// "fundingRate": "-0.000014",
|
|
3176
|
+
// "holdingAmount": "7452.6421",
|
|
3084
3177
|
// "deliveryStartTime": null,
|
|
3085
3178
|
// "deliveryTime": null,
|
|
3086
3179
|
// "deliveryStatus": "",
|
|
3087
|
-
// "open24h": "
|
|
3180
|
+
// "open24h": "104332.3",
|
|
3181
|
+
// "markPrice": "104824.2"
|
|
3182
|
+
// }
|
|
3183
|
+
//
|
|
3184
|
+
// spot uta
|
|
3185
|
+
//
|
|
3186
|
+
// {
|
|
3187
|
+
// "category": "SPOT",
|
|
3188
|
+
// "symbol": "BTCUSDT",
|
|
3189
|
+
// "ts": "1750330651972",
|
|
3190
|
+
// "lastPrice": "104900.2",
|
|
3191
|
+
// "openPrice24h": "104321.2",
|
|
3192
|
+
// "highPrice24h": "107956.8",
|
|
3193
|
+
// "lowPrice24h": "103600.1",
|
|
3194
|
+
// "ask1Price": "104945.8",
|
|
3195
|
+
// "bid1Price": "104880.6",
|
|
3196
|
+
// "bid1Size": "0.266534",
|
|
3197
|
+
// "ask1Size": "0.014001",
|
|
3198
|
+
// "price24hPcnt": "0.00555",
|
|
3199
|
+
// "volume24h": "355.941109",
|
|
3200
|
+
// "turnover24h": "37302936.008134"
|
|
3088
3201
|
// }
|
|
3089
3202
|
//
|
|
3090
|
-
// swap and future
|
|
3203
|
+
// swap and future uta
|
|
3091
3204
|
//
|
|
3092
3205
|
// {
|
|
3093
|
-
// "
|
|
3094
|
-
// "symbol": "
|
|
3095
|
-
// "
|
|
3096
|
-
// "
|
|
3097
|
-
// "
|
|
3098
|
-
// "
|
|
3099
|
-
// "
|
|
3100
|
-
// "
|
|
3101
|
-
// "
|
|
3102
|
-
// "
|
|
3103
|
-
// "
|
|
3104
|
-
// "
|
|
3105
|
-
// "
|
|
3106
|
-
// "
|
|
3107
|
-
// "
|
|
3108
|
-
// "
|
|
3206
|
+
// "category": "USDT-FUTURES",
|
|
3207
|
+
// "symbol": "BTCUSDT",
|
|
3208
|
+
// "ts": "1750332730472",
|
|
3209
|
+
// "lastPrice": "104738",
|
|
3210
|
+
// "openPrice24h": "104374",
|
|
3211
|
+
// "highPrice24h": "105289.3",
|
|
3212
|
+
// "lowPrice24h": "103447.9",
|
|
3213
|
+
// "ask1Price": "104738",
|
|
3214
|
+
// "bid1Price": "104737.7",
|
|
3215
|
+
// "bid1Size": "2.036",
|
|
3216
|
+
// "ask1Size": "8.094",
|
|
3217
|
+
// "price24hPcnt": "0.00349",
|
|
3218
|
+
// "volume24h": "79101.6477",
|
|
3219
|
+
// "turnover24h": "8276293391.45973",
|
|
3220
|
+
// "indexPrice": "104785.956168",
|
|
3221
|
+
// "markPrice": "104738",
|
|
3222
|
+
// "fundingRate": "-0.000007",
|
|
3223
|
+
// "openInterest": "7465.5938",
|
|
3224
|
+
// "deliveryStartTime": "",
|
|
3225
|
+
// "deliveryTime": "",
|
|
3226
|
+
// "deliveryStatus": ""
|
|
3109
3227
|
// }
|
|
3110
3228
|
//
|
|
3111
3229
|
const marketId = this.safeString(ticker, 'symbol');
|
|
3112
|
-
const close = this.
|
|
3230
|
+
const close = this.safeString2(ticker, 'lastPr', 'lastPrice');
|
|
3113
3231
|
const timestamp = this.safeIntegerOmitZero(ticker, 'ts'); // exchange bitget provided 0
|
|
3114
3232
|
const change = this.safeString(ticker, 'change24h');
|
|
3115
|
-
const
|
|
3116
|
-
const
|
|
3117
|
-
let
|
|
3118
|
-
|
|
3119
|
-
|
|
3120
|
-
symbol = this.safeSymbol(marketId, market, undefined, 'contract');
|
|
3121
|
-
openValue = open24;
|
|
3233
|
+
const category = this.safeString(ticker, 'category');
|
|
3234
|
+
const markPrice = this.safeString(ticker, 'markPrice');
|
|
3235
|
+
let marketType;
|
|
3236
|
+
if ((markPrice !== undefined) && (category !== 'SPOT')) {
|
|
3237
|
+
marketType = 'contract';
|
|
3122
3238
|
}
|
|
3123
3239
|
else {
|
|
3124
|
-
|
|
3125
|
-
|
|
3240
|
+
marketType = 'spot';
|
|
3241
|
+
}
|
|
3242
|
+
let percentage = this.safeString(ticker, 'price24hPcnt');
|
|
3243
|
+
if (percentage === undefined) {
|
|
3244
|
+
percentage = Precise["default"].stringMul(change, '100');
|
|
3126
3245
|
}
|
|
3127
3246
|
return this.safeTicker({
|
|
3128
|
-
'symbol':
|
|
3247
|
+
'symbol': this.safeSymbol(marketId, market, undefined, marketType),
|
|
3129
3248
|
'timestamp': timestamp,
|
|
3130
3249
|
'datetime': this.iso8601(timestamp),
|
|
3131
|
-
'high': this.
|
|
3132
|
-
'low': this.
|
|
3133
|
-
'bid': this.
|
|
3134
|
-
'bidVolume': this.
|
|
3135
|
-
'ask': this.
|
|
3136
|
-
'askVolume': this.
|
|
3250
|
+
'high': this.safeString2(ticker, 'high24h', 'highPrice24h'),
|
|
3251
|
+
'low': this.safeString2(ticker, 'low24h', 'lowPrice24h'),
|
|
3252
|
+
'bid': this.safeString2(ticker, 'bidPr', 'bid1Price'),
|
|
3253
|
+
'bidVolume': this.safeString2(ticker, 'bidSz', 'bid1Size'),
|
|
3254
|
+
'ask': this.safeString2(ticker, 'askPr', 'ask1Price'),
|
|
3255
|
+
'askVolume': this.safeString2(ticker, 'askSz', 'ask1Size'),
|
|
3137
3256
|
'vwap': undefined,
|
|
3138
|
-
'open':
|
|
3257
|
+
'open': this.safeStringN(ticker, ['open', 'open24h', 'openPrice24h']),
|
|
3139
3258
|
'close': close,
|
|
3140
3259
|
'last': close,
|
|
3141
3260
|
'previousClose': undefined,
|
|
3142
3261
|
'change': change,
|
|
3143
|
-
'percentage':
|
|
3262
|
+
'percentage': percentage,
|
|
3144
3263
|
'average': undefined,
|
|
3145
|
-
'baseVolume': this.
|
|
3146
|
-
'quoteVolume': this.
|
|
3264
|
+
'baseVolume': this.safeString2(ticker, 'baseVolume', 'volume24h'),
|
|
3265
|
+
'quoteVolume': this.safeString2(ticker, 'quoteVolume', 'turnover24h'),
|
|
3147
3266
|
'indexPrice': this.safeString(ticker, 'indexPrice'),
|
|
3148
|
-
'markPrice':
|
|
3267
|
+
'markPrice': markPrice,
|
|
3149
3268
|
'info': ticker,
|
|
3150
3269
|
}, market);
|
|
3151
3270
|
}
|
|
@@ -3155,8 +3274,10 @@ class bitget extends bitget$1 {
|
|
|
3155
3274
|
* @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
3156
3275
|
* @see https://www.bitget.com/api-doc/spot/market/Get-Tickers
|
|
3157
3276
|
* @see https://www.bitget.com/api-doc/contract/market/Get-Ticker
|
|
3277
|
+
* @see https://www.bitget.com/api-doc/uta/public/Tickers
|
|
3158
3278
|
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
3159
3279
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3280
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
3160
3281
|
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
3161
3282
|
*/
|
|
3162
3283
|
async fetchTicker(symbol, params = {}) {
|
|
@@ -3165,13 +3286,19 @@ class bitget extends bitget$1 {
|
|
|
3165
3286
|
const request = {
|
|
3166
3287
|
'symbol': market['id'],
|
|
3167
3288
|
};
|
|
3289
|
+
let productType = undefined;
|
|
3290
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
3168
3291
|
let response = undefined;
|
|
3169
|
-
|
|
3292
|
+
let uta = undefined;
|
|
3293
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchTicker', 'uta', false);
|
|
3294
|
+
if (uta) {
|
|
3295
|
+
request['category'] = productType;
|
|
3296
|
+
response = await this.publicUtaGetV3MarketTickers(this.extend(request, params));
|
|
3297
|
+
}
|
|
3298
|
+
else if (market['spot']) {
|
|
3170
3299
|
response = await this.publicSpotGetV2SpotMarketTickers(this.extend(request, params));
|
|
3171
3300
|
}
|
|
3172
3301
|
else {
|
|
3173
|
-
let productType = undefined;
|
|
3174
|
-
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
3175
3302
|
request['productType'] = productType;
|
|
3176
3303
|
response = await this.publicMixGetV2MixMarketTicker(this.extend(request, params));
|
|
3177
3304
|
}
|
|
@@ -3206,34 +3333,94 @@ class bitget extends bitget$1 {
|
|
|
3206
3333
|
//
|
|
3207
3334
|
// swap and future
|
|
3208
3335
|
//
|
|
3209
|
-
//
|
|
3336
|
+
// {
|
|
3210
3337
|
// "code": "00000",
|
|
3211
3338
|
// "msg": "success",
|
|
3212
|
-
// "requestTime":
|
|
3339
|
+
// "requestTime": 1750332210369,
|
|
3213
3340
|
// "data": [
|
|
3214
3341
|
// {
|
|
3215
3342
|
// "symbol": "BTCUSDT",
|
|
3216
|
-
// "lastPr": "
|
|
3217
|
-
// "askPr": "
|
|
3218
|
-
// "bidPr": "
|
|
3219
|
-
// "bidSz": "
|
|
3220
|
-
// "askSz": "
|
|
3221
|
-
// "high24h": "
|
|
3222
|
-
// "low24h": "
|
|
3223
|
-
// "ts": "
|
|
3224
|
-
// "change24h": "0.
|
|
3225
|
-
// "baseVolume": "
|
|
3226
|
-
// "quoteVolume": "
|
|
3227
|
-
// "usdtVolume": "
|
|
3228
|
-
// "openUtc": "
|
|
3229
|
-
// "changeUtc24h": "0.
|
|
3230
|
-
// "indexPrice": "
|
|
3231
|
-
// "fundingRate": "0.
|
|
3232
|
-
// "holdingAmount": "
|
|
3343
|
+
// "lastPr": "104823.8",
|
|
3344
|
+
// "askPr": "104823.8",
|
|
3345
|
+
// "bidPr": "104823.5",
|
|
3346
|
+
// "bidSz": "0.703",
|
|
3347
|
+
// "askSz": "13.894",
|
|
3348
|
+
// "high24h": "105289.3",
|
|
3349
|
+
// "low24h": "103447.9",
|
|
3350
|
+
// "ts": "1750332210370",
|
|
3351
|
+
// "change24h": "0.00471",
|
|
3352
|
+
// "baseVolume": "79089.5675",
|
|
3353
|
+
// "quoteVolume": "8274870921.80485",
|
|
3354
|
+
// "usdtVolume": "8274870921.80485",
|
|
3355
|
+
// "openUtc": "104833",
|
|
3356
|
+
// "changeUtc24h": "-0.00009",
|
|
3357
|
+
// "indexPrice": "104881.953125",
|
|
3358
|
+
// "fundingRate": "-0.000014",
|
|
3359
|
+
// "holdingAmount": "7452.6421",
|
|
3233
3360
|
// "deliveryStartTime": null,
|
|
3234
3361
|
// "deliveryTime": null,
|
|
3235
3362
|
// "deliveryStatus": "",
|
|
3236
|
-
// "open24h": "
|
|
3363
|
+
// "open24h": "104332.3",
|
|
3364
|
+
// "markPrice": "104824.2"
|
|
3365
|
+
// }
|
|
3366
|
+
// ]
|
|
3367
|
+
// }
|
|
3368
|
+
//
|
|
3369
|
+
// spot uta
|
|
3370
|
+
//
|
|
3371
|
+
// {
|
|
3372
|
+
// "code": "00000",
|
|
3373
|
+
// "msg": "success",
|
|
3374
|
+
// "requestTime": 1750330653575,
|
|
3375
|
+
// "data": [
|
|
3376
|
+
// {
|
|
3377
|
+
// "category": "SPOT",
|
|
3378
|
+
// "symbol": "BTCUSDT",
|
|
3379
|
+
// "ts": "1750330651972",
|
|
3380
|
+
// "lastPrice": "104900.2",
|
|
3381
|
+
// "openPrice24h": "104321.2",
|
|
3382
|
+
// "highPrice24h": "107956.8",
|
|
3383
|
+
// "lowPrice24h": "103600.1",
|
|
3384
|
+
// "ask1Price": "104945.8",
|
|
3385
|
+
// "bid1Price": "104880.6",
|
|
3386
|
+
// "bid1Size": "0.266534",
|
|
3387
|
+
// "ask1Size": "0.014001",
|
|
3388
|
+
// "price24hPcnt": "0.00555",
|
|
3389
|
+
// "volume24h": "355.941109",
|
|
3390
|
+
// "turnover24h": "37302936.008134"
|
|
3391
|
+
// }
|
|
3392
|
+
// ]
|
|
3393
|
+
// }
|
|
3394
|
+
//
|
|
3395
|
+
// swap and future uta
|
|
3396
|
+
//
|
|
3397
|
+
// {
|
|
3398
|
+
// "code": "00000",
|
|
3399
|
+
// "msg": "success",
|
|
3400
|
+
// "requestTime": 1750332731203,
|
|
3401
|
+
// "data": [
|
|
3402
|
+
// {
|
|
3403
|
+
// "category": "USDT-FUTURES",
|
|
3404
|
+
// "symbol": "BTCUSDT",
|
|
3405
|
+
// "ts": "1750332730472",
|
|
3406
|
+
// "lastPrice": "104738",
|
|
3407
|
+
// "openPrice24h": "104374",
|
|
3408
|
+
// "highPrice24h": "105289.3",
|
|
3409
|
+
// "lowPrice24h": "103447.9",
|
|
3410
|
+
// "ask1Price": "104738",
|
|
3411
|
+
// "bid1Price": "104737.7",
|
|
3412
|
+
// "bid1Size": "2.036",
|
|
3413
|
+
// "ask1Size": "8.094",
|
|
3414
|
+
// "price24hPcnt": "0.00349",
|
|
3415
|
+
// "volume24h": "79101.6477",
|
|
3416
|
+
// "turnover24h": "8276293391.45973",
|
|
3417
|
+
// "indexPrice": "104785.956168",
|
|
3418
|
+
// "markPrice": "104738",
|
|
3419
|
+
// "fundingRate": "-0.000007",
|
|
3420
|
+
// "openInterest": "7465.5938",
|
|
3421
|
+
// "deliveryStartTime": "",
|
|
3422
|
+
// "deliveryTime": "",
|
|
3423
|
+
// "deliveryStatus": ""
|
|
3237
3424
|
// }
|
|
3238
3425
|
// ]
|
|
3239
3426
|
// }
|
|
@@ -3275,8 +3462,10 @@ class bitget extends bitget$1 {
|
|
|
3275
3462
|
* @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
3276
3463
|
* @see https://www.bitget.com/api-doc/spot/market/Get-Tickers
|
|
3277
3464
|
* @see https://www.bitget.com/api-doc/contract/market/Get-All-Symbol-Ticker
|
|
3465
|
+
* @see https://www.bitget.com/api-doc/uta/public/Tickers
|
|
3278
3466
|
* @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
3279
3467
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3468
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
3280
3469
|
* @param {string} [params.subType] *contract only* 'linear', 'inverse'
|
|
3281
3470
|
* @param {string} [params.productType] *contract only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
|
|
3282
3471
|
* @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
@@ -3299,7 +3488,17 @@ class bitget extends bitget$1 {
|
|
|
3299
3488
|
let productType = undefined;
|
|
3300
3489
|
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
3301
3490
|
// only if passedSubType && productType is undefined, then use spot
|
|
3302
|
-
|
|
3491
|
+
let uta = undefined;
|
|
3492
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchTickers', 'uta', false);
|
|
3493
|
+
if (uta) {
|
|
3494
|
+
const symbolsLength = symbols.length;
|
|
3495
|
+
if ((symbols !== undefined) && (symbolsLength === 1)) {
|
|
3496
|
+
request['symbol'] = market['id'];
|
|
3497
|
+
}
|
|
3498
|
+
request['category'] = productType;
|
|
3499
|
+
response = await this.publicUtaGetV3MarketTickers(this.extend(request, params));
|
|
3500
|
+
}
|
|
3501
|
+
else if (type === 'spot' && passedSubType === undefined) {
|
|
3303
3502
|
response = await this.publicSpotGetV2SpotMarketTickers(this.extend(request, params));
|
|
3304
3503
|
}
|
|
3305
3504
|
else {
|
|
@@ -3363,6 +3562,65 @@ class bitget extends bitget$1 {
|
|
|
3363
3562
|
// ]
|
|
3364
3563
|
// }
|
|
3365
3564
|
//
|
|
3565
|
+
// spot uta
|
|
3566
|
+
//
|
|
3567
|
+
// {
|
|
3568
|
+
// "code": "00000",
|
|
3569
|
+
// "msg": "success",
|
|
3570
|
+
// "requestTime": 1750330653575,
|
|
3571
|
+
// "data": [
|
|
3572
|
+
// {
|
|
3573
|
+
// "category": "SPOT",
|
|
3574
|
+
// "symbol": "BTCUSDT",
|
|
3575
|
+
// "ts": "1750330651972",
|
|
3576
|
+
// "lastPrice": "104900.2",
|
|
3577
|
+
// "openPrice24h": "104321.2",
|
|
3578
|
+
// "highPrice24h": "107956.8",
|
|
3579
|
+
// "lowPrice24h": "103600.1",
|
|
3580
|
+
// "ask1Price": "104945.8",
|
|
3581
|
+
// "bid1Price": "104880.6",
|
|
3582
|
+
// "bid1Size": "0.266534",
|
|
3583
|
+
// "ask1Size": "0.014001",
|
|
3584
|
+
// "price24hPcnt": "0.00555",
|
|
3585
|
+
// "volume24h": "355.941109",
|
|
3586
|
+
// "turnover24h": "37302936.008134"
|
|
3587
|
+
// }
|
|
3588
|
+
// ]
|
|
3589
|
+
// }
|
|
3590
|
+
//
|
|
3591
|
+
// swap and future uta
|
|
3592
|
+
//
|
|
3593
|
+
// {
|
|
3594
|
+
// "code": "00000",
|
|
3595
|
+
// "msg": "success",
|
|
3596
|
+
// "requestTime": 1750332731203,
|
|
3597
|
+
// "data": [
|
|
3598
|
+
// {
|
|
3599
|
+
// "category": "USDT-FUTURES",
|
|
3600
|
+
// "symbol": "BTCUSDT",
|
|
3601
|
+
// "ts": "1750332730472",
|
|
3602
|
+
// "lastPrice": "104738",
|
|
3603
|
+
// "openPrice24h": "104374",
|
|
3604
|
+
// "highPrice24h": "105289.3",
|
|
3605
|
+
// "lowPrice24h": "103447.9",
|
|
3606
|
+
// "ask1Price": "104738",
|
|
3607
|
+
// "bid1Price": "104737.7",
|
|
3608
|
+
// "bid1Size": "2.036",
|
|
3609
|
+
// "ask1Size": "8.094",
|
|
3610
|
+
// "price24hPcnt": "0.00349",
|
|
3611
|
+
// "volume24h": "79101.6477",
|
|
3612
|
+
// "turnover24h": "8276293391.45973",
|
|
3613
|
+
// "indexPrice": "104785.956168",
|
|
3614
|
+
// "markPrice": "104738",
|
|
3615
|
+
// "fundingRate": "-0.000007",
|
|
3616
|
+
// "openInterest": "7465.5938",
|
|
3617
|
+
// "deliveryStartTime": "",
|
|
3618
|
+
// "deliveryTime": "",
|
|
3619
|
+
// "deliveryStatus": ""
|
|
3620
|
+
// }
|
|
3621
|
+
// ]
|
|
3622
|
+
// }
|
|
3623
|
+
//
|
|
3366
3624
|
const data = this.safeList(response, 'data', []);
|
|
3367
3625
|
return this.parseTickers(data, symbols);
|
|
3368
3626
|
}
|
|
@@ -3449,19 +3707,53 @@ class bitget extends bitget$1 {
|
|
|
3449
3707
|
// "cTime": "1700720700342"
|
|
3450
3708
|
// }
|
|
3451
3709
|
//
|
|
3710
|
+
// uta fetchTrades
|
|
3711
|
+
//
|
|
3712
|
+
// {
|
|
3713
|
+
// "execId": "1319896716324937729",
|
|
3714
|
+
// "price": "105909.1",
|
|
3715
|
+
// "size": "6.3090",
|
|
3716
|
+
// "side": "sell",
|
|
3717
|
+
// "ts": "1750413820344"
|
|
3718
|
+
// }
|
|
3719
|
+
//
|
|
3720
|
+
// uta fetchMyTrades
|
|
3721
|
+
//
|
|
3722
|
+
// {
|
|
3723
|
+
// "execId": "1322441401010528257",
|
|
3724
|
+
// "orderId": "1322441400976261120",
|
|
3725
|
+
// "category": "USDT-FUTURES",
|
|
3726
|
+
// "symbol": "BTCUSDT",
|
|
3727
|
+
// "orderType": "market",
|
|
3728
|
+
// "side": "sell",
|
|
3729
|
+
// "execPrice": "107005.4",
|
|
3730
|
+
// "execQty": "0.0001",
|
|
3731
|
+
// "execValue": "10.7005",
|
|
3732
|
+
// "tradeScope": "taker",
|
|
3733
|
+
// "feeDetail": [{
|
|
3734
|
+
// "feeCoin": "USDT",
|
|
3735
|
+
// "fee":"0.00642032"
|
|
3736
|
+
// }],
|
|
3737
|
+
// "createdTime": "1751020520451",
|
|
3738
|
+
// "updatedTime": "1751020520458",
|
|
3739
|
+
// "execPnl": "0.00017"
|
|
3740
|
+
// }
|
|
3741
|
+
//
|
|
3452
3742
|
const marketId = this.safeString(trade, 'symbol');
|
|
3453
3743
|
const symbol = this.safeSymbol(marketId, market);
|
|
3454
|
-
const timestamp = this.
|
|
3744
|
+
const timestamp = this.safeIntegerN(trade, ['cTime', 'ts', 'createdTime']);
|
|
3455
3745
|
let fee = undefined;
|
|
3456
3746
|
const feeDetail = this.safeValue(trade, 'feeDetail');
|
|
3457
3747
|
const posMode = this.safeString(trade, 'posMode');
|
|
3458
|
-
const
|
|
3748
|
+
const category = this.safeString(trade, 'category');
|
|
3749
|
+
const isFeeStructure = (posMode !== undefined) || (category !== undefined);
|
|
3750
|
+
const feeStructure = isFeeStructure ? feeDetail[0] : feeDetail;
|
|
3459
3751
|
if (feeStructure !== undefined) {
|
|
3460
3752
|
const currencyCode = this.safeCurrencyCode(this.safeString(feeStructure, 'feeCoin'));
|
|
3461
3753
|
fee = {
|
|
3462
3754
|
'currency': currencyCode,
|
|
3463
3755
|
};
|
|
3464
|
-
const feeCostString = this.
|
|
3756
|
+
const feeCostString = this.safeString2(feeStructure, 'totalFee', 'fee');
|
|
3465
3757
|
const deduction = this.safeString(feeStructure, 'deduction') === 'yes' ? true : false;
|
|
3466
3758
|
if (deduction) {
|
|
3467
3759
|
fee['cost'] = feeCostString;
|
|
@@ -3472,15 +3764,15 @@ class bitget extends bitget$1 {
|
|
|
3472
3764
|
}
|
|
3473
3765
|
return this.safeTrade({
|
|
3474
3766
|
'info': trade,
|
|
3475
|
-
'id': this.
|
|
3767
|
+
'id': this.safeString2(trade, 'tradeId', 'execId'),
|
|
3476
3768
|
'order': this.safeString(trade, 'orderId'),
|
|
3477
3769
|
'symbol': symbol,
|
|
3478
3770
|
'side': this.safeStringLower(trade, 'side'),
|
|
3479
3771
|
'type': this.safeString(trade, 'orderType'),
|
|
3480
3772
|
'takerOrMaker': this.safeString(trade, 'tradeScope'),
|
|
3481
|
-
'price': this.
|
|
3482
|
-
'amount': this.
|
|
3483
|
-
'cost': this.
|
|
3773
|
+
'price': this.safeStringN(trade, ['priceAvg', 'price', 'execPrice']),
|
|
3774
|
+
'amount': this.safeStringN(trade, ['baseVolume', 'size', 'execQty']),
|
|
3775
|
+
'cost': this.safeStringN(trade, ['quoteVolume', 'amount', 'execValue']),
|
|
3484
3776
|
'timestamp': timestamp,
|
|
3485
3777
|
'datetime': this.iso8601(timestamp),
|
|
3486
3778
|
'fee': fee,
|
|
@@ -3494,10 +3786,12 @@ class bitget extends bitget$1 {
|
|
|
3494
3786
|
* @see https://www.bitget.com/api-doc/spot/market/Get-Market-Trades
|
|
3495
3787
|
* @see https://www.bitget.com/api-doc/contract/market/Get-Recent-Fills
|
|
3496
3788
|
* @see https://www.bitget.com/api-doc/contract/market/Get-Fills-History
|
|
3789
|
+
* @see https://www.bitget.com/api-doc/uta/public/Fills
|
|
3497
3790
|
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
3498
3791
|
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
3499
3792
|
* @param {int} [limit] the maximum amount of trades to fetch
|
|
3500
3793
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3794
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
3501
3795
|
* @param {int} [params.until] *only applies to publicSpotGetV2SpotMarketFillsHistory and publicMixGetV2MixMarketFillsHistory* the latest time in ms to fetch trades for
|
|
3502
3796
|
* @param {boolean} [params.paginate] *only applies to publicSpotGetV2SpotMarketFillsHistory and publicMixGetV2MixMarketFillsHistory* default false, when true will automatically paginate by calling this endpoint multiple times
|
|
3503
3797
|
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
@@ -3513,8 +3807,13 @@ class bitget extends bitget$1 {
|
|
|
3513
3807
|
let request = {
|
|
3514
3808
|
'symbol': market['id'],
|
|
3515
3809
|
};
|
|
3810
|
+
let uta = undefined;
|
|
3811
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchTrades', 'uta', false);
|
|
3516
3812
|
if (limit !== undefined) {
|
|
3517
|
-
if (
|
|
3813
|
+
if (uta) {
|
|
3814
|
+
request['limit'] = Math.min(limit, 100);
|
|
3815
|
+
}
|
|
3816
|
+
else if (market['contract']) {
|
|
3518
3817
|
request['limit'] = Math.min(limit, 1000);
|
|
3519
3818
|
}
|
|
3520
3819
|
else {
|
|
@@ -3523,7 +3822,20 @@ class bitget extends bitget$1 {
|
|
|
3523
3822
|
}
|
|
3524
3823
|
const options = this.safeValue(this.options, 'fetchTrades', {});
|
|
3525
3824
|
let response = undefined;
|
|
3526
|
-
|
|
3825
|
+
let productType = undefined;
|
|
3826
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
3827
|
+
if (uta) {
|
|
3828
|
+
if (productType === 'SPOT') {
|
|
3829
|
+
let marginMode = undefined;
|
|
3830
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchTrades', params);
|
|
3831
|
+
if (marginMode !== undefined) {
|
|
3832
|
+
productType = 'MARGIN';
|
|
3833
|
+
}
|
|
3834
|
+
}
|
|
3835
|
+
request['category'] = productType;
|
|
3836
|
+
response = await this.publicUtaGetV3MarketFills(this.extend(request, params));
|
|
3837
|
+
}
|
|
3838
|
+
else if (market['spot']) {
|
|
3527
3839
|
const spotOptions = this.safeValue(options, 'spot', {});
|
|
3528
3840
|
const defaultSpotMethod = this.safeString(spotOptions, 'method', 'publicSpotGetV2SpotMarketFillsHistory');
|
|
3529
3841
|
const spotMethod = this.safeString(params, 'method', defaultSpotMethod);
|
|
@@ -3544,8 +3856,6 @@ class bitget extends bitget$1 {
|
|
|
3544
3856
|
const defaultSwapMethod = this.safeString(swapOptions, 'method', 'publicMixGetV2MixMarketFillsHistory');
|
|
3545
3857
|
const swapMethod = this.safeString(params, 'method', defaultSwapMethod);
|
|
3546
3858
|
params = this.omit(params, 'method');
|
|
3547
|
-
let productType = undefined;
|
|
3548
|
-
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
3549
3859
|
request['productType'] = productType;
|
|
3550
3860
|
if (swapMethod === 'publicMixGetV2MixMarketFillsHistory') {
|
|
3551
3861
|
[request, params] = this.handleUntilOption('endTime', request, params);
|
|
@@ -3595,6 +3905,23 @@ class bitget extends bitget$1 {
|
|
|
3595
3905
|
// ]
|
|
3596
3906
|
// }
|
|
3597
3907
|
//
|
|
3908
|
+
// uta
|
|
3909
|
+
//
|
|
3910
|
+
// {
|
|
3911
|
+
// "code": "00000",
|
|
3912
|
+
// "msg": "success",
|
|
3913
|
+
// "requestTime": 1750413823980,
|
|
3914
|
+
// "data": [
|
|
3915
|
+
// {
|
|
3916
|
+
// "execId": "1319896716324937729",
|
|
3917
|
+
// "price": "105909.1",
|
|
3918
|
+
// "size": "6.3090",
|
|
3919
|
+
// "side": "sell",
|
|
3920
|
+
// "ts": "1750413820344"
|
|
3921
|
+
// }
|
|
3922
|
+
// ]
|
|
3923
|
+
// }
|
|
3924
|
+
//
|
|
3598
3925
|
const data = this.safeList(response, 'data', []);
|
|
3599
3926
|
return this.parseTrades(data, market, since, limit);
|
|
3600
3927
|
}
|
|
@@ -3786,13 +4113,15 @@ class bitget extends bitget$1 {
|
|
|
3786
4113
|
// "1399132.341"
|
|
3787
4114
|
// ]
|
|
3788
4115
|
//
|
|
4116
|
+
const inverse = this.safeBool(market, 'inverse');
|
|
4117
|
+
const volumeIndex = inverse ? 6 : 5;
|
|
3789
4118
|
return [
|
|
3790
4119
|
this.safeInteger(ohlcv, 0),
|
|
3791
4120
|
this.safeNumber(ohlcv, 1),
|
|
3792
4121
|
this.safeNumber(ohlcv, 2),
|
|
3793
4122
|
this.safeNumber(ohlcv, 3),
|
|
3794
4123
|
this.safeNumber(ohlcv, 4),
|
|
3795
|
-
this.safeNumber(ohlcv,
|
|
4124
|
+
this.safeNumber(ohlcv, volumeIndex),
|
|
3796
4125
|
];
|
|
3797
4126
|
}
|
|
3798
4127
|
/**
|
|
@@ -3805,11 +4134,13 @@ class bitget extends bitget$1 {
|
|
|
3805
4134
|
* @see https://www.bitget.com/api-doc/contract/market/Get-History-Candle-Data
|
|
3806
4135
|
* @see https://www.bitget.com/api-doc/contract/market/Get-History-Index-Candle-Data
|
|
3807
4136
|
* @see https://www.bitget.com/api-doc/contract/market/Get-History-Mark-Candle-Data
|
|
4137
|
+
* @see https://www.bitget.com/api-doc/uta/public/Get-Candle-Data
|
|
3808
4138
|
* @param {string} symbol unified symbol of the market to fetch OHLCV data for
|
|
3809
4139
|
* @param {string} timeframe the length of time each candle represents
|
|
3810
4140
|
* @param {int} [since] timestamp in ms of the earliest candle to fetch
|
|
3811
4141
|
* @param {int} [limit] the maximum amount of candles to fetch
|
|
3812
4142
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
4143
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
3813
4144
|
* @param {int} [params.until] timestamp in ms of the latest candle to fetch
|
|
3814
4145
|
* @param {boolean} [params.useHistoryEndpoint] whether to force to use historical endpoint (it has max limit of 200)
|
|
3815
4146
|
* @param {boolean} [params.useHistoryEndpointForPagination] whether to force to use historical endpoint for pagination (default true)
|
|
@@ -3831,12 +4162,22 @@ class bitget extends bitget$1 {
|
|
|
3831
4162
|
return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, limitForPagination);
|
|
3832
4163
|
}
|
|
3833
4164
|
const market = this.market(symbol);
|
|
3834
|
-
const marketType = market['spot'] ? 'spot' : 'swap';
|
|
3835
|
-
const timeframes = this.options['timeframes'][marketType];
|
|
3836
4165
|
const request = {
|
|
3837
4166
|
'symbol': market['id'],
|
|
3838
|
-
'granularity': this.safeString(timeframes, timeframe, timeframe),
|
|
3839
4167
|
};
|
|
4168
|
+
let marketType = undefined;
|
|
4169
|
+
let timeframes = undefined;
|
|
4170
|
+
let uta = undefined;
|
|
4171
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'uta', false);
|
|
4172
|
+
if (uta) {
|
|
4173
|
+
timeframes = this.options['timeframes']['uta'];
|
|
4174
|
+
request['interval'] = this.safeString(timeframes, timeframe, timeframe);
|
|
4175
|
+
}
|
|
4176
|
+
else {
|
|
4177
|
+
marketType = market['spot'] ? 'spot' : 'swap';
|
|
4178
|
+
timeframes = this.options['timeframes'][marketType];
|
|
4179
|
+
request['granularity'] = this.safeString(timeframes, timeframe, timeframe);
|
|
4180
|
+
}
|
|
3840
4181
|
const msInDay = 86400000;
|
|
3841
4182
|
const now = this.milliseconds();
|
|
3842
4183
|
const duration = this.parseTimeframe(timeframe) * 1000;
|
|
@@ -3906,24 +4247,48 @@ class bitget extends bitget$1 {
|
|
|
3906
4247
|
request['limit'] = limit;
|
|
3907
4248
|
// make request
|
|
3908
4249
|
let response = undefined;
|
|
3909
|
-
|
|
4250
|
+
let productType = undefined;
|
|
4251
|
+
let priceType = undefined;
|
|
4252
|
+
[priceType, params] = this.handleParamString(params, 'price');
|
|
4253
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
4254
|
+
if (uta) {
|
|
4255
|
+
if (priceType !== undefined) {
|
|
4256
|
+
if (priceType === 'mark') {
|
|
4257
|
+
request['type'] = 'MARK';
|
|
4258
|
+
}
|
|
4259
|
+
else if (priceType === 'index') {
|
|
4260
|
+
request['type'] = 'INDEX';
|
|
4261
|
+
}
|
|
4262
|
+
}
|
|
4263
|
+
request['category'] = productType;
|
|
4264
|
+
response = await this.publicUtaGetV3MarketCandles(this.extend(request, params));
|
|
4265
|
+
}
|
|
4266
|
+
else if (market['spot']) {
|
|
3910
4267
|
// checks if we need history endpoint
|
|
3911
4268
|
if (historicalEndpointNeeded) {
|
|
3912
4269
|
response = await this.publicSpotGetV2SpotMarketHistoryCandles(this.extend(request, params));
|
|
3913
4270
|
}
|
|
3914
4271
|
else {
|
|
4272
|
+
if (!limitDefined) {
|
|
4273
|
+
request['limit'] = 1000;
|
|
4274
|
+
limit = 1000;
|
|
4275
|
+
}
|
|
3915
4276
|
response = await this.publicSpotGetV2SpotMarketCandles(this.extend(request, params));
|
|
3916
4277
|
}
|
|
3917
4278
|
}
|
|
3918
4279
|
else {
|
|
3919
|
-
let priceType = undefined;
|
|
3920
|
-
[priceType, params] = this.handleParamString(params, 'price');
|
|
3921
|
-
let productType = undefined;
|
|
3922
|
-
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
3923
4280
|
request['productType'] = productType;
|
|
3924
4281
|
const extended = this.extend(request, params);
|
|
3925
|
-
|
|
3926
|
-
|
|
4282
|
+
if (!historicalEndpointNeeded && (priceType === 'mark' || priceType === 'index')) {
|
|
4283
|
+
if (!limitDefined) {
|
|
4284
|
+
extended['limit'] = 1000;
|
|
4285
|
+
limit = 1000;
|
|
4286
|
+
}
|
|
4287
|
+
// Recent endpoint for mark/index prices
|
|
4288
|
+
// https://www.bitget.com/api-doc/contract/market/Get-Candle-Data
|
|
4289
|
+
response = await this.publicMixGetV2MixMarketCandles(this.extend({ 'kLineType': priceType }, extended));
|
|
4290
|
+
}
|
|
4291
|
+
else if (priceType === 'mark') {
|
|
3927
4292
|
response = await this.publicMixGetV2MixMarketHistoryMarkCandles(extended);
|
|
3928
4293
|
}
|
|
3929
4294
|
else if (priceType === 'index') {
|
|
@@ -3934,6 +4299,10 @@ class bitget extends bitget$1 {
|
|
|
3934
4299
|
response = await this.publicMixGetV2MixMarketHistoryCandles(extended);
|
|
3935
4300
|
}
|
|
3936
4301
|
else {
|
|
4302
|
+
if (!limitDefined) {
|
|
4303
|
+
extended['limit'] = 1000;
|
|
4304
|
+
limit = 1000;
|
|
4305
|
+
}
|
|
3937
4306
|
response = await this.publicMixGetV2MixMarketCandles(extended);
|
|
3938
4307
|
}
|
|
3939
4308
|
}
|
|
@@ -3955,8 +4324,10 @@ class bitget extends bitget$1 {
|
|
|
3955
4324
|
* @see https://www.bitget.com/api-doc/margin/isolated/account/Get-Isolated-Assets
|
|
3956
4325
|
* @see https://bitgetlimited.github.io/apidoc/en/margin/#get-cross-assets
|
|
3957
4326
|
* @see https://bitgetlimited.github.io/apidoc/en/margin/#get-isolated-assets
|
|
4327
|
+
* @see https://www.bitget.com/api-doc/uta/account/Get-Account
|
|
3958
4328
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3959
4329
|
* @param {string} [params.productType] *contract only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
|
|
4330
|
+
* @param {string} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
3960
4331
|
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
|
|
3961
4332
|
*/
|
|
3962
4333
|
async fetchBalance(params = {}) {
|
|
@@ -3965,9 +4336,17 @@ class bitget extends bitget$1 {
|
|
|
3965
4336
|
let marketType = undefined;
|
|
3966
4337
|
let marginMode = undefined;
|
|
3967
4338
|
let response = undefined;
|
|
4339
|
+
let uta = undefined;
|
|
4340
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchBalance', 'uta', false);
|
|
3968
4341
|
[marketType, params] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);
|
|
3969
4342
|
[marginMode, params] = this.handleMarginModeAndParams('fetchBalance', params);
|
|
3970
|
-
if (
|
|
4343
|
+
if (uta) {
|
|
4344
|
+
response = await this.privateUtaGetV3AccountAssets(this.extend(request, params));
|
|
4345
|
+
const results = this.safeDict(response, 'data', {});
|
|
4346
|
+
const assets = this.safeList(results, 'assets', []);
|
|
4347
|
+
return this.parseUtaBalance(assets);
|
|
4348
|
+
}
|
|
4349
|
+
else if ((marketType === 'swap') || (marketType === 'future')) {
|
|
3971
4350
|
let productType = undefined;
|
|
3972
4351
|
[productType, params] = this.handleProductTypeAndParams(undefined, params);
|
|
3973
4352
|
request['productType'] = productType;
|
|
@@ -4072,9 +4451,67 @@ class bitget extends bitget$1 {
|
|
|
4072
4451
|
// ]
|
|
4073
4452
|
// }
|
|
4074
4453
|
//
|
|
4454
|
+
// uta
|
|
4455
|
+
//
|
|
4456
|
+
// {
|
|
4457
|
+
// "code": "00000",
|
|
4458
|
+
// "msg": "success",
|
|
4459
|
+
// "requestTime": 1749980065089,
|
|
4460
|
+
// "data": {
|
|
4461
|
+
// "accountEquity": "11.13919278",
|
|
4462
|
+
// "usdtEquity": "11.13921165",
|
|
4463
|
+
// "btcEquity": "0.00011256",
|
|
4464
|
+
// "unrealisedPnl": "0",
|
|
4465
|
+
// "usdtUnrealisedPnl": "0",
|
|
4466
|
+
// "btcUnrealizedPnl": "0",
|
|
4467
|
+
// "effEquity": "6.19299777",
|
|
4468
|
+
// "mmr": "0",
|
|
4469
|
+
// "imr": "0",
|
|
4470
|
+
// "mgnRatio": "0",
|
|
4471
|
+
// "positionMgnRatio": "0",
|
|
4472
|
+
// "assets": [
|
|
4473
|
+
// {
|
|
4474
|
+
// "coin": "USDT",
|
|
4475
|
+
// "equity": "6.19300826",
|
|
4476
|
+
// "usdValue": "6.19299777",
|
|
4477
|
+
// "balance": "6.19300826",
|
|
4478
|
+
// "available": "6.19300826",
|
|
4479
|
+
// "debt": "0",
|
|
4480
|
+
// "locked": "0"
|
|
4481
|
+
// }
|
|
4482
|
+
// ]
|
|
4483
|
+
// }
|
|
4484
|
+
// }
|
|
4485
|
+
//
|
|
4075
4486
|
const data = this.safeValue(response, 'data', []);
|
|
4076
4487
|
return this.parseBalance(data);
|
|
4077
4488
|
}
|
|
4489
|
+
parseUtaBalance(balance) {
|
|
4490
|
+
const result = { 'info': balance };
|
|
4491
|
+
//
|
|
4492
|
+
// {
|
|
4493
|
+
// "coin": "USDT",
|
|
4494
|
+
// "equity": "6.19300826",
|
|
4495
|
+
// "usdValue": "6.19299777",
|
|
4496
|
+
// "balance": "6.19300826",
|
|
4497
|
+
// "available": "6.19300826",
|
|
4498
|
+
// "debt": "0",
|
|
4499
|
+
// "locked": "0"
|
|
4500
|
+
// }
|
|
4501
|
+
//
|
|
4502
|
+
for (let i = 0; i < balance.length; i++) {
|
|
4503
|
+
const entry = balance[i];
|
|
4504
|
+
const account = this.account();
|
|
4505
|
+
const currencyId = this.safeString(entry, 'coin');
|
|
4506
|
+
const code = this.safeCurrencyCode(currencyId);
|
|
4507
|
+
account['debt'] = this.safeString(entry, 'debt');
|
|
4508
|
+
account['used'] = this.safeString(entry, 'locked');
|
|
4509
|
+
account['free'] = this.safeString(entry, 'available');
|
|
4510
|
+
account['total'] = this.safeString(entry, 'balance');
|
|
4511
|
+
result[code] = account;
|
|
4512
|
+
}
|
|
4513
|
+
return this.safeBalance(result);
|
|
4514
|
+
}
|
|
4078
4515
|
parseBalance(balance) {
|
|
4079
4516
|
const result = { 'info': balance };
|
|
4080
4517
|
//
|
|
@@ -4213,7 +4650,7 @@ class bitget extends bitget$1 {
|
|
|
4213
4650
|
// },
|
|
4214
4651
|
// ]
|
|
4215
4652
|
//
|
|
4216
|
-
// spot, swap, future
|
|
4653
|
+
// spot, swap, future, spot margin and uta: cancelOrder, cancelOrders, cancelAllOrders
|
|
4217
4654
|
//
|
|
4218
4655
|
// {
|
|
4219
4656
|
// "orderId": "1098758604547850241",
|
|
@@ -4342,6 +4779,66 @@ class bitget extends bitget$1 {
|
|
|
4342
4779
|
// "stopLossTriggerType": "fill_price",
|
|
4343
4780
|
// }
|
|
4344
4781
|
//
|
|
4782
|
+
// uta: fetchOrder, fetchOpenOrders, fetchCanceledAndClosedOrders
|
|
4783
|
+
//
|
|
4784
|
+
// {
|
|
4785
|
+
// "orderId": "1320244799629316096",
|
|
4786
|
+
// "clientOid": "1320244799633510400",
|
|
4787
|
+
// "category": "USDT-FUTURES",
|
|
4788
|
+
// "symbol": "BTCUSDT",
|
|
4789
|
+
// "orderType": "limit",
|
|
4790
|
+
// "side": "buy",
|
|
4791
|
+
// "price": "50000",
|
|
4792
|
+
// "qty": "0.001",
|
|
4793
|
+
// "amount": "0",
|
|
4794
|
+
// "cumExecQty": "0",
|
|
4795
|
+
// "cumExecValue": "0",
|
|
4796
|
+
// "avgPrice": "0",
|
|
4797
|
+
// "timeInForce": "gtc",
|
|
4798
|
+
// "orderStatus": "live",
|
|
4799
|
+
// "posSide": "long",
|
|
4800
|
+
// "holdMode": "hedge_mode",
|
|
4801
|
+
// "reduceOnly": "NO",
|
|
4802
|
+
// "feeDetail": [{
|
|
4803
|
+
// "feeCoin": "",
|
|
4804
|
+
// "fee": ""
|
|
4805
|
+
// }],
|
|
4806
|
+
// "createdTime": "1750496809871",
|
|
4807
|
+
// "updatedTime": "1750496809886",
|
|
4808
|
+
// "cancelReason": "",
|
|
4809
|
+
// "execType": "normal",
|
|
4810
|
+
// "stpMode": "none",
|
|
4811
|
+
// "tpTriggerBy": null,
|
|
4812
|
+
// "slTriggerBy": null,
|
|
4813
|
+
// "takeProfit": null,
|
|
4814
|
+
// "stopLoss": null,
|
|
4815
|
+
// "tpOrderType": null,
|
|
4816
|
+
// "slOrderType": null,
|
|
4817
|
+
// "tpLimitPrice": null,
|
|
4818
|
+
// "slLimitPrice": null
|
|
4819
|
+
// }
|
|
4820
|
+
//
|
|
4821
|
+
// uta trigger: fetchClosedOrders, fetchCanceledOrders
|
|
4822
|
+
//
|
|
4823
|
+
// {
|
|
4824
|
+
// "orderId": "1330984742276198400",
|
|
4825
|
+
// "clientOid": "1330984742276198400",
|
|
4826
|
+
// "symbol": "BTCUSDT",
|
|
4827
|
+
// "category": "USDT-FUTURES",
|
|
4828
|
+
// "qty": "0.001",
|
|
4829
|
+
// "posSide": "long",
|
|
4830
|
+
// "tpTriggerBy": "market",
|
|
4831
|
+
// "slTriggerBy": "mark",
|
|
4832
|
+
// "takeProfit": "",
|
|
4833
|
+
// "stopLoss": "112000",
|
|
4834
|
+
// "tpOrderType": "market",
|
|
4835
|
+
// "slOrderType": "limit",
|
|
4836
|
+
// "tpLimitPrice": "",
|
|
4837
|
+
// "slLimitPrice": "111000",
|
|
4838
|
+
// "createdTime": "1753057411736",
|
|
4839
|
+
// "updatedTime": "1753058267412"
|
|
4840
|
+
// }
|
|
4841
|
+
//
|
|
4345
4842
|
const errorMessage = this.safeString(order, 'errorMsg');
|
|
4346
4843
|
if (errorMessage !== undefined) {
|
|
4347
4844
|
return this.safeOrder({
|
|
@@ -4351,17 +4848,17 @@ class bitget extends bitget$1 {
|
|
|
4351
4848
|
'status': 'rejected',
|
|
4352
4849
|
}, market);
|
|
4353
4850
|
}
|
|
4354
|
-
const
|
|
4851
|
+
const posSide = this.safeString(order, 'posSide');
|
|
4852
|
+
const isContractOrder = (posSide !== undefined);
|
|
4355
4853
|
let marketType = isContractOrder ? 'contract' : 'spot';
|
|
4356
4854
|
if (market !== undefined) {
|
|
4357
4855
|
marketType = market['type'];
|
|
4358
4856
|
}
|
|
4359
4857
|
const marketId = this.safeString(order, 'symbol');
|
|
4360
4858
|
market = this.safeMarket(marketId, market, undefined, marketType);
|
|
4361
|
-
const timestamp = this.
|
|
4362
|
-
const updateTimestamp = this.
|
|
4363
|
-
|
|
4364
|
-
rawStatus = this.safeString(order, 'planStatus', rawStatus);
|
|
4859
|
+
const timestamp = this.safeIntegerN(order, ['cTime', 'ctime', 'createdTime']);
|
|
4860
|
+
const updateTimestamp = this.safeInteger2(order, 'uTime', 'updatedTime');
|
|
4861
|
+
const rawStatus = this.safeStringN(order, ['status', 'state', 'orderStatus', 'planStatus']);
|
|
4365
4862
|
let fee = undefined;
|
|
4366
4863
|
const feeCostString = this.safeString(order, 'fee');
|
|
4367
4864
|
if (feeCostString !== undefined) {
|
|
@@ -4372,24 +4869,35 @@ class bitget extends bitget$1 {
|
|
|
4372
4869
|
};
|
|
4373
4870
|
}
|
|
4374
4871
|
const feeDetail = this.safeValue(order, 'feeDetail');
|
|
4375
|
-
|
|
4376
|
-
|
|
4377
|
-
const
|
|
4378
|
-
|
|
4379
|
-
for (let i = 0; i < feeValues.length; i++) {
|
|
4380
|
-
const feeValue = feeValues[i];
|
|
4381
|
-
if (this.safeValue(feeValue, 'feeCoinCode') !== undefined) {
|
|
4382
|
-
feeObject = feeValue;
|
|
4383
|
-
break;
|
|
4384
|
-
}
|
|
4385
|
-
}
|
|
4872
|
+
const uta = this.safeString(order, 'category') !== undefined;
|
|
4873
|
+
if (uta) {
|
|
4874
|
+
const feeResult = this.safeDict(feeDetail, 0, {});
|
|
4875
|
+
const utaFee = this.safeString(feeResult, 'fee');
|
|
4386
4876
|
fee = {
|
|
4387
|
-
'cost': this.parseNumber(Precise["default"].stringNeg(
|
|
4388
|
-
'currency':
|
|
4877
|
+
'cost': this.parseNumber(Precise["default"].stringNeg(utaFee)),
|
|
4878
|
+
'currency': market['settle'],
|
|
4389
4879
|
};
|
|
4390
4880
|
}
|
|
4881
|
+
else {
|
|
4882
|
+
if (feeDetail !== undefined) {
|
|
4883
|
+
const parsedFeeDetail = JSON.parse(feeDetail);
|
|
4884
|
+
const feeValues = Object.values(parsedFeeDetail);
|
|
4885
|
+
let feeObject = undefined;
|
|
4886
|
+
for (let i = 0; i < feeValues.length; i++) {
|
|
4887
|
+
const feeValue = feeValues[i];
|
|
4888
|
+
if (this.safeValue(feeValue, 'feeCoinCode') !== undefined) {
|
|
4889
|
+
feeObject = feeValue;
|
|
4890
|
+
break;
|
|
4891
|
+
}
|
|
4892
|
+
}
|
|
4893
|
+
fee = {
|
|
4894
|
+
'cost': this.parseNumber(Precise["default"].stringNeg(this.safeString(feeObject, 'totalFee'))),
|
|
4895
|
+
'currency': this.safeCurrencyCode(this.safeString(feeObject, 'feeCoinCode')),
|
|
4896
|
+
};
|
|
4897
|
+
}
|
|
4898
|
+
}
|
|
4391
4899
|
let postOnly = undefined;
|
|
4392
|
-
let timeInForce = this.
|
|
4900
|
+
let timeInForce = this.safeStringUpper2(order, 'force', 'timeInForce');
|
|
4393
4901
|
if (timeInForce === 'POST_ONLY') {
|
|
4394
4902
|
postOnly = true;
|
|
4395
4903
|
timeInForce = 'PO';
|
|
@@ -4408,7 +4916,7 @@ class bitget extends bitget$1 {
|
|
|
4408
4916
|
average = this.safeString(order, 'basePrice');
|
|
4409
4917
|
}
|
|
4410
4918
|
else {
|
|
4411
|
-
price = this.
|
|
4919
|
+
price = this.safeStringN(order, ['price', 'executePrice', 'slLimitPrice', 'tpLimitPrice']);
|
|
4412
4920
|
average = this.safeString(order, 'priceAvg');
|
|
4413
4921
|
}
|
|
4414
4922
|
let size = undefined;
|
|
@@ -4420,8 +4928,8 @@ class bitget extends bitget$1 {
|
|
|
4420
4928
|
filled = this.safeString(order, 'size');
|
|
4421
4929
|
}
|
|
4422
4930
|
else {
|
|
4423
|
-
size = this.
|
|
4424
|
-
filled = this.
|
|
4931
|
+
size = this.safeString2(order, 'size', 'qty');
|
|
4932
|
+
filled = this.safeString2(order, 'baseVolume', 'cumExecQty');
|
|
4425
4933
|
}
|
|
4426
4934
|
let side = this.safeString(order, 'side');
|
|
4427
4935
|
const posMode = this.safeString(order, 'posMode');
|
|
@@ -4457,8 +4965,8 @@ class bitget extends bitget$1 {
|
|
|
4457
4965
|
'postOnly': postOnly,
|
|
4458
4966
|
'reduceOnly': reduceOnly,
|
|
4459
4967
|
'triggerPrice': this.safeNumber(order, 'triggerPrice'),
|
|
4460
|
-
'takeProfitPrice': this.
|
|
4461
|
-
'stopLossPrice': this.
|
|
4968
|
+
'takeProfitPrice': this.safeNumberN(order, ['presetStopSurplusPrice', 'stopSurplusTriggerPrice', 'takeProfit']),
|
|
4969
|
+
'stopLossPrice': this.safeNumberN(order, ['presetStopLossPrice', 'stopLossTriggerPrice', 'stopLoss']),
|
|
4462
4970
|
'status': this.parseOrderStatus(rawStatus),
|
|
4463
4971
|
'fee': fee,
|
|
4464
4972
|
'trades': undefined,
|
|
@@ -4498,6 +5006,8 @@ class bitget extends bitget$1 {
|
|
|
4498
5006
|
* @see https://www.bitget.com/api-doc/contract/plan/Place-Plan-Order
|
|
4499
5007
|
* @see https://www.bitget.com/api-doc/margin/cross/trade/Cross-Place-Order
|
|
4500
5008
|
* @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Place-Order
|
|
5009
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Place-Order
|
|
5010
|
+
* @see https://www.bitget.com/api-doc/uta/strategy/Place-Strategy-Order
|
|
4501
5011
|
* @param {string} symbol unified symbol of the market to create an order in
|
|
4502
5012
|
* @param {string} type 'market' or 'limit'
|
|
4503
5013
|
* @param {string} side 'buy' or 'sell'
|
|
@@ -4526,6 +5036,8 @@ class bitget extends bitget$1 {
|
|
|
4526
5036
|
* @param {boolean} [params.oneWayMode] *swap and future only* required to set this to true in one_way_mode and you can leave this as undefined in hedge_mode, can adjust the mode using the setPositionMode() method
|
|
4527
5037
|
* @param {bool} [params.hedged] *swap and future only* true for hedged mode, false for one way mode, default is false
|
|
4528
5038
|
* @param {bool} [params.reduceOnly] true or false whether the order is reduce-only
|
|
5039
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
5040
|
+
* @param {string} [params.posSide] *uta only* hedged two-way position side, long or short
|
|
4529
5041
|
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
4530
5042
|
*/
|
|
4531
5043
|
async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
|
|
@@ -4542,31 +5054,44 @@ class bitget extends bitget$1 {
|
|
|
4542
5054
|
const isStopLossTriggerOrder = stopLossTriggerPrice !== undefined;
|
|
4543
5055
|
const isTakeProfitTriggerOrder = takeProfitTriggerPrice !== undefined;
|
|
4544
5056
|
const isStopLossOrTakeProfitTrigger = isStopLossTriggerOrder || isTakeProfitTriggerOrder;
|
|
4545
|
-
const request = this.createOrderRequest(symbol, type, side, amount, price, params);
|
|
4546
5057
|
let response = undefined;
|
|
4547
|
-
|
|
4548
|
-
|
|
4549
|
-
|
|
4550
|
-
|
|
4551
|
-
|
|
4552
|
-
response = await this.
|
|
4553
|
-
}
|
|
4554
|
-
else if (marginMode === 'cross') {
|
|
4555
|
-
response = await this.privateMarginPostV2MarginCrossedPlaceOrder(request);
|
|
5058
|
+
let uta = undefined;
|
|
5059
|
+
[uta, params] = this.handleOptionAndParams(params, 'createOrder', 'uta', false);
|
|
5060
|
+
if (uta) {
|
|
5061
|
+
const request = this.createUtaOrderRequest(symbol, type, side, amount, price, params);
|
|
5062
|
+
if (isStopLossOrTakeProfitTrigger) {
|
|
5063
|
+
response = await this.privateUtaPostV3TradePlaceStrategyOrder(request);
|
|
4556
5064
|
}
|
|
4557
5065
|
else {
|
|
4558
|
-
response = await this.
|
|
5066
|
+
response = await this.privateUtaPostV3TradePlaceOrder(request);
|
|
4559
5067
|
}
|
|
4560
5068
|
}
|
|
4561
5069
|
else {
|
|
4562
|
-
|
|
4563
|
-
|
|
4564
|
-
|
|
4565
|
-
|
|
4566
|
-
|
|
5070
|
+
const request = this.createOrderRequest(symbol, type, side, amount, price, params);
|
|
5071
|
+
if (market['spot']) {
|
|
5072
|
+
if (isTriggerOrder) {
|
|
5073
|
+
response = await this.privateSpotPostV2SpotTradePlacePlanOrder(request);
|
|
5074
|
+
}
|
|
5075
|
+
else if (marginMode === 'isolated') {
|
|
5076
|
+
response = await this.privateMarginPostV2MarginIsolatedPlaceOrder(request);
|
|
5077
|
+
}
|
|
5078
|
+
else if (marginMode === 'cross') {
|
|
5079
|
+
response = await this.privateMarginPostV2MarginCrossedPlaceOrder(request);
|
|
5080
|
+
}
|
|
5081
|
+
else {
|
|
5082
|
+
response = await this.privateSpotPostV2SpotTradePlaceOrder(request);
|
|
5083
|
+
}
|
|
4567
5084
|
}
|
|
4568
5085
|
else {
|
|
4569
|
-
|
|
5086
|
+
if (isTriggerOrder || isTrailingPercentOrder) {
|
|
5087
|
+
response = await this.privateMixPostV2MixOrderPlacePlanOrder(request);
|
|
5088
|
+
}
|
|
5089
|
+
else if (isStopLossOrTakeProfitTrigger) {
|
|
5090
|
+
response = await this.privateMixPostV2MixOrderPlaceTpslOrder(request);
|
|
5091
|
+
}
|
|
5092
|
+
else {
|
|
5093
|
+
response = await this.privateMixPostV2MixOrderPlaceOrder(request);
|
|
5094
|
+
}
|
|
4570
5095
|
}
|
|
4571
5096
|
}
|
|
4572
5097
|
//
|
|
@@ -4583,6 +5108,133 @@ class bitget extends bitget$1 {
|
|
|
4583
5108
|
const data = this.safeDict(response, 'data', {});
|
|
4584
5109
|
return this.parseOrder(data, market);
|
|
4585
5110
|
}
|
|
5111
|
+
createUtaOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
|
|
5112
|
+
const market = this.market(symbol);
|
|
5113
|
+
let productType = undefined;
|
|
5114
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
5115
|
+
if (productType === 'SPOT') {
|
|
5116
|
+
let marginMode = undefined;
|
|
5117
|
+
[marginMode, params] = this.handleMarginModeAndParams('createOrder', params);
|
|
5118
|
+
if (marginMode !== undefined) {
|
|
5119
|
+
productType = 'MARGIN';
|
|
5120
|
+
}
|
|
5121
|
+
}
|
|
5122
|
+
const request = {
|
|
5123
|
+
'category': productType,
|
|
5124
|
+
'symbol': market['id'],
|
|
5125
|
+
'qty': this.amountToPrecision(symbol, amount),
|
|
5126
|
+
'side': side,
|
|
5127
|
+
};
|
|
5128
|
+
const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId');
|
|
5129
|
+
if (clientOrderId !== undefined) {
|
|
5130
|
+
request['clientOid'] = clientOrderId;
|
|
5131
|
+
params = this.omit(params, 'clientOrderId');
|
|
5132
|
+
}
|
|
5133
|
+
const stopLossTriggerPrice = this.safeNumber(params, 'stopLossPrice');
|
|
5134
|
+
const takeProfitTriggerPrice = this.safeNumber(params, 'takeProfitPrice');
|
|
5135
|
+
const stopLoss = this.safeValue(params, 'stopLoss');
|
|
5136
|
+
const takeProfit = this.safeValue(params, 'takeProfit');
|
|
5137
|
+
const isStopLoss = stopLoss !== undefined;
|
|
5138
|
+
const isTakeProfit = takeProfit !== undefined;
|
|
5139
|
+
const isStopLossTrigger = stopLossTriggerPrice !== undefined;
|
|
5140
|
+
const isTakeProfitTrigger = takeProfitTriggerPrice !== undefined;
|
|
5141
|
+
const isStopLossOrTakeProfitTrigger = isStopLossTrigger || isTakeProfitTrigger;
|
|
5142
|
+
if (isStopLossOrTakeProfitTrigger) {
|
|
5143
|
+
if (isStopLossTrigger) {
|
|
5144
|
+
const slType = this.safeString(params, 'slTriggerBy', 'mark');
|
|
5145
|
+
request['slTriggerBy'] = slType;
|
|
5146
|
+
request['stopLoss'] = this.priceToPrecision(symbol, stopLossTriggerPrice);
|
|
5147
|
+
if (price !== undefined) {
|
|
5148
|
+
request['slLimitPrice'] = this.priceToPrecision(symbol, price);
|
|
5149
|
+
request['slOrderType'] = this.safeString(params, 'slOrderType', 'limit');
|
|
5150
|
+
}
|
|
5151
|
+
else {
|
|
5152
|
+
request['slOrderType'] = this.safeString(params, 'slOrderType', 'market');
|
|
5153
|
+
}
|
|
5154
|
+
}
|
|
5155
|
+
else if (isTakeProfitTrigger) {
|
|
5156
|
+
const tpType = this.safeString(params, 'tpTriggerBy', 'mark');
|
|
5157
|
+
request['tpTriggerBy'] = tpType;
|
|
5158
|
+
request['takeProfit'] = this.priceToPrecision(symbol, takeProfitTriggerPrice);
|
|
5159
|
+
if (price !== undefined) {
|
|
5160
|
+
request['tpLimitPrice'] = this.priceToPrecision(symbol, price);
|
|
5161
|
+
request['tpOrderType'] = this.safeString(params, 'tpOrderType', 'limit');
|
|
5162
|
+
}
|
|
5163
|
+
else {
|
|
5164
|
+
request['tpOrderType'] = this.safeString(params, 'tpOrderType', 'market');
|
|
5165
|
+
}
|
|
5166
|
+
}
|
|
5167
|
+
params = this.omit(params, ['stopLossPrice', 'takeProfitPrice']);
|
|
5168
|
+
}
|
|
5169
|
+
else {
|
|
5170
|
+
if (isStopLoss) {
|
|
5171
|
+
const slTriggerPrice = this.safeNumber2(stopLoss, 'triggerPrice', 'stopPrice');
|
|
5172
|
+
const slLimitPrice = this.safeNumber(stopLoss, 'price');
|
|
5173
|
+
request['stopLoss'] = this.priceToPrecision(symbol, slTriggerPrice);
|
|
5174
|
+
if (slLimitPrice !== undefined) {
|
|
5175
|
+
request['slLimitPrice'] = this.priceToPrecision(symbol, slLimitPrice);
|
|
5176
|
+
request['slOrderType'] = this.safeString(params, 'slOrderType', 'limit');
|
|
5177
|
+
}
|
|
5178
|
+
else {
|
|
5179
|
+
request['slOrderType'] = this.safeString(params, 'slOrderType', 'market');
|
|
5180
|
+
}
|
|
5181
|
+
}
|
|
5182
|
+
if (isTakeProfit) {
|
|
5183
|
+
const tpTriggerPrice = this.safeNumber2(takeProfit, 'triggerPrice', 'stopPrice');
|
|
5184
|
+
const tpLimitPrice = this.safeNumber(takeProfit, 'price');
|
|
5185
|
+
request['takeProfit'] = this.priceToPrecision(symbol, tpTriggerPrice);
|
|
5186
|
+
if (tpLimitPrice !== undefined) {
|
|
5187
|
+
request['tpLimitPrice'] = this.priceToPrecision(symbol, tpLimitPrice);
|
|
5188
|
+
request['tpOrderType'] = this.safeString(params, 'tpOrderType', 'limit');
|
|
5189
|
+
}
|
|
5190
|
+
else {
|
|
5191
|
+
request['tpOrderType'] = this.safeString(params, 'tpOrderType', 'market');
|
|
5192
|
+
}
|
|
5193
|
+
}
|
|
5194
|
+
const isMarketOrder = type === 'market';
|
|
5195
|
+
if (!isMarketOrder) {
|
|
5196
|
+
request['price'] = this.priceToPrecision(symbol, price);
|
|
5197
|
+
}
|
|
5198
|
+
request['orderType'] = type;
|
|
5199
|
+
const exchangeSpecificTifParam = this.safeString(params, 'timeInForce');
|
|
5200
|
+
let postOnly = undefined;
|
|
5201
|
+
[postOnly, params] = this.handlePostOnly(isMarketOrder, exchangeSpecificTifParam === 'post_only', params);
|
|
5202
|
+
const defaultTimeInForce = this.safeStringUpper(this.options, 'defaultTimeInForce');
|
|
5203
|
+
const timeInForce = this.safeStringUpper(params, 'timeInForce', defaultTimeInForce);
|
|
5204
|
+
if (postOnly) {
|
|
5205
|
+
request['timeInForce'] = 'post_only';
|
|
5206
|
+
}
|
|
5207
|
+
else if (timeInForce === 'GTC') {
|
|
5208
|
+
request['timeInForce'] = 'gtc';
|
|
5209
|
+
}
|
|
5210
|
+
else if (timeInForce === 'FOK') {
|
|
5211
|
+
request['timeInForce'] = 'fok';
|
|
5212
|
+
}
|
|
5213
|
+
else if (timeInForce === 'IOC') {
|
|
5214
|
+
request['timeInForce'] = 'ioc';
|
|
5215
|
+
}
|
|
5216
|
+
}
|
|
5217
|
+
const reduceOnly = this.safeBool(params, 'reduceOnly', false);
|
|
5218
|
+
let hedged = undefined;
|
|
5219
|
+
[hedged, params] = this.handleParamBool(params, 'hedged', false);
|
|
5220
|
+
if (reduceOnly) {
|
|
5221
|
+
if (hedged || isStopLossOrTakeProfitTrigger) {
|
|
5222
|
+
const reduceOnlyPosSide = (side === 'sell') ? 'long' : 'short';
|
|
5223
|
+
request['posSide'] = reduceOnlyPosSide;
|
|
5224
|
+
}
|
|
5225
|
+
else if (!isStopLossOrTakeProfitTrigger) {
|
|
5226
|
+
request['reduceOnly'] = 'yes';
|
|
5227
|
+
}
|
|
5228
|
+
}
|
|
5229
|
+
else {
|
|
5230
|
+
if (hedged) {
|
|
5231
|
+
const posSide = (side === 'buy') ? 'long' : 'short';
|
|
5232
|
+
request['posSide'] = posSide;
|
|
5233
|
+
}
|
|
5234
|
+
}
|
|
5235
|
+
params = this.omit(params, ['stopLoss', 'takeProfit', 'postOnly', 'reduceOnly', 'hedged']);
|
|
5236
|
+
return this.extend(request, params);
|
|
5237
|
+
}
|
|
4586
5238
|
createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
|
|
4587
5239
|
const market = this.market(symbol);
|
|
4588
5240
|
let marketType = undefined;
|
|
@@ -4666,17 +5318,17 @@ class bitget extends bitget$1 {
|
|
|
4666
5318
|
request['executePrice'] = this.priceToPrecision(symbol, price);
|
|
4667
5319
|
}
|
|
4668
5320
|
if (isStopLoss) {
|
|
4669
|
-
const slTriggerPrice = this.
|
|
5321
|
+
const slTriggerPrice = this.safeString2(stopLoss, 'triggerPrice', 'stopPrice');
|
|
4670
5322
|
request['stopLossTriggerPrice'] = this.priceToPrecision(symbol, slTriggerPrice);
|
|
4671
|
-
const slPrice = this.
|
|
5323
|
+
const slPrice = this.safeString(stopLoss, 'price');
|
|
4672
5324
|
request['stopLossExecutePrice'] = this.priceToPrecision(symbol, slPrice);
|
|
4673
5325
|
const slType = this.safeString(stopLoss, 'type', 'mark_price');
|
|
4674
5326
|
request['stopLossTriggerType'] = slType;
|
|
4675
5327
|
}
|
|
4676
5328
|
if (isTakeProfit) {
|
|
4677
|
-
const tpTriggerPrice = this.
|
|
5329
|
+
const tpTriggerPrice = this.safeString2(takeProfit, 'triggerPrice', 'stopPrice');
|
|
4678
5330
|
request['stopSurplusTriggerPrice'] = this.priceToPrecision(symbol, tpTriggerPrice);
|
|
4679
|
-
const tpPrice = this.
|
|
5331
|
+
const tpPrice = this.safeString(takeProfit, 'price');
|
|
4680
5332
|
request['stopSurplusExecutePrice'] = this.priceToPrecision(symbol, tpPrice);
|
|
4681
5333
|
const tpType = this.safeString(takeProfit, 'type', 'mark_price');
|
|
4682
5334
|
request['stopSurplusTriggerType'] = tpType;
|
|
@@ -4805,6 +5457,60 @@ class bitget extends bitget$1 {
|
|
|
4805
5457
|
}
|
|
4806
5458
|
return this.extend(request, params);
|
|
4807
5459
|
}
|
|
5460
|
+
async createUtaOrders(orders, params = {}) {
|
|
5461
|
+
await this.loadMarkets();
|
|
5462
|
+
const ordersRequests = [];
|
|
5463
|
+
let symbol = undefined;
|
|
5464
|
+
let marginMode = undefined;
|
|
5465
|
+
for (let i = 0; i < orders.length; i++) {
|
|
5466
|
+
const rawOrder = orders[i];
|
|
5467
|
+
const marketId = this.safeString(rawOrder, 'symbol');
|
|
5468
|
+
if (symbol === undefined) {
|
|
5469
|
+
symbol = marketId;
|
|
5470
|
+
}
|
|
5471
|
+
else {
|
|
5472
|
+
if (symbol !== marketId) {
|
|
5473
|
+
throw new errors.BadRequest(this.id + ' createOrders() requires all orders to have the same symbol');
|
|
5474
|
+
}
|
|
5475
|
+
}
|
|
5476
|
+
const type = this.safeString(rawOrder, 'type');
|
|
5477
|
+
const side = this.safeString(rawOrder, 'side');
|
|
5478
|
+
const amount = this.safeValue(rawOrder, 'amount');
|
|
5479
|
+
const price = this.safeValue(rawOrder, 'price');
|
|
5480
|
+
const orderParams = this.safeValue(rawOrder, 'params', {});
|
|
5481
|
+
const marginResult = this.handleMarginModeAndParams('createOrders', orderParams);
|
|
5482
|
+
const currentMarginMode = marginResult[0];
|
|
5483
|
+
if (currentMarginMode !== undefined) {
|
|
5484
|
+
if (marginMode === undefined) {
|
|
5485
|
+
marginMode = currentMarginMode;
|
|
5486
|
+
}
|
|
5487
|
+
else {
|
|
5488
|
+
if (marginMode !== currentMarginMode) {
|
|
5489
|
+
throw new errors.BadRequest(this.id + ' createOrders() requires all orders to have the same margin mode (isolated or cross)');
|
|
5490
|
+
}
|
|
5491
|
+
}
|
|
5492
|
+
}
|
|
5493
|
+
const orderRequest = this.createUtaOrderRequest(marketId, type, side, amount, price, orderParams);
|
|
5494
|
+
ordersRequests.push(orderRequest);
|
|
5495
|
+
}
|
|
5496
|
+
const market = this.market(symbol);
|
|
5497
|
+
const response = await this.privateUtaPostV3TradePlaceBatch(ordersRequests);
|
|
5498
|
+
//
|
|
5499
|
+
// {
|
|
5500
|
+
// "code": "00000",
|
|
5501
|
+
// "msg": "success",
|
|
5502
|
+
// "requestTime": 1752810184560,
|
|
5503
|
+
// "data": [
|
|
5504
|
+
// {
|
|
5505
|
+
// "orderId": "1329947796441513984",
|
|
5506
|
+
// "clientOid": "1329947796483457024"
|
|
5507
|
+
// },
|
|
5508
|
+
// ]
|
|
5509
|
+
// }
|
|
5510
|
+
//
|
|
5511
|
+
const data = this.safeList(response, 'data', []);
|
|
5512
|
+
return this.parseOrders(data, market);
|
|
5513
|
+
}
|
|
4808
5514
|
/**
|
|
4809
5515
|
* @method
|
|
4810
5516
|
* @name bitget#createOrders
|
|
@@ -4813,12 +5519,19 @@ class bitget extends bitget$1 {
|
|
|
4813
5519
|
* @see https://www.bitget.com/api-doc/contract/trade/Batch-Order
|
|
4814
5520
|
* @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Batch-Order
|
|
4815
5521
|
* @see https://www.bitget.com/api-doc/margin/cross/trade/Cross-Batch-Order
|
|
5522
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Place-Batch
|
|
4816
5523
|
* @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params
|
|
4817
5524
|
* @param {object} [params] extra parameters specific to the api endpoint
|
|
5525
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
4818
5526
|
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
4819
5527
|
*/
|
|
4820
5528
|
async createOrders(orders, params = {}) {
|
|
4821
5529
|
await this.loadMarkets();
|
|
5530
|
+
let uta = undefined;
|
|
5531
|
+
[uta, params] = this.handleOptionAndParams(params, 'createOrders', 'uta', false);
|
|
5532
|
+
if (uta) {
|
|
5533
|
+
return await this.createUtaOrders(orders, params);
|
|
5534
|
+
}
|
|
4822
5535
|
const ordersRequests = [];
|
|
4823
5536
|
let symbol = undefined;
|
|
4824
5537
|
let marginMode = undefined;
|
|
@@ -4917,6 +5630,8 @@ class bitget extends bitget$1 {
|
|
|
4917
5630
|
* @see https://www.bitget.com/api-doc/contract/trade/Modify-Order
|
|
4918
5631
|
* @see https://www.bitget.com/api-doc/contract/plan/Modify-Tpsl-Order
|
|
4919
5632
|
* @see https://www.bitget.com/api-doc/contract/plan/Modify-Plan-Order
|
|
5633
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Modify-Order
|
|
5634
|
+
* @see https://www.bitget.com/api-doc/uta/strategy/Modify-Strategy-Order
|
|
4920
5635
|
* @param {string} id cancel order id
|
|
4921
5636
|
* @param {string} symbol unified symbol of the market to create an order in
|
|
4922
5637
|
* @param {string} type 'market' or 'limit'
|
|
@@ -4938,6 +5653,7 @@ class bitget extends bitget$1 {
|
|
|
4938
5653
|
* @param {string} [params.trailingPercent] *swap and future only* the percent to trail away from the current market price, rate can not be greater than 10
|
|
4939
5654
|
* @param {string} [params.trailingTriggerPrice] *swap and future only* the price to trigger a trailing stop order, default uses the price argument
|
|
4940
5655
|
* @param {string} [params.newTriggerType] *swap and future only* 'fill_price', 'mark_price' or 'index_price'
|
|
5656
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
4941
5657
|
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
4942
5658
|
*/
|
|
4943
5659
|
async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
|
|
@@ -4969,7 +5685,50 @@ class bitget extends bitget$1 {
|
|
|
4969
5685
|
}
|
|
4970
5686
|
params = this.omit(params, ['stopPrice', 'triggerType', 'stopLossPrice', 'takeProfitPrice', 'stopLoss', 'takeProfit', 'clientOrderId', 'trailingTriggerPrice', 'trailingPercent']);
|
|
4971
5687
|
let response = undefined;
|
|
4972
|
-
|
|
5688
|
+
let productType = undefined;
|
|
5689
|
+
let uta = undefined;
|
|
5690
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
5691
|
+
[uta, params] = this.handleOptionAndParams(params, 'editOrder', 'uta', false);
|
|
5692
|
+
if (uta) {
|
|
5693
|
+
if (amount !== undefined) {
|
|
5694
|
+
request['qty'] = this.amountToPrecision(symbol, amount);
|
|
5695
|
+
}
|
|
5696
|
+
if (isStopLossOrder || isTakeProfitOrder) {
|
|
5697
|
+
if (isStopLossOrder) {
|
|
5698
|
+
const slType = this.safeString(params, 'slTriggerBy', 'mark');
|
|
5699
|
+
request['slTriggerBy'] = slType;
|
|
5700
|
+
request['stopLoss'] = this.priceToPrecision(symbol, stopLossPrice);
|
|
5701
|
+
if (price !== undefined) {
|
|
5702
|
+
request['slLimitPrice'] = this.priceToPrecision(symbol, price);
|
|
5703
|
+
request['slOrderType'] = this.safeString(params, 'slOrderType', 'limit');
|
|
5704
|
+
}
|
|
5705
|
+
else {
|
|
5706
|
+
request['slOrderType'] = this.safeString(params, 'slOrderType', 'market');
|
|
5707
|
+
}
|
|
5708
|
+
}
|
|
5709
|
+
else if (isTakeProfitOrder) {
|
|
5710
|
+
const tpType = this.safeString(params, 'tpTriggerBy', 'mark');
|
|
5711
|
+
request['tpTriggerBy'] = tpType;
|
|
5712
|
+
request['takeProfit'] = this.priceToPrecision(symbol, takeProfitPrice);
|
|
5713
|
+
if (price !== undefined) {
|
|
5714
|
+
request['tpLimitPrice'] = this.priceToPrecision(symbol, price);
|
|
5715
|
+
request['tpOrderType'] = this.safeString(params, 'tpOrderType', 'limit');
|
|
5716
|
+
}
|
|
5717
|
+
else {
|
|
5718
|
+
request['tpOrderType'] = this.safeString(params, 'tpOrderType', 'market');
|
|
5719
|
+
}
|
|
5720
|
+
}
|
|
5721
|
+
params = this.omit(params, ['stopLossPrice', 'takeProfitPrice']);
|
|
5722
|
+
response = await this.privateUtaPostV3TradeModifyStrategyOrder(this.extend(request, params));
|
|
5723
|
+
}
|
|
5724
|
+
else {
|
|
5725
|
+
if (price !== undefined) {
|
|
5726
|
+
request['price'] = this.priceToPrecision(symbol, price);
|
|
5727
|
+
}
|
|
5728
|
+
response = await this.privateUtaPostV3TradeModifyOrder(this.extend(request, params));
|
|
5729
|
+
}
|
|
5730
|
+
}
|
|
5731
|
+
else if (market['spot']) {
|
|
4973
5732
|
if (triggerPrice === undefined) {
|
|
4974
5733
|
throw new errors.NotSupported(this.id + ' editOrder() only supports plan/trigger spot orders');
|
|
4975
5734
|
}
|
|
@@ -4998,8 +5757,6 @@ class bitget extends bitget$1 {
|
|
|
4998
5757
|
throw new errors.NotSupported(this.id + ' editOrder() does not support ' + market['type'] + ' orders');
|
|
4999
5758
|
}
|
|
5000
5759
|
request['symbol'] = market['id'];
|
|
5001
|
-
let productType = undefined;
|
|
5002
|
-
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
5003
5760
|
request['productType'] = productType;
|
|
5004
5761
|
if (!isTakeProfitOrder && !isStopLossOrder) {
|
|
5005
5762
|
request['newSize'] = this.amountToPrecision(symbol, amount);
|
|
@@ -5091,6 +5848,8 @@ class bitget extends bitget$1 {
|
|
|
5091
5848
|
* @see https://www.bitget.com/api-doc/contract/plan/Cancel-Plan-Order
|
|
5092
5849
|
* @see https://www.bitget.com/api-doc/margin/cross/trade/Cross-Cancel-Order
|
|
5093
5850
|
* @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Cancel-Order
|
|
5851
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Cancel-Order
|
|
5852
|
+
* @see https://www.bitget.com/api-doc/uta/strategy/Cancel-Strategy-Order
|
|
5094
5853
|
* @param {string} id order id
|
|
5095
5854
|
* @param {string} symbol unified symbol of the market the order was made in
|
|
5096
5855
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
@@ -5098,6 +5857,7 @@ class bitget extends bitget$1 {
|
|
|
5098
5857
|
* @param {boolean} [params.trigger] set to true for canceling trigger orders
|
|
5099
5858
|
* @param {string} [params.planType] *swap only* either profit_plan, loss_plan, normal_plan, pos_profit, pos_loss, moving_plan or track_plan
|
|
5100
5859
|
* @param {boolean} [params.trailing] set to true if you want to cancel a trailing order
|
|
5860
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
5101
5861
|
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
5102
5862
|
*/
|
|
5103
5863
|
async cancelOrder(id, symbol = undefined, params = {}) {
|
|
@@ -5119,7 +5879,18 @@ class bitget extends bitget$1 {
|
|
|
5119
5879
|
if (!((market['swap'] || market['future']) && trigger)) {
|
|
5120
5880
|
request['orderId'] = id;
|
|
5121
5881
|
}
|
|
5122
|
-
|
|
5882
|
+
let uta = undefined;
|
|
5883
|
+
[uta, params] = this.handleOptionAndParams(params, 'cancelOrder', 'uta', false);
|
|
5884
|
+
if (uta) {
|
|
5885
|
+
request['orderId'] = id;
|
|
5886
|
+
if (trigger) {
|
|
5887
|
+
response = await this.privateUtaPostV3TradeCancelStrategyOrder(this.extend(request, params));
|
|
5888
|
+
}
|
|
5889
|
+
else {
|
|
5890
|
+
response = await this.privateUtaPostV3TradeCancelOrder(this.extend(request, params));
|
|
5891
|
+
}
|
|
5892
|
+
}
|
|
5893
|
+
else if ((market['swap']) || (market['future'])) {
|
|
5123
5894
|
let productType = undefined;
|
|
5124
5895
|
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
5125
5896
|
request['productType'] = productType;
|
|
@@ -5205,17 +5976,66 @@ class bitget extends bitget$1 {
|
|
|
5205
5976
|
// }
|
|
5206
5977
|
// }
|
|
5207
5978
|
//
|
|
5979
|
+
// uta trigger
|
|
5980
|
+
//
|
|
5981
|
+
// {
|
|
5982
|
+
// "code": "00000",
|
|
5983
|
+
// "msg": "success",
|
|
5984
|
+
// "requestTime": "1753058267399",
|
|
5985
|
+
// "data": null
|
|
5986
|
+
// }
|
|
5987
|
+
//
|
|
5208
5988
|
const data = this.safeValue(response, 'data', {});
|
|
5209
5989
|
let order = undefined;
|
|
5210
|
-
if ((market['swap'] || market['future']) && trigger) {
|
|
5990
|
+
if ((market['swap'] || market['future']) && trigger && !uta) {
|
|
5211
5991
|
const orderInfo = this.safeValue(data, 'successList', []);
|
|
5212
5992
|
order = orderInfo[0];
|
|
5213
5993
|
}
|
|
5214
5994
|
else {
|
|
5215
|
-
|
|
5995
|
+
if (uta && trigger) {
|
|
5996
|
+
order = response;
|
|
5997
|
+
}
|
|
5998
|
+
else {
|
|
5999
|
+
order = data;
|
|
6000
|
+
}
|
|
5216
6001
|
}
|
|
5217
6002
|
return this.parseOrder(order, market);
|
|
5218
6003
|
}
|
|
6004
|
+
async cancelUtaOrders(ids, symbol = undefined, params = {}) {
|
|
6005
|
+
if (symbol === undefined) {
|
|
6006
|
+
throw new errors.ArgumentsRequired(this.id + ' cancelOrders() requires a symbol argument');
|
|
6007
|
+
}
|
|
6008
|
+
await this.loadMarkets();
|
|
6009
|
+
const market = this.market(symbol);
|
|
6010
|
+
let productType = undefined;
|
|
6011
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
6012
|
+
const requestList = [];
|
|
6013
|
+
for (let i = 0; i < ids.length; i++) {
|
|
6014
|
+
const individualId = ids[i];
|
|
6015
|
+
const order = {
|
|
6016
|
+
'orderId': individualId,
|
|
6017
|
+
'symbol': market['id'],
|
|
6018
|
+
'category': productType,
|
|
6019
|
+
};
|
|
6020
|
+
requestList.push(order);
|
|
6021
|
+
}
|
|
6022
|
+
const response = await this.privateUtaPostV3TradeCancelBatch(requestList);
|
|
6023
|
+
//
|
|
6024
|
+
// {
|
|
6025
|
+
// "code": "00000",
|
|
6026
|
+
// "msg": "success",
|
|
6027
|
+
// "requestTime": 1752813731517,
|
|
6028
|
+
// "data": [
|
|
6029
|
+
// {
|
|
6030
|
+
// "orderId": "1329948909442023424",
|
|
6031
|
+
// "clientOid": "1329948909446217728"
|
|
6032
|
+
// },
|
|
6033
|
+
// ]
|
|
6034
|
+
// }
|
|
6035
|
+
//
|
|
6036
|
+
const data = this.safeList(response, 'data', []);
|
|
6037
|
+
return this.parseOrders(data, market);
|
|
6038
|
+
}
|
|
5219
6039
|
/**
|
|
5220
6040
|
* @method
|
|
5221
6041
|
* @name bitget#cancelOrders
|
|
@@ -5225,11 +6045,13 @@ class bitget extends bitget$1 {
|
|
|
5225
6045
|
* @see https://www.bitget.com/api-doc/contract/plan/Cancel-Plan-Order
|
|
5226
6046
|
* @see https://www.bitget.com/api-doc/margin/cross/trade/Cross-Batch-Cancel-Order
|
|
5227
6047
|
* @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Batch-Cancel-Orders
|
|
6048
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Cancel-Batch
|
|
5228
6049
|
* @param {string[]} ids order ids
|
|
5229
6050
|
* @param {string} symbol unified market symbol, default is undefined
|
|
5230
6051
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
5231
6052
|
* @param {string} [params.marginMode] 'isolated' or 'cross' for spot margin trading
|
|
5232
6053
|
* @param {boolean} [params.trigger] *contract only* set to true for canceling trigger orders
|
|
6054
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
5233
6055
|
* @returns {object} an array of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
5234
6056
|
*/
|
|
5235
6057
|
async cancelOrders(ids, symbol = undefined, params = {}) {
|
|
@@ -5238,6 +6060,11 @@ class bitget extends bitget$1 {
|
|
|
5238
6060
|
}
|
|
5239
6061
|
await this.loadMarkets();
|
|
5240
6062
|
const market = this.market(symbol);
|
|
6063
|
+
let uta = undefined;
|
|
6064
|
+
[uta, params] = this.handleOptionAndParams(params, 'cancelOrders', 'uta', false);
|
|
6065
|
+
if (uta) {
|
|
6066
|
+
return await this.cancelUtaOrders(ids, symbol, params);
|
|
6067
|
+
}
|
|
5241
6068
|
let marginMode = undefined;
|
|
5242
6069
|
[marginMode, params] = this.handleMarginModeAndParams('cancelOrders', params);
|
|
5243
6070
|
const trigger = this.safeValue2(params, 'stop', 'trigger');
|
|
@@ -5313,10 +6140,12 @@ class bitget extends bitget$1 {
|
|
|
5313
6140
|
* @see https://www.bitget.com/api-doc/contract/trade/Batch-Cancel-Orders
|
|
5314
6141
|
* @see https://bitgetlimited.github.io/apidoc/en/margin/#isolated-batch-cancel-orders
|
|
5315
6142
|
* @see https://bitgetlimited.github.io/apidoc/en/margin/#cross-batch-cancel-order
|
|
6143
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Cancel-All-Order
|
|
5316
6144
|
* @param {string} symbol unified market symbol
|
|
5317
6145
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
5318
6146
|
* @param {string} [params.marginMode] 'isolated' or 'cross' for spot margin trading
|
|
5319
6147
|
* @param {boolean} [params.trigger] *contract only* set to true for canceling trigger orders
|
|
6148
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
5320
6149
|
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
5321
6150
|
*/
|
|
5322
6151
|
async cancelAllOrders(symbol = undefined, params = {}) {
|
|
@@ -5327,13 +6156,41 @@ class bitget extends bitget$1 {
|
|
|
5327
6156
|
const market = this.market(symbol);
|
|
5328
6157
|
let marginMode = undefined;
|
|
5329
6158
|
[marginMode, params] = this.handleMarginModeAndParams('cancelAllOrders', params);
|
|
6159
|
+
let productType = undefined;
|
|
6160
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
5330
6161
|
const request = {
|
|
5331
6162
|
'symbol': market['id'],
|
|
5332
6163
|
};
|
|
5333
6164
|
const trigger = this.safeBool2(params, 'stop', 'trigger');
|
|
5334
6165
|
params = this.omit(params, ['stop', 'trigger']);
|
|
5335
6166
|
let response = undefined;
|
|
5336
|
-
|
|
6167
|
+
let uta = undefined;
|
|
6168
|
+
[uta, params] = this.handleOptionAndParams(params, 'cancelAllOrders', 'uta', false);
|
|
6169
|
+
if (uta) {
|
|
6170
|
+
if (productType === 'SPOT') {
|
|
6171
|
+
if (marginMode !== undefined) {
|
|
6172
|
+
productType = 'MARGIN';
|
|
6173
|
+
}
|
|
6174
|
+
}
|
|
6175
|
+
request['category'] = productType;
|
|
6176
|
+
response = await this.privateUtaPostV3TradeCancelSymbolOrder(this.extend(request, params));
|
|
6177
|
+
//
|
|
6178
|
+
// {
|
|
6179
|
+
// "code": "00000",
|
|
6180
|
+
// "msg": "success",
|
|
6181
|
+
// "requestTime": 1750751578138,
|
|
6182
|
+
// "data": {
|
|
6183
|
+
// "list": [
|
|
6184
|
+
// {
|
|
6185
|
+
// "orderId": "1321313242969427968",
|
|
6186
|
+
// "clientOid": "1321313242969427969"
|
|
6187
|
+
// }
|
|
6188
|
+
// ]
|
|
6189
|
+
// }
|
|
6190
|
+
// }
|
|
6191
|
+
//
|
|
6192
|
+
}
|
|
6193
|
+
else if (market['spot']) {
|
|
5337
6194
|
if (marginMode !== undefined) {
|
|
5338
6195
|
if (marginMode === 'cross') {
|
|
5339
6196
|
response = await this.privateMarginPostMarginV1CrossOrderBatchCancelOrder(this.extend(request, params));
|
|
@@ -5392,8 +6249,6 @@ class bitget extends bitget$1 {
|
|
|
5392
6249
|
}
|
|
5393
6250
|
}
|
|
5394
6251
|
else {
|
|
5395
|
-
let productType = undefined;
|
|
5396
|
-
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
5397
6252
|
request['productType'] = productType;
|
|
5398
6253
|
if (trigger) {
|
|
5399
6254
|
response = await this.privateMixPostV2MixOrderCancelPlanOrder(this.extend(request, params));
|
|
@@ -5417,9 +6272,15 @@ class bitget extends bitget$1 {
|
|
|
5417
6272
|
// }
|
|
5418
6273
|
}
|
|
5419
6274
|
const data = this.safeDict(response, 'data');
|
|
5420
|
-
const resultList = this.
|
|
6275
|
+
const resultList = this.safeListN(data, ['resultList', 'successList', 'list']);
|
|
5421
6276
|
const failureList = this.safeList2(data, 'failure', 'failureList');
|
|
5422
|
-
|
|
6277
|
+
let responseList = undefined;
|
|
6278
|
+
if ((resultList !== undefined) && (failureList !== undefined)) {
|
|
6279
|
+
responseList = this.arrayConcat(resultList, failureList);
|
|
6280
|
+
}
|
|
6281
|
+
else {
|
|
6282
|
+
responseList = resultList;
|
|
6283
|
+
}
|
|
5423
6284
|
return this.parseOrders(responseList);
|
|
5424
6285
|
}
|
|
5425
6286
|
/**
|
|
@@ -5428,9 +6289,11 @@ class bitget extends bitget$1 {
|
|
|
5428
6289
|
* @description fetches information on an order made by the user
|
|
5429
6290
|
* @see https://www.bitget.com/api-doc/spot/trade/Get-Order-Info
|
|
5430
6291
|
* @see https://www.bitget.com/api-doc/contract/trade/Get-Order-Details
|
|
6292
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Get-Order-Details
|
|
5431
6293
|
* @param {string} id the order id
|
|
5432
6294
|
* @param {string} symbol unified symbol of the market the order was made in
|
|
5433
6295
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
6296
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
5434
6297
|
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
5435
6298
|
*/
|
|
5436
6299
|
async fetchOrder(id, symbol = undefined, params = {}) {
|
|
@@ -5443,7 +6306,12 @@ class bitget extends bitget$1 {
|
|
|
5443
6306
|
'orderId': id,
|
|
5444
6307
|
};
|
|
5445
6308
|
let response = undefined;
|
|
5446
|
-
|
|
6309
|
+
let uta = undefined;
|
|
6310
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchOrder', 'uta', false);
|
|
6311
|
+
if (uta) {
|
|
6312
|
+
response = await this.privateUtaGetV3TradeOrderInfo(this.extend(request, params));
|
|
6313
|
+
}
|
|
6314
|
+
else if (market['spot']) {
|
|
5447
6315
|
response = await this.privateSpotGetV2SpotTradeOrderInfo(this.extend(request, params));
|
|
5448
6316
|
}
|
|
5449
6317
|
else if (market['swap'] || market['future']) {
|
|
@@ -5523,7 +6391,51 @@ class bitget extends bitget$1 {
|
|
|
5523
6391
|
// }
|
|
5524
6392
|
// }
|
|
5525
6393
|
//
|
|
5526
|
-
|
|
6394
|
+
// uta
|
|
6395
|
+
//
|
|
6396
|
+
// {
|
|
6397
|
+
// "code": "00000",
|
|
6398
|
+
// "msg": "success",
|
|
6399
|
+
// "requestTime": 1750496858333,
|
|
6400
|
+
// "data": {
|
|
6401
|
+
// "orderId": "1320244799629316096",
|
|
6402
|
+
// "clientOid": "1320244799633510400",
|
|
6403
|
+
// "category": "USDT-FUTURES",
|
|
6404
|
+
// "symbol": "BTCUSDT",
|
|
6405
|
+
// "orderType": "limit",
|
|
6406
|
+
// "side": "buy",
|
|
6407
|
+
// "price": "50000",
|
|
6408
|
+
// "qty": "0.001",
|
|
6409
|
+
// "amount": "0",
|
|
6410
|
+
// "cumExecQty": "0",
|
|
6411
|
+
// "cumExecValue": "0",
|
|
6412
|
+
// "avgPrice": "0",
|
|
6413
|
+
// "timeInForce": "gtc",
|
|
6414
|
+
// "orderStatus": "live",
|
|
6415
|
+
// "posSide": "long",
|
|
6416
|
+
// "holdMode": "hedge_mode",
|
|
6417
|
+
// "reduceOnly": "NO",
|
|
6418
|
+
// "feeDetail": [{
|
|
6419
|
+
// "feeCoin": "",
|
|
6420
|
+
// "fee": ""
|
|
6421
|
+
// }],
|
|
6422
|
+
// "createdTime": "1750496809871",
|
|
6423
|
+
// "updatedTime": "1750496809886",
|
|
6424
|
+
// "cancelReason": "",
|
|
6425
|
+
// "execType": "normal",
|
|
6426
|
+
// "stpMode": "none",
|
|
6427
|
+
// "tpTriggerBy": null,
|
|
6428
|
+
// "slTriggerBy": null,
|
|
6429
|
+
// "takeProfit": null,
|
|
6430
|
+
// "stopLoss": null,
|
|
6431
|
+
// "tpOrderType": null,
|
|
6432
|
+
// "slOrderType": null,
|
|
6433
|
+
// "tpLimitPrice": null,
|
|
6434
|
+
// "slLimitPrice": null
|
|
6435
|
+
// }
|
|
6436
|
+
// }
|
|
6437
|
+
//
|
|
6438
|
+
if (!uta && (typeof response === 'string')) {
|
|
5527
6439
|
response = JSON.parse(response);
|
|
5528
6440
|
}
|
|
5529
6441
|
const data = this.safeDict(response, 'data');
|
|
@@ -5533,6 +6445,10 @@ class bitget extends bitget$1 {
|
|
|
5533
6445
|
}
|
|
5534
6446
|
}
|
|
5535
6447
|
const dataList = this.safeList(response, 'data', []);
|
|
6448
|
+
const dataListLength = dataList.length;
|
|
6449
|
+
if (dataListLength === 0) {
|
|
6450
|
+
throw new errors.OrderNotFound(this.id + ' fetchOrder() could not find order id ' + id + ' in ' + this.json(response));
|
|
6451
|
+
}
|
|
5536
6452
|
const first = this.safeDict(dataList, 0, {});
|
|
5537
6453
|
return this.parseOrder(first, market);
|
|
5538
6454
|
// const first = this.safeDict (data, 0, data);
|
|
@@ -5548,6 +6464,7 @@ class bitget extends bitget$1 {
|
|
|
5548
6464
|
* @see https://www.bitget.com/api-doc/contract/plan/get-orders-plan-pending
|
|
5549
6465
|
* @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Open-Orders
|
|
5550
6466
|
* @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Open-Orders
|
|
6467
|
+
* @see https://www.bitget.com/api-doc/uta/strategy/Get-Unfilled-Strategy-Orders
|
|
5551
6468
|
* @param {string} symbol unified market symbol
|
|
5552
6469
|
* @param {int} [since] the earliest time in ms to fetch open orders for
|
|
5553
6470
|
* @param {int} [limit] the maximum number of open order structures to retrieve
|
|
@@ -5558,6 +6475,7 @@ class bitget extends bitget$1 {
|
|
|
5558
6475
|
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
5559
6476
|
* @param {string} [params.isPlan] *swap only* 'plan' for stop orders and 'profit_loss' for tp/sl orders, default is 'plan'
|
|
5560
6477
|
* @param {boolean} [params.trailing] set to true if you want to fetch trailing orders
|
|
6478
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
5561
6479
|
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
5562
6480
|
*/
|
|
5563
6481
|
async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
@@ -5567,6 +6485,8 @@ class bitget extends bitget$1 {
|
|
|
5567
6485
|
let request = {};
|
|
5568
6486
|
let marginMode = undefined;
|
|
5569
6487
|
[marginMode, params] = this.handleMarginModeAndParams('fetchOpenOrders', params);
|
|
6488
|
+
let uta = undefined;
|
|
6489
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'uta', false);
|
|
5570
6490
|
if (symbol !== undefined) {
|
|
5571
6491
|
market = this.market(symbol);
|
|
5572
6492
|
request['symbol'] = market['id'];
|
|
@@ -5582,22 +6502,28 @@ class bitget extends bitget$1 {
|
|
|
5582
6502
|
[paginate, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'paginate');
|
|
5583
6503
|
if (paginate) {
|
|
5584
6504
|
let cursorReceived = undefined;
|
|
5585
|
-
|
|
6505
|
+
let cursorSent = undefined;
|
|
6506
|
+
if (uta) {
|
|
6507
|
+
cursorReceived = 'cursor';
|
|
6508
|
+
cursorSent = 'cursor';
|
|
6509
|
+
}
|
|
6510
|
+
else if (type === 'spot') {
|
|
5586
6511
|
if (marginMode !== undefined) {
|
|
5587
6512
|
cursorReceived = 'minId';
|
|
6513
|
+
cursorSent = 'idLessThan';
|
|
5588
6514
|
}
|
|
5589
6515
|
}
|
|
5590
6516
|
else {
|
|
5591
6517
|
cursorReceived = 'endId';
|
|
6518
|
+
cursorSent = 'idLessThan';
|
|
5592
6519
|
}
|
|
5593
|
-
return await this.fetchPaginatedCallCursor('fetchOpenOrders', symbol, since, limit, params, cursorReceived,
|
|
6520
|
+
return await this.fetchPaginatedCallCursor('fetchOpenOrders', symbol, since, limit, params, cursorReceived, cursorSent);
|
|
5594
6521
|
}
|
|
5595
6522
|
let response = undefined;
|
|
5596
6523
|
const trailing = this.safeBool(params, 'trailing');
|
|
5597
6524
|
const trigger = this.safeBool2(params, 'stop', 'trigger');
|
|
5598
6525
|
const planTypeDefined = this.safeString(params, 'planType') !== undefined;
|
|
5599
6526
|
const isTrigger = (trigger || planTypeDefined);
|
|
5600
|
-
params = this.omit(params, ['stop', 'trigger', 'trailing']);
|
|
5601
6527
|
[request, params] = this.handleUntilOption('endTime', request, params);
|
|
5602
6528
|
if (since !== undefined) {
|
|
5603
6529
|
request['startTime'] = since;
|
|
@@ -5605,53 +6531,66 @@ class bitget extends bitget$1 {
|
|
|
5605
6531
|
if (limit !== undefined) {
|
|
5606
6532
|
request['limit'] = limit;
|
|
5607
6533
|
}
|
|
5608
|
-
if ((type === 'swap') || (type === 'future') || (marginMode !== undefined)) {
|
|
6534
|
+
if (!uta && ((type === 'swap') || (type === 'future') || (marginMode !== undefined))) {
|
|
5609
6535
|
const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId');
|
|
5610
6536
|
params = this.omit(params, 'clientOrderId');
|
|
5611
6537
|
if (clientOrderId !== undefined) {
|
|
5612
6538
|
request['clientOid'] = clientOrderId;
|
|
5613
6539
|
}
|
|
5614
6540
|
}
|
|
5615
|
-
let
|
|
5616
|
-
|
|
5617
|
-
|
|
5618
|
-
|
|
6541
|
+
let productType = undefined;
|
|
6542
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
6543
|
+
params = this.omit(params, ['type', 'stop', 'trigger', 'trailing']);
|
|
6544
|
+
if (uta) {
|
|
6545
|
+
if (type === 'spot') {
|
|
6546
|
+
if (marginMode !== undefined) {
|
|
6547
|
+
productType = 'MARGIN';
|
|
6548
|
+
}
|
|
6549
|
+
}
|
|
6550
|
+
request['category'] = productType;
|
|
6551
|
+
if (trigger) {
|
|
6552
|
+
response = await this.privateUtaGetV3TradeUnfilledStrategyOrders(this.extend(request, params));
|
|
6553
|
+
}
|
|
6554
|
+
else {
|
|
6555
|
+
response = await this.privateUtaGetV3TradeUnfilledOrders(this.extend(request, params));
|
|
6556
|
+
}
|
|
6557
|
+
}
|
|
6558
|
+
else if (type === 'spot') {
|
|
6559
|
+
if (marginMode !== undefined) {
|
|
5619
6560
|
if (since === undefined) {
|
|
5620
6561
|
since = this.milliseconds() - 7776000000;
|
|
5621
6562
|
request['startTime'] = since;
|
|
5622
6563
|
}
|
|
5623
6564
|
if (marginMode === 'isolated') {
|
|
5624
|
-
response = await this.privateMarginGetV2MarginIsolatedOpenOrders(this.extend(request,
|
|
6565
|
+
response = await this.privateMarginGetV2MarginIsolatedOpenOrders(this.extend(request, params));
|
|
5625
6566
|
}
|
|
5626
6567
|
else if (marginMode === 'cross') {
|
|
5627
|
-
response = await this.privateMarginGetV2MarginCrossedOpenOrders(this.extend(request,
|
|
6568
|
+
response = await this.privateMarginGetV2MarginCrossedOpenOrders(this.extend(request, params));
|
|
5628
6569
|
}
|
|
5629
6570
|
}
|
|
5630
6571
|
else {
|
|
5631
6572
|
if (trigger) {
|
|
5632
|
-
response = await this.privateSpotGetV2SpotTradeCurrentPlanOrder(this.extend(request,
|
|
6573
|
+
response = await this.privateSpotGetV2SpotTradeCurrentPlanOrder(this.extend(request, params));
|
|
5633
6574
|
}
|
|
5634
6575
|
else {
|
|
5635
|
-
response = await this.privateSpotGetV2SpotTradeUnfilledOrders(this.extend(request,
|
|
6576
|
+
response = await this.privateSpotGetV2SpotTradeUnfilledOrders(this.extend(request, params));
|
|
5636
6577
|
}
|
|
5637
6578
|
}
|
|
5638
6579
|
}
|
|
5639
6580
|
else {
|
|
5640
|
-
let productType = undefined;
|
|
5641
|
-
[productType, query] = this.handleProductTypeAndParams(market, query);
|
|
5642
6581
|
request['productType'] = productType;
|
|
5643
6582
|
if (trailing) {
|
|
5644
6583
|
const planType = this.safeString(params, 'planType', 'track_plan');
|
|
5645
6584
|
request['planType'] = planType;
|
|
5646
|
-
response = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(request,
|
|
6585
|
+
response = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(request, params));
|
|
5647
6586
|
}
|
|
5648
6587
|
else if (isTrigger) {
|
|
5649
|
-
const planType = this.safeString(
|
|
6588
|
+
const planType = this.safeString(params, 'planType', 'normal_plan');
|
|
5650
6589
|
request['planType'] = planType;
|
|
5651
|
-
response = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(request,
|
|
6590
|
+
response = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(request, params));
|
|
5652
6591
|
}
|
|
5653
6592
|
else {
|
|
5654
|
-
response = await this.privateMixGetV2MixOrderOrdersPending(this.extend(request,
|
|
6593
|
+
response = await this.privateMixGetV2MixOrderOrdersPending(this.extend(request, params));
|
|
5655
6594
|
}
|
|
5656
6595
|
}
|
|
5657
6596
|
//
|
|
@@ -5829,8 +6768,95 @@ class bitget extends bitget$1 {
|
|
|
5829
6768
|
// }
|
|
5830
6769
|
// }
|
|
5831
6770
|
//
|
|
6771
|
+
// uta
|
|
6772
|
+
//
|
|
6773
|
+
// {
|
|
6774
|
+
// "code": "00000",
|
|
6775
|
+
// "msg": "success",
|
|
6776
|
+
// "requestTime": 1750753395850,
|
|
6777
|
+
// "data": {
|
|
6778
|
+
// "list": [
|
|
6779
|
+
// {
|
|
6780
|
+
// "orderId": "1321320757371228160",
|
|
6781
|
+
// "clientOid": "1321320757371228161",
|
|
6782
|
+
// "category": "USDT-FUTURES",
|
|
6783
|
+
// "symbol": "BTCUSDT",
|
|
6784
|
+
// "orderType": "limit",
|
|
6785
|
+
// "side": "buy",
|
|
6786
|
+
// "price": "50000",
|
|
6787
|
+
// "qty": "0.001",
|
|
6788
|
+
// "amount": "0",
|
|
6789
|
+
// "cumExecQty": "0",
|
|
6790
|
+
// "cumExecValue": "0",
|
|
6791
|
+
// "avgPrice": "0",
|
|
6792
|
+
// "timeInForce": "gtc",
|
|
6793
|
+
// "orderStatus": "live",
|
|
6794
|
+
// "posSide": "long",
|
|
6795
|
+
// "holdMode": "hedge_mode",
|
|
6796
|
+
// "reduceOnly": "NO",
|
|
6797
|
+
// "feeDetail": [
|
|
6798
|
+
// {
|
|
6799
|
+
// "feeCoin": "",
|
|
6800
|
+
// "fee": ""
|
|
6801
|
+
// }
|
|
6802
|
+
// ],
|
|
6803
|
+
// "createdTime": "1750753338186",
|
|
6804
|
+
// "updatedTime": "1750753338203",
|
|
6805
|
+
// "stpMode": "none",
|
|
6806
|
+
// "tpTriggerBy": null,
|
|
6807
|
+
// "slTriggerBy": null,
|
|
6808
|
+
// "takeProfit": null,
|
|
6809
|
+
// "stopLoss": null,
|
|
6810
|
+
// "tpOrderType": null,
|
|
6811
|
+
// "slOrderType": null,
|
|
6812
|
+
// "tpLimitPrice": null,
|
|
6813
|
+
// "slLimitPrice": null
|
|
6814
|
+
// }
|
|
6815
|
+
// ],
|
|
6816
|
+
// "cursor": "1321320757371228160"
|
|
6817
|
+
// }
|
|
6818
|
+
// }
|
|
6819
|
+
//
|
|
6820
|
+
// uta trigger
|
|
6821
|
+
//
|
|
6822
|
+
// {
|
|
6823
|
+
// "code": "00000",
|
|
6824
|
+
// "msg": "success",
|
|
6825
|
+
// "requestTime": 1753057527060,
|
|
6826
|
+
// "data": [
|
|
6827
|
+
// {
|
|
6828
|
+
// "orderId": "1330984742276198400",
|
|
6829
|
+
// "clientOid": "1330984742276198400",
|
|
6830
|
+
// "symbol": "BTCUSDT",
|
|
6831
|
+
// "category": "USDT-FUTURES",
|
|
6832
|
+
// "qty": "0.001",
|
|
6833
|
+
// "posSide": "long",
|
|
6834
|
+
// "tpTriggerBy": "market",
|
|
6835
|
+
// "slTriggerBy": "mark",
|
|
6836
|
+
// "takeProfit": "",
|
|
6837
|
+
// "stopLoss":"114000",
|
|
6838
|
+
// "tpOrderType": "market",
|
|
6839
|
+
// "slOrderType": "limit",
|
|
6840
|
+
// "tpLimitPrice": "",
|
|
6841
|
+
// "slLimitPrice": "113000",
|
|
6842
|
+
// "createdTime": "1753057411736",
|
|
6843
|
+
// "updatedTime": "1753057411747"
|
|
6844
|
+
// }
|
|
6845
|
+
// ]
|
|
6846
|
+
// }
|
|
6847
|
+
//
|
|
5832
6848
|
const data = this.safeValue(response, 'data');
|
|
5833
|
-
if (
|
|
6849
|
+
if (uta) {
|
|
6850
|
+
let result = undefined;
|
|
6851
|
+
if (trigger) {
|
|
6852
|
+
result = this.safeList(response, 'data', []);
|
|
6853
|
+
}
|
|
6854
|
+
else {
|
|
6855
|
+
result = this.safeList(data, 'list', []);
|
|
6856
|
+
}
|
|
6857
|
+
return this.parseOrders(result, market, since, limit);
|
|
6858
|
+
}
|
|
6859
|
+
else if (type === 'spot') {
|
|
5834
6860
|
if ((marginMode !== undefined) || trigger) {
|
|
5835
6861
|
const resultList = this.safeList(data, 'orderList', []);
|
|
5836
6862
|
return this.parseOrders(resultList, market, since, limit);
|
|
@@ -5852,6 +6878,7 @@ class bitget extends bitget$1 {
|
|
|
5852
6878
|
* @see https://www.bitget.com/api-doc/contract/plan/orders-plan-history
|
|
5853
6879
|
* @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-History
|
|
5854
6880
|
* @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Order-History
|
|
6881
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Get-Order-History
|
|
5855
6882
|
* @param {string} symbol unified market symbol of the closed orders
|
|
5856
6883
|
* @param {int} [since] timestamp in ms of the earliest order
|
|
5857
6884
|
* @param {int} [limit] the max number of closed orders to return
|
|
@@ -5879,6 +6906,7 @@ class bitget extends bitget$1 {
|
|
|
5879
6906
|
* @see https://www.bitget.com/api-doc/contract/plan/orders-plan-history
|
|
5880
6907
|
* @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-History
|
|
5881
6908
|
* @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Order-History
|
|
6909
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Get-Order-History
|
|
5882
6910
|
* @param {string} symbol unified market symbol of the canceled orders
|
|
5883
6911
|
* @param {int} [since] timestamp in ms of the earliest order
|
|
5884
6912
|
* @param {int} [limit] the max number of canceled orders to return
|
|
@@ -5905,6 +6933,8 @@ class bitget extends bitget$1 {
|
|
|
5905
6933
|
* @see https://www.bitget.com/api-doc/contract/plan/orders-plan-history
|
|
5906
6934
|
* @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-History
|
|
5907
6935
|
* @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Order-History
|
|
6936
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Get-Order-History
|
|
6937
|
+
* @see https://www.bitget.com/api-doc/uta/strategy/Get-History-Strategy-Orders
|
|
5908
6938
|
* @description fetches information on multiple canceled and closed orders made by the user
|
|
5909
6939
|
* @param {string} symbol unified market symbol of the market orders were made in
|
|
5910
6940
|
* @param {int} [since] the earliest time in ms to fetch orders for
|
|
@@ -5916,9 +6946,15 @@ class bitget extends bitget$1 {
|
|
|
5916
6946
|
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
5917
6947
|
* @param {string} [params.isPlan] *swap only* 'plan' for stop orders and 'profit_loss' for tp/sl orders, default is 'plan'
|
|
5918
6948
|
* @param {boolean} [params.trailing] set to true if you want to fetch trailing orders
|
|
6949
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
5919
6950
|
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
5920
6951
|
*/
|
|
5921
6952
|
async fetchCanceledAndClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
6953
|
+
let uta = undefined;
|
|
6954
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchCanceledAndClosedOrders', 'uta', false);
|
|
6955
|
+
if (uta) {
|
|
6956
|
+
return await this.fetchUtaCanceledAndClosedOrders(symbol, since, limit, params);
|
|
6957
|
+
}
|
|
5922
6958
|
await this.loadMarkets();
|
|
5923
6959
|
let market = undefined;
|
|
5924
6960
|
let request = {};
|
|
@@ -6207,6 +7243,132 @@ class bitget extends bitget$1 {
|
|
|
6207
7243
|
const orders = this.safeList(response, 'data', []);
|
|
6208
7244
|
return this.parseOrders(orders, market, since, limit);
|
|
6209
7245
|
}
|
|
7246
|
+
async fetchUtaCanceledAndClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
7247
|
+
await this.loadMarkets();
|
|
7248
|
+
let market = undefined;
|
|
7249
|
+
if (symbol !== undefined) {
|
|
7250
|
+
market = this.market(symbol);
|
|
7251
|
+
}
|
|
7252
|
+
let productType = undefined;
|
|
7253
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
7254
|
+
if (productType === 'SPOT') {
|
|
7255
|
+
let marginMode = undefined;
|
|
7256
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchCanceledAndClosedOrders', params);
|
|
7257
|
+
if (marginMode !== undefined) {
|
|
7258
|
+
productType = 'MARGIN';
|
|
7259
|
+
}
|
|
7260
|
+
}
|
|
7261
|
+
let request = {
|
|
7262
|
+
'category': productType,
|
|
7263
|
+
};
|
|
7264
|
+
let paginate = false;
|
|
7265
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchCanceledAndClosedOrders', 'paginate');
|
|
7266
|
+
if (paginate) {
|
|
7267
|
+
return await this.fetchPaginatedCallCursor('fetchCanceledAndClosedOrders', symbol, since, limit, params, 'cursor', 'cursor');
|
|
7268
|
+
}
|
|
7269
|
+
[request, params] = this.handleUntilOption('endTime', request, params);
|
|
7270
|
+
if (since !== undefined) {
|
|
7271
|
+
request['startTime'] = since;
|
|
7272
|
+
}
|
|
7273
|
+
if (limit !== undefined) {
|
|
7274
|
+
request['limit'] = limit;
|
|
7275
|
+
}
|
|
7276
|
+
let response = undefined;
|
|
7277
|
+
const trigger = this.safeBool2(params, 'stop', 'trigger');
|
|
7278
|
+
params = this.omit(params, ['stop', 'trigger']);
|
|
7279
|
+
if (trigger) {
|
|
7280
|
+
response = await this.privateUtaGetV3TradeHistoryStrategyOrders(this.extend(request, params));
|
|
7281
|
+
}
|
|
7282
|
+
else {
|
|
7283
|
+
response = await this.privateUtaGetV3TradeHistoryOrders(this.extend(request, params));
|
|
7284
|
+
}
|
|
7285
|
+
//
|
|
7286
|
+
// uta
|
|
7287
|
+
//
|
|
7288
|
+
// {
|
|
7289
|
+
// "code": "00000",
|
|
7290
|
+
// "msg": "success",
|
|
7291
|
+
// "requestTime": 1752531592855,
|
|
7292
|
+
// "data": {
|
|
7293
|
+
// "list": [
|
|
7294
|
+
// {
|
|
7295
|
+
// "orderId": "1322441400976261120",
|
|
7296
|
+
// "clientOid": "1322441400976261121",
|
|
7297
|
+
// "category": "USDT-FUTURES",
|
|
7298
|
+
// "symbol": "BTCUSDT",
|
|
7299
|
+
// "orderType": "market",
|
|
7300
|
+
// "side": "sell",
|
|
7301
|
+
// "price": "0",
|
|
7302
|
+
// "qty": "0.0001",
|
|
7303
|
+
// "amount": "0",
|
|
7304
|
+
// "cumExecQty": "0.0001",
|
|
7305
|
+
// "cumExecValue": "10.7005",
|
|
7306
|
+
// "avgPrice": "107005.4",
|
|
7307
|
+
// "timeInForce": "gtc",
|
|
7308
|
+
// "orderStatus": "filled",
|
|
7309
|
+
// "posSide": "long",
|
|
7310
|
+
// "holdMode": "hedge_mode",
|
|
7311
|
+
// "reduceOnly": "NO",
|
|
7312
|
+
// "feeDetail": [
|
|
7313
|
+
// {
|
|
7314
|
+
// "feeCoin": "USDT",
|
|
7315
|
+
// "fee": "0.00642032"
|
|
7316
|
+
// }
|
|
7317
|
+
// ],
|
|
7318
|
+
// "createdTime": "1751020520442",
|
|
7319
|
+
// "updatedTime": "1751020520457",
|
|
7320
|
+
// "cancelReason": "",
|
|
7321
|
+
// "execType": "normal",
|
|
7322
|
+
// "stpMode": "none",
|
|
7323
|
+
// "tpTriggerBy": null,
|
|
7324
|
+
// "slTriggerBy": null,
|
|
7325
|
+
// "takeProfit": null,
|
|
7326
|
+
// "stopLoss": null,
|
|
7327
|
+
// "tpOrderType": null,
|
|
7328
|
+
// "slOrderType": null,
|
|
7329
|
+
// "tpLimitPrice": null,
|
|
7330
|
+
// "slLimitPrice": null
|
|
7331
|
+
// },
|
|
7332
|
+
// ],
|
|
7333
|
+
// "cursor": "1322441328637100035"
|
|
7334
|
+
// }
|
|
7335
|
+
// }
|
|
7336
|
+
//
|
|
7337
|
+
// uta trigger
|
|
7338
|
+
//
|
|
7339
|
+
// {
|
|
7340
|
+
// "code": "00000",
|
|
7341
|
+
// "msg": "success",
|
|
7342
|
+
// "requestTime": 1753058447920,
|
|
7343
|
+
// "data": {
|
|
7344
|
+
// "list": [
|
|
7345
|
+
// {
|
|
7346
|
+
// "orderId": "1330984742276198400",
|
|
7347
|
+
// "clientOid": "1330984742276198400",
|
|
7348
|
+
// "symbol": "BTCUSDT",
|
|
7349
|
+
// "category": "USDT-FUTURES",
|
|
7350
|
+
// "qty": "0.001",
|
|
7351
|
+
// "posSide": "long",
|
|
7352
|
+
// "tpTriggerBy": "market",
|
|
7353
|
+
// "slTriggerBy": "mark",
|
|
7354
|
+
// "takeProfit": "",
|
|
7355
|
+
// "stopLoss": "112000",
|
|
7356
|
+
// "tpOrderType": "market",
|
|
7357
|
+
// "slOrderType": "limit",
|
|
7358
|
+
// "tpLimitPrice": "",
|
|
7359
|
+
// "slLimitPrice": "111000",
|
|
7360
|
+
// "createdTime": "1753057411736",
|
|
7361
|
+
// "updatedTime": "1753058267412"
|
|
7362
|
+
// },
|
|
7363
|
+
// ],
|
|
7364
|
+
// "cursor": 1330960754317619202
|
|
7365
|
+
// }
|
|
7366
|
+
// }
|
|
7367
|
+
//
|
|
7368
|
+
const data = this.safeDict(response, 'data', {});
|
|
7369
|
+
const orders = this.safeList(data, 'list', []);
|
|
7370
|
+
return this.parseOrders(orders, market, since, limit);
|
|
7371
|
+
}
|
|
6210
7372
|
/**
|
|
6211
7373
|
* @method
|
|
6212
7374
|
* @name bitget#fetchLedger
|
|
@@ -6433,69 +7595,84 @@ class bitget extends bitget$1 {
|
|
|
6433
7595
|
* @see https://www.bitget.com/api-doc/contract/trade/Get-Order-Fills
|
|
6434
7596
|
* @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-Fills
|
|
6435
7597
|
* @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Transaction-Details
|
|
7598
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Get-Order-Fills
|
|
6436
7599
|
* @param {string} symbol unified market symbol
|
|
6437
7600
|
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
6438
7601
|
* @param {int} [limit] the maximum number of trades structures to retrieve
|
|
6439
7602
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
6440
7603
|
* @param {int} [params.until] the latest time in ms to fetch trades for
|
|
7604
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
6441
7605
|
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
6442
7606
|
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
|
|
6443
7607
|
*/
|
|
6444
7608
|
async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
6445
|
-
|
|
7609
|
+
let uta = undefined;
|
|
7610
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'uta', false);
|
|
7611
|
+
if (!uta && (symbol === undefined)) {
|
|
6446
7612
|
throw new errors.ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
|
|
6447
7613
|
}
|
|
6448
7614
|
await this.loadMarkets();
|
|
6449
7615
|
const market = this.market(symbol);
|
|
6450
|
-
let
|
|
6451
|
-
[
|
|
7616
|
+
let request = {};
|
|
7617
|
+
[request, params] = this.handleUntilOption('endTime', request, params);
|
|
7618
|
+
if (since !== undefined) {
|
|
7619
|
+
request['startTime'] = since;
|
|
7620
|
+
}
|
|
7621
|
+
if (limit !== undefined) {
|
|
7622
|
+
request['limit'] = limit;
|
|
7623
|
+
}
|
|
6452
7624
|
let paginate = false;
|
|
7625
|
+
let marginMode = undefined;
|
|
6453
7626
|
[paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');
|
|
7627
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);
|
|
6454
7628
|
if (paginate) {
|
|
6455
7629
|
let cursorReceived = undefined;
|
|
6456
|
-
|
|
7630
|
+
let cursorSent = undefined;
|
|
7631
|
+
if (uta) {
|
|
7632
|
+
cursorReceived = 'cursor';
|
|
7633
|
+
cursorSent = 'cursor';
|
|
7634
|
+
}
|
|
7635
|
+
else if (market['spot']) {
|
|
6457
7636
|
if (marginMode !== undefined) {
|
|
6458
7637
|
cursorReceived = 'minId';
|
|
7638
|
+
cursorSent = 'idLessThan';
|
|
6459
7639
|
}
|
|
6460
7640
|
}
|
|
6461
7641
|
else {
|
|
6462
7642
|
cursorReceived = 'endId';
|
|
7643
|
+
cursorSent = 'idLessThan';
|
|
6463
7644
|
}
|
|
6464
|
-
return await this.fetchPaginatedCallCursor('fetchMyTrades', symbol, since, limit, params, cursorReceived,
|
|
7645
|
+
return await this.fetchPaginatedCallCursor('fetchMyTrades', symbol, since, limit, params, cursorReceived, cursorSent);
|
|
6465
7646
|
}
|
|
6466
7647
|
let response = undefined;
|
|
6467
|
-
|
|
6468
|
-
|
|
6469
|
-
};
|
|
6470
|
-
[request, params] = this.handleUntilOption('endTime', request, params);
|
|
6471
|
-
if (since !== undefined) {
|
|
6472
|
-
request['startTime'] = since;
|
|
6473
|
-
}
|
|
6474
|
-
if (limit !== undefined) {
|
|
6475
|
-
request['limit'] = limit;
|
|
7648
|
+
if (uta) {
|
|
7649
|
+
response = await this.privateUtaGetV3TradeFills(this.extend(request, params));
|
|
6476
7650
|
}
|
|
6477
|
-
|
|
6478
|
-
|
|
6479
|
-
|
|
6480
|
-
|
|
6481
|
-
|
|
6482
|
-
|
|
6483
|
-
|
|
7651
|
+
else {
|
|
7652
|
+
request['symbol'] = market['id'];
|
|
7653
|
+
if (market['spot']) {
|
|
7654
|
+
if (marginMode !== undefined) {
|
|
7655
|
+
if (since === undefined) {
|
|
7656
|
+
request['startTime'] = this.milliseconds() - 7776000000;
|
|
7657
|
+
}
|
|
7658
|
+
if (marginMode === 'isolated') {
|
|
7659
|
+
response = await this.privateMarginGetV2MarginIsolatedFills(this.extend(request, params));
|
|
7660
|
+
}
|
|
7661
|
+
else if (marginMode === 'cross') {
|
|
7662
|
+
response = await this.privateMarginGetV2MarginCrossedFills(this.extend(request, params));
|
|
7663
|
+
}
|
|
6484
7664
|
}
|
|
6485
|
-
else
|
|
6486
|
-
response = await this.
|
|
7665
|
+
else {
|
|
7666
|
+
response = await this.privateSpotGetV2SpotTradeFills(this.extend(request, params));
|
|
6487
7667
|
}
|
|
6488
7668
|
}
|
|
6489
7669
|
else {
|
|
6490
|
-
|
|
7670
|
+
let productType = undefined;
|
|
7671
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
7672
|
+
request['productType'] = productType;
|
|
7673
|
+
response = await this.privateMixGetV2MixOrderFills(this.extend(request, params));
|
|
6491
7674
|
}
|
|
6492
7675
|
}
|
|
6493
|
-
else {
|
|
6494
|
-
let productType = undefined;
|
|
6495
|
-
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
6496
|
-
request['productType'] = productType;
|
|
6497
|
-
response = await this.privateMixGetV2MixOrderFills(this.extend(request, params));
|
|
6498
|
-
}
|
|
6499
7676
|
//
|
|
6500
7677
|
// spot
|
|
6501
7678
|
//
|
|
@@ -6595,10 +7772,46 @@ class bitget extends bitget$1 {
|
|
|
6595
7772
|
// }
|
|
6596
7773
|
// }
|
|
6597
7774
|
//
|
|
7775
|
+
// uta
|
|
7776
|
+
//
|
|
7777
|
+
// {
|
|
7778
|
+
// "code": "00000",
|
|
7779
|
+
// "msg": "success",
|
|
7780
|
+
// "requestTime": 1751099666579,
|
|
7781
|
+
// "data": {
|
|
7782
|
+
// "list": [
|
|
7783
|
+
// {
|
|
7784
|
+
// "execId": "1322441401010528257",
|
|
7785
|
+
// "orderId": "1322441400976261120",
|
|
7786
|
+
// "category": "USDT-FUTURES",
|
|
7787
|
+
// "symbol": "BTCUSDT",
|
|
7788
|
+
// "orderType": "market",
|
|
7789
|
+
// "side": "sell",
|
|
7790
|
+
// "execPrice": "107005.4",
|
|
7791
|
+
// "execQty": "0.0001",
|
|
7792
|
+
// "execValue": "10.7005",
|
|
7793
|
+
// "tradeScope": "taker",
|
|
7794
|
+
// "feeDetail": [{
|
|
7795
|
+
// "feeCoin": "USDT",
|
|
7796
|
+
// "fee":"0.00642032"
|
|
7797
|
+
// }],
|
|
7798
|
+
// "createdTime": "1751020520451",
|
|
7799
|
+
// "updatedTime": "1751020520458",
|
|
7800
|
+
// "execPnl": "0.00017"
|
|
7801
|
+
// },
|
|
7802
|
+
// ],
|
|
7803
|
+
// "cursor": "1322061241878880257"
|
|
7804
|
+
// }
|
|
7805
|
+
// }
|
|
7806
|
+
//
|
|
6598
7807
|
const data = this.safeValue(response, 'data');
|
|
6599
|
-
if (
|
|
6600
|
-
const
|
|
6601
|
-
return this.parseTrades(
|
|
7808
|
+
if (uta) {
|
|
7809
|
+
const fills = this.safeList(data, 'list', []);
|
|
7810
|
+
return this.parseTrades(fills, market, since, limit);
|
|
7811
|
+
}
|
|
7812
|
+
else if ((market['swap'] || (market['future']))) {
|
|
7813
|
+
const fills = this.safeList(data, 'fillList', []);
|
|
7814
|
+
return this.parseTrades(fills, market, since, limit);
|
|
6602
7815
|
}
|
|
6603
7816
|
else if (marginMode !== undefined) {
|
|
6604
7817
|
const fills = this.safeList(data, 'fills', []);
|
|
@@ -6611,8 +7824,10 @@ class bitget extends bitget$1 {
|
|
|
6611
7824
|
* @name bitget#fetchPosition
|
|
6612
7825
|
* @description fetch data on a single open contract trade position
|
|
6613
7826
|
* @see https://www.bitget.com/api-doc/contract/position/get-single-position
|
|
7827
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Get-Position
|
|
6614
7828
|
* @param {string} symbol unified market symbol of the market the position is held in
|
|
6615
7829
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
7830
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
6616
7831
|
* @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
|
|
6617
7832
|
*/
|
|
6618
7833
|
async fetchPosition(symbol, params = {}) {
|
|
@@ -6622,42 +7837,92 @@ class bitget extends bitget$1 {
|
|
|
6622
7837
|
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
6623
7838
|
const request = {
|
|
6624
7839
|
'symbol': market['id'],
|
|
6625
|
-
'marginCoin': market['settleId'],
|
|
6626
|
-
'productType': productType,
|
|
6627
7840
|
};
|
|
6628
|
-
|
|
6629
|
-
|
|
6630
|
-
|
|
6631
|
-
|
|
6632
|
-
|
|
6633
|
-
|
|
6634
|
-
|
|
6635
|
-
|
|
6636
|
-
|
|
6637
|
-
|
|
6638
|
-
|
|
6639
|
-
|
|
6640
|
-
|
|
6641
|
-
|
|
6642
|
-
|
|
6643
|
-
|
|
6644
|
-
|
|
6645
|
-
|
|
6646
|
-
|
|
6647
|
-
|
|
6648
|
-
|
|
6649
|
-
|
|
6650
|
-
|
|
6651
|
-
|
|
6652
|
-
|
|
6653
|
-
|
|
6654
|
-
|
|
6655
|
-
|
|
6656
|
-
|
|
6657
|
-
|
|
6658
|
-
|
|
6659
|
-
|
|
6660
|
-
|
|
7841
|
+
let response = undefined;
|
|
7842
|
+
let uta = undefined;
|
|
7843
|
+
let result = undefined;
|
|
7844
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchPosition', 'uta', false);
|
|
7845
|
+
if (uta) {
|
|
7846
|
+
request['category'] = productType;
|
|
7847
|
+
response = await this.privateUtaGetV3PositionCurrentPosition(this.extend(request, params));
|
|
7848
|
+
//
|
|
7849
|
+
// {
|
|
7850
|
+
// "code": "00000",
|
|
7851
|
+
// "msg": "success",
|
|
7852
|
+
// "requestTime": 1750929905423,
|
|
7853
|
+
// "data": {
|
|
7854
|
+
// "list": [
|
|
7855
|
+
// {
|
|
7856
|
+
// "category": "USDT-FUTURES",
|
|
7857
|
+
// "symbol": "BTCUSDT",
|
|
7858
|
+
// "marginCoin": "USDT",
|
|
7859
|
+
// "holdMode": "hedge_mode",
|
|
7860
|
+
// "posSide": "long",
|
|
7861
|
+
// "marginMode": "crossed",
|
|
7862
|
+
// "positionBalance": "5.435199",
|
|
7863
|
+
// "available": "0.001",
|
|
7864
|
+
// "frozen": "0",
|
|
7865
|
+
// "total": "0.001",
|
|
7866
|
+
// "leverage": "20",
|
|
7867
|
+
// "curRealisedPnl": "0",
|
|
7868
|
+
// "avgPrice": "107410.3",
|
|
7869
|
+
// "positionStatus": "normal",
|
|
7870
|
+
// "unrealisedPnl": "0.0047",
|
|
7871
|
+
// "liquidationPrice": "0",
|
|
7872
|
+
// "mmr": "0.004",
|
|
7873
|
+
// "profitRate": "0.0008647337475591",
|
|
7874
|
+
// "markPrice": "107415.3",
|
|
7875
|
+
// "breakEvenPrice": "107539.2",
|
|
7876
|
+
// "totalFunding": "0",
|
|
7877
|
+
// "openFeeTotal": "-0.06444618",
|
|
7878
|
+
// "closeFeeTotal": "0",
|
|
7879
|
+
// "createdTime": "1750495670699",
|
|
7880
|
+
// "updatedTime": "1750929883465"
|
|
7881
|
+
// }
|
|
7882
|
+
// ]
|
|
7883
|
+
// }
|
|
7884
|
+
// }
|
|
7885
|
+
//
|
|
7886
|
+
const data = this.safeDict(response, 'data', {});
|
|
7887
|
+
result = this.safeList(data, 'list', []);
|
|
7888
|
+
}
|
|
7889
|
+
else {
|
|
7890
|
+
request['marginCoin'] = market['settleId'];
|
|
7891
|
+
request['productType'] = productType;
|
|
7892
|
+
response = await this.privateMixGetV2MixPositionSinglePosition(this.extend(request, params));
|
|
7893
|
+
//
|
|
7894
|
+
// {
|
|
7895
|
+
// "code": "00000",
|
|
7896
|
+
// "msg": "success",
|
|
7897
|
+
// "requestTime": 1700807531673,
|
|
7898
|
+
// "data": [
|
|
7899
|
+
// {
|
|
7900
|
+
// "marginCoin": "USDT",
|
|
7901
|
+
// "symbol": "BTCUSDT",
|
|
7902
|
+
// "holdSide": "long",
|
|
7903
|
+
// "openDelegateSize": "0",
|
|
7904
|
+
// "marginSize": "3.73555",
|
|
7905
|
+
// "available": "0.002",
|
|
7906
|
+
// "locked": "0",
|
|
7907
|
+
// "total": "0.002",
|
|
7908
|
+
// "leverage": "20",
|
|
7909
|
+
// "achievedProfits": "0",
|
|
7910
|
+
// "openPriceAvg": "37355.5",
|
|
7911
|
+
// "marginMode": "crossed",
|
|
7912
|
+
// "posMode": "hedge_mode",
|
|
7913
|
+
// "unrealizedPL": "0.007",
|
|
7914
|
+
// "liquidationPrice": "31724.970702417",
|
|
7915
|
+
// "keepMarginRate": "0.004",
|
|
7916
|
+
// "markPrice": "37359",
|
|
7917
|
+
// "marginRatio": "0.029599540355",
|
|
7918
|
+
// "cTime": "1700807507275"
|
|
7919
|
+
// }
|
|
7920
|
+
// ]
|
|
7921
|
+
// }
|
|
7922
|
+
//
|
|
7923
|
+
result = this.safeList(response, 'data', []);
|
|
7924
|
+
}
|
|
7925
|
+
const first = this.safeDict(result, 0, {});
|
|
6661
7926
|
return this.parsePosition(first, market);
|
|
6662
7927
|
}
|
|
6663
7928
|
/**
|
|
@@ -6837,6 +8102,36 @@ class bitget extends bitget$1 {
|
|
|
6837
8102
|
// "cTime": "1700807507275"
|
|
6838
8103
|
// }
|
|
6839
8104
|
//
|
|
8105
|
+
// uta: fetchPosition
|
|
8106
|
+
//
|
|
8107
|
+
// {
|
|
8108
|
+
// "category": "USDT-FUTURES",
|
|
8109
|
+
// "symbol": "BTCUSDT",
|
|
8110
|
+
// "marginCoin": "USDT",
|
|
8111
|
+
// "holdMode": "hedge_mode",
|
|
8112
|
+
// "posSide": "long",
|
|
8113
|
+
// "marginMode": "crossed",
|
|
8114
|
+
// "positionBalance": "5.435199",
|
|
8115
|
+
// "available": "0.001",
|
|
8116
|
+
// "frozen": "0",
|
|
8117
|
+
// "total": "0.001",
|
|
8118
|
+
// "leverage": "20",
|
|
8119
|
+
// "curRealisedPnl": "0",
|
|
8120
|
+
// "avgPrice": "107410.3",
|
|
8121
|
+
// "positionStatus": "normal",
|
|
8122
|
+
// "unrealisedPnl": "0.0047",
|
|
8123
|
+
// "liquidationPrice": "0",
|
|
8124
|
+
// "mmr": "0.004",
|
|
8125
|
+
// "profitRate": "0.0008647337475591",
|
|
8126
|
+
// "markPrice": "107415.3",
|
|
8127
|
+
// "breakEvenPrice": "107539.2",
|
|
8128
|
+
// "totalFunding": "0",
|
|
8129
|
+
// "openFeeTotal": "-0.06444618",
|
|
8130
|
+
// "closeFeeTotal": "0",
|
|
8131
|
+
// "createdTime": "1750495670699",
|
|
8132
|
+
// "updatedTime": "1750929883465"
|
|
8133
|
+
// }
|
|
8134
|
+
//
|
|
6840
8135
|
// fetchPositions: privateMixGetV2MixPositionAllPosition
|
|
6841
8136
|
//
|
|
6842
8137
|
// {
|
|
@@ -6888,15 +8183,38 @@ class bitget extends bitget$1 {
|
|
|
6888
8183
|
// "clientOid": "1120923953904893956"
|
|
6889
8184
|
// }
|
|
6890
8185
|
//
|
|
8186
|
+
// uta: fetchPositionsHistory
|
|
8187
|
+
//
|
|
8188
|
+
// {
|
|
8189
|
+
// "positionId": "1322441328637100049",
|
|
8190
|
+
// "category": "USDT-FUTURES",
|
|
8191
|
+
// "symbol": "BTCUSDT",
|
|
8192
|
+
// "marginCoin": "USDT",
|
|
8193
|
+
// "holdMode": "hedge_mode",
|
|
8194
|
+
// "posSide": "long",
|
|
8195
|
+
// "marginMode": "crossed",
|
|
8196
|
+
// "openPriceAvg": "107003.7",
|
|
8197
|
+
// "closePriceAvg": "107005.4",
|
|
8198
|
+
// "openTotalPos": "0.0001",
|
|
8199
|
+
// "closeTotalPos": "0.0001",
|
|
8200
|
+
// "cumRealisedPnl": "0.00017",
|
|
8201
|
+
// "netProfit": "-0.01267055",
|
|
8202
|
+
// "totalFunding": "0",
|
|
8203
|
+
// "openFeeTotal": "-0.00642022",
|
|
8204
|
+
// "closeFeeTotal": "-0.00642032",
|
|
8205
|
+
// "createdTime": "1751020503195",
|
|
8206
|
+
// "updatedTime": "1751020520458"
|
|
8207
|
+
// }
|
|
8208
|
+
//
|
|
6891
8209
|
const marketId = this.safeString(position, 'symbol');
|
|
6892
8210
|
market = this.safeMarket(marketId, market, undefined, 'contract');
|
|
6893
8211
|
const symbol = market['symbol'];
|
|
6894
|
-
const timestamp = this.
|
|
8212
|
+
const timestamp = this.safeIntegerN(position, ['cTime', 'ctime', 'createdTime']);
|
|
6895
8213
|
let marginMode = this.safeString(position, 'marginMode');
|
|
6896
8214
|
let collateral = undefined;
|
|
6897
8215
|
let initialMargin = undefined;
|
|
6898
|
-
const unrealizedPnl = this.
|
|
6899
|
-
const rawCollateral = this.
|
|
8216
|
+
const unrealizedPnl = this.safeString2(position, 'unrealizedPL', 'unrealisedPnl');
|
|
8217
|
+
const rawCollateral = this.safeString2(position, 'marginSize', 'positionBalance');
|
|
6900
8218
|
if (marginMode === 'isolated') {
|
|
6901
8219
|
collateral = Precise["default"].stringAdd(rawCollateral, unrealizedPnl);
|
|
6902
8220
|
}
|
|
@@ -6904,7 +8222,7 @@ class bitget extends bitget$1 {
|
|
|
6904
8222
|
marginMode = 'cross';
|
|
6905
8223
|
initialMargin = rawCollateral;
|
|
6906
8224
|
}
|
|
6907
|
-
const holdMode = this.
|
|
8225
|
+
const holdMode = this.safeString2(position, 'posMode', 'holdMode');
|
|
6908
8226
|
let hedged = undefined;
|
|
6909
8227
|
if (holdMode === 'hedge_mode') {
|
|
6910
8228
|
hedged = true;
|
|
@@ -6912,12 +8230,12 @@ class bitget extends bitget$1 {
|
|
|
6912
8230
|
else if (holdMode === 'one_way_mode') {
|
|
6913
8231
|
hedged = false;
|
|
6914
8232
|
}
|
|
6915
|
-
const side = this.
|
|
8233
|
+
const side = this.safeString2(position, 'holdSide', 'posSide');
|
|
6916
8234
|
const leverage = this.safeString(position, 'leverage');
|
|
6917
8235
|
const contractSizeNumber = this.safeValue(market, 'contractSize');
|
|
6918
8236
|
const contractSize = this.numberToString(contractSizeNumber);
|
|
6919
|
-
const baseAmount = this.
|
|
6920
|
-
const entryPrice = this.
|
|
8237
|
+
const baseAmount = this.safeString2(position, 'total', 'openTotalPos');
|
|
8238
|
+
const entryPrice = this.safeStringN(position, ['openPriceAvg', 'openAvgPrice', 'avgPrice']);
|
|
6921
8239
|
const maintenanceMarginPercentage = this.safeString(position, 'keepMarginRate');
|
|
6922
8240
|
const openNotional = Precise["default"].stringMul(entryPrice, baseAmount);
|
|
6923
8241
|
if (initialMargin === undefined) {
|
|
@@ -6955,31 +8273,31 @@ class bitget extends bitget$1 {
|
|
|
6955
8273
|
const percentage = Precise["default"].stringMul(Precise["default"].stringDiv(unrealizedPnl, initialMargin, 4), '100');
|
|
6956
8274
|
return this.safePosition({
|
|
6957
8275
|
'info': position,
|
|
6958
|
-
'id': this.
|
|
8276
|
+
'id': this.safeString2(position, 'orderId', 'positionId'),
|
|
6959
8277
|
'symbol': symbol,
|
|
6960
8278
|
'notional': this.parseNumber(notional),
|
|
6961
8279
|
'marginMode': marginMode,
|
|
6962
8280
|
'liquidationPrice': liquidationPrice,
|
|
6963
8281
|
'entryPrice': this.parseNumber(entryPrice),
|
|
6964
8282
|
'unrealizedPnl': this.parseNumber(unrealizedPnl),
|
|
6965
|
-
'realizedPnl': this.
|
|
8283
|
+
'realizedPnl': this.safeNumberN(position, ['pnl', 'curRealisedPnl', 'cumRealisedPnl']),
|
|
6966
8284
|
'percentage': this.parseNumber(percentage),
|
|
6967
8285
|
'contracts': contracts,
|
|
6968
8286
|
'contractSize': contractSizeNumber,
|
|
6969
8287
|
'markPrice': this.parseNumber(markPrice),
|
|
6970
|
-
'lastPrice': this.
|
|
8288
|
+
'lastPrice': this.safeNumber2(position, 'closeAvgPrice', 'closePriceAvg'),
|
|
6971
8289
|
'side': side,
|
|
6972
8290
|
'hedged': hedged,
|
|
6973
8291
|
'timestamp': timestamp,
|
|
6974
8292
|
'datetime': this.iso8601(timestamp),
|
|
6975
|
-
'lastUpdateTimestamp': this.
|
|
8293
|
+
'lastUpdateTimestamp': this.safeInteger2(position, 'utime', 'updatedTime'),
|
|
6976
8294
|
'maintenanceMargin': this.parseNumber(maintenanceMargin),
|
|
6977
8295
|
'maintenanceMarginPercentage': this.parseNumber(maintenanceMarginPercentage),
|
|
6978
8296
|
'collateral': this.parseNumber(collateral),
|
|
6979
8297
|
'initialMargin': this.parseNumber(initialMargin),
|
|
6980
8298
|
'initialMarginPercentage': this.parseNumber(initialMarginPercentage),
|
|
6981
8299
|
'leverage': this.parseNumber(leverage),
|
|
6982
|
-
'marginRatio': this.
|
|
8300
|
+
'marginRatio': this.safeNumber2(position, 'marginRatio', 'mmr'),
|
|
6983
8301
|
'stopLossPrice': undefined,
|
|
6984
8302
|
'takeProfitPrice': undefined,
|
|
6985
8303
|
});
|
|
@@ -6989,10 +8307,12 @@ class bitget extends bitget$1 {
|
|
|
6989
8307
|
* @name bitget#fetchFundingRateHistory
|
|
6990
8308
|
* @description fetches historical funding rate prices
|
|
6991
8309
|
* @see https://www.bitget.com/api-doc/contract/market/Get-History-Funding-Rate
|
|
8310
|
+
* @see https://www.bitget.com/api-doc/uta/public/Get-History-Funding-Rate
|
|
6992
8311
|
* @param {string} symbol unified symbol of the market to fetch the funding rate history for
|
|
6993
8312
|
* @param {int} [since] timestamp in ms of the earliest funding rate to fetch
|
|
6994
8313
|
* @param {int} [limit] the maximum amount of funding rate structures to fetch
|
|
6995
8314
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
8315
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
6996
8316
|
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
6997
8317
|
* @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure}
|
|
6998
8318
|
*/
|
|
@@ -7001,45 +8321,74 @@ class bitget extends bitget$1 {
|
|
|
7001
8321
|
throw new errors.ArgumentsRequired(this.id + ' fetchFundingRateHistory() requires a symbol argument');
|
|
7002
8322
|
}
|
|
7003
8323
|
await this.loadMarkets();
|
|
7004
|
-
let paginate = false;
|
|
7005
|
-
[paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
|
|
7006
|
-
if (paginate) {
|
|
7007
|
-
return await this.fetchPaginatedCallIncremental('fetchFundingRateHistory', symbol, since, limit, params, 'pageNo', 100);
|
|
7008
|
-
}
|
|
7009
8324
|
const market = this.market(symbol);
|
|
7010
|
-
let productType = undefined;
|
|
7011
|
-
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
7012
8325
|
const request = {
|
|
7013
8326
|
'symbol': market['id'],
|
|
7014
|
-
'productType': productType,
|
|
7015
|
-
// 'pageSize': limit, // default 20
|
|
7016
|
-
// 'pageNo': 1,
|
|
7017
8327
|
};
|
|
7018
|
-
|
|
7019
|
-
|
|
8328
|
+
let productType = undefined;
|
|
8329
|
+
let uta = undefined;
|
|
8330
|
+
let response = undefined;
|
|
8331
|
+
let result = undefined;
|
|
8332
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
8333
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'uta', false);
|
|
8334
|
+
if (uta) {
|
|
8335
|
+
if (limit !== undefined) {
|
|
8336
|
+
request['limit'] = limit;
|
|
8337
|
+
}
|
|
8338
|
+
request['category'] = productType;
|
|
8339
|
+
response = await this.publicUtaGetV3MarketHistoryFundRate(this.extend(request, params));
|
|
8340
|
+
//
|
|
8341
|
+
// {
|
|
8342
|
+
// "code": "00000",
|
|
8343
|
+
// "msg": "success",
|
|
8344
|
+
// "requestTime": 1750435113658,
|
|
8345
|
+
// "data": {
|
|
8346
|
+
// "resultList": [
|
|
8347
|
+
// {
|
|
8348
|
+
// "symbol": "BTCUSDT",
|
|
8349
|
+
// "fundingRate": "-0.000017",
|
|
8350
|
+
// "fundingRateTimestamp": "1750431600000"
|
|
8351
|
+
// },
|
|
8352
|
+
// ]
|
|
8353
|
+
// }
|
|
8354
|
+
// }
|
|
8355
|
+
//
|
|
8356
|
+
const data = this.safeDict(response, 'data', {});
|
|
8357
|
+
result = this.safeList(data, 'resultList', []);
|
|
8358
|
+
}
|
|
8359
|
+
else {
|
|
8360
|
+
let paginate = false;
|
|
8361
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
|
|
8362
|
+
if (paginate) {
|
|
8363
|
+
return await this.fetchPaginatedCallIncremental('fetchFundingRateHistory', symbol, since, limit, params, 'pageNo', 100);
|
|
8364
|
+
}
|
|
8365
|
+
if (limit !== undefined) {
|
|
8366
|
+
request['pageSize'] = limit;
|
|
8367
|
+
}
|
|
8368
|
+
request['productType'] = productType;
|
|
8369
|
+
response = await this.publicMixGetV2MixMarketHistoryFundRate(this.extend(request, params));
|
|
8370
|
+
//
|
|
8371
|
+
// {
|
|
8372
|
+
// "code": "00000",
|
|
8373
|
+
// "msg": "success",
|
|
8374
|
+
// "requestTime": 1652406728393,
|
|
8375
|
+
// "data": [
|
|
8376
|
+
// {
|
|
8377
|
+
// "symbol": "BTCUSDT",
|
|
8378
|
+
// "fundingRate": "-0.0003",
|
|
8379
|
+
// "fundingTime": "1652396400000"
|
|
8380
|
+
// },
|
|
8381
|
+
// ]
|
|
8382
|
+
// }
|
|
8383
|
+
//
|
|
8384
|
+
result = this.safeList(response, 'data', []);
|
|
7020
8385
|
}
|
|
7021
|
-
const response = await this.publicMixGetV2MixMarketHistoryFundRate(this.extend(request, params));
|
|
7022
|
-
//
|
|
7023
|
-
// {
|
|
7024
|
-
// "code": "00000",
|
|
7025
|
-
// "msg": "success",
|
|
7026
|
-
// "requestTime": 1652406728393,
|
|
7027
|
-
// "data": [
|
|
7028
|
-
// {
|
|
7029
|
-
// "symbol": "BTCUSDT",
|
|
7030
|
-
// "fundingRate": "-0.0003",
|
|
7031
|
-
// "fundingTime": "1652396400000"
|
|
7032
|
-
// },
|
|
7033
|
-
// ]
|
|
7034
|
-
// }
|
|
7035
|
-
//
|
|
7036
|
-
const data = this.safeValue(response, 'data', []);
|
|
7037
8386
|
const rates = [];
|
|
7038
|
-
for (let i = 0; i <
|
|
7039
|
-
const entry =
|
|
8387
|
+
for (let i = 0; i < result.length; i++) {
|
|
8388
|
+
const entry = result[i];
|
|
7040
8389
|
const marketId = this.safeString(entry, 'symbol');
|
|
7041
8390
|
const symbolInner = this.safeSymbol(marketId, market);
|
|
7042
|
-
const timestamp = this.
|
|
8391
|
+
const timestamp = this.safeInteger2(entry, 'fundingTime', 'fundingRateTimestamp');
|
|
7043
8392
|
rates.push({
|
|
7044
8393
|
'info': entry,
|
|
7045
8394
|
'symbol': symbolInner,
|
|
@@ -7057,8 +8406,10 @@ class bitget extends bitget$1 {
|
|
|
7057
8406
|
* @description fetch the current funding rate
|
|
7058
8407
|
* @see https://www.bitget.com/api-doc/contract/market/Get-Current-Funding-Rate
|
|
7059
8408
|
* @see https://www.bitget.com/api-doc/contract/market/Get-Symbol-Next-Funding-Time
|
|
8409
|
+
* @see https://www.bitget.com/api-doc/uta/public/Get-Current-Funding-Rate
|
|
7060
8410
|
* @param {string} symbol unified market symbol
|
|
7061
8411
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
8412
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
7062
8413
|
* @param {string} [params.method] either (default) 'publicMixGetV2MixMarketCurrentFundRate' or 'publicMixGetV2MixMarketFundingTime'
|
|
7063
8414
|
* @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
|
|
7064
8415
|
*/
|
|
@@ -7072,24 +8423,23 @@ class bitget extends bitget$1 {
|
|
|
7072
8423
|
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
7073
8424
|
const request = {
|
|
7074
8425
|
'symbol': market['id'],
|
|
7075
|
-
'productType': productType,
|
|
7076
8426
|
};
|
|
7077
|
-
let
|
|
7078
|
-
[method, params] = this.handleOptionAndParams(params, 'fetchFundingRate', 'method', 'publicMixGetV2MixMarketCurrentFundRate');
|
|
8427
|
+
let uta = undefined;
|
|
7079
8428
|
let response = undefined;
|
|
7080
|
-
|
|
7081
|
-
|
|
8429
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchFundingRate', 'uta', false);
|
|
8430
|
+
if (uta) {
|
|
8431
|
+
response = await this.publicUtaGetV3MarketCurrentFundRate(this.extend(request, params));
|
|
7082
8432
|
//
|
|
7083
8433
|
// {
|
|
7084
8434
|
// "code": "00000",
|
|
7085
8435
|
// "msg": "success",
|
|
7086
|
-
// "requestTime":
|
|
8436
|
+
// "requestTime": 1750897372153,
|
|
7087
8437
|
// "data": [
|
|
7088
8438
|
// {
|
|
7089
8439
|
// "symbol": "BTCUSDT",
|
|
7090
|
-
// "fundingRate": "
|
|
8440
|
+
// "fundingRate": "0.00001",
|
|
7091
8441
|
// "fundingRateInterval": "8",
|
|
7092
|
-
// "nextUpdate": "
|
|
8442
|
+
// "nextUpdate": "1750924800000",
|
|
7093
8443
|
// "minFundingRate": "-0.003",
|
|
7094
8444
|
// "maxFundingRate": "0.003"
|
|
7095
8445
|
// }
|
|
@@ -7097,22 +8447,47 @@ class bitget extends bitget$1 {
|
|
|
7097
8447
|
// }
|
|
7098
8448
|
//
|
|
7099
8449
|
}
|
|
7100
|
-
else
|
|
7101
|
-
|
|
7102
|
-
|
|
7103
|
-
|
|
7104
|
-
|
|
7105
|
-
|
|
7106
|
-
|
|
7107
|
-
|
|
7108
|
-
|
|
7109
|
-
|
|
7110
|
-
|
|
7111
|
-
|
|
7112
|
-
|
|
7113
|
-
|
|
7114
|
-
|
|
7115
|
-
|
|
8450
|
+
else {
|
|
8451
|
+
request['productType'] = productType;
|
|
8452
|
+
let method = undefined;
|
|
8453
|
+
[method, params] = this.handleOptionAndParams(params, 'fetchFundingRate', 'method', 'publicMixGetV2MixMarketCurrentFundRate');
|
|
8454
|
+
if (method === 'publicMixGetV2MixMarketCurrentFundRate') {
|
|
8455
|
+
response = await this.publicMixGetV2MixMarketCurrentFundRate(this.extend(request, params));
|
|
8456
|
+
//
|
|
8457
|
+
// {
|
|
8458
|
+
// "code": "00000",
|
|
8459
|
+
// "msg": "success",
|
|
8460
|
+
// "requestTime": 1745500709429,
|
|
8461
|
+
// "data": [
|
|
8462
|
+
// {
|
|
8463
|
+
// "symbol": "BTCUSDT",
|
|
8464
|
+
// "fundingRate": "-0.000013",
|
|
8465
|
+
// "fundingRateInterval": "8",
|
|
8466
|
+
// "nextUpdate": "1745510400000",
|
|
8467
|
+
// "minFundingRate": "-0.003",
|
|
8468
|
+
// "maxFundingRate": "0.003"
|
|
8469
|
+
// }
|
|
8470
|
+
// ]
|
|
8471
|
+
// }
|
|
8472
|
+
//
|
|
8473
|
+
}
|
|
8474
|
+
else if (method === 'publicMixGetV2MixMarketFundingTime') {
|
|
8475
|
+
response = await this.publicMixGetV2MixMarketFundingTime(this.extend(request, params));
|
|
8476
|
+
//
|
|
8477
|
+
// {
|
|
8478
|
+
// "code": "00000",
|
|
8479
|
+
// "msg": "success",
|
|
8480
|
+
// "requestTime": 1745402092428,
|
|
8481
|
+
// "data": [
|
|
8482
|
+
// {
|
|
8483
|
+
// "symbol": "BTCUSDT",
|
|
8484
|
+
// "nextFundingTime": "1745424000000",
|
|
8485
|
+
// "ratePeriod": "8"
|
|
8486
|
+
// }
|
|
8487
|
+
// ]
|
|
8488
|
+
// }
|
|
8489
|
+
//
|
|
8490
|
+
}
|
|
7116
8491
|
}
|
|
7117
8492
|
const data = this.safeList(response, 'data', []);
|
|
7118
8493
|
return this.parseFundingRate(data[0], market);
|
|
@@ -7178,7 +8553,7 @@ class bitget extends bitget$1 {
|
|
|
7178
8553
|
}
|
|
7179
8554
|
parseFundingRate(contract, market = undefined) {
|
|
7180
8555
|
//
|
|
7181
|
-
// fetchFundingRate: publicMixGetV2MixMarketCurrentFundRate
|
|
8556
|
+
// fetchFundingRate: publicMixGetV2MixMarketCurrentFundRate, publicUtaGetV3MarketCurrentFundRate
|
|
7182
8557
|
//
|
|
7183
8558
|
// {
|
|
7184
8559
|
// "symbol": "BTCUSDT",
|
|
@@ -7536,10 +8911,13 @@ class bitget extends bitget$1 {
|
|
|
7536
8911
|
* @name bitget#setLeverage
|
|
7537
8912
|
* @description set the level of leverage for a market
|
|
7538
8913
|
* @see https://www.bitget.com/api-doc/contract/account/Change-Leverage
|
|
8914
|
+
* @see https://www.bitget.com/api-doc/uta/account/Change-Leverage
|
|
7539
8915
|
* @param {int} leverage the rate of leverage
|
|
7540
8916
|
* @param {string} symbol unified market symbol
|
|
7541
8917
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
7542
8918
|
* @param {string} [params.holdSide] *isolated only* position direction, 'long' or 'short'
|
|
8919
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
8920
|
+
* @param {boolean} [params.posSide] required for uta isolated margin, long or short
|
|
7543
8921
|
* @returns {object} response from the exchange
|
|
7544
8922
|
*/
|
|
7545
8923
|
async setLeverage(leverage, symbol = undefined, params = {}) {
|
|
@@ -7552,27 +8930,51 @@ class bitget extends bitget$1 {
|
|
|
7552
8930
|
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
7553
8931
|
const request = {
|
|
7554
8932
|
'symbol': market['id'],
|
|
7555
|
-
'marginCoin': market['settleId'],
|
|
7556
8933
|
'leverage': this.numberToString(leverage),
|
|
7557
|
-
'productType': productType,
|
|
7558
|
-
// 'holdSide': 'long',
|
|
7559
8934
|
};
|
|
7560
|
-
|
|
7561
|
-
|
|
7562
|
-
|
|
7563
|
-
|
|
7564
|
-
|
|
7565
|
-
|
|
7566
|
-
|
|
7567
|
-
|
|
7568
|
-
|
|
7569
|
-
|
|
7570
|
-
|
|
7571
|
-
|
|
7572
|
-
|
|
7573
|
-
|
|
7574
|
-
|
|
7575
|
-
|
|
8935
|
+
let uta = undefined;
|
|
8936
|
+
let response = undefined;
|
|
8937
|
+
[uta, params] = this.handleOptionAndParams(params, 'setLeverage', 'uta', false);
|
|
8938
|
+
if (uta) {
|
|
8939
|
+
if (productType === 'SPOT') {
|
|
8940
|
+
let marginMode = undefined;
|
|
8941
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchTrades', params);
|
|
8942
|
+
if (marginMode !== undefined) {
|
|
8943
|
+
productType = 'MARGIN';
|
|
8944
|
+
}
|
|
8945
|
+
}
|
|
8946
|
+
request['coin'] = market['settleId'];
|
|
8947
|
+
request['category'] = productType;
|
|
8948
|
+
response = await this.privateUtaPostV3AccountSetLeverage(this.extend(request, params));
|
|
8949
|
+
//
|
|
8950
|
+
// {
|
|
8951
|
+
// "code": "00000",
|
|
8952
|
+
// "msg": "success",
|
|
8953
|
+
// "requestTime": 1752815940833,
|
|
8954
|
+
// "data": "success"
|
|
8955
|
+
// }
|
|
8956
|
+
//
|
|
8957
|
+
}
|
|
8958
|
+
else {
|
|
8959
|
+
request['marginCoin'] = market['settleId'];
|
|
8960
|
+
request['productType'] = productType;
|
|
8961
|
+
response = await this.privateMixPostV2MixAccountSetLeverage(this.extend(request, params));
|
|
8962
|
+
//
|
|
8963
|
+
// {
|
|
8964
|
+
// "code": "00000",
|
|
8965
|
+
// "msg": "success",
|
|
8966
|
+
// "requestTime": 1700864711517,
|
|
8967
|
+
// "data": {
|
|
8968
|
+
// "symbol": "BTCUSDT",
|
|
8969
|
+
// "marginCoin": "USDT",
|
|
8970
|
+
// "longLeverage": "25",
|
|
8971
|
+
// "shortLeverage": "25",
|
|
8972
|
+
// "crossMarginLeverage": "25",
|
|
8973
|
+
// "marginMode": "crossed"
|
|
8974
|
+
// }
|
|
8975
|
+
// }
|
|
8976
|
+
//
|
|
8977
|
+
}
|
|
7576
8978
|
return response;
|
|
7577
8979
|
}
|
|
7578
8980
|
/**
|
|
@@ -7628,36 +9030,54 @@ class bitget extends bitget$1 {
|
|
|
7628
9030
|
* @name bitget#setPositionMode
|
|
7629
9031
|
* @description set hedged to true or false for a market
|
|
7630
9032
|
* @see https://www.bitget.com/api-doc/contract/account/Change-Hold-Mode
|
|
9033
|
+
* @see https://www.bitget.com/api-doc/uta/account/Change-Position-Mode
|
|
7631
9034
|
* @param {bool} hedged set to true to use dualSidePosition
|
|
7632
9035
|
* @param {string} symbol not used by bitget setPositionMode ()
|
|
7633
9036
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
7634
|
-
* @param {string} [params.productType] required if symbol is undefined: 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
|
|
9037
|
+
* @param {string} [params.productType] required if not uta and symbol is undefined: 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
|
|
9038
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
7635
9039
|
* @returns {object} response from the exchange
|
|
7636
9040
|
*/
|
|
7637
9041
|
async setPositionMode(hedged, symbol = undefined, params = {}) {
|
|
7638
9042
|
await this.loadMarkets();
|
|
7639
9043
|
const posMode = hedged ? 'hedge_mode' : 'one_way_mode';
|
|
9044
|
+
const request = {};
|
|
7640
9045
|
let market = undefined;
|
|
7641
9046
|
if (symbol !== undefined) {
|
|
7642
9047
|
market = this.market(symbol);
|
|
7643
9048
|
}
|
|
7644
9049
|
let productType = undefined;
|
|
9050
|
+
let uta = undefined;
|
|
9051
|
+
let response = undefined;
|
|
7645
9052
|
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
7646
|
-
|
|
7647
|
-
|
|
7648
|
-
'
|
|
7649
|
-
|
|
7650
|
-
|
|
7651
|
-
|
|
7652
|
-
|
|
7653
|
-
|
|
7654
|
-
|
|
7655
|
-
|
|
7656
|
-
|
|
7657
|
-
|
|
7658
|
-
|
|
7659
|
-
|
|
7660
|
-
|
|
9053
|
+
[uta, params] = this.handleOptionAndParams(params, 'setPositionMode', 'uta', false);
|
|
9054
|
+
if (uta) {
|
|
9055
|
+
request['holdMode'] = posMode;
|
|
9056
|
+
response = await this.privateUtaPostV3AccountSetHoldMode(this.extend(request, params));
|
|
9057
|
+
//
|
|
9058
|
+
// {
|
|
9059
|
+
// "code": "00000",
|
|
9060
|
+
// "msg": "success",
|
|
9061
|
+
// "requestTime": 1752816734592,
|
|
9062
|
+
// "data": "success"
|
|
9063
|
+
// }
|
|
9064
|
+
//
|
|
9065
|
+
}
|
|
9066
|
+
else {
|
|
9067
|
+
request['posMode'] = posMode;
|
|
9068
|
+
request['productType'] = productType;
|
|
9069
|
+
response = await this.privateMixPostV2MixAccountSetPositionMode(this.extend(request, params));
|
|
9070
|
+
//
|
|
9071
|
+
// {
|
|
9072
|
+
// "code": "00000",
|
|
9073
|
+
// "msg": "success",
|
|
9074
|
+
// "requestTime": 1700865608009,
|
|
9075
|
+
// "data": {
|
|
9076
|
+
// "posMode": "hedge_mode"
|
|
9077
|
+
// }
|
|
9078
|
+
// }
|
|
9079
|
+
//
|
|
9080
|
+
}
|
|
7661
9081
|
return response;
|
|
7662
9082
|
}
|
|
7663
9083
|
/**
|
|
@@ -7665,8 +9085,10 @@ class bitget extends bitget$1 {
|
|
|
7665
9085
|
* @name bitget#fetchOpenInterest
|
|
7666
9086
|
* @description retrieves the open interest of a contract trading pair
|
|
7667
9087
|
* @see https://www.bitget.com/api-doc/contract/market/Get-Open-Interest
|
|
9088
|
+
* @see https://www.bitget.com/api-doc/uta/public/Get-Open-Interest
|
|
7668
9089
|
* @param {string} symbol unified CCXT market symbol
|
|
7669
9090
|
* @param {object} [params] exchange specific parameters
|
|
9091
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
7670
9092
|
* @returns {object} an open interest structure{@link https://docs.ccxt.com/#/?id=open-interest-structure}
|
|
7671
9093
|
*/
|
|
7672
9094
|
async fetchOpenInterest(symbol, params = {}) {
|
|
@@ -7675,33 +9097,60 @@ class bitget extends bitget$1 {
|
|
|
7675
9097
|
if (!market['contract']) {
|
|
7676
9098
|
throw new errors.BadRequest(this.id + ' fetchOpenInterest() supports contract markets only');
|
|
7677
9099
|
}
|
|
7678
|
-
let productType = undefined;
|
|
7679
|
-
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
7680
|
-
const request = {
|
|
7681
|
-
'symbol': market['id'],
|
|
7682
|
-
|
|
7683
|
-
|
|
7684
|
-
|
|
7685
|
-
|
|
7686
|
-
|
|
7687
|
-
|
|
7688
|
-
|
|
7689
|
-
|
|
7690
|
-
|
|
7691
|
-
|
|
7692
|
-
|
|
7693
|
-
|
|
7694
|
-
|
|
7695
|
-
|
|
7696
|
-
|
|
7697
|
-
|
|
7698
|
-
|
|
7699
|
-
|
|
7700
|
-
|
|
9100
|
+
let productType = undefined;
|
|
9101
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
9102
|
+
const request = {
|
|
9103
|
+
'symbol': market['id'],
|
|
9104
|
+
};
|
|
9105
|
+
let uta = undefined;
|
|
9106
|
+
let response = undefined;
|
|
9107
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchOpenInterest', 'uta', false);
|
|
9108
|
+
if (uta) {
|
|
9109
|
+
request['category'] = productType;
|
|
9110
|
+
response = await this.publicUtaGetV3MarketOpenInterest(this.extend(request, params));
|
|
9111
|
+
//
|
|
9112
|
+
// {
|
|
9113
|
+
// "code": "00000",
|
|
9114
|
+
// "msg": "success",
|
|
9115
|
+
// "requestTime": 1751101221545,
|
|
9116
|
+
// "data": {
|
|
9117
|
+
// "list": [
|
|
9118
|
+
// {
|
|
9119
|
+
// "symbol": "BTCUSDT",
|
|
9120
|
+
// "openInterest": "18166.3583"
|
|
9121
|
+
// }
|
|
9122
|
+
// ],
|
|
9123
|
+
// "ts": "1751101220993"
|
|
9124
|
+
// }
|
|
9125
|
+
// }
|
|
9126
|
+
//
|
|
9127
|
+
}
|
|
9128
|
+
else {
|
|
9129
|
+
request['productType'] = productType;
|
|
9130
|
+
response = await this.publicMixGetV2MixMarketOpenInterest(this.extend(request, params));
|
|
9131
|
+
//
|
|
9132
|
+
// {
|
|
9133
|
+
// "code": "00000",
|
|
9134
|
+
// "msg": "success",
|
|
9135
|
+
// "requestTime": 1700866041022,
|
|
9136
|
+
// "data": {
|
|
9137
|
+
// "openInterestList": [
|
|
9138
|
+
// {
|
|
9139
|
+
// "symbol": "BTCUSDT",
|
|
9140
|
+
// "size": "52234.134"
|
|
9141
|
+
// }
|
|
9142
|
+
// ],
|
|
9143
|
+
// "ts": "1700866041023"
|
|
9144
|
+
// }
|
|
9145
|
+
// }
|
|
9146
|
+
//
|
|
9147
|
+
}
|
|
7701
9148
|
const data = this.safeDict(response, 'data', {});
|
|
7702
9149
|
return this.parseOpenInterest(data, market);
|
|
7703
9150
|
}
|
|
7704
9151
|
parseOpenInterest(interest, market = undefined) {
|
|
9152
|
+
//
|
|
9153
|
+
// default
|
|
7705
9154
|
//
|
|
7706
9155
|
// {
|
|
7707
9156
|
// "openInterestList": [
|
|
@@ -7713,12 +9162,24 @@ class bitget extends bitget$1 {
|
|
|
7713
9162
|
// "ts": "1700866041023"
|
|
7714
9163
|
// }
|
|
7715
9164
|
//
|
|
7716
|
-
|
|
9165
|
+
// uta
|
|
9166
|
+
//
|
|
9167
|
+
// {
|
|
9168
|
+
// "list": [
|
|
9169
|
+
// {
|
|
9170
|
+
// "symbol": "BTCUSDT",
|
|
9171
|
+
// "openInterest": "18166.3583"
|
|
9172
|
+
// }
|
|
9173
|
+
// ],
|
|
9174
|
+
// "ts": "1751101220993"
|
|
9175
|
+
// }
|
|
9176
|
+
//
|
|
9177
|
+
const data = this.safeList2(interest, 'openInterestList', 'list', []);
|
|
7717
9178
|
const timestamp = this.safeInteger(interest, 'ts');
|
|
7718
9179
|
const marketId = this.safeString(data[0], 'symbol');
|
|
7719
9180
|
return this.safeOpenInterest({
|
|
7720
9181
|
'symbol': this.safeSymbol(marketId, market, undefined, 'contract'),
|
|
7721
|
-
'openInterestAmount': this.
|
|
9182
|
+
'openInterestAmount': this.safeNumber2(data[0], 'size', 'openInterest'),
|
|
7722
9183
|
'openInterestValue': undefined,
|
|
7723
9184
|
'timestamp': timestamp,
|
|
7724
9185
|
'datetime': this.iso8601(timestamp),
|
|
@@ -8457,9 +9918,10 @@ class bitget extends bitget$1 {
|
|
|
8457
9918
|
* @name bitget#fetchCrossBorrowRate
|
|
8458
9919
|
* @description fetch the rate of interest to borrow a currency for margin trading
|
|
8459
9920
|
* @see https://www.bitget.com/api-doc/margin/cross/account/Get-Cross-Margin-Interest-Rate-And-Borrowable
|
|
9921
|
+
* @see https://www.bitget.com/api-doc/uta/public/Get-Margin-Loans
|
|
8460
9922
|
* @param {string} code unified currency code
|
|
8461
9923
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
8462
|
-
* @param {
|
|
9924
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
8463
9925
|
* @returns {object} a [borrow rate structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#borrow-rate-structure}
|
|
8464
9926
|
*/
|
|
8465
9927
|
async fetchCrossBorrowRate(code, params = {}) {
|
|
@@ -8468,40 +9930,64 @@ class bitget extends bitget$1 {
|
|
|
8468
9930
|
const request = {
|
|
8469
9931
|
'coin': currency['id'],
|
|
8470
9932
|
};
|
|
8471
|
-
|
|
8472
|
-
|
|
8473
|
-
|
|
8474
|
-
|
|
8475
|
-
|
|
8476
|
-
|
|
8477
|
-
|
|
8478
|
-
|
|
8479
|
-
|
|
8480
|
-
|
|
8481
|
-
|
|
8482
|
-
|
|
8483
|
-
|
|
8484
|
-
|
|
8485
|
-
|
|
8486
|
-
|
|
8487
|
-
|
|
8488
|
-
|
|
8489
|
-
|
|
8490
|
-
|
|
8491
|
-
|
|
8492
|
-
|
|
8493
|
-
|
|
8494
|
-
|
|
8495
|
-
|
|
8496
|
-
|
|
8497
|
-
|
|
9933
|
+
let uta = undefined;
|
|
9934
|
+
let response = undefined;
|
|
9935
|
+
let result = undefined;
|
|
9936
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchCrossBorrowRate', 'uta', false);
|
|
9937
|
+
if (uta) {
|
|
9938
|
+
response = await this.publicUtaGetV3MarketMarginLoans(this.extend(request, params));
|
|
9939
|
+
//
|
|
9940
|
+
// {
|
|
9941
|
+
// "code": "00000",
|
|
9942
|
+
// "msg": "success",
|
|
9943
|
+
// "requestTime": 1752817798893,
|
|
9944
|
+
// "data": {
|
|
9945
|
+
// "dailyInterest": "0.00100008",
|
|
9946
|
+
// "annualInterest": "0.3650292",
|
|
9947
|
+
// "limit": "100"
|
|
9948
|
+
// }
|
|
9949
|
+
// }
|
|
9950
|
+
//
|
|
9951
|
+
result = this.safeDict(response, 'data', {});
|
|
9952
|
+
}
|
|
9953
|
+
else {
|
|
9954
|
+
response = await this.privateMarginGetV2MarginCrossedInterestRateAndLimit(this.extend(request, params));
|
|
9955
|
+
//
|
|
9956
|
+
// {
|
|
9957
|
+
// "code": "00000",
|
|
9958
|
+
// "msg": "success",
|
|
9959
|
+
// "requestTime": 1700879047861,
|
|
9960
|
+
// "data": [
|
|
9961
|
+
// {
|
|
9962
|
+
// "coin": "BTC",
|
|
9963
|
+
// "leverage": "3",
|
|
9964
|
+
// "transferable": true,
|
|
9965
|
+
// "borrowable": true,
|
|
9966
|
+
// "dailyInterestRate": "0.00007",
|
|
9967
|
+
// "annualInterestRate": "0.02555",
|
|
9968
|
+
// "maxBorrowableAmount": "26",
|
|
9969
|
+
// "vipList": [
|
|
9970
|
+
// {"level":"0","limit":"26","dailyInterestRate":"0.00007","annualInterestRate":"0.02555","discountRate":"1"},
|
|
9971
|
+
// {"level":"1","limit":"26.78","dailyInterestRate":"0.0000679","annualInterestRate":"0.0247835","discountRate":"0.97"},
|
|
9972
|
+
// {"level":"2","limit":"28.08","dailyInterestRate":"0.0000644","annualInterestRate":"0.023506","discountRate":"0.92"},
|
|
9973
|
+
// {"level":"3","limit":"30.16","dailyInterestRate":"0.0000602","annualInterestRate":"0.021973","discountRate":"0.86"},
|
|
9974
|
+
// {"level":"4","limit":"34.58","dailyInterestRate":"0.0000525","annualInterestRate":"0.0191625","discountRate":"0.75"},
|
|
9975
|
+
// {"level":"5","limit":"43.16","dailyInterestRate":"0.000042","annualInterestRate":"0.01533","discountRate":"0.6"}
|
|
9976
|
+
// ]
|
|
9977
|
+
// }
|
|
9978
|
+
// ]
|
|
9979
|
+
// }
|
|
9980
|
+
//
|
|
9981
|
+
const data = this.safeValue(response, 'data', []);
|
|
9982
|
+
result = this.safeValue(data, 0, {});
|
|
9983
|
+
}
|
|
8498
9984
|
const timestamp = this.safeInteger(response, 'requestTime');
|
|
8499
|
-
|
|
8500
|
-
|
|
8501
|
-
first['timestamp'] = timestamp;
|
|
8502
|
-
return this.parseBorrowRate(first, currency);
|
|
9985
|
+
result['timestamp'] = timestamp;
|
|
9986
|
+
return this.parseBorrowRate(result, currency);
|
|
8503
9987
|
}
|
|
8504
9988
|
parseBorrowRate(info, currency = undefined) {
|
|
9989
|
+
//
|
|
9990
|
+
// default
|
|
8505
9991
|
//
|
|
8506
9992
|
// {
|
|
8507
9993
|
// "coin": "BTC",
|
|
@@ -8521,11 +10007,19 @@ class bitget extends bitget$1 {
|
|
|
8521
10007
|
// ]
|
|
8522
10008
|
// }
|
|
8523
10009
|
//
|
|
10010
|
+
// uta
|
|
10011
|
+
//
|
|
10012
|
+
// {
|
|
10013
|
+
// "dailyInterest": "0.00100008",
|
|
10014
|
+
// "annualInterest": "0.3650292",
|
|
10015
|
+
// "limit": "100"
|
|
10016
|
+
// }
|
|
10017
|
+
//
|
|
8524
10018
|
const currencyId = this.safeString(info, 'coin');
|
|
8525
10019
|
const timestamp = this.safeInteger(info, 'timestamp');
|
|
8526
10020
|
return {
|
|
8527
10021
|
'currency': this.safeCurrencyCode(currencyId, currency),
|
|
8528
|
-
'rate': this.
|
|
10022
|
+
'rate': this.safeNumber2(info, 'dailyInterestRate', 'dailyInterest'),
|
|
8529
10023
|
'period': 86400000,
|
|
8530
10024
|
'timestamp': timestamp,
|
|
8531
10025
|
'datetime': this.iso8601(timestamp),
|
|
@@ -8690,43 +10184,72 @@ class bitget extends bitget$1 {
|
|
|
8690
10184
|
* @name bitget#closePosition
|
|
8691
10185
|
* @description closes an open position for a market
|
|
8692
10186
|
* @see https://www.bitget.com/api-doc/contract/trade/Flash-Close-Position
|
|
10187
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Close-All-Positions
|
|
8693
10188
|
* @param {string} symbol unified CCXT market symbol
|
|
8694
10189
|
* @param {string} [side] one-way mode: 'buy' or 'sell', hedge-mode: 'long' or 'short'
|
|
8695
10190
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
10191
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
8696
10192
|
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
8697
10193
|
*/
|
|
8698
10194
|
async closePosition(symbol, side = undefined, params = {}) {
|
|
8699
10195
|
await this.loadMarkets();
|
|
8700
10196
|
const market = this.market(symbol);
|
|
8701
|
-
let productType = undefined;
|
|
8702
|
-
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
8703
10197
|
const request = {
|
|
8704
10198
|
'symbol': market['id'],
|
|
8705
|
-
'productType': productType,
|
|
8706
10199
|
};
|
|
8707
|
-
|
|
8708
|
-
|
|
10200
|
+
let productType = undefined;
|
|
10201
|
+
let uta = undefined;
|
|
10202
|
+
let response = undefined;
|
|
10203
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
10204
|
+
[uta, params] = this.handleOptionAndParams(params, 'closePosition', 'uta', false);
|
|
10205
|
+
if (uta) {
|
|
10206
|
+
if (side !== undefined) {
|
|
10207
|
+
request['posSide'] = side;
|
|
10208
|
+
}
|
|
10209
|
+
request['category'] = productType;
|
|
10210
|
+
response = await this.privateUtaPostV3TradeClosePositions(this.extend(request, params));
|
|
10211
|
+
//
|
|
10212
|
+
// {
|
|
10213
|
+
// "code": "00000",
|
|
10214
|
+
// "msg": "success",
|
|
10215
|
+
// "requestTime": 1751020218384,
|
|
10216
|
+
// "data": {
|
|
10217
|
+
// "list": [
|
|
10218
|
+
// {
|
|
10219
|
+
// "orderId": "1322440134099320832",
|
|
10220
|
+
// "clientOid": "1322440134099320833"
|
|
10221
|
+
// }
|
|
10222
|
+
// ]
|
|
10223
|
+
// }
|
|
10224
|
+
// }
|
|
10225
|
+
//
|
|
10226
|
+
}
|
|
10227
|
+
else {
|
|
10228
|
+
if (side !== undefined) {
|
|
10229
|
+
request['holdSide'] = side;
|
|
10230
|
+
}
|
|
10231
|
+
request['productType'] = productType;
|
|
10232
|
+
response = await this.privateMixPostV2MixOrderClosePositions(this.extend(request, params));
|
|
10233
|
+
//
|
|
10234
|
+
// {
|
|
10235
|
+
// "code": "00000",
|
|
10236
|
+
// "msg": "success",
|
|
10237
|
+
// "requestTime": 1702975017017,
|
|
10238
|
+
// "data": {
|
|
10239
|
+
// "successList": [
|
|
10240
|
+
// {
|
|
10241
|
+
// "orderId": "1120923953904893955",
|
|
10242
|
+
// "clientOid": "1120923953904893956"
|
|
10243
|
+
// }
|
|
10244
|
+
// ],
|
|
10245
|
+
// "failureList": [],
|
|
10246
|
+
// "result": false
|
|
10247
|
+
// }
|
|
10248
|
+
// }
|
|
10249
|
+
//
|
|
8709
10250
|
}
|
|
8710
|
-
const response = await this.privateMixPostV2MixOrderClosePositions(this.extend(request, params));
|
|
8711
|
-
//
|
|
8712
|
-
// {
|
|
8713
|
-
// "code": "00000",
|
|
8714
|
-
// "msg": "success",
|
|
8715
|
-
// "requestTime": 1702975017017,
|
|
8716
|
-
// "data": {
|
|
8717
|
-
// "successList": [
|
|
8718
|
-
// {
|
|
8719
|
-
// "orderId": "1120923953904893955",
|
|
8720
|
-
// "clientOid": "1120923953904893956"
|
|
8721
|
-
// }
|
|
8722
|
-
// ],
|
|
8723
|
-
// "failureList": [],
|
|
8724
|
-
// "result": false
|
|
8725
|
-
// }
|
|
8726
|
-
// }
|
|
8727
|
-
//
|
|
8728
10251
|
const data = this.safeValue(response, 'data', {});
|
|
8729
|
-
const order = this.
|
|
10252
|
+
const order = this.safeList2(data, 'successList', 'list', []);
|
|
8730
10253
|
return this.parseOrder(order[0], market);
|
|
8731
10254
|
}
|
|
8732
10255
|
/**
|
|
@@ -8734,37 +10257,62 @@ class bitget extends bitget$1 {
|
|
|
8734
10257
|
* @name bitget#closeAllPositions
|
|
8735
10258
|
* @description closes all open positions for a market type
|
|
8736
10259
|
* @see https://www.bitget.com/api-doc/contract/trade/Flash-Close-Position
|
|
10260
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Close-All-Positions
|
|
8737
10261
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
8738
10262
|
* @param {string} [params.productType] 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
|
|
10263
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
8739
10264
|
* @returns {object[]} A list of [position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
|
|
8740
10265
|
*/
|
|
8741
10266
|
async closeAllPositions(params = {}) {
|
|
8742
10267
|
await this.loadMarkets();
|
|
10268
|
+
const request = {};
|
|
8743
10269
|
let productType = undefined;
|
|
10270
|
+
let uta = undefined;
|
|
10271
|
+
let response = undefined;
|
|
8744
10272
|
[productType, params] = this.handleProductTypeAndParams(undefined, params);
|
|
8745
|
-
|
|
8746
|
-
|
|
8747
|
-
|
|
8748
|
-
|
|
8749
|
-
|
|
8750
|
-
|
|
8751
|
-
|
|
8752
|
-
|
|
8753
|
-
|
|
8754
|
-
|
|
8755
|
-
|
|
8756
|
-
|
|
8757
|
-
|
|
8758
|
-
|
|
8759
|
-
|
|
8760
|
-
|
|
8761
|
-
|
|
8762
|
-
|
|
8763
|
-
|
|
8764
|
-
|
|
8765
|
-
|
|
10273
|
+
[uta, params] = this.handleOptionAndParams(params, 'closeAllPositions', 'uta', false);
|
|
10274
|
+
if (uta) {
|
|
10275
|
+
request['category'] = productType;
|
|
10276
|
+
response = await this.privateUtaPostV3TradeClosePositions(this.extend(request, params));
|
|
10277
|
+
//
|
|
10278
|
+
// {
|
|
10279
|
+
// "code": "00000",
|
|
10280
|
+
// "msg": "success",
|
|
10281
|
+
// "requestTime": 1751020218384,
|
|
10282
|
+
// "data": {
|
|
10283
|
+
// "list": [
|
|
10284
|
+
// {
|
|
10285
|
+
// "orderId": "1322440134099320832",
|
|
10286
|
+
// "clientOid": "1322440134099320833"
|
|
10287
|
+
// }
|
|
10288
|
+
// ]
|
|
10289
|
+
// }
|
|
10290
|
+
// }
|
|
10291
|
+
//
|
|
10292
|
+
}
|
|
10293
|
+
else {
|
|
10294
|
+
request['productType'] = productType;
|
|
10295
|
+
response = await this.privateMixPostV2MixOrderClosePositions(this.extend(request, params));
|
|
10296
|
+
//
|
|
10297
|
+
// {
|
|
10298
|
+
// "code": "00000",
|
|
10299
|
+
// "msg": "success",
|
|
10300
|
+
// "requestTime": 1702975017017,
|
|
10301
|
+
// "data": {
|
|
10302
|
+
// "successList": [
|
|
10303
|
+
// {
|
|
10304
|
+
// "orderId": "1120923953904893955",
|
|
10305
|
+
// "clientOid": "1120923953904893956"
|
|
10306
|
+
// }
|
|
10307
|
+
// ],
|
|
10308
|
+
// "failureList": [],
|
|
10309
|
+
// "result": false
|
|
10310
|
+
// }
|
|
10311
|
+
// }
|
|
10312
|
+
//
|
|
10313
|
+
}
|
|
8766
10314
|
const data = this.safeValue(response, 'data', {});
|
|
8767
|
-
const orderInfo = this.
|
|
10315
|
+
const orderInfo = this.safeList2(data, 'successList', 'list', []);
|
|
8768
10316
|
return this.parsePositions(orderInfo, undefined, params);
|
|
8769
10317
|
}
|
|
8770
10318
|
/**
|
|
@@ -8832,25 +10380,27 @@ class bitget extends bitget$1 {
|
|
|
8832
10380
|
* @name bitget#fetchPositionsHistory
|
|
8833
10381
|
* @description fetches historical positions
|
|
8834
10382
|
* @see https://www.bitget.com/api-doc/contract/position/Get-History-Position
|
|
10383
|
+
* @see https://www.bitget.com/api-doc/uta/trade/Get-Position-History
|
|
8835
10384
|
* @param {string[]} [symbols] unified contract symbols
|
|
8836
10385
|
* @param {int} [since] timestamp in ms of the earliest position to fetch, default=3 months ago, max range for params["until"] - since is 3 months
|
|
8837
10386
|
* @param {int} [limit] the maximum amount of records to fetch, default=20, max=100
|
|
8838
10387
|
* @param {object} params extra parameters specific to the exchange api endpoint
|
|
8839
10388
|
* @param {int} [params.until] timestamp in ms of the latest position to fetch, max range for params["until"] - since is 3 months
|
|
8840
|
-
*
|
|
8841
|
-
* EXCHANGE SPECIFIC PARAMETERS
|
|
8842
10389
|
* @param {string} [params.productType] USDT-FUTURES (default), COIN-FUTURES, USDC-FUTURES, SUSDT-FUTURES, SCOIN-FUTURES, or SUSDC-FUTURES
|
|
10390
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
8843
10391
|
* @returns {object[]} a list of [position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
|
|
8844
10392
|
*/
|
|
8845
10393
|
async fetchPositionsHistory(symbols = undefined, since = undefined, limit = undefined, params = {}) {
|
|
8846
10394
|
await this.loadMarkets();
|
|
8847
|
-
|
|
8848
|
-
|
|
8849
|
-
|
|
10395
|
+
let request = {};
|
|
10396
|
+
let market = undefined;
|
|
10397
|
+
let productType = undefined;
|
|
10398
|
+
let uta = undefined;
|
|
10399
|
+
let response = undefined;
|
|
8850
10400
|
if (symbols !== undefined) {
|
|
8851
10401
|
const symbolsLength = symbols.length;
|
|
8852
10402
|
if (symbolsLength > 0) {
|
|
8853
|
-
|
|
10403
|
+
market = this.market(symbols[0]);
|
|
8854
10404
|
request['symbol'] = market['id'];
|
|
8855
10405
|
}
|
|
8856
10406
|
}
|
|
@@ -8860,41 +10410,79 @@ class bitget extends bitget$1 {
|
|
|
8860
10410
|
if (limit !== undefined) {
|
|
8861
10411
|
request['limit'] = limit;
|
|
8862
10412
|
}
|
|
8863
|
-
|
|
8864
|
-
|
|
10413
|
+
[request, params] = this.handleUntilOption('endTime', request, params);
|
|
10414
|
+
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
10415
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchPositionsHistory', 'uta', false);
|
|
10416
|
+
if (uta) {
|
|
10417
|
+
request['category'] = productType;
|
|
10418
|
+
response = await this.privateUtaGetV3PositionHistoryPosition(this.extend(request, params));
|
|
10419
|
+
//
|
|
10420
|
+
// {
|
|
10421
|
+
// "code": "00000",
|
|
10422
|
+
// "msg": "success",
|
|
10423
|
+
// "requestTime": 1751020950427,
|
|
10424
|
+
// "data": {
|
|
10425
|
+
// "list": [
|
|
10426
|
+
// {
|
|
10427
|
+
// "positionId": "1322441328637100049",
|
|
10428
|
+
// "category": "USDT-FUTURES",
|
|
10429
|
+
// "symbol": "BTCUSDT",
|
|
10430
|
+
// "marginCoin": "USDT",
|
|
10431
|
+
// "holdMode": "hedge_mode",
|
|
10432
|
+
// "posSide": "long",
|
|
10433
|
+
// "marginMode": "crossed",
|
|
10434
|
+
// "openPriceAvg": "107003.7",
|
|
10435
|
+
// "closePriceAvg": "107005.4",
|
|
10436
|
+
// "openTotalPos": "0.0001",
|
|
10437
|
+
// "closeTotalPos": "0.0001",
|
|
10438
|
+
// "cumRealisedPnl": "0.00017",
|
|
10439
|
+
// "netProfit": "-0.01267055",
|
|
10440
|
+
// "totalFunding": "0",
|
|
10441
|
+
// "openFeeTotal": "-0.00642022",
|
|
10442
|
+
// "closeFeeTotal": "-0.00642032",
|
|
10443
|
+
// "createdTime": "1751020503195",
|
|
10444
|
+
// "updatedTime": "1751020520458"
|
|
10445
|
+
// },
|
|
10446
|
+
// ],
|
|
10447
|
+
// "cursor": "1322440134158041089"
|
|
10448
|
+
// }
|
|
10449
|
+
// }
|
|
10450
|
+
//
|
|
10451
|
+
}
|
|
10452
|
+
else {
|
|
10453
|
+
response = await this.privateMixGetV2MixPositionHistoryPosition(this.extend(request, params));
|
|
10454
|
+
//
|
|
10455
|
+
// {
|
|
10456
|
+
// code: '00000',
|
|
10457
|
+
// msg: 'success',
|
|
10458
|
+
// requestTime: '1712794148791',
|
|
10459
|
+
// data: {
|
|
10460
|
+
// list: [
|
|
10461
|
+
// {
|
|
10462
|
+
// symbol: 'XRPUSDT',
|
|
10463
|
+
// marginCoin: 'USDT',
|
|
10464
|
+
// holdSide: 'long',
|
|
10465
|
+
// openAvgPrice: '0.64967',
|
|
10466
|
+
// closeAvgPrice: '0.58799',
|
|
10467
|
+
// marginMode: 'isolated',
|
|
10468
|
+
// openTotalPos: '10',
|
|
10469
|
+
// closeTotalPos: '10',
|
|
10470
|
+
// pnl: '-0.62976205',
|
|
10471
|
+
// netProfit: '-0.65356802',
|
|
10472
|
+
// totalFunding: '-0.01638',
|
|
10473
|
+
// openFee: '-0.00389802',
|
|
10474
|
+
// closeFee: '-0.00352794',
|
|
10475
|
+
// ctime: '1709590322199',
|
|
10476
|
+
// utime: '1709667583395'
|
|
10477
|
+
// },
|
|
10478
|
+
// ...
|
|
10479
|
+
// ]
|
|
10480
|
+
// }
|
|
10481
|
+
// }
|
|
10482
|
+
//
|
|
8865
10483
|
}
|
|
8866
|
-
const
|
|
8867
|
-
|
|
8868
|
-
// {
|
|
8869
|
-
// code: '00000',
|
|
8870
|
-
// msg: 'success',
|
|
8871
|
-
// requestTime: '1712794148791',
|
|
8872
|
-
// data: {
|
|
8873
|
-
// list: [
|
|
8874
|
-
// {
|
|
8875
|
-
// symbol: 'XRPUSDT',
|
|
8876
|
-
// marginCoin: 'USDT',
|
|
8877
|
-
// holdSide: 'long',
|
|
8878
|
-
// openAvgPrice: '0.64967',
|
|
8879
|
-
// closeAvgPrice: '0.58799',
|
|
8880
|
-
// marginMode: 'isolated',
|
|
8881
|
-
// openTotalPos: '10',
|
|
8882
|
-
// closeTotalPos: '10',
|
|
8883
|
-
// pnl: '-0.62976205',
|
|
8884
|
-
// netProfit: '-0.65356802',
|
|
8885
|
-
// totalFunding: '-0.01638',
|
|
8886
|
-
// openFee: '-0.00389802',
|
|
8887
|
-
// closeFee: '-0.00352794',
|
|
8888
|
-
// ctime: '1709590322199',
|
|
8889
|
-
// utime: '1709667583395'
|
|
8890
|
-
// },
|
|
8891
|
-
// ...
|
|
8892
|
-
// ]
|
|
8893
|
-
// }
|
|
8894
|
-
// }
|
|
8895
|
-
//
|
|
8896
|
-
const data = this.safeDict(response, 'data');
|
|
8897
|
-
const responseList = this.safeList(data, 'list');
|
|
10484
|
+
const data = this.safeDict(response, 'data', {});
|
|
10485
|
+
const responseList = this.safeList(data, 'list', []);
|
|
8898
10486
|
const positions = this.parsePositions(responseList, symbols, params);
|
|
8899
10487
|
return this.filterBySinceLimit(positions, since, limit);
|
|
8900
10488
|
}
|
|
@@ -9174,8 +10762,10 @@ class bitget extends bitget$1 {
|
|
|
9174
10762
|
* @name bitget#fetchFundingInterval
|
|
9175
10763
|
* @description fetch the current funding rate interval
|
|
9176
10764
|
* @see https://www.bitget.com/api-doc/contract/market/Get-Symbol-Next-Funding-Time
|
|
10765
|
+
* @see https://www.bitget.com/api-doc/uta/public/Get-Current-Funding-Rate
|
|
9177
10766
|
* @param {string} symbol unified market symbol
|
|
9178
10767
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
10768
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
9179
10769
|
* @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
|
|
9180
10770
|
*/
|
|
9181
10771
|
async fetchFundingInterval(symbol, params = {}) {
|
|
@@ -9185,23 +10775,48 @@ class bitget extends bitget$1 {
|
|
|
9185
10775
|
[productType, params] = this.handleProductTypeAndParams(market, params);
|
|
9186
10776
|
const request = {
|
|
9187
10777
|
'symbol': market['id'],
|
|
9188
|
-
'productType': productType,
|
|
9189
10778
|
};
|
|
9190
|
-
|
|
9191
|
-
|
|
9192
|
-
|
|
9193
|
-
|
|
9194
|
-
|
|
9195
|
-
|
|
9196
|
-
|
|
9197
|
-
|
|
9198
|
-
|
|
9199
|
-
|
|
9200
|
-
|
|
9201
|
-
|
|
9202
|
-
|
|
9203
|
-
|
|
9204
|
-
|
|
10779
|
+
let response = undefined;
|
|
10780
|
+
let uta = undefined;
|
|
10781
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchFundingInterval', 'uta', false);
|
|
10782
|
+
if (uta) {
|
|
10783
|
+
response = await this.publicUtaGetV3MarketCurrentFundRate(this.extend(request, params));
|
|
10784
|
+
//
|
|
10785
|
+
// {
|
|
10786
|
+
// "code": "00000",
|
|
10787
|
+
// "msg": "success",
|
|
10788
|
+
// "requestTime": 1752880157959,
|
|
10789
|
+
// "data": [
|
|
10790
|
+
// {
|
|
10791
|
+
// "symbol": "BTCUSDT",
|
|
10792
|
+
// "fundingRate": "0.0001",
|
|
10793
|
+
// "fundingRateInterval": "8",
|
|
10794
|
+
// "nextUpdate": "1752883200000",
|
|
10795
|
+
// "minFundingRate": "-0.003",
|
|
10796
|
+
// "maxFundingRate": "0.003"
|
|
10797
|
+
// }
|
|
10798
|
+
// ]
|
|
10799
|
+
// }
|
|
10800
|
+
//
|
|
10801
|
+
}
|
|
10802
|
+
else {
|
|
10803
|
+
request['productType'] = productType;
|
|
10804
|
+
response = await this.publicMixGetV2MixMarketFundingTime(this.extend(request, params));
|
|
10805
|
+
//
|
|
10806
|
+
// {
|
|
10807
|
+
// "code": "00000",
|
|
10808
|
+
// "msg": "success",
|
|
10809
|
+
// "requestTime": 1727930153888,
|
|
10810
|
+
// "data": [
|
|
10811
|
+
// {
|
|
10812
|
+
// "symbol": "BTCUSDT",
|
|
10813
|
+
// "nextFundingTime": "1727942400000",
|
|
10814
|
+
// "ratePeriod": "8"
|
|
10815
|
+
// }
|
|
10816
|
+
// ]
|
|
10817
|
+
// }
|
|
10818
|
+
//
|
|
10819
|
+
}
|
|
9205
10820
|
const data = this.safeList(response, 'data', []);
|
|
9206
10821
|
const first = this.safeDict(data, 0, {});
|
|
9207
10822
|
return this.parseFundingRate(first, market);
|
|
@@ -9376,7 +10991,7 @@ class bitget extends bitget$1 {
|
|
|
9376
10991
|
}
|
|
9377
10992
|
}
|
|
9378
10993
|
const sandboxMode = this.safeBool2(this.options, 'sandboxMode', 'sandbox', false);
|
|
9379
|
-
if (sandboxMode && (path !== 'v2/public/time')) {
|
|
10994
|
+
if (sandboxMode && (path !== 'v2/public/time') && (path !== 'v3/market/current-fund-rate')) {
|
|
9380
10995
|
// https://github.com/ccxt/ccxt/issues/25252#issuecomment-2662742336
|
|
9381
10996
|
if (headers === undefined) {
|
|
9382
10997
|
headers = {};
|