ccxt 4.5.46 → 4.5.48
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 +117 -116
- package/dist/ccxt.browser.min.js +10 -10
- package/dist/cjs/ccxt.js +6 -6
- package/dist/cjs/src/abstract/aftermath.js +1 -1
- package/dist/cjs/src/abstract/alpaca.js +1 -1
- package/dist/cjs/src/abstract/apex.js +1 -1
- package/dist/cjs/src/abstract/arkham.js +1 -1
- package/dist/cjs/src/abstract/ascendex.js +1 -1
- package/dist/cjs/src/abstract/aster.js +1 -1
- package/dist/cjs/src/abstract/backpack.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/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/bullish.js +1 -1
- package/dist/cjs/src/abstract/bybit.js +1 -1
- package/dist/cjs/src/abstract/bydfi.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/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/deepcoin.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/dydx.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/grvt.js +1 -1
- package/dist/cjs/src/abstract/hashkey.js +1 -1
- package/dist/cjs/src/abstract/hibachi.js +1 -1
- 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/latoken.js +1 -1
- package/dist/cjs/src/abstract/lbank.js +1 -1
- package/dist/cjs/src/abstract/lighter.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/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/{coincatch.js → pacifica.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/tokocrypto.js +1 -1
- package/dist/cjs/src/abstract/toobit.js +1 -1
- package/dist/cjs/src/abstract/upbit.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/zebpay.js +1 -1
- package/dist/cjs/src/abstract/zonda.js +1 -1
- package/dist/cjs/src/aftermath.js +2 -1
- package/dist/cjs/src/alpaca.js +1 -1
- package/dist/cjs/src/apex.js +1 -1
- package/dist/cjs/src/arkham.js +1 -1
- package/dist/cjs/src/ascendex.js +1 -1
- package/dist/cjs/src/aster.js +53 -1
- package/dist/cjs/src/backpack.js +2 -2
- package/dist/cjs/src/base/Exchange.js +31 -0
- package/dist/cjs/src/base/Precise.js +6 -0
- package/dist/cjs/src/base/errors.js +6 -0
- 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/io.js +1 -1
- package/dist/cjs/src/base/functions/misc.js +1 -0
- package/dist/cjs/src/base/functions/number.js +6 -0
- package/dist/cjs/src/base/functions/platform.js +6 -0
- package/dist/cjs/src/base/functions/rsa.js +1 -0
- package/dist/cjs/src/base/functions/string.js +6 -0
- package/dist/cjs/src/base/functions/throttle.js +1 -1
- package/dist/cjs/src/base/functions/time.js +6 -0
- package/dist/cjs/src/base/functions/totp.js +1 -0
- package/dist/cjs/src/base/functions/type.js +6 -0
- package/dist/cjs/src/base/functions.js +1 -1
- package/dist/cjs/src/base/ws/Cache.js +6 -0
- package/dist/cjs/src/base/ws/Client.js +1 -0
- 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 +6 -0
- 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 +14 -19
- 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 +45 -54
- package/dist/cjs/src/bitflyer.js +1 -1
- package/dist/cjs/src/bitget.js +7 -4
- package/dist/cjs/src/bithumb.js +1 -1
- package/dist/cjs/src/bitmart.js +1 -1
- package/dist/cjs/src/bitmex.js +47 -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 +15 -2
- package/dist/cjs/src/bitteam.js +1 -1
- package/dist/cjs/src/bittrade.js +2 -2
- package/dist/cjs/src/blockchaincom.js +1 -1
- package/dist/cjs/src/blofin.js +153 -32
- 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/bullish.js +1 -1
- package/dist/cjs/src/bybit.js +1 -1
- package/dist/cjs/src/bydfi.js +1 -1
- package/dist/cjs/src/cex.js +1 -1
- package/dist/cjs/src/coinbaseadvanced.js +1 -1
- package/dist/cjs/src/coincheck.js +1 -1
- package/dist/cjs/src/coinex.js +1 -1
- package/dist/cjs/src/coinmate.js +1 -1
- package/dist/cjs/src/coinmetro.js +1 -1
- package/dist/cjs/src/coinone.js +1 -1
- package/dist/cjs/src/coinsph.js +5 -0
- package/dist/cjs/src/coinspot.js +1 -1
- package/dist/cjs/src/cryptocom.js +1 -1
- package/dist/cjs/src/cryptomus.js +1 -1
- package/dist/cjs/src/deepcoin.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/dydx.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 +1 -1
- package/dist/cjs/src/gateio.js +1 -1
- package/dist/cjs/src/gemini.js +1 -1
- package/dist/cjs/src/grvt.js +1 -1
- package/dist/cjs/src/hashkey.js +1 -1
- package/dist/cjs/src/hibachi.js +1 -1
- package/dist/cjs/src/hitbtc.js +1 -0
- package/dist/cjs/src/hollaex.js +2 -2
- 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 +40 -32
- package/dist/cjs/src/krakenfutures.js +1 -1
- package/dist/cjs/src/kucoin.js +2112 -415
- 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/lighter.js +199 -74
- package/dist/cjs/src/luno.js +1 -1
- package/dist/cjs/src/mercado.js +1 -1
- package/dist/cjs/src/mexc.js +50 -1
- package/dist/cjs/src/modetrade.js +1 -1
- package/dist/cjs/src/myokx.js +1 -1
- package/dist/cjs/src/ndax.js +1 -1
- package/dist/cjs/src/novadax.js +1 -1
- package/dist/cjs/src/okx.js +7 -6
- 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/pacifica.js +3254 -0
- 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/arkham.js +1 -1
- package/dist/cjs/src/pro/ascendex.js +1 -1
- package/dist/cjs/src/pro/aster.js +1 -1
- package/dist/cjs/src/pro/backpack.js +1 -1
- package/dist/cjs/src/pro/bequant.js +1 -1
- package/dist/cjs/src/pro/binance.js +12 -1
- 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 +2 -2
- package/dist/cjs/src/pro/bitfinex.js +1 -1
- package/dist/cjs/src/pro/bitget.js +1 -1
- package/dist/cjs/src/pro/bithumb.js +1 -1
- package/dist/cjs/src/pro/bitmart.js +5 -4
- package/dist/cjs/src/pro/bitmex.js +1 -1
- package/dist/cjs/src/pro/bitrue.js +1 -1
- package/dist/cjs/src/pro/bitstamp.js +1 -1
- package/dist/cjs/src/pro/bittrade.js +4 -0
- package/dist/cjs/src/pro/bitvavo.js +9 -1
- package/dist/cjs/src/pro/blockchaincom.js +1 -1
- package/dist/cjs/src/pro/blofin.js +1 -1
- package/dist/cjs/src/pro/bullish.js +1 -1
- package/dist/cjs/src/pro/bybit.js +1 -1
- package/dist/cjs/src/pro/bydfi.js +1 -1
- package/dist/cjs/src/pro/cex.js +1 -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 +1 -1
- package/dist/cjs/src/pro/coinbaseinternational.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/deepcoin.js +1 -1
- package/dist/cjs/src/pro/deribit.js +1 -1
- package/dist/cjs/src/pro/dydx.js +1 -1
- package/dist/cjs/src/pro/exmo.js +1 -1
- package/dist/cjs/src/pro/gate.js +4 -1
- package/dist/cjs/src/pro/gateio.js +1 -1
- package/dist/cjs/src/pro/gemini.js +1 -1
- package/dist/cjs/src/pro/grvt.js +2 -2
- 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 +1 -1
- 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 +1 -1
- package/dist/cjs/src/pro/kucoin.js +1 -1
- package/dist/cjs/src/pro/kucoinfutures.js +1 -1
- package/dist/cjs/src/pro/lbank.js +1 -0
- package/dist/cjs/src/pro/lighter.js +37 -18
- 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/okx.js +1 -1
- 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/pacifica.js +1397 -0
- 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/toobit.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/protobuf/mexc/compiled.cjs.js +0 -1
- package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/base/v1beta1/coin.js +1 -0
- package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/v1beta1/multisig.js +1 -0
- package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/crypto/secp256k1/keys.js +1 -0
- package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/tx/signing/v1beta1/signing.js +1 -0
- package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/tx/v1beta1/tx.js +1 -0
- package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/accountplus/tx.js +1 -0
- package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/clob_pair.js +1 -0
- package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order.js +1 -0
- package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order_removals.js +1 -0
- package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/tx.js +1 -0
- package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/transfer.js +1 -0
- package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/tx.js +1 -0
- package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/subaccount.js +1 -0
- package/dist/cjs/src/static_dependencies/dydx-v4-client/google/protobuf/any.js +1 -0
- package/dist/cjs/src/static_dependencies/dydx-v4-client/helpers.js +6 -0
- package/dist/cjs/src/static_dependencies/dydx-v4-client/onboarding.js +1 -0
- package/dist/cjs/src/static_dependencies/dydx-v4-client/registry.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +6 -0
- package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +6 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/address.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/anonymous.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/array.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/boolean.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/bytes.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/fixed-bytes.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/null.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/number.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/string.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/tuple.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/fragments.js +6 -0
- package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +6 -0
- package/dist/cjs/src/static_dependencies/ethers/index.js +1 -10
- package/dist/cjs/src/static_dependencies/ethers/interface.js +6 -0
- package/dist/cjs/src/static_dependencies/ethers/typed.js +6 -0
- package/dist/cjs/src/static_dependencies/ethers/utils/base58.js +1 -13
- package/dist/cjs/src/static_dependencies/ethers/utils/data.js +1 -6
- package/dist/cjs/src/static_dependencies/ethers/utils/errors.js +1 -9
- package/dist/cjs/src/static_dependencies/ethers/utils/events.js +6 -0
- package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +6 -0
- package/dist/cjs/src/static_dependencies/ethers/utils/index.js +1 -7
- package/dist/cjs/src/static_dependencies/ethers/utils/maths.js +1 -5
- package/dist/cjs/src/static_dependencies/ethers/utils/properties.js +6 -0
- package/dist/cjs/src/static_dependencies/ethers/utils/utf8.js +1 -8
- package/dist/cjs/src/static_dependencies/fflake/browser.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/JSEncrypt.js +1 -0
- package/dist/cjs/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +1 -0
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +6 -0
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +6 -0
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +6 -0
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +1 -0
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +6 -0
- 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 +6 -0
- 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 +6 -0
- package/dist/cjs/src/static_dependencies/messagepack/msgpack.js +6 -0
- 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 +1 -0
- 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 +6 -0
- 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 +6 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/_sha2.js +1 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/_u64.js +6 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/crypto.js +6 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/hmac.js +1 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/md5.js +1 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/pbkdf2.js +1 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/ripemd160.js +1 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/sha1.js +1 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/sha256.js +1 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/sha3.js +1 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/sha512.js +1 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +1 -1
- package/dist/cjs/src/static_dependencies/node-fetch/body.js +1 -5
- package/dist/cjs/src/static_dependencies/node-fetch/errors/abort-error.js +1 -0
- package/dist/cjs/src/static_dependencies/node-fetch/errors/base.js +6 -0
- package/dist/cjs/src/static_dependencies/node-fetch/errors/fetch-error.js +1 -0
- package/dist/cjs/src/static_dependencies/node-fetch/headers.js +1 -5
- package/dist/cjs/src/static_dependencies/node-fetch/index.js +1 -7
- package/dist/cjs/src/static_dependencies/node-fetch/request.js +1 -7
- package/dist/cjs/src/static_dependencies/node-fetch/response.js +1 -5
- package/dist/cjs/src/static_dependencies/node-fetch/utils/get-search.js +6 -0
- package/dist/cjs/src/static_dependencies/node-fetch/utils/is-redirect.js +6 -0
- package/dist/cjs/src/static_dependencies/node-fetch/utils/is.js +6 -0
- package/dist/cjs/src/static_dependencies/node-fetch/utils/referrer.js +1 -0
- package/dist/cjs/src/static_dependencies/proxies/agent-base/index.js +1 -0
- package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +1 -0
- package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +1 -0
- package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +6 -0
- package/dist/cjs/src/static_dependencies/qs/formats.js +6 -0
- package/dist/cjs/src/static_dependencies/qs/index.js +1 -0
- package/dist/cjs/src/static_dependencies/qs/parse.js +1 -0
- package/dist/cjs/src/static_dependencies/qs/stringify.js +1 -0
- package/dist/cjs/src/static_dependencies/qs/utils.js +6 -0
- package/dist/cjs/src/static_dependencies/scure-base/index.js +6 -0
- package/dist/cjs/src/static_dependencies/scure-bip32/index.js +1 -19
- package/dist/cjs/src/static_dependencies/scure-bip39/index.js +1 -1
- package/dist/cjs/src/static_dependencies/scure-bip39/wordlists/english.js +6 -0
- 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 +6 -0
- package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +6 -0
- package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +6 -0
- package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +6 -0
- package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +6 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +6 -0
- 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 +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +6 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +6 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +6 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +1 -0
- 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 +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +6 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +1 -4
- package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +1 -3
- package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/num.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +1 -1
- package/dist/cjs/src/static_dependencies/watchable/src/unpromise.js +6 -0
- package/dist/cjs/src/static_dependencies/zklink/zklink-sdk-web.js +6 -0
- package/dist/cjs/src/tokocrypto.js +1 -1
- package/dist/cjs/src/toobit.js +1 -1
- package/dist/cjs/src/upbit.js +1 -1
- package/dist/cjs/src/wavesexchange.js +1 -1
- package/dist/cjs/src/whitebit.js +22 -3
- 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/zebpay.js +1 -1
- package/dist/cjs/src/zonda.js +1 -1
- package/js/ccxt.d.ts +8 -8
- package/js/ccxt.js +12 -6
- package/js/src/abstract/aftermath.js +6 -0
- package/js/src/abstract/alpaca.js +6 -0
- package/js/src/abstract/apex.js +6 -0
- package/js/src/abstract/arkham.js +6 -0
- package/js/src/abstract/ascendex.js +6 -0
- package/js/src/abstract/aster.d.ts +52 -0
- package/js/src/abstract/aster.js +6 -0
- package/js/src/abstract/backpack.js +6 -0
- package/js/src/abstract/bequant.js +6 -0
- package/js/src/abstract/bigone.js +6 -0
- package/js/src/abstract/binance.d.ts +1 -0
- package/js/src/abstract/binance.js +6 -0
- package/js/src/abstract/binancecoinm.d.ts +1 -0
- package/js/src/abstract/binancecoinm.js +6 -0
- package/js/src/abstract/binanceus.d.ts +1 -0
- package/js/src/abstract/binanceus.js +6 -0
- package/js/src/abstract/binanceusdm.d.ts +1 -0
- package/js/src/abstract/binanceusdm.js +6 -0
- package/js/src/abstract/bingx.js +6 -0
- package/js/src/abstract/bit2c.js +6 -0
- package/js/src/abstract/bitbank.js +6 -0
- package/js/src/abstract/bitbns.js +6 -0
- package/js/src/abstract/bitfinex.js +6 -0
- package/js/src/abstract/bitflyer.js +6 -0
- package/js/src/abstract/bitget.js +6 -0
- package/js/src/abstract/bithumb.js +6 -0
- package/js/src/abstract/bitmart.js +6 -0
- package/js/src/abstract/bitmex.js +6 -0
- package/js/src/abstract/bitopro.js +6 -0
- package/js/src/abstract/bitrue.js +6 -0
- package/js/src/abstract/bitso.js +6 -0
- package/js/src/abstract/bitstamp.js +6 -0
- package/js/src/abstract/bitteam.js +6 -0
- package/js/src/abstract/bittrade.js +6 -0
- package/js/src/abstract/bitvavo.js +6 -0
- package/js/src/abstract/blockchaincom.js +6 -0
- package/js/src/abstract/blofin.d.ts +28 -12
- package/js/src/abstract/blofin.js +6 -0
- package/js/src/abstract/btcbox.js +6 -0
- package/js/src/abstract/btcmarkets.js +6 -0
- package/js/src/abstract/btcturk.js +6 -0
- package/js/src/abstract/bullish.js +6 -0
- package/js/src/abstract/bybit.js +6 -0
- package/js/src/abstract/bydfi.js +6 -0
- package/js/src/abstract/cex.js +6 -0
- package/js/src/abstract/coinbase.js +6 -0
- package/js/src/abstract/coinbaseadvanced.js +6 -0
- package/js/src/abstract/coinbaseexchange.js +6 -0
- package/js/src/abstract/coinbaseinternational.js +6 -0
- package/js/src/abstract/coincheck.js +6 -0
- package/js/src/abstract/coinex.js +6 -0
- package/js/src/abstract/coinmate.js +6 -0
- package/js/src/abstract/coinmetro.js +6 -0
- package/js/src/abstract/coinone.js +6 -0
- package/js/src/abstract/coinsph.js +6 -0
- package/js/src/abstract/coinspot.js +6 -0
- package/js/src/abstract/cryptocom.js +6 -0
- package/js/src/abstract/cryptomus.js +6 -0
- package/js/src/abstract/deepcoin.js +6 -0
- package/js/src/abstract/delta.js +6 -0
- package/js/src/abstract/deribit.js +6 -0
- package/js/src/abstract/derive.js +6 -0
- package/js/src/abstract/digifinex.js +6 -0
- package/js/src/abstract/dydx.js +6 -0
- package/js/src/abstract/exmo.js +6 -0
- package/js/src/abstract/fmfwio.js +6 -0
- package/js/src/abstract/foxbit.js +6 -0
- package/js/src/abstract/gate.js +6 -0
- package/js/src/abstract/gateio.js +6 -0
- package/js/src/abstract/gemini.js +6 -0
- package/js/src/abstract/grvt.js +6 -0
- package/js/src/abstract/hashkey.js +6 -0
- package/js/src/abstract/hibachi.js +6 -0
- package/js/src/abstract/hitbtc.js +6 -0
- package/js/src/abstract/hollaex.js +6 -0
- package/js/src/abstract/htx.js +6 -0
- package/js/src/abstract/huobi.js +6 -0
- package/js/src/abstract/hyperliquid.js +6 -0
- package/js/src/abstract/independentreserve.js +6 -0
- package/js/src/abstract/indodax.js +6 -0
- package/js/src/abstract/kraken.d.ts +36 -30
- package/js/src/abstract/kraken.js +6 -0
- package/js/src/abstract/krakenfutures.js +6 -0
- package/js/src/abstract/kucoin.d.ts +1 -0
- package/js/src/abstract/kucoin.js +6 -0
- package/js/src/abstract/kucoinfutures.d.ts +1 -0
- package/js/src/abstract/kucoinfutures.js +6 -0
- package/js/src/abstract/latoken.js +6 -0
- package/js/src/abstract/lbank.js +6 -0
- package/js/src/abstract/lighter.js +6 -0
- package/js/src/abstract/luno.js +6 -0
- package/js/src/abstract/mercado.js +6 -0
- package/js/src/abstract/mexc.d.ts +49 -0
- package/js/src/abstract/mexc.js +6 -0
- package/js/src/abstract/modetrade.js +6 -0
- package/js/src/abstract/myokx.js +6 -0
- package/js/src/abstract/ndax.js +6 -0
- package/js/src/abstract/novadax.js +6 -0
- package/js/src/abstract/okx.js +6 -0
- package/js/src/abstract/okxus.js +6 -0
- package/js/src/abstract/onetrading.js +6 -0
- package/js/src/abstract/oxfun.js +6 -0
- package/js/src/abstract/p2b.js +6 -0
- package/js/src/abstract/pacifica.d.ts +46 -0
- package/js/src/abstract/pacifica.js +11 -0
- package/js/src/abstract/paradex.js +6 -0
- package/js/src/abstract/paymium.js +6 -0
- package/js/src/abstract/phemex.js +6 -0
- package/js/src/abstract/poloniex.js +6 -0
- package/js/src/abstract/tokocrypto.js +6 -0
- package/js/src/abstract/toobit.js +6 -0
- package/js/src/abstract/upbit.js +6 -0
- package/js/src/abstract/wavesexchange.js +6 -0
- package/js/src/abstract/whitebit.js +6 -0
- package/js/src/abstract/woo.js +6 -0
- package/js/src/abstract/woofipro.js +6 -0
- package/js/src/abstract/xt.js +6 -0
- package/js/src/abstract/yobit.js +6 -0
- package/js/src/abstract/zaif.js +6 -0
- package/js/src/abstract/zebpay.js +6 -0
- package/js/src/abstract/zonda.js +6 -0
- package/js/src/aftermath.js +7 -1
- package/js/src/alpaca.js +6 -0
- package/js/src/apex.js +6 -0
- package/js/src/arkham.js +6 -0
- package/js/src/ascendex.js +6 -0
- package/js/src/aster.js +58 -0
- package/js/src/backpack.js +7 -1
- package/js/src/base/Exchange.d.ts +3 -0
- package/js/src/base/Exchange.js +37 -0
- package/js/src/base/Precise.js +6 -0
- package/js/src/base/errorHierarchy.js +6 -0
- package/js/src/base/errors.js +6 -0
- package/js/src/base/functions/crypto.js +6 -0
- package/js/src/base/functions/encode.js +6 -0
- package/js/src/base/functions/generic.js +6 -0
- package/js/src/base/functions/io.js +6 -0
- package/js/src/base/functions/misc.js +6 -0
- package/js/src/base/functions/number.js +6 -0
- package/js/src/base/functions/platform.js +6 -0
- package/js/src/base/functions/rsa.js +6 -0
- package/js/src/base/functions/string.js +6 -0
- package/js/src/base/functions/throttle.js +6 -0
- package/js/src/base/functions/time.js +6 -0
- package/js/src/base/functions/totp.js +6 -0
- package/js/src/base/functions/type.js +6 -0
- package/js/src/base/functions.js +6 -0
- package/js/src/base/types.js +6 -0
- package/js/src/base/ws/Cache.js +6 -0
- package/js/src/base/ws/Client.js +6 -0
- package/js/src/base/ws/Future.js +6 -0
- package/js/src/base/ws/OrderBook.js +6 -0
- package/js/src/base/ws/OrderBookSide.js +6 -0
- package/js/src/base/ws/WsClient.js +6 -0
- package/js/src/base/ws/functions.js +6 -0
- package/js/src/bequant.js +6 -0
- package/js/src/bigone.js +6 -0
- package/js/src/binance.d.ts +0 -1
- package/js/src/binance.js +19 -18
- package/js/src/binancecoinm.js +6 -0
- package/js/src/binanceus.js +6 -0
- package/js/src/binanceusdm.js +6 -0
- package/js/src/bingx.js +6 -0
- package/js/src/bit2c.js +6 -0
- package/js/src/bitbank.js +6 -0
- package/js/src/bitbns.js +6 -0
- package/js/src/bitfinex.js +50 -53
- package/js/src/bitflyer.js +6 -0
- package/js/src/bitget.d.ts +1 -1
- package/js/src/bitget.js +12 -3
- package/js/src/bithumb.js +6 -0
- package/js/src/bitmart.js +6 -0
- package/js/src/bitmex.d.ts +12 -0
- package/js/src/bitmex.js +52 -0
- package/js/src/bitopro.js +6 -0
- package/js/src/bitrue.js +6 -0
- package/js/src/bitso.js +6 -0
- package/js/src/bitstamp.js +20 -1
- package/js/src/bitteam.js +6 -0
- package/js/src/bittrade.js +7 -1
- package/js/src/bitvavo.js +6 -0
- package/js/src/blockchaincom.js +6 -0
- package/js/src/blofin.d.ts +4 -1
- package/js/src/blofin.js +158 -31
- package/js/src/btcbox.js +6 -0
- package/js/src/btcmarkets.js +6 -0
- package/js/src/btcturk.js +6 -0
- package/js/src/bullish.js +6 -0
- package/js/src/bybit.js +6 -0
- package/js/src/bydfi.js +6 -0
- package/js/src/cex.js +6 -0
- package/js/src/coinbase.js +6 -0
- package/js/src/coinbaseadvanced.js +6 -0
- package/js/src/coinbaseexchange.js +6 -0
- package/js/src/coinbaseinternational.js +6 -0
- package/js/src/coincheck.js +6 -0
- package/js/src/coinex.js +6 -0
- package/js/src/coinmate.js +6 -0
- package/js/src/coinmetro.js +6 -0
- package/js/src/coinone.js +6 -0
- package/js/src/coinsph.js +10 -0
- package/js/src/coinspot.js +6 -0
- package/js/src/cryptocom.js +6 -0
- package/js/src/cryptomus.js +6 -0
- package/js/src/deepcoin.js +6 -0
- package/js/src/delta.js +6 -0
- package/js/src/deribit.js +6 -0
- package/js/src/derive.js +6 -0
- package/js/src/digifinex.js +6 -0
- package/js/src/dydx.js +6 -0
- package/js/src/exmo.js +6 -0
- package/js/src/fmfwio.js +6 -0
- package/js/src/foxbit.js +6 -0
- package/js/src/gate.js +6 -0
- package/js/src/gateio.js +6 -0
- package/js/src/gemini.js +6 -0
- package/js/src/grvt.js +6 -0
- package/js/src/hashkey.js +6 -0
- package/js/src/hibachi.js +6 -0
- package/js/src/hitbtc.js +6 -0
- package/js/src/hollaex.js +7 -1
- package/js/src/htx.js +6 -0
- package/js/src/huobi.js +6 -0
- package/js/src/hyperliquid.js +6 -0
- package/js/src/independentreserve.js +6 -0
- package/js/src/indodax.js +6 -0
- package/js/src/kraken.js +45 -31
- package/js/src/krakenfutures.js +6 -0
- package/js/src/kucoin.d.ts +249 -8
- package/js/src/kucoin.js +2164 -461
- package/js/src/kucoinfutures.js +6 -0
- package/js/src/latoken.js +6 -0
- package/js/src/lbank.js +6 -0
- package/js/src/lighter.d.ts +4 -2
- package/js/src/lighter.js +204 -73
- package/js/src/luno.js +6 -0
- package/js/src/mercado.js +6 -0
- package/js/src/mexc.js +55 -0
- package/js/src/modetrade.js +6 -0
- package/js/src/myokx.js +6 -0
- package/js/src/ndax.js +6 -0
- package/js/src/novadax.js +6 -0
- package/js/src/okx.js +12 -5
- package/js/src/okxus.js +6 -0
- package/js/src/onetrading.js +6 -0
- package/js/src/oxfun.js +6 -0
- package/js/src/p2b.js +6 -0
- package/js/src/pacifica.d.ts +531 -0
- package/js/src/pacifica.js +3257 -0
- package/js/src/paradex.js +6 -0
- package/js/src/paymium.js +6 -0
- package/js/src/phemex.js +6 -0
- package/js/src/poloniex.js +6 -0
- package/js/src/pro/aftermath.js +6 -0
- package/js/src/pro/alpaca.js +6 -0
- package/js/src/pro/apex.js +6 -0
- package/js/src/pro/arkham.js +6 -0
- package/js/src/pro/ascendex.js +6 -0
- package/js/src/pro/aster.js +6 -0
- package/js/src/pro/backpack.js +6 -0
- package/js/src/pro/bequant.js +6 -0
- package/js/src/pro/binance.js +18 -1
- package/js/src/pro/binancecoinm.js +6 -0
- package/js/src/pro/binanceus.js +6 -0
- package/js/src/pro/binanceusdm.js +6 -0
- package/js/src/pro/bingx.js +7 -1
- package/js/src/pro/bitfinex.js +6 -0
- package/js/src/pro/bitget.js +6 -0
- package/js/src/pro/bithumb.js +6 -0
- package/js/src/pro/bitmart.js +10 -3
- package/js/src/pro/bitmex.js +6 -0
- package/js/src/pro/bitopro.js +6 -0
- package/js/src/pro/bitrue.js +6 -0
- package/js/src/pro/bitstamp.js +6 -0
- package/js/src/pro/bittrade.js +10 -0
- package/js/src/pro/bitvavo.js +14 -0
- package/js/src/pro/blockchaincom.js +6 -0
- package/js/src/pro/blofin.js +6 -0
- package/js/src/pro/bullish.js +6 -0
- package/js/src/pro/bybit.js +6 -0
- package/js/src/pro/bydfi.js +6 -0
- package/js/src/pro/cex.js +6 -0
- package/js/src/pro/coinbase.js +6 -0
- package/js/src/pro/coinbaseadvanced.js +6 -0
- package/js/src/pro/coinbaseexchange.js +6 -0
- package/js/src/pro/coinbaseinternational.js +6 -0
- package/js/src/pro/coincheck.js +6 -0
- package/js/src/pro/coinex.js +6 -0
- package/js/src/pro/coinone.js +6 -0
- package/js/src/pro/cryptocom.js +6 -0
- package/js/src/pro/deepcoin.js +6 -0
- package/js/src/pro/deribit.js +6 -0
- package/js/src/pro/derive.js +6 -0
- package/js/src/pro/dydx.js +6 -0
- package/js/src/pro/exmo.js +6 -0
- package/js/src/pro/gate.js +9 -0
- package/js/src/pro/gateio.js +6 -0
- package/js/src/pro/gemini.js +6 -0
- package/js/src/pro/grvt.js +7 -1
- package/js/src/pro/hashkey.js +6 -0
- package/js/src/pro/hitbtc.js +6 -0
- package/js/src/pro/hollaex.js +6 -0
- package/js/src/pro/htx.js +6 -0
- package/js/src/pro/huobi.js +6 -0
- package/js/src/pro/hyperliquid.js +6 -0
- package/js/src/pro/independentreserve.js +6 -0
- package/js/src/pro/kraken.js +6 -0
- package/js/src/pro/krakenfutures.js +6 -0
- package/js/src/pro/kucoin.js +6 -0
- package/js/src/pro/kucoinfutures.js +6 -0
- package/js/src/pro/lbank.js +6 -0
- package/js/src/pro/lighter.js +42 -17
- package/js/src/pro/luno.js +6 -0
- package/js/src/pro/mexc.js +6 -0
- package/js/src/pro/modetrade.js +6 -0
- package/js/src/pro/myokx.js +6 -0
- package/js/src/pro/ndax.js +6 -0
- package/js/src/pro/okx.js +6 -0
- package/js/src/pro/okxus.js +6 -0
- package/js/src/pro/onetrading.js +6 -0
- package/js/src/pro/oxfun.js +6 -0
- package/js/src/pro/p2b.js +6 -0
- package/js/src/pro/pacifica.d.ts +267 -0
- package/js/src/pro/pacifica.js +1396 -0
- package/js/src/pro/paradex.js +6 -0
- package/js/src/pro/phemex.js +6 -0
- package/js/src/pro/poloniex.js +6 -0
- package/js/src/pro/toobit.js +6 -0
- package/js/src/pro/upbit.js +6 -0
- package/js/src/pro/whitebit.js +6 -0
- package/js/src/pro/woo.js +6 -0
- package/js/src/pro/woofipro.js +6 -0
- package/js/src/pro/xt.js +6 -0
- package/js/src/protobuf/mexc/compiled.cjs +6 -0
- package/js/src/static_dependencies/dydx-v4-client/cosmos/base/v1beta1/coin.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/keys.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/v1beta1/multisig.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/secp256k1/keys.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/cosmos/tx/signing/v1beta1/signing.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/cosmos/tx/v1beta1/tx.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/accountplus/tx.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/block_rate_limit_config.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/clob_pair.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/equity_tier_limit_config.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/finalize_block.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/liquidations.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/liquidations_config.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/matches.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order_removals.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/tx.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/transfer.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/tx.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/asset_position.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/perpetual_position.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/subaccount.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/google/protobuf/any.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/helpers.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/long/index.cjs +6 -0
- package/js/src/static_dependencies/dydx-v4-client/onboarding.js +6 -0
- package/js/src/static_dependencies/dydx-v4-client/registry.js +6 -0
- package/js/src/static_dependencies/ethers/abi-coder.js +6 -0
- package/js/src/static_dependencies/ethers/address/address.js +6 -0
- package/js/src/static_dependencies/ethers/address/checks.js +6 -0
- package/js/src/static_dependencies/ethers/address/contract-address.js +6 -0
- package/js/src/static_dependencies/ethers/address/index.js +6 -0
- package/js/src/static_dependencies/ethers/bytes32.js +6 -0
- package/js/src/static_dependencies/ethers/coders/abstract-coder.js +6 -0
- package/js/src/static_dependencies/ethers/coders/address.js +6 -0
- package/js/src/static_dependencies/ethers/coders/anonymous.js +6 -0
- package/js/src/static_dependencies/ethers/coders/array.js +6 -0
- package/js/src/static_dependencies/ethers/coders/boolean.js +6 -0
- package/js/src/static_dependencies/ethers/coders/bytes.js +6 -0
- package/js/src/static_dependencies/ethers/coders/fixed-bytes.js +6 -0
- package/js/src/static_dependencies/ethers/coders/null.js +6 -0
- package/js/src/static_dependencies/ethers/coders/number.js +6 -0
- package/js/src/static_dependencies/ethers/coders/string.js +6 -0
- package/js/src/static_dependencies/ethers/coders/tuple.js +6 -0
- package/js/src/static_dependencies/ethers/fragments.js +6 -0
- package/js/src/static_dependencies/ethers/hash/index.js +6 -0
- package/js/src/static_dependencies/ethers/hash/solidity.js +6 -0
- package/js/src/static_dependencies/ethers/hash/typed-data.js +6 -0
- package/js/src/static_dependencies/ethers/index.js +6 -0
- package/js/src/static_dependencies/ethers/interface.js +6 -0
- package/js/src/static_dependencies/ethers/typed.js +6 -0
- package/js/src/static_dependencies/ethers/utils/base58.js +6 -0
- package/js/src/static_dependencies/ethers/utils/base64-browser.js +6 -0
- package/js/src/static_dependencies/ethers/utils/base64.js +6 -0
- package/js/src/static_dependencies/ethers/utils/data.js +6 -0
- package/js/src/static_dependencies/ethers/utils/errors.js +6 -0
- package/js/src/static_dependencies/ethers/utils/events.js +6 -0
- package/js/src/static_dependencies/ethers/utils/fixednumber.js +6 -0
- package/js/src/static_dependencies/ethers/utils/index.js +6 -0
- package/js/src/static_dependencies/ethers/utils/maths.js +6 -0
- package/js/src/static_dependencies/ethers/utils/properties.js +6 -0
- package/js/src/static_dependencies/ethers/utils/rlp-decode.js +6 -0
- package/js/src/static_dependencies/ethers/utils/rlp-encode.js +6 -0
- package/js/src/static_dependencies/ethers/utils/rlp.js +6 -0
- package/js/src/static_dependencies/ethers/utils/units.js +6 -0
- package/js/src/static_dependencies/ethers/utils/utf8.js +6 -0
- package/js/src/static_dependencies/ethers/utils/uuid.js +6 -0
- package/js/src/static_dependencies/fflake/browser.js +6 -0
- package/js/src/static_dependencies/jsencrypt/JSEncrypt.js +6 -0
- package/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +6 -0
- package/js/src/static_dependencies/jsencrypt/index.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/oids.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +6 -0
- package/js/src/static_dependencies/messagepack/msgpack.js +6 -0
- package/js/src/static_dependencies/noble-curves/_shortw_utils.js +6 -0
- package/js/src/static_dependencies/noble-curves/abstract/curve.js +6 -0
- package/js/src/static_dependencies/noble-curves/abstract/edwards.js +6 -0
- package/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +6 -0
- package/js/src/static_dependencies/noble-curves/abstract/modular.js +6 -0
- package/js/src/static_dependencies/noble-curves/abstract/montgomery.js +6 -0
- package/js/src/static_dependencies/noble-curves/abstract/poseidon.js +6 -0
- package/js/src/static_dependencies/noble-curves/abstract/utils.js +6 -0
- package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +6 -0
- package/js/src/static_dependencies/noble-curves/bn.js +6 -0
- package/js/src/static_dependencies/noble-curves/ed25519.js +6 -0
- package/js/src/static_dependencies/noble-curves/ed448.js +6 -0
- package/js/src/static_dependencies/noble-curves/index.js +6 -0
- package/js/src/static_dependencies/noble-curves/jubjub.js +6 -0
- package/js/src/static_dependencies/noble-curves/p256.js +6 -0
- package/js/src/static_dependencies/noble-curves/p384.js +6 -0
- package/js/src/static_dependencies/noble-curves/p521.js +6 -0
- package/js/src/static_dependencies/noble-curves/pasta.js +6 -0
- package/js/src/static_dependencies/noble-curves/secp256k1.js +6 -0
- package/js/src/static_dependencies/noble-hashes/_assert.js +6 -0
- package/js/src/static_dependencies/noble-hashes/_blake2.js +6 -0
- package/js/src/static_dependencies/noble-hashes/_sha2.js +6 -0
- package/js/src/static_dependencies/noble-hashes/_u64.js +6 -0
- package/js/src/static_dependencies/noble-hashes/argon2.js +6 -0
- package/js/src/static_dependencies/noble-hashes/blake2b.js +6 -0
- package/js/src/static_dependencies/noble-hashes/blake2s.js +6 -0
- package/js/src/static_dependencies/noble-hashes/blake3.js +6 -0
- package/js/src/static_dependencies/noble-hashes/crypto.js +6 -0
- package/js/src/static_dependencies/noble-hashes/cryptoNode.js +6 -0
- package/js/src/static_dependencies/noble-hashes/eskdf.js +6 -0
- package/js/src/static_dependencies/noble-hashes/hkdf.js +6 -0
- package/js/src/static_dependencies/noble-hashes/hmac.js +6 -0
- package/js/src/static_dependencies/noble-hashes/index.js +6 -0
- package/js/src/static_dependencies/noble-hashes/md5.js +6 -0
- package/js/src/static_dependencies/noble-hashes/pbkdf2.js +6 -0
- package/js/src/static_dependencies/noble-hashes/ripemd160.js +6 -0
- package/js/src/static_dependencies/noble-hashes/scrypt.js +6 -0
- package/js/src/static_dependencies/noble-hashes/sha1.js +6 -0
- package/js/src/static_dependencies/noble-hashes/sha256.js +6 -0
- package/js/src/static_dependencies/noble-hashes/sha3-addons.js +6 -0
- package/js/src/static_dependencies/noble-hashes/sha3.js +6 -0
- package/js/src/static_dependencies/noble-hashes/sha512.js +6 -0
- package/js/src/static_dependencies/noble-hashes/utils.js +6 -0
- package/js/src/static_dependencies/node-fetch/body.js +6 -0
- package/js/src/static_dependencies/node-fetch/errors/abort-error.js +6 -0
- package/js/src/static_dependencies/node-fetch/errors/base.js +6 -0
- package/js/src/static_dependencies/node-fetch/errors/fetch-error.js +6 -0
- package/js/src/static_dependencies/node-fetch/headers.js +6 -0
- package/js/src/static_dependencies/node-fetch/index.js +6 -0
- package/js/src/static_dependencies/node-fetch/request.js +6 -0
- package/js/src/static_dependencies/node-fetch/response.js +6 -0
- package/js/src/static_dependencies/node-fetch/utils/get-search.js +6 -0
- package/js/src/static_dependencies/node-fetch/utils/is-redirect.js +6 -0
- package/js/src/static_dependencies/node-fetch/utils/is.js +6 -0
- package/js/src/static_dependencies/node-fetch/utils/referrer.js +6 -0
- package/js/src/static_dependencies/proxies/agent-base/helpers.js +6 -0
- package/js/src/static_dependencies/proxies/agent-base/index.js +6 -0
- package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +6 -0
- package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +6 -0
- package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +6 -0
- package/js/src/static_dependencies/qs/formats.js +6 -0
- package/js/src/static_dependencies/qs/index.js +6 -0
- package/js/src/static_dependencies/qs/parse.js +6 -0
- package/js/src/static_dependencies/qs/stringify.js +6 -0
- package/js/src/static_dependencies/qs/utils.js +6 -0
- package/js/src/static_dependencies/scure-base/index.js +6 -0
- package/js/src/static_dependencies/scure-bip32/index.js +6 -0
- package/js/src/static_dependencies/scure-bip39/index.js +6 -0
- package/js/src/static_dependencies/scure-bip39/wordlists/english.js +6 -0
- package/js/src/static_dependencies/scure-starknet/index.js +6 -0
- package/js/src/static_dependencies/starknet/constants.js +6 -0
- package/js/src/static_dependencies/starknet/index.js +6 -0
- package/js/src/static_dependencies/starknet/types/cairoEnum.js +6 -0
- package/js/src/static_dependencies/starknet/types/calldata.js +6 -0
- package/js/src/static_dependencies/starknet/types/index.js +6 -0
- package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +6 -0
- package/js/src/static_dependencies/starknet/types/lib/contract/index.js +6 -0
- package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +6 -0
- package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +6 -0
- package/js/src/static_dependencies/starknet/types/lib/index.js +6 -0
- package/js/src/static_dependencies/starknet/types/typedData.js +6 -0
- package/js/src/static_dependencies/starknet/utils/address.js +6 -0
- package/js/src/static_dependencies/starknet/utils/assert.js +6 -0
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +6 -0
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +6 -0
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/index.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/validate.js +6 -0
- package/js/src/static_dependencies/starknet/utils/encode.js +6 -0
- package/js/src/static_dependencies/starknet/utils/hash/classHash.js +6 -0
- package/js/src/static_dependencies/starknet/utils/hash/index.js +6 -0
- package/js/src/static_dependencies/starknet/utils/merkle.js +6 -0
- package/js/src/static_dependencies/starknet/utils/num.js +6 -0
- package/js/src/static_dependencies/starknet/utils/selector.js +6 -0
- package/js/src/static_dependencies/starknet/utils/shortString.js +6 -0
- package/js/src/static_dependencies/starknet/utils/starknetId.js +6 -0
- package/js/src/static_dependencies/starknet/utils/typedData.js +6 -0
- package/js/src/static_dependencies/starknet/utils/uint256.js +6 -0
- package/js/src/static_dependencies/starknet/utils/url.js +6 -0
- package/js/src/static_dependencies/watchable/src/index.js +6 -0
- package/js/src/static_dependencies/watchable/src/types.js +6 -0
- package/js/src/static_dependencies/watchable/src/unpromise.js +6 -0
- package/js/src/static_dependencies/zklink/zklink-sdk-web.js +6 -0
- package/js/src/tokocrypto.js +6 -0
- package/js/src/toobit.js +6 -0
- package/js/src/upbit.js +6 -0
- package/js/src/wavesexchange.js +6 -0
- package/js/src/whitebit.d.ts +1 -1
- package/js/src/whitebit.js +27 -2
- package/js/src/woo.js +6 -0
- package/js/src/woofipro.js +6 -0
- package/js/src/xt.js +6 -0
- package/js/src/yobit.js +6 -0
- package/js/src/zaif.js +6 -0
- package/js/src/zebpay.js +6 -0
- package/js/src/zonda.js +6 -0
- package/package.json +1 -1
- package/dist/cjs/src/coincatch.js +0 -5495
- package/dist/cjs/src/pro/coincatch.js +0 -1563
- package/js/src/abstract/coincatch.d.ts +0 -97
- package/js/src/abstract/coincatch.js +0 -5
- package/js/src/coincatch.d.ts +0 -788
- package/js/src/coincatch.js +0 -5488
- package/js/src/pro/coincatch.d.ts +0 -207
- package/js/src/pro/coincatch.js +0 -1556
package/js/src/kucoin.js
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
// ----------------------------------------------------------------------------
|
|
2
|
+
|
|
3
|
+
// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
|
|
4
|
+
// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
|
5
|
+
// EDIT THE CORRESPONDENT .ts FILE INSTEAD
|
|
6
|
+
|
|
1
7
|
// ---------------------------------------------------------------------------
|
|
2
8
|
import Exchange from './abstract/kucoin.js';
|
|
3
9
|
import { AccountSuspended, ArgumentsRequired, AuthenticationError, BadRequest, BadSymbol, ExchangeError, ExchangeNotAvailable, InsufficientFunds, InvalidAddress, InvalidNonce, InvalidOrder, NotSupported, OrderNotFound, PermissionDenied, RateLimitExceeded, RestrictedLocation } from './base/errors.js';
|
|
@@ -42,10 +48,13 @@ export default class kucoin extends Exchange {
|
|
|
42
48
|
'createMarketSellOrderWithCost': true,
|
|
43
49
|
'createOrder': true,
|
|
44
50
|
'createOrders': true,
|
|
51
|
+
'createOrderWithTakeProfitAndStopLoss': true,
|
|
45
52
|
'createPostOnlyOrder': true,
|
|
46
53
|
'createStopLimitOrder': true,
|
|
54
|
+
'createStopLossOrder': true,
|
|
47
55
|
'createStopMarketOrder': true,
|
|
48
56
|
'createStopOrder': true,
|
|
57
|
+
'createTakeProfitOrder': true,
|
|
49
58
|
'createTriggerOrder': true,
|
|
50
59
|
'editOrder': true,
|
|
51
60
|
'fetchAccounts': true,
|
|
@@ -84,8 +93,9 @@ export default class kucoin extends Exchange {
|
|
|
84
93
|
'fetchMarkPrices': true,
|
|
85
94
|
'fetchMyTrades': true,
|
|
86
95
|
'fetchOHLCV': true,
|
|
87
|
-
'fetchOpenInterest':
|
|
88
|
-
'fetchOpenInterestHistory':
|
|
96
|
+
'fetchOpenInterest': true,
|
|
97
|
+
'fetchOpenInterestHistory': true,
|
|
98
|
+
'fetchOpenInterests': true,
|
|
89
99
|
'fetchOpenOrders': true,
|
|
90
100
|
'fetchOrder': true,
|
|
91
101
|
'fetchOrderBook': true,
|
|
@@ -94,7 +104,7 @@ export default class kucoin extends Exchange {
|
|
|
94
104
|
'fetchOrderTrades': true,
|
|
95
105
|
'fetchPosition': true,
|
|
96
106
|
'fetchPositionADLRank': true,
|
|
97
|
-
'fetchPositionHistory':
|
|
107
|
+
'fetchPositionHistory': true,
|
|
98
108
|
'fetchPositionMode': true,
|
|
99
109
|
'fetchPositions': true,
|
|
100
110
|
'fetchPositionsADLRank': true,
|
|
@@ -562,6 +572,7 @@ export default class kucoin extends Exchange {
|
|
|
562
572
|
'{accountMode}/order/execution': 8,
|
|
563
573
|
'{accountMode}/position/open-list': 6,
|
|
564
574
|
'{accountMode}/position/history': 4,
|
|
575
|
+
'position/history': 4,
|
|
565
576
|
'{accountMode}/position/tiers': 40,
|
|
566
577
|
'sub-account/balance': 10,
|
|
567
578
|
'user/fee-rate': 6,
|
|
@@ -626,6 +637,7 @@ export default class kucoin extends Exchange {
|
|
|
626
637
|
'503': ExchangeNotAvailable,
|
|
627
638
|
'101030': PermissionDenied,
|
|
628
639
|
'103000': InvalidOrder,
|
|
640
|
+
'112010': PermissionDenied,
|
|
629
641
|
'130101': BadRequest,
|
|
630
642
|
'130102': ExchangeError,
|
|
631
643
|
'130103': OrderNotFound,
|
|
@@ -875,15 +887,14 @@ export default class kucoin extends Exchange {
|
|
|
875
887
|
},
|
|
876
888
|
'options': {
|
|
877
889
|
'hf': undefined,
|
|
890
|
+
'uta': undefined,
|
|
878
891
|
'version': 'v1',
|
|
879
892
|
'symbolSeparator': '-',
|
|
880
893
|
'fetchMyTradesMethod': 'private_get_fills',
|
|
881
894
|
'timeDifference': 0,
|
|
882
895
|
'adjustForTimeDifference': false,
|
|
883
896
|
'fetchCurrencies': {
|
|
884
|
-
'
|
|
885
|
-
'webApiRetries': 1,
|
|
886
|
-
'webApiMuteFailure': true,
|
|
897
|
+
'brokenCurrencies': ['00', 'OPEN_ERROR', 'HUF', 'BDT'], // skip buggy entries: https://t.me/KuCoin_API/217798
|
|
887
898
|
},
|
|
888
899
|
'fetchMarkets': {
|
|
889
900
|
'types': ['spot', 'swap', 'future', 'contract'],
|
|
@@ -898,6 +909,13 @@ export default class kucoin extends Exchange {
|
|
|
898
909
|
'fetchBalance': {
|
|
899
910
|
'code': 'USDT', // for contract endpoint
|
|
900
911
|
},
|
|
912
|
+
'timeInForce': {
|
|
913
|
+
'IOC': 'IOC',
|
|
914
|
+
'FOK': 'FOK',
|
|
915
|
+
'PO': 'PO',
|
|
916
|
+
'GTD': 'GTT',
|
|
917
|
+
'RPI': 'RPI',
|
|
918
|
+
},
|
|
901
919
|
'timeframes': {
|
|
902
920
|
'swap': {
|
|
903
921
|
'1m': 1,
|
|
@@ -1061,12 +1079,32 @@ export default class kucoin extends Exchange {
|
|
|
1061
1079
|
'mining': 'pool',
|
|
1062
1080
|
'hf': 'trade_hf',
|
|
1063
1081
|
'contract': 'contract',
|
|
1082
|
+
'uta': 'unified',
|
|
1083
|
+
'unified': 'unified',
|
|
1084
|
+
},
|
|
1085
|
+
'utaAccountsByType': {
|
|
1086
|
+
'trade': 'SPOT',
|
|
1087
|
+
'spot': 'SPOT',
|
|
1088
|
+
'margin': 'CROSS',
|
|
1089
|
+
'cross': 'CROSS',
|
|
1090
|
+
'isolated': 'ISOLATED',
|
|
1091
|
+
'main': 'FUNDING',
|
|
1092
|
+
'funding': 'FUNDING',
|
|
1093
|
+
'future': 'FUTURES',
|
|
1094
|
+
'swap': 'FUTURES',
|
|
1095
|
+
'contract': 'FUTURES',
|
|
1096
|
+
'uta': 'unified',
|
|
1097
|
+
'unified': 'unified',
|
|
1064
1098
|
},
|
|
1065
1099
|
'networks': {
|
|
1100
|
+
'BTC': 'btc',
|
|
1066
1101
|
'BRC20': 'btc',
|
|
1067
1102
|
'BTCNATIVESEGWIT': 'bech32',
|
|
1103
|
+
'ETH': 'eth',
|
|
1068
1104
|
'ERC20': 'eth',
|
|
1105
|
+
'TRX': 'trx',
|
|
1069
1106
|
'TRC20': 'trx',
|
|
1107
|
+
'HECO': 'heco',
|
|
1070
1108
|
'HRC20': 'heco',
|
|
1071
1109
|
'MATIC': 'matic',
|
|
1072
1110
|
'KCC': 'kcc',
|
|
@@ -1081,6 +1119,7 @@ export default class kucoin extends Exchange {
|
|
|
1081
1119
|
'TLOS': 'tlos',
|
|
1082
1120
|
'CFX': 'cfx',
|
|
1083
1121
|
'ACA': 'aca',
|
|
1122
|
+
'OP': 'optimism',
|
|
1084
1123
|
'OPTIMISM': 'optimism',
|
|
1085
1124
|
'ONT': 'ont',
|
|
1086
1125
|
'GLMR': 'glmr',
|
|
@@ -1271,6 +1310,14 @@ export default class kucoin extends Exchange {
|
|
|
1271
1310
|
// 'KLEVER': 'klv',
|
|
1272
1311
|
// undetermined: xns(insolar), rhoc, luk (luniverse), kts (klimatas), bchn (bitcoin cash node), god (shallow entry), lit (litmus),
|
|
1273
1312
|
},
|
|
1313
|
+
'networksById': {
|
|
1314
|
+
'btc': 'BTC',
|
|
1315
|
+
'trx': 'TRC20',
|
|
1316
|
+
'eth': 'ERC20',
|
|
1317
|
+
'heco': 'HRC20',
|
|
1318
|
+
'optimism': 'OP',
|
|
1319
|
+
'op': 'OP',
|
|
1320
|
+
},
|
|
1274
1321
|
'marginModes': {
|
|
1275
1322
|
'cross': 'MARGIN_TRADE',
|
|
1276
1323
|
'isolated': 'MARGIN_ISOLATED_TRADE',
|
|
@@ -1354,7 +1401,11 @@ export default class kucoin extends Exchange {
|
|
|
1354
1401
|
'stopLossPrice': true,
|
|
1355
1402
|
'takeProfitPrice': true,
|
|
1356
1403
|
'attachedStopLossTakeProfit': {
|
|
1357
|
-
'triggerPriceType':
|
|
1404
|
+
'triggerPriceType': {
|
|
1405
|
+
'last': true,
|
|
1406
|
+
'mark': true,
|
|
1407
|
+
'index': true,
|
|
1408
|
+
},
|
|
1358
1409
|
'price': true,
|
|
1359
1410
|
},
|
|
1360
1411
|
'timeInForce': {
|
|
@@ -1480,8 +1531,8 @@ export default class kucoin extends Exchange {
|
|
|
1480
1531
|
* @returns {object} a [status structure]{@link https://docs.ccxt.com/?id=exchange-status-structure}
|
|
1481
1532
|
*/
|
|
1482
1533
|
async fetchStatus(params = {}) {
|
|
1483
|
-
let uta =
|
|
1484
|
-
[uta, params] = this.handleOptionAndParams(params, 'fetchStatus', 'uta',
|
|
1534
|
+
let uta = false;
|
|
1535
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchStatus', 'uta', uta);
|
|
1485
1536
|
let type = undefined;
|
|
1486
1537
|
[type, params] = this.handleMarketTypeAndParams('fetchStatus', undefined, params);
|
|
1487
1538
|
let response = undefined;
|
|
@@ -1552,8 +1603,8 @@ export default class kucoin extends Exchange {
|
|
|
1552
1603
|
async fetchMarkets(params = {}) {
|
|
1553
1604
|
let fetchTickersFees = undefined;
|
|
1554
1605
|
[fetchTickersFees, params] = this.handleOptionAndParams(params, 'fetchMarkets', 'fetchTickersFees', true);
|
|
1555
|
-
let uta =
|
|
1556
|
-
[uta, params] = this.handleOptionAndParams(params, 'fetchMarkets', 'uta',
|
|
1606
|
+
let uta = false;
|
|
1607
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchMarkets', 'uta', uta);
|
|
1557
1608
|
if (uta) {
|
|
1558
1609
|
return await this.fetchUTAMarkets(params);
|
|
1559
1610
|
}
|
|
@@ -2089,7 +2140,7 @@ export default class kucoin extends Exchange {
|
|
|
2089
2140
|
'strike': undefined,
|
|
2090
2141
|
'optionType': undefined,
|
|
2091
2142
|
'precision': {
|
|
2092
|
-
'amount': this.
|
|
2143
|
+
'amount': this.safeNumber2(market, 'lotSize', 'baseOrderStep'),
|
|
2093
2144
|
'price': this.safeNumber(market, 'tickSize'),
|
|
2094
2145
|
},
|
|
2095
2146
|
'limits': {
|
|
@@ -2161,9 +2212,13 @@ export default class kucoin extends Exchange {
|
|
|
2161
2212
|
*/
|
|
2162
2213
|
async fetchCurrencies(params = {}) {
|
|
2163
2214
|
let uta = false;
|
|
2215
|
+
if (this.checkRequiredCredentials(false)) {
|
|
2216
|
+
uta = await this.isUTAEnabled();
|
|
2217
|
+
}
|
|
2164
2218
|
[uta, params] = this.handleOptionAndParams(params, 'fetchCurrencies', 'uta', uta);
|
|
2165
2219
|
let response = undefined;
|
|
2166
2220
|
if (uta) {
|
|
2221
|
+
response = await this.utaGetAssetCurrencies(params);
|
|
2167
2222
|
//
|
|
2168
2223
|
// {
|
|
2169
2224
|
// "code": "200000",
|
|
@@ -2198,7 +2253,6 @@ export default class kucoin extends Exchange {
|
|
|
2198
2253
|
// ]
|
|
2199
2254
|
// }
|
|
2200
2255
|
//
|
|
2201
|
-
response = await this.utaGetAssetCurrencies(params);
|
|
2202
2256
|
}
|
|
2203
2257
|
else {
|
|
2204
2258
|
//
|
|
@@ -2241,64 +2295,61 @@ export default class kucoin extends Exchange {
|
|
|
2241
2295
|
response = await this.publicGetCurrencies(params);
|
|
2242
2296
|
}
|
|
2243
2297
|
const currenciesData = this.safeList(response, 'data', []);
|
|
2244
|
-
const brokenCurrencies = this.
|
|
2245
|
-
const
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
'code': networkCode,
|
|
2265
|
-
'active': undefined,
|
|
2266
|
-
'fee': this.safeNumber2(chain, 'withdrawalMinFee', 'minWithdrawFee'),
|
|
2267
|
-
'deposit': this.safeBool(chain, 'isDepositEnabled'),
|
|
2268
|
-
'withdraw': this.safeBool(chain, 'isWithdrawEnabled'),
|
|
2269
|
-
'precision': this.parseNumber(this.parsePrecision(this.safeString(chain, 'withdrawPrecision'))),
|
|
2270
|
-
'limits': {
|
|
2271
|
-
'withdraw': {
|
|
2272
|
-
'min': this.safeNumber2(chain, 'withdrawalMinSize', 'minWithdrawSize'),
|
|
2273
|
-
'max': this.safeNumber2(chain, 'maxWithdraw', 'maxWithdrawSize'),
|
|
2274
|
-
},
|
|
2275
|
-
'deposit': {
|
|
2276
|
-
'min': this.safeNumber2(chain, 'depositMinSize', 'minDepositSize'),
|
|
2277
|
-
'max': this.safeNumber2(chain, 'maxDeposit', 'maxDepositSize'),
|
|
2278
|
-
},
|
|
2279
|
-
},
|
|
2280
|
-
};
|
|
2281
|
-
}
|
|
2282
|
-
// kucoin has determined 'fiat' currencies with below logic
|
|
2283
|
-
const rawPrecision = this.safeString(entry, 'precision');
|
|
2284
|
-
const precision = this.parseNumber(this.parsePrecision(rawPrecision));
|
|
2285
|
-
const isFiat = chainsLength === 0;
|
|
2286
|
-
result[code] = this.safeCurrencyStructure({
|
|
2287
|
-
'id': id,
|
|
2288
|
-
'name': this.safeString(entry, 'fullName'),
|
|
2289
|
-
'code': code,
|
|
2290
|
-
'type': isFiat ? 'fiat' : 'crypto',
|
|
2291
|
-
'precision': precision,
|
|
2292
|
-
'info': entry,
|
|
2293
|
-
'networks': networks,
|
|
2294
|
-
'deposit': undefined,
|
|
2295
|
-
'withdraw': undefined,
|
|
2298
|
+
const brokenCurrencies = this.handleOption('fetchCurrencies', 'brokenCurrencies', []);
|
|
2299
|
+
const filteredCurrencies = this.filterOutByArray(currenciesData, 'currency', brokenCurrencies); // remove broken entries
|
|
2300
|
+
return this.parseCurrencies(filteredCurrencies);
|
|
2301
|
+
}
|
|
2302
|
+
parseCurrency(currency) {
|
|
2303
|
+
const entry = currency;
|
|
2304
|
+
const id = this.safeString(entry, 'currency');
|
|
2305
|
+
const code = this.safeCurrencyCode(id);
|
|
2306
|
+
const networks = {};
|
|
2307
|
+
const chains = this.safeList2(entry, 'chains', 'items', []);
|
|
2308
|
+
const chainsLength = chains.length;
|
|
2309
|
+
for (let j = 0; j < chainsLength; j++) {
|
|
2310
|
+
const chain = chains[j];
|
|
2311
|
+
const chainId = this.safeString(chain, 'chainId');
|
|
2312
|
+
const networkCode = this.networkIdToCode(chainId, code);
|
|
2313
|
+
networks[networkCode] = {
|
|
2314
|
+
'info': chain,
|
|
2315
|
+
'id': chainId,
|
|
2316
|
+
'name': this.safeString(chain, 'chainName'),
|
|
2317
|
+
'code': networkCode,
|
|
2296
2318
|
'active': undefined,
|
|
2297
|
-
'fee':
|
|
2298
|
-
'
|
|
2299
|
-
|
|
2319
|
+
'fee': this.safeNumber2(chain, 'withdrawalMinFee', 'minWithdrawFee'),
|
|
2320
|
+
'deposit': this.safeBool(chain, 'isDepositEnabled'),
|
|
2321
|
+
'withdraw': this.safeBool(chain, 'isWithdrawEnabled'),
|
|
2322
|
+
'precision': this.parseNumber(this.parsePrecision(this.safeString(chain, 'withdrawPrecision'))),
|
|
2323
|
+
'limits': {
|
|
2324
|
+
'withdraw': {
|
|
2325
|
+
'min': this.safeNumber2(chain, 'withdrawalMinSize', 'minWithdrawSize'),
|
|
2326
|
+
'max': this.safeNumber2(chain, 'maxWithdraw', 'maxWithdrawSize'),
|
|
2327
|
+
},
|
|
2328
|
+
'deposit': {
|
|
2329
|
+
'min': this.safeNumber2(chain, 'depositMinSize', 'minDepositSize'),
|
|
2330
|
+
'max': this.safeNumber2(chain, 'maxDeposit', 'maxDepositSize'),
|
|
2331
|
+
},
|
|
2332
|
+
},
|
|
2333
|
+
};
|
|
2300
2334
|
}
|
|
2301
|
-
|
|
2335
|
+
// kucoin has determined 'fiat' currencies with below logic
|
|
2336
|
+
const rawPrecision = this.safeString(entry, 'precision');
|
|
2337
|
+
const precision = this.parseNumber(this.parsePrecision(rawPrecision));
|
|
2338
|
+
const isFiat = chainsLength === 0;
|
|
2339
|
+
return this.safeCurrencyStructure({
|
|
2340
|
+
'id': id,
|
|
2341
|
+
'name': this.safeString(entry, 'fullName'),
|
|
2342
|
+
'code': code,
|
|
2343
|
+
'type': isFiat ? 'fiat' : 'crypto',
|
|
2344
|
+
'precision': precision,
|
|
2345
|
+
'info': entry,
|
|
2346
|
+
'networks': networks,
|
|
2347
|
+
'deposit': undefined,
|
|
2348
|
+
'withdraw': undefined,
|
|
2349
|
+
'active': undefined,
|
|
2350
|
+
'fee': undefined,
|
|
2351
|
+
'limits': undefined,
|
|
2352
|
+
});
|
|
2302
2353
|
}
|
|
2303
2354
|
/**
|
|
2304
2355
|
* @method
|
|
@@ -2306,41 +2357,68 @@ export default class kucoin extends Exchange {
|
|
|
2306
2357
|
* @description fetch all the accounts associated with a profile
|
|
2307
2358
|
* @see https://www.kucoin.com/docs-new/rest/account-info/account-funding/get-account-list-spot
|
|
2308
2359
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2360
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
2309
2361
|
* @returns {object} a dictionary of [account structures]{@link https://docs.ccxt.com/?id=account-structure} indexed by the account type
|
|
2310
2362
|
*/
|
|
2311
2363
|
async fetchAccounts(params = {}) {
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2316
|
-
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
|
|
2321
|
-
|
|
2322
|
-
|
|
2323
|
-
|
|
2324
|
-
|
|
2325
|
-
|
|
2326
|
-
|
|
2327
|
-
|
|
2328
|
-
|
|
2329
|
-
|
|
2330
|
-
|
|
2331
|
-
|
|
2332
|
-
|
|
2333
|
-
|
|
2334
|
-
|
|
2335
|
-
|
|
2336
|
-
|
|
2364
|
+
let uta = await this.isUTAEnabled();
|
|
2365
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchAccounts', 'uta', uta);
|
|
2366
|
+
let response = undefined;
|
|
2367
|
+
let data = [];
|
|
2368
|
+
if (uta) {
|
|
2369
|
+
response = await this.utaPrivateGetAccountModeAccountOverview(this.extend(params, { 'accountMode': 'unified' }));
|
|
2370
|
+
//
|
|
2371
|
+
// {
|
|
2372
|
+
// "code": "200000",
|
|
2373
|
+
// "data": {
|
|
2374
|
+
// "accountType": "UNIFIED",
|
|
2375
|
+
// "riskRatio": "0.0000000000",
|
|
2376
|
+
// "equity": "30.0000000000",
|
|
2377
|
+
// "liability": "0.0000000000",
|
|
2378
|
+
// "availableMargin": "30.0000000000",
|
|
2379
|
+
// "adjustedEquity": "30.0000000000",
|
|
2380
|
+
// "im": "0.0000000000",
|
|
2381
|
+
// "mm": "0.0000000000"
|
|
2382
|
+
// }
|
|
2383
|
+
// }
|
|
2384
|
+
//
|
|
2385
|
+
const dataDict = this.safeDict(response, 'data', {});
|
|
2386
|
+
data = [dataDict];
|
|
2387
|
+
}
|
|
2388
|
+
else {
|
|
2389
|
+
//
|
|
2390
|
+
// {
|
|
2391
|
+
// "code": "200000",
|
|
2392
|
+
// "data": [
|
|
2393
|
+
// {
|
|
2394
|
+
// "balance": "0.00009788",
|
|
2395
|
+
// "available": "0.00009788",
|
|
2396
|
+
// "holds": "0",
|
|
2397
|
+
// "currency": "BTC",
|
|
2398
|
+
// "id": "5c6a4fd399a1d81c4f9cc4d0",
|
|
2399
|
+
// "type": "trade"
|
|
2400
|
+
// },
|
|
2401
|
+
// {
|
|
2402
|
+
// "balance": "0.00000001",
|
|
2403
|
+
// "available": "0.00000001",
|
|
2404
|
+
// "holds": "0",
|
|
2405
|
+
// "currency": "ETH",
|
|
2406
|
+
// "id": "5c6a49ec99a1d819392e8e9f",
|
|
2407
|
+
// "type": "trade"
|
|
2408
|
+
// }
|
|
2409
|
+
// ]
|
|
2410
|
+
// }
|
|
2411
|
+
//
|
|
2412
|
+
response = await this.privateGetAccounts(params);
|
|
2413
|
+
data = this.safeList(response, 'data', []);
|
|
2414
|
+
}
|
|
2337
2415
|
const result = [];
|
|
2338
2416
|
for (let i = 0; i < data.length; i++) {
|
|
2339
2417
|
const account = data[i];
|
|
2340
2418
|
const accountId = this.safeString(account, 'id');
|
|
2341
2419
|
const currencyId = this.safeString(account, 'currency');
|
|
2342
2420
|
const code = this.safeCurrencyCode(currencyId);
|
|
2343
|
-
const type = this.
|
|
2421
|
+
const type = this.safeStringLower2(account, 'type', 'accountType'); // main or trade or unified
|
|
2344
2422
|
result.push({
|
|
2345
2423
|
'id': accountId,
|
|
2346
2424
|
'type': type,
|
|
@@ -2369,7 +2447,7 @@ export default class kucoin extends Exchange {
|
|
|
2369
2447
|
let networkCode = undefined;
|
|
2370
2448
|
[networkCode, params] = this.handleNetworkCodeAndParams(params);
|
|
2371
2449
|
if (networkCode !== undefined) {
|
|
2372
|
-
request['chain'] = this.networkCodeToId(networkCode).toLowerCase();
|
|
2450
|
+
request['chain'] = this.networkCodeToId(networkCode, currency['code']).toLowerCase();
|
|
2373
2451
|
}
|
|
2374
2452
|
const response = await this.privateGetWithdrawalsQuotas(this.extend(request, params));
|
|
2375
2453
|
const data = this.safeDict(response, 'data', {});
|
|
@@ -2400,7 +2478,7 @@ export default class kucoin extends Exchange {
|
|
|
2400
2478
|
let networkCode = undefined;
|
|
2401
2479
|
[networkCode, params] = this.handleNetworkCodeAndParams(params);
|
|
2402
2480
|
if (networkCode !== undefined) {
|
|
2403
|
-
request['chain'] = this.networkCodeToId(networkCode).toLowerCase();
|
|
2481
|
+
request['chain'] = this.networkCodeToId(networkCode, currency['code']).toLowerCase();
|
|
2404
2482
|
}
|
|
2405
2483
|
const response = await this.privateGetWithdrawalsQuotas(this.extend(request, params));
|
|
2406
2484
|
//
|
|
@@ -2457,7 +2535,8 @@ export default class kucoin extends Exchange {
|
|
|
2457
2535
|
const chains = this.safeList(fee, 'chains', []);
|
|
2458
2536
|
for (let i = 0; i < chains.length; i++) {
|
|
2459
2537
|
const chain = chains[i];
|
|
2460
|
-
const
|
|
2538
|
+
const chainId = this.safeString(chain, 'chainId');
|
|
2539
|
+
const networkCodeNew = this.networkIdToCode(chainId, this.safeString(currency, 'code'));
|
|
2461
2540
|
resultNew['networks'][networkCodeNew] = {
|
|
2462
2541
|
'withdraw': {
|
|
2463
2542
|
'fee': this.safeNumber2(chain, 'withdrawalMinFee', 'withdrawMinFee'),
|
|
@@ -2485,7 +2564,9 @@ export default class kucoin extends Exchange {
|
|
|
2485
2564
|
'networks': {},
|
|
2486
2565
|
};
|
|
2487
2566
|
const networkId = this.safeString(fee, 'chain');
|
|
2488
|
-
const
|
|
2567
|
+
const currencyId = this.safeString(fee, 'currency');
|
|
2568
|
+
currency = this.safeCurrency(currencyId, currency);
|
|
2569
|
+
const networkCode = this.networkIdToCode(networkId, currency['code']);
|
|
2489
2570
|
result['networks'][networkCode] = {
|
|
2490
2571
|
'withdraw': minWithdrawFee,
|
|
2491
2572
|
'deposit': {
|
|
@@ -2770,8 +2851,8 @@ export default class kucoin extends Exchange {
|
|
|
2770
2851
|
await this.loadMarkets();
|
|
2771
2852
|
const request = {};
|
|
2772
2853
|
symbols = this.marketSymbols(symbols, undefined, true, true);
|
|
2773
|
-
let uta =
|
|
2774
|
-
[uta, params] = this.handleOptionAndParams(params, 'fetchTickers', 'uta',
|
|
2854
|
+
let uta = false;
|
|
2855
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchTickers', 'uta', uta);
|
|
2775
2856
|
const tradeType = this.safeString(params, 'tradeType');
|
|
2776
2857
|
let firstMarket = undefined;
|
|
2777
2858
|
if (symbols !== undefined) {
|
|
@@ -2971,8 +3052,8 @@ export default class kucoin extends Exchange {
|
|
|
2971
3052
|
const request = {
|
|
2972
3053
|
'symbol': market['id'],
|
|
2973
3054
|
};
|
|
2974
|
-
let uta =
|
|
2975
|
-
[uta, params] = this.handleOptionAndParams(params, 'fetchTicker', 'uta',
|
|
3055
|
+
let uta = false;
|
|
3056
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchTicker', 'uta', uta);
|
|
2976
3057
|
let response = undefined;
|
|
2977
3058
|
let result = undefined;
|
|
2978
3059
|
let type = undefined;
|
|
@@ -3145,8 +3226,8 @@ export default class kucoin extends Exchange {
|
|
|
3145
3226
|
async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
|
|
3146
3227
|
await this.loadMarkets();
|
|
3147
3228
|
const market = this.market(symbol);
|
|
3148
|
-
let uta =
|
|
3149
|
-
[uta, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'uta',
|
|
3229
|
+
let uta = false;
|
|
3230
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'uta', uta);
|
|
3150
3231
|
if (uta) {
|
|
3151
3232
|
return await this.fetchUTAOHLCV(symbol, timeframe, since, limit, params);
|
|
3152
3233
|
}
|
|
@@ -3367,7 +3448,7 @@ export default class kucoin extends Exchange {
|
|
|
3367
3448
|
let networkCode = undefined;
|
|
3368
3449
|
[networkCode, params] = this.handleNetworkCodeAndParams(params);
|
|
3369
3450
|
if (networkCode !== undefined) {
|
|
3370
|
-
request['chain'] = this.networkCodeToId(networkCode); // docs mention "chain-name", but seems "chain-id" is used, like in "fetchDepositAddress"
|
|
3451
|
+
request['chain'] = this.networkCodeToId(networkCode, currency['code']); // docs mention "chain-name", but seems "chain-id" is used, like in "fetchDepositAddress"
|
|
3371
3452
|
}
|
|
3372
3453
|
const response = await this.privatePostDepositAddressCreate(this.extend(request, params));
|
|
3373
3454
|
// {"code":"260000","msg":"Deposit address already exists."}
|
|
@@ -3393,10 +3474,12 @@ export default class kucoin extends Exchange {
|
|
|
3393
3474
|
* @name kucoin#fetchDepositAddress
|
|
3394
3475
|
* @description fetch the deposit address for a currency associated with this account
|
|
3395
3476
|
* @see https://www.kucoin.com/docs-new/rest/account-info/deposit/get-deposit-address-v3/en
|
|
3477
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-deposit-address
|
|
3396
3478
|
* @param {string} code unified currency code
|
|
3397
3479
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3398
3480
|
* @param {string} [params.network] the blockchain network name
|
|
3399
|
-
* @param {string} [params.accountType] 'main' or '
|
|
3481
|
+
* @param {string} [params.accountType] 'main', 'contract' or 'uta' (default is 'main')
|
|
3482
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta) endpoint, defaults to false
|
|
3400
3483
|
* @returns {object} an [address structure]{@link https://docs.ccxt.com/?id=address-structure}
|
|
3401
3484
|
*/
|
|
3402
3485
|
async fetchDepositAddress(code, params = {}) {
|
|
@@ -3405,9 +3488,14 @@ export default class kucoin extends Exchange {
|
|
|
3405
3488
|
[accountType, params] = this.handleOptionAndParams(params, 'fetchDepositAddress', 'accountType', accountType);
|
|
3406
3489
|
const accountsByType = this.safeDict(this.options, 'accountsByType', {});
|
|
3407
3490
|
accountType = this.safeString(accountsByType, accountType, accountType);
|
|
3491
|
+
let uta = await this.isUTAEnabled();
|
|
3492
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchDepositAddress', 'uta', uta);
|
|
3408
3493
|
if (accountType === 'contract') {
|
|
3409
3494
|
return await this.fetchContractDepositAddress(code, params);
|
|
3410
3495
|
}
|
|
3496
|
+
else if (uta || (accountType === 'uta') || (accountType === 'unified')) {
|
|
3497
|
+
return await super.fetchDepositAddress(code, this.extend(params, { 'uta': true }));
|
|
3498
|
+
}
|
|
3411
3499
|
const currency = this.currency(code);
|
|
3412
3500
|
const request = {
|
|
3413
3501
|
'currency': currency['id'],
|
|
@@ -3418,7 +3506,7 @@ export default class kucoin extends Exchange {
|
|
|
3418
3506
|
let networkCode = undefined;
|
|
3419
3507
|
[networkCode, params] = this.handleNetworkCodeAndParams(params);
|
|
3420
3508
|
if (networkCode !== undefined) {
|
|
3421
|
-
request['chain'] = this.networkCodeToId(networkCode).toLowerCase();
|
|
3509
|
+
request['chain'] = this.networkCodeToId(networkCode, currency['code']).toLowerCase();
|
|
3422
3510
|
}
|
|
3423
3511
|
const version = this.options['versions']['private']['GET']['deposit-addresses'];
|
|
3424
3512
|
this.options['versions']['private']['GET']['deposit-addresses'] = 'v1';
|
|
@@ -3486,10 +3574,11 @@ export default class kucoin extends Exchange {
|
|
|
3486
3574
|
this.checkAddress(address);
|
|
3487
3575
|
}
|
|
3488
3576
|
}
|
|
3577
|
+
const chainId = this.safeString(depositAddress, 'chainId');
|
|
3489
3578
|
return {
|
|
3490
3579
|
'info': depositAddress,
|
|
3491
3580
|
'currency': code,
|
|
3492
|
-
'network': this.networkIdToCode(
|
|
3581
|
+
'network': this.networkIdToCode(chainId, code),
|
|
3493
3582
|
'address': address,
|
|
3494
3583
|
'tag': this.safeString(depositAddress, 'memo'),
|
|
3495
3584
|
};
|
|
@@ -3498,9 +3587,11 @@ export default class kucoin extends Exchange {
|
|
|
3498
3587
|
* @method
|
|
3499
3588
|
* @name kucoin#fetchDepositAddressesByNetwork
|
|
3500
3589
|
* @see https://www.kucoin.com/docs-new/rest/account-info/deposit/get-deposit-address-v3/en
|
|
3590
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-deposit-address
|
|
3501
3591
|
* @description fetch the deposit address for a currency associated with this account
|
|
3502
3592
|
* @param {string} code unified currency code
|
|
3503
3593
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3594
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta) endpoint, defaults to false
|
|
3504
3595
|
* @returns {object} an array of [address structures]{@link https://docs.ccxt.com/?id=address-structure}
|
|
3505
3596
|
*/
|
|
3506
3597
|
async fetchDepositAddressesByNetwork(code, params = {}) {
|
|
@@ -3509,25 +3600,56 @@ export default class kucoin extends Exchange {
|
|
|
3509
3600
|
const request = {
|
|
3510
3601
|
'currency': currency['id'],
|
|
3511
3602
|
};
|
|
3512
|
-
|
|
3513
|
-
this.
|
|
3514
|
-
|
|
3515
|
-
|
|
3516
|
-
|
|
3517
|
-
|
|
3518
|
-
|
|
3519
|
-
|
|
3520
|
-
|
|
3521
|
-
|
|
3522
|
-
|
|
3523
|
-
|
|
3524
|
-
|
|
3525
|
-
|
|
3526
|
-
|
|
3527
|
-
|
|
3528
|
-
|
|
3529
|
-
|
|
3530
|
-
|
|
3603
|
+
let uta = await this.isUTAEnabled();
|
|
3604
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchDepositAddressesByNetwork', 'uta', uta);
|
|
3605
|
+
let response = undefined;
|
|
3606
|
+
if (uta) {
|
|
3607
|
+
let networkCode = undefined;
|
|
3608
|
+
[networkCode, params] = this.handleNetworkCodeAndParams(params);
|
|
3609
|
+
if (networkCode !== undefined) {
|
|
3610
|
+
request['chain'] = this.networkCodeToId(networkCode).toLowerCase();
|
|
3611
|
+
}
|
|
3612
|
+
//
|
|
3613
|
+
// {
|
|
3614
|
+
// "code": "200000",
|
|
3615
|
+
// "data": [
|
|
3616
|
+
// {
|
|
3617
|
+
// "address": "0xf30a9b6968183668dbce515bd6449438ab3252b3",
|
|
3618
|
+
// "memo": "",
|
|
3619
|
+
// "remark": "",
|
|
3620
|
+
// "chainId": "eth",
|
|
3621
|
+
// "to": "FUNDING",
|
|
3622
|
+
// "expirationDate": 0,
|
|
3623
|
+
// "currency": "USDT",
|
|
3624
|
+
// "contractAddress": "0xdac17f958d2ee523a2206206994597c13d831ec7",
|
|
3625
|
+
// "chainName": "ERC20"
|
|
3626
|
+
// }
|
|
3627
|
+
// ]
|
|
3628
|
+
// }
|
|
3629
|
+
//
|
|
3630
|
+
response = await this.utaPrivateGetAssetDepositAddress(this.extend(request, params));
|
|
3631
|
+
}
|
|
3632
|
+
else {
|
|
3633
|
+
const version = this.options['versions']['private']['GET']['deposit-addresses'];
|
|
3634
|
+
this.options['versions']['private']['GET']['deposit-addresses'] = 'v2';
|
|
3635
|
+
response = await this.privateGetDepositAddresses(this.extend(request, params));
|
|
3636
|
+
//
|
|
3637
|
+
// {
|
|
3638
|
+
// "code": "200000",
|
|
3639
|
+
// "data": [
|
|
3640
|
+
// {
|
|
3641
|
+
// "address": "fr1qvus7d4d5fgxj5e7zvqe6yhxd7txm95h2and69r",
|
|
3642
|
+
// "memo": "",
|
|
3643
|
+
// "chain": "BTC-Segwit",
|
|
3644
|
+
// "contractAddress": ""
|
|
3645
|
+
// },
|
|
3646
|
+
// {"address":"37icNMEWbiF8ZkwUMxmfzMxi2A1MQ44bMn","memo":"","chain":"BTC","contractAddress":""},
|
|
3647
|
+
// {"address":"Deposit temporarily blocked","memo":"","chain":"TRC20","contractAddress":""}
|
|
3648
|
+
// ]
|
|
3649
|
+
// }
|
|
3650
|
+
//
|
|
3651
|
+
this.options['versions']['private']['GET']['deposit-addresses'] = version;
|
|
3652
|
+
}
|
|
3531
3653
|
const chains = this.safeList(response, 'data', []);
|
|
3532
3654
|
const parsed = this.parseDepositAddresses(chains, [currency['code']], false, {
|
|
3533
3655
|
'currency': currency['code'],
|
|
@@ -3554,8 +3676,8 @@ export default class kucoin extends Exchange {
|
|
|
3554
3676
|
const level = this.safeInteger(params, 'level', 2);
|
|
3555
3677
|
const request = { 'symbol': market['id'] };
|
|
3556
3678
|
const isAuthenticated = this.checkRequiredCredentials(false);
|
|
3557
|
-
let uta =
|
|
3558
|
-
[uta, params] = this.handleOptionAndParams(params, 'fetchOrderBook', 'uta',
|
|
3679
|
+
let uta = false;
|
|
3680
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchOrderBook', 'uta', uta);
|
|
3559
3681
|
let response = undefined;
|
|
3560
3682
|
let type = undefined;
|
|
3561
3683
|
[type, params] = this.handleMarketTypeAndParams('fetchOrderBook', market, params);
|
|
@@ -3709,19 +3831,26 @@ export default class kucoin extends Exchange {
|
|
|
3709
3831
|
* @see https://www.kucoin.com/docs-new/rest/futures-trading/orders/add-order
|
|
3710
3832
|
* @see https://www.kucoin.com/docs-new/rest/futures-trading/orders/add-order-test
|
|
3711
3833
|
* @see https://www.kucoin.com/docs-new/rest/futures-trading/orders/add-take-profit-and-stop-loss-order
|
|
3834
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/place-order
|
|
3712
3835
|
* @param {string} symbol Unified CCXT market symbol
|
|
3713
3836
|
* @param {string} type 'limit' or 'market'
|
|
3714
3837
|
* @param {string} side 'buy' or 'sell'
|
|
3715
3838
|
* @param {float} amount the amount of currency to trade
|
|
3716
3839
|
* @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
3717
3840
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3718
|
-
*
|
|
3841
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta) endpoint, defaults to false
|
|
3842
|
+
* Check createSpotOrder(), createContractOrder() and createUtaOrder () for more details on the extra parameters that can be used in params
|
|
3719
3843
|
* @returns {object} an [order structure]{@link https://docs.ccxt.com/?id=order-structure}
|
|
3720
3844
|
*/
|
|
3721
3845
|
async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
|
|
3722
3846
|
await this.loadMarkets();
|
|
3723
3847
|
const market = this.market(symbol);
|
|
3724
|
-
|
|
3848
|
+
let uta = await this.isUTAEnabled();
|
|
3849
|
+
[uta, params] = this.handleOptionAndParams(params, 'createOrder', 'uta', uta);
|
|
3850
|
+
if (uta) {
|
|
3851
|
+
return await this.createUtaOrder(symbol, type, side, amount, price, params);
|
|
3852
|
+
}
|
|
3853
|
+
else if (market['spot']) {
|
|
3725
3854
|
return await this.createSpotOrder(symbol, type, side, amount, price, params);
|
|
3726
3855
|
}
|
|
3727
3856
|
else if (market['contract']) {
|
|
@@ -3751,7 +3880,7 @@ export default class kucoin extends Exchange {
|
|
|
3751
3880
|
* @param {float} [params.triggerPrice] The price at which a trigger order is triggered at
|
|
3752
3881
|
* @param {string} [params.marginMode] 'cross', // cross (cross mode) and isolated (isolated mode), set to cross by default, the isolated mode will be released soon, stay tuned
|
|
3753
3882
|
* @param {string} [params.timeInForce] GTC, GTT, IOC, or FOK, default is GTC, limit orders only
|
|
3754
|
-
* @param {
|
|
3883
|
+
* @param {bool} [params.postOnly] Post only flag, invalid when timeInForce is IOC or FOK
|
|
3755
3884
|
*
|
|
3756
3885
|
* EXCHANGE SPECIFIC PARAMETERS
|
|
3757
3886
|
* @param {string} [params.clientOid] client order id, defaults to uuid if not passed
|
|
@@ -3944,7 +4073,7 @@ export default class kucoin extends Exchange {
|
|
|
3944
4073
|
* @param {float} [params.takeProfitPrice] price to trigger take-profit orders
|
|
3945
4074
|
* @param {bool} [params.reduceOnly] A mark to reduce the position size only. Set to false by default. Need to set the position size when reduceOnly is true.
|
|
3946
4075
|
* @param {string} [params.timeInForce] GTC, GTT, IOC, or FOK, default is GTC, limit orders only
|
|
3947
|
-
* @param {
|
|
4076
|
+
* @param {bool} [params.postOnly] Post only flag, invalid when timeInForce is IOC or FOK
|
|
3948
4077
|
* @param {float} [params.cost] the cost of the order in units of USDT
|
|
3949
4078
|
* @param {string} [params.marginMode] 'cross' or 'isolated', default is 'isolated'
|
|
3950
4079
|
* @param {bool} [params.hedged] *swap and future only* true for hedged mode, false for one way mode, default is false
|
|
@@ -4114,6 +4243,223 @@ export default class kucoin extends Exchange {
|
|
|
4114
4243
|
params = this.omit(params, ['timeInForce', 'stopPrice', 'triggerPrice', 'stopLossPrice', 'takeProfitPrice', 'reduceOnly', 'hedged']); // Time in force only valid for limit orders, exchange error when gtc for market orders
|
|
4115
4244
|
return this.extend(request, params);
|
|
4116
4245
|
}
|
|
4246
|
+
/**
|
|
4247
|
+
* @method
|
|
4248
|
+
* @name kucoin#createUtaOrder
|
|
4249
|
+
* @description helper method for creating uta orders
|
|
4250
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/place-order
|
|
4251
|
+
* @param {string} symbol Unified CCXT market symbol
|
|
4252
|
+
* @param {string} type 'limit' or 'market'
|
|
4253
|
+
* @param {string} side 'buy' or 'sell'
|
|
4254
|
+
* @param {float} amount the amount of currency to trade
|
|
4255
|
+
* @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
4256
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
4257
|
+
* @param {string} [params.clientOrderId] client order id, defaults to uuid if not passed
|
|
4258
|
+
* @param {float} [params.cost] the cost of the order in units of quote currency
|
|
4259
|
+
* @param {string} [params.timeInForce] GTC, GTD, IOC, FOK or PO
|
|
4260
|
+
* @param {bool} [params.postOnly] Post only flag, invalid when timeInForce is IOC or FOK (default is false)
|
|
4261
|
+
* @param {bool} [params.reduceOnly] *contract markets only* A mark to reduce the position size only. Set to false by default
|
|
4262
|
+
* @param {float} [params.triggerPrice] The price a trigger order is triggered at
|
|
4263
|
+
* @param {string} [params.triggerDirection] 'ascending' or 'descending', the direction the triggerPrice is triggered from, requires triggerPrice
|
|
4264
|
+
* @param {string} [params.triggerPriceType] *contract markets only* "last", "mark", "index" - defaults to "mark"
|
|
4265
|
+
* @param {float} [params.stopLossPrice] price to trigger stop-loss orders
|
|
4266
|
+
* @param {float} [params.takeProfitPrice] price to trigger take-profit orders
|
|
4267
|
+
* @param {string} [params.marginMode] 'cross' or 'isolated', (default is 'cross' for margin orders, default is 'isolated' for contract orders)
|
|
4268
|
+
*
|
|
4269
|
+
* Exchange-specific parameters -------------------------------------------------
|
|
4270
|
+
* @param {string} [params.accountMode] 'unified' or 'classic', default is 'unified'
|
|
4271
|
+
* @param {string} [params.stp] '', // self trade prevention, CN, CO, CB or DC
|
|
4272
|
+
* @param {int} [params.cancelAfter] - Cancel After N Seconds (Calculated from the time of entering the matching engine), only effective when timeInForce is GTD
|
|
4273
|
+
* @param {string} [params.sizeUnit] *contracts only* 'BASECCY' (amount of base currency) or 'UNIT' (number of contracts), default is 'UNIT'
|
|
4274
|
+
*
|
|
4275
|
+
* Classic account parameters
|
|
4276
|
+
* @param {bool} [params.autoBorrow] *classic margin orders only*
|
|
4277
|
+
* @param {bool} [params.autoRepay] *classic margin orders only*
|
|
4278
|
+
* @param {string} [params.hedged] *classic contract orders only* true for hedged mode, false for one way mode, default is false
|
|
4279
|
+
* @param {int} [params.leverage] *classic contract orders with isolated marginMode only* Leverage size of the order
|
|
4280
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/?id=order-structure}
|
|
4281
|
+
*/
|
|
4282
|
+
async createUtaOrder(symbol, type, side, amount, price = undefined, params = {}) {
|
|
4283
|
+
await this.loadMarkets();
|
|
4284
|
+
const request = this.createUtaOrderRequest(symbol, type, side, amount, price, params);
|
|
4285
|
+
const response = await this.utaPrivatePostAccountModeOrderPlace(request);
|
|
4286
|
+
//
|
|
4287
|
+
// {
|
|
4288
|
+
// "code": "200000",
|
|
4289
|
+
// "data": {
|
|
4290
|
+
// "orderId": "426319129738321920",
|
|
4291
|
+
// "tradeType": "SPOT",
|
|
4292
|
+
// "ts": 1774455603216000000,
|
|
4293
|
+
// "clientOid": "b896c118-a674-4863-baf4-a9ea3cd696c5"
|
|
4294
|
+
// }
|
|
4295
|
+
// }
|
|
4296
|
+
//
|
|
4297
|
+
const data = this.safeDict(response, 'data', {});
|
|
4298
|
+
return this.parseOrder(data);
|
|
4299
|
+
}
|
|
4300
|
+
createUtaOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
|
|
4301
|
+
const market = this.market(symbol);
|
|
4302
|
+
const isSpot = market['spot'];
|
|
4303
|
+
const isContract = market['contract'];
|
|
4304
|
+
let accountMode = 'unified';
|
|
4305
|
+
[accountMode, params] = this.handleOptionAndParams(params, 'createOrder', 'accountMode', accountMode);
|
|
4306
|
+
const isUnified = (accountMode === 'unified');
|
|
4307
|
+
let marginMode = undefined;
|
|
4308
|
+
[marginMode, params] = this.handleMarginModeAndParams('createOrder', params);
|
|
4309
|
+
const marginModeDefined = (marginMode !== undefined);
|
|
4310
|
+
const isSpotMargin = (isSpot && marginModeDefined);
|
|
4311
|
+
if (isSpotMargin && isUnified) {
|
|
4312
|
+
throw new NotSupported(this.id + ' createOrder() does not support spot margin orders with unified accountMode');
|
|
4313
|
+
}
|
|
4314
|
+
const tradeType = this.handleTradeType(isContract, marginMode, params);
|
|
4315
|
+
const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId', this.uuid());
|
|
4316
|
+
params = this.omit(params, ['clientOid', 'clientOrderId']);
|
|
4317
|
+
const request = {
|
|
4318
|
+
'accountMode': accountMode,
|
|
4319
|
+
'tradeType': tradeType,
|
|
4320
|
+
'clientOid': clientOrderId,
|
|
4321
|
+
'symbol': market['id'],
|
|
4322
|
+
// 'triggerDirection'- 'UP' or 'DOWN (required for trigger orders, supported for classic-FUTURES and unified-SPOT and unified-FUTURES)
|
|
4323
|
+
// 'triggerPriceType' - 'TP', 'IP', 'MP' (required for trigger orders, supported for classic-FUTURES and unified-SPOT and unified-FUTURES)
|
|
4324
|
+
// 'triggerPrice' (required for trigger orders)
|
|
4325
|
+
'side': side.toUpperCase(),
|
|
4326
|
+
'orderType': type.toUpperCase(),
|
|
4327
|
+
// 'size'
|
|
4328
|
+
// 'sizeUnit' - 'BASECCY', 'QUOTECCY' (for market SPOT) or 'UNIT' (for unified-FUTURES)
|
|
4329
|
+
// 'price'
|
|
4330
|
+
// 'timeInForce' - 'GTC', 'IOC', 'FOK', 'GTT' or 'RPI' (GTT is not supported for FUTURES)
|
|
4331
|
+
// 'postOnly'
|
|
4332
|
+
// 'reduceOnly' (only for FUTURES)
|
|
4333
|
+
// 'stp' - 'CN', 'CO', 'CB' or 'DC' (DC is not supported for FUTURES)
|
|
4334
|
+
// 'cancelAfter' - time in seconds (only valid when timeInForce is GTT, not supported for FUTURES)
|
|
4335
|
+
// 'tags'
|
|
4336
|
+
// 'autoBorrow' (only for classic-CROSS and classic-ISOLATED)
|
|
4337
|
+
// 'autoRepay' (only for classic-CROSS and classic-ISOLATED)
|
|
4338
|
+
// 'positionSide' - 'BOTH', 'LONG' or 'SHORT' (only for classic-FUTURES)
|
|
4339
|
+
// 'marginMode' - 'ISOLATED' or 'CROSS' (only for classic-FUTURES, default is 'ISOLATED')
|
|
4340
|
+
// 'leverage' (only for classic-FUTURES-ISOLATED, required)
|
|
4341
|
+
// 'tpTriggerPriceType' - 'TP', 'IP', 'MP' (only for unified-FUTURES and classic-FUTURES)
|
|
4342
|
+
// 'tpTriggerPrice' (only for unified-FUTURES and classic-FUTURES)
|
|
4343
|
+
// 'slTriggerPriceType' - 'TP', 'IP', 'MP' (only for unified-FUTURES and classic-FUTURES)
|
|
4344
|
+
// 'slTriggerPrice' (only for unified-FUTURES and classic-FUTURES)
|
|
4345
|
+
};
|
|
4346
|
+
if (tradeType !== undefined) {
|
|
4347
|
+
request['tradeType'] = tradeType;
|
|
4348
|
+
}
|
|
4349
|
+
request['clientOid'] = clientOrderId;
|
|
4350
|
+
const isMarketOrder = (type === 'market');
|
|
4351
|
+
const cost = this.safeString(params, 'cost');
|
|
4352
|
+
if (cost !== undefined) {
|
|
4353
|
+
params = this.omit(params, 'cost');
|
|
4354
|
+
if (isSpot && isMarketOrder) {
|
|
4355
|
+
request['sizeUnit'] = 'QUOTECCY';
|
|
4356
|
+
request['size'] = this.marketOrderAmountToPrecision(symbol, cost);
|
|
4357
|
+
}
|
|
4358
|
+
else {
|
|
4359
|
+
throw new NotSupported(this.id + ' createOrder() with cost is supported for spot market orders only');
|
|
4360
|
+
}
|
|
4361
|
+
}
|
|
4362
|
+
else {
|
|
4363
|
+
let sizeUnit = 'BASECCY';
|
|
4364
|
+
if (isContract) {
|
|
4365
|
+
[sizeUnit, params] = this.handleOptionAndParams(params, 'createOrder', 'sizeUnit', 'UNIT');
|
|
4366
|
+
}
|
|
4367
|
+
request['sizeUnit'] = sizeUnit;
|
|
4368
|
+
request['size'] = this.amountToPrecision(symbol, amount);
|
|
4369
|
+
}
|
|
4370
|
+
if (!isMarketOrder) {
|
|
4371
|
+
request['price'] = this.priceToPrecision(symbol, price);
|
|
4372
|
+
}
|
|
4373
|
+
let postOnly = undefined;
|
|
4374
|
+
[postOnly, params] = this.handlePostOnly(isMarketOrder, false, params);
|
|
4375
|
+
const timeInForce = this.handleTimeInForce(params);
|
|
4376
|
+
if ((timeInForce !== undefined)) {
|
|
4377
|
+
params = this.omit(params, 'timeInForce');
|
|
4378
|
+
request['timeInForce'] = timeInForce;
|
|
4379
|
+
}
|
|
4380
|
+
if (postOnly) {
|
|
4381
|
+
request['postOnly'] = true;
|
|
4382
|
+
}
|
|
4383
|
+
if (isContract) {
|
|
4384
|
+
if (!isUnified) {
|
|
4385
|
+
if (marginModeDefined) {
|
|
4386
|
+
request['marginMode'] = marginMode.toUpperCase();
|
|
4387
|
+
if (marginMode === 'isolated') {
|
|
4388
|
+
const leverage = this.safeInteger(params, 'leverage');
|
|
4389
|
+
if (leverage === undefined) {
|
|
4390
|
+
request['leverage'] = 1;
|
|
4391
|
+
}
|
|
4392
|
+
}
|
|
4393
|
+
}
|
|
4394
|
+
const reduceOnly = this.safeBool(params, 'reduceOnly', false);
|
|
4395
|
+
let hedged = false;
|
|
4396
|
+
[hedged, params] = this.handleParamBool(params, 'hedged', hedged);
|
|
4397
|
+
if (hedged) {
|
|
4398
|
+
let positionSide = (side === 'buy') ? 'LONG' : 'SHORT';
|
|
4399
|
+
if (reduceOnly) {
|
|
4400
|
+
positionSide = (positionSide === 'LONG') ? 'SHORT' : 'LONG';
|
|
4401
|
+
}
|
|
4402
|
+
request['positionSide'] = positionSide;
|
|
4403
|
+
}
|
|
4404
|
+
}
|
|
4405
|
+
}
|
|
4406
|
+
// handling with coinditional orders
|
|
4407
|
+
const [triggerPrice, stopLossPrice, takeProfitPrice] = this.handleTriggerPrices(params);
|
|
4408
|
+
const stopLoss = this.safeDict(params, 'stopLoss');
|
|
4409
|
+
const takeProfit = this.safeDict(params, 'takeProfit');
|
|
4410
|
+
const hasStopLoss = stopLoss !== undefined;
|
|
4411
|
+
const hasTakeProfit = takeProfit !== undefined;
|
|
4412
|
+
const triggerPriceTypes = {
|
|
4413
|
+
'mark': 'MP',
|
|
4414
|
+
'last': 'TP',
|
|
4415
|
+
'index': 'IP',
|
|
4416
|
+
};
|
|
4417
|
+
if (triggerPrice) {
|
|
4418
|
+
const triggerDirection = this.safeString(params, 'triggerDirection');
|
|
4419
|
+
if (triggerDirection === undefined) {
|
|
4420
|
+
throw new ArgumentsRequired(this.id + ' createOrder() requires a triggerDirection parameter for trigger orders. Provide params.tringgerDirection or use params.stopLossPrice or params.takeProfitPrice instead of params.triggerPrice');
|
|
4421
|
+
}
|
|
4422
|
+
request['triggerDirection'] = (triggerDirection === 'ascending') ? 'UP' : 'DOWN';
|
|
4423
|
+
request['triggerPrice'] = this.priceToPrecision(symbol, triggerPrice);
|
|
4424
|
+
}
|
|
4425
|
+
else if (hasStopLoss || hasTakeProfit) {
|
|
4426
|
+
if (!isContract) {
|
|
4427
|
+
throw new NotSupported(this.id + ' createOrder() stopLoss and takeProfit parameters are only supported for contract orders');
|
|
4428
|
+
}
|
|
4429
|
+
if (hasStopLoss) {
|
|
4430
|
+
const slTriggerPrice = this.safeString2(stopLoss, 'triggerPrice', 'stopPrice');
|
|
4431
|
+
const slTriggerPriceType = this.safeString(stopLoss, 'triggerPriceType', 'mark');
|
|
4432
|
+
request['slTriggerPrice'] = this.priceToPrecision(symbol, slTriggerPrice);
|
|
4433
|
+
request['slTriggerPriceType'] = this.safeString(triggerPriceTypes, slTriggerPriceType, slTriggerPriceType);
|
|
4434
|
+
}
|
|
4435
|
+
if (hasTakeProfit) {
|
|
4436
|
+
const tpTriggerPrice = this.safeString2(takeProfit, 'triggerPrice', 'takeProfitPrice');
|
|
4437
|
+
const tpTriggerPriceType = this.safeString(takeProfit, 'triggerPriceType', 'mark');
|
|
4438
|
+
request['tpTriggerPrice'] = this.priceToPrecision(symbol, tpTriggerPrice);
|
|
4439
|
+
request['tpTriggerPriceType'] = this.safeString(triggerPriceTypes, tpTriggerPriceType, tpTriggerPriceType);
|
|
4440
|
+
}
|
|
4441
|
+
}
|
|
4442
|
+
else if (stopLossPrice || takeProfitPrice) {
|
|
4443
|
+
if (stopLossPrice) {
|
|
4444
|
+
request['triggerDirection'] = (side === 'buy') ? 'UP' : 'DOWN';
|
|
4445
|
+
request['triggerPrice'] = this.priceToPrecision(symbol, stopLossPrice);
|
|
4446
|
+
if (isContract) {
|
|
4447
|
+
const stopLossPriceType = this.safeString2(params, 'stopLossPriceType', 'triggerPriceType', 'mark');
|
|
4448
|
+
request['triggerPriceType'] = this.safeString(triggerPriceTypes, stopLossPriceType, stopLossPriceType);
|
|
4449
|
+
}
|
|
4450
|
+
}
|
|
4451
|
+
else {
|
|
4452
|
+
request['triggerDirection'] = (side === 'buy') ? 'DOWN' : 'UP';
|
|
4453
|
+
request['triggerPrice'] = this.priceToPrecision(symbol, takeProfitPrice);
|
|
4454
|
+
if (isContract) {
|
|
4455
|
+
const takeProfitPriceType = this.safeString2(params, 'takeProfitPriceType', 'triggerPriceType', 'mark');
|
|
4456
|
+
request['triggerPriceType'] = this.safeString(triggerPriceTypes, takeProfitPriceType, takeProfitPriceType);
|
|
4457
|
+
}
|
|
4458
|
+
}
|
|
4459
|
+
}
|
|
4460
|
+
params = this.omit(params, ['triggerPrice', 'stopLossPrice', 'takeProfitPrice', 'stopPriceType', 'stopLossPriceType', 'takeProfitPriceType', 'triggerPriceType', 'triggerDirection', 'stopLoss', 'takeProfit', 'hedged']);
|
|
4461
|
+
return this.extend(request, params);
|
|
4462
|
+
}
|
|
4117
4463
|
/**
|
|
4118
4464
|
* @method
|
|
4119
4465
|
* @name kucoin#createMarketOrderWithCost
|
|
@@ -4405,16 +4751,23 @@ export default class kucoin extends Exchange {
|
|
|
4405
4751
|
* @see https://www.kucoin.com/docs-new/rest/margin-trading/orders/cancel-stop-order-by-clientoid
|
|
4406
4752
|
* @see https://www.kucoin.com/docs-new/rest/futures-trading/orders/cancel-order-by-orderld
|
|
4407
4753
|
* @see https://www.kucoin.com/docs-new/rest/futures-trading/orders/cancel-order-by-clientoid
|
|
4754
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/cancel-order
|
|
4408
4755
|
* @param {string} id order id
|
|
4409
4756
|
* @param {string} symbol unified symbol of the market the order was made in
|
|
4410
4757
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
4411
4758
|
* @param {string} [params.type] 'spot' or 'swap', used if symbol is not provided (default is 'spot')
|
|
4412
4759
|
* @param {string} [params.marginMode] *spot only* 'cross' or 'isolated'
|
|
4760
|
+
* @param {boolean} [params.uta] true for cancelling order with unified account endpoint (default is false)
|
|
4413
4761
|
* Check cancelSpotOrder() and cancelContractOrder() for more details on the extra parameters that can be used in params
|
|
4414
4762
|
* @returns Response from the exchange
|
|
4415
4763
|
*/
|
|
4416
4764
|
async cancelOrder(id, symbol = undefined, params = {}) {
|
|
4417
4765
|
await this.loadMarkets();
|
|
4766
|
+
let uta = await this.isUTAEnabled();
|
|
4767
|
+
[uta, params] = this.handleOptionAndParams(params, 'cancelOrder', 'uta', uta);
|
|
4768
|
+
if (uta) {
|
|
4769
|
+
return await this.cancelUtaOrder(id, symbol, params);
|
|
4770
|
+
}
|
|
4418
4771
|
let marketType = undefined;
|
|
4419
4772
|
let market = undefined;
|
|
4420
4773
|
if (symbol !== undefined) {
|
|
@@ -4631,6 +4984,61 @@ export default class kucoin extends Exchange {
|
|
|
4631
4984
|
//
|
|
4632
4985
|
return this.safeOrder({ 'info': response });
|
|
4633
4986
|
}
|
|
4987
|
+
/**
|
|
4988
|
+
* @method
|
|
4989
|
+
* @name kucoin#cancelUtaOrder
|
|
4990
|
+
* @description helper method for cancelling uta orders
|
|
4991
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/cancel-order
|
|
4992
|
+
* @param {string} id order id
|
|
4993
|
+
* @param {string} symbol unified symbol of the market the order was made in
|
|
4994
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
4995
|
+
* @param {string} [params.accountMode] 'unified' or 'classic' (default is 'unified')
|
|
4996
|
+
* @param {string} [params.clientOrderId] client order id, required if id is not provided
|
|
4997
|
+
* @param {string} [params.marginMode] 'cross' or 'isolated', required if fetching a margin order
|
|
4998
|
+
* @returns Response from the exchange
|
|
4999
|
+
*/
|
|
5000
|
+
async cancelUtaOrder(id, symbol = undefined, params = {}) {
|
|
5001
|
+
if (symbol === undefined) {
|
|
5002
|
+
throw new ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument for uta endpoint');
|
|
5003
|
+
}
|
|
5004
|
+
await this.loadMarkets();
|
|
5005
|
+
const request = {};
|
|
5006
|
+
const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId');
|
|
5007
|
+
if (clientOrderId !== undefined) {
|
|
5008
|
+
request['clientOid'] = clientOrderId;
|
|
5009
|
+
params = this.omit(params, ['clientOid', 'clientOrderId']);
|
|
5010
|
+
}
|
|
5011
|
+
else {
|
|
5012
|
+
if (id === undefined) {
|
|
5013
|
+
throw new ArgumentsRequired(this.id + ' fetchOrder() requires an id argument or clientOrderId parameter');
|
|
5014
|
+
}
|
|
5015
|
+
request['orderId'] = id;
|
|
5016
|
+
}
|
|
5017
|
+
await this.loadMarkets();
|
|
5018
|
+
const market = this.market(symbol);
|
|
5019
|
+
request['symbol'] = market['id'];
|
|
5020
|
+
let accountMode = 'unified';
|
|
5021
|
+
[accountMode, params] = this.handleOptionAndParams(params, 'fetchOrder', 'accountMode', accountMode);
|
|
5022
|
+
request['accountMode'] = accountMode;
|
|
5023
|
+
let marginMode = undefined;
|
|
5024
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchOrder', params);
|
|
5025
|
+
const tradeType = this.handleTradeType(market['contract'], marginMode, params);
|
|
5026
|
+
request['tradeType'] = tradeType;
|
|
5027
|
+
const response = await this.utaPrivatePostAccountModeOrderCancel(this.extend(request, params));
|
|
5028
|
+
//
|
|
5029
|
+
// {
|
|
5030
|
+
// "code": "200000",
|
|
5031
|
+
// "data": {
|
|
5032
|
+
// "orderId": "426319129738321920",
|
|
5033
|
+
// "tradeType": "SPOT",
|
|
5034
|
+
// "ts": 1774457628105000000,
|
|
5035
|
+
// "clientOid": "b896c118-a674-4863-baf4-a9ea3cd696c5"
|
|
5036
|
+
// }
|
|
5037
|
+
// }
|
|
5038
|
+
//
|
|
5039
|
+
const data = this.safeDict(response, 'data', {});
|
|
5040
|
+
return this.parseOrder(data, market);
|
|
5041
|
+
}
|
|
4634
5042
|
/**
|
|
4635
5043
|
* @method
|
|
4636
5044
|
* @name kucoin#cancelAllOrders
|
|
@@ -4642,14 +5050,22 @@ export default class kucoin extends Exchange {
|
|
|
4642
5050
|
* @see https://www.kucoin.com/docs-new/rest/margin-trading/orders/batch-cancel-stop-orders
|
|
4643
5051
|
* @see https://www.kucoin.com/docs-new/rest/futures-trading/orders/cancel-all-orders
|
|
4644
5052
|
* @see https://www.kucoin.com/docs-new/rest/futures-trading/orders/cancel-all-stop-orders
|
|
5053
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/batch-cancel-order-by-symbol
|
|
4645
5054
|
* @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
|
|
4646
5055
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
4647
5056
|
* @param {string} [params.type] 'spot' or 'swap', used if symbol is not provided (default is 'spot')
|
|
4648
5057
|
* @param {string} [params.marginMode] *spot only* 'cross' or 'isolated'
|
|
5058
|
+
* @param {boolean} [params.uta] true for cancelling orders with unified account endpoint (default is false)
|
|
5059
|
+
* Check cancelAllSpotOrders(), cancelAllContractOrders() and cancelAllUtaOrders() for more details on the extra parameters that can be used in params
|
|
4649
5060
|
* @returns Response from the exchange
|
|
4650
5061
|
*/
|
|
4651
5062
|
async cancelAllOrders(symbol = undefined, params = {}) {
|
|
4652
5063
|
await this.loadMarkets();
|
|
5064
|
+
let uta = await this.isUTAEnabled();
|
|
5065
|
+
[uta, params] = this.handleOptionAndParams(params, 'cancelAllOrders', 'uta', uta);
|
|
5066
|
+
if (uta) {
|
|
5067
|
+
return await this.cancelAllUtaOrders(symbol, params);
|
|
5068
|
+
}
|
|
4653
5069
|
let marketType = undefined;
|
|
4654
5070
|
let market = undefined;
|
|
4655
5071
|
if (symbol !== undefined) {
|
|
@@ -4767,26 +5183,78 @@ export default class kucoin extends Exchange {
|
|
|
4767
5183
|
}
|
|
4768
5184
|
/**
|
|
4769
5185
|
* @method
|
|
4770
|
-
* @name kucoin#
|
|
4771
|
-
* @description
|
|
4772
|
-
* @see https://www.kucoin.com/docs-new/rest/
|
|
4773
|
-
* @
|
|
4774
|
-
* @
|
|
4775
|
-
* @
|
|
4776
|
-
* @
|
|
4777
|
-
* @
|
|
4778
|
-
|
|
4779
|
-
|
|
4780
|
-
|
|
4781
|
-
|
|
4782
|
-
|
|
4783
|
-
|
|
5186
|
+
* @name kucoin#cancelAllUtaOrders
|
|
5187
|
+
* @description helper method for cancelling all uta orders
|
|
5188
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/batch-cancel-order-by-symbol
|
|
5189
|
+
* @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
|
|
5190
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
5191
|
+
* @param {bool} [params.trigger] true if cancelling all stop orders
|
|
5192
|
+
* @param {string} [params.marginMode] 'CROSS' or 'ISOLATED'
|
|
5193
|
+
* @returns Response from the exchange
|
|
5194
|
+
*/
|
|
5195
|
+
async cancelAllUtaOrders(symbol = undefined, params = {}) {
|
|
5196
|
+
if (symbol === undefined) {
|
|
5197
|
+
throw new ArgumentsRequired(this.id + ' cancelAllOrders() requires a symbol argument for uta endpoint');
|
|
5198
|
+
}
|
|
5199
|
+
await this.loadMarkets();
|
|
5200
|
+
const market = this.market(symbol);
|
|
5201
|
+
const isContract = market['contract'];
|
|
5202
|
+
const tradeType = isContract ? 'FUTURES' : 'SPOT';
|
|
5203
|
+
let trigger = false;
|
|
5204
|
+
[trigger, params] = this.handleParamBool(params, 'trigger', trigger);
|
|
5205
|
+
const orderFilter = trigger ? 'ADVANCED' : 'NORMAL';
|
|
5206
|
+
const request = {
|
|
5207
|
+
'accountMode': 'unified',
|
|
5208
|
+
'symbol': market['id'],
|
|
5209
|
+
'tradeType': tradeType,
|
|
5210
|
+
'orderFilter': orderFilter,
|
|
5211
|
+
};
|
|
5212
|
+
const response = await this.utaPrivatePostAccountModeOrderCancelAll(this.extend(request, params));
|
|
5213
|
+
//
|
|
5214
|
+
// {
|
|
5215
|
+
// "code": "200000",
|
|
5216
|
+
// "data": {
|
|
5217
|
+
// "tradeType": "SPOT",
|
|
5218
|
+
// "ts": 1774458644140000000,
|
|
5219
|
+
// "items": [
|
|
5220
|
+
// {
|
|
5221
|
+
// "orderId": "426328635071352832"
|
|
5222
|
+
// }
|
|
5223
|
+
// ]
|
|
5224
|
+
// }
|
|
5225
|
+
// }
|
|
5226
|
+
//
|
|
5227
|
+
const data = this.safeDict(response, 'data', {});
|
|
5228
|
+
const orders = this.safeList(data, 'items', []);
|
|
5229
|
+
return this.parseOrders(orders, market, undefined, undefined, { 'status': 'canceled' });
|
|
5230
|
+
}
|
|
5231
|
+
/**
|
|
5232
|
+
* @method
|
|
5233
|
+
* @name kucoin#fetchOrdersByStatus
|
|
5234
|
+
* @description fetches a list of orders placed on the exchange
|
|
5235
|
+
* @see https://www.kucoin.com/docs-new/rest/spot-trading/orders/get-open-orders
|
|
5236
|
+
* @see https://www.kucoin.com/docs-new/rest/spot-trading/orders/get-closed-orders
|
|
5237
|
+
* @see https://www.kucoin.com/docs-new/rest/spot-trading/orders/get-stop-orders-list
|
|
5238
|
+
* @see https://www.kucoin.com/docs-new/rest/margin-trading/orders/get-open-orders
|
|
5239
|
+
* @see https://www.kucoin.com/docs-new/rest/margin-trading/orders/get-closed-orders
|
|
5240
|
+
* @see https://www.kucoin.com/docs-new/rest/margin-trading/orders/get-stop-order-list
|
|
5241
|
+
* @see https://www.kucoin.com/docs-new/rest/futures-trading/orders/get-order-list
|
|
5242
|
+
* @see https://www.kucoin.com/docs-new/rest/futures-trading/orders/get-stop-order-list
|
|
5243
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-open-order-list
|
|
5244
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-order-history
|
|
5245
|
+
* @param {string} status 'active' or 'closed', only 'active' is valid for stop orders
|
|
5246
|
+
* @param {string} symbol unified symbol for the market to retrieve orders from
|
|
5247
|
+
* @param {int} [since] timestamp in ms of the earliest order to retrieve
|
|
5248
|
+
* @param {int} [limit] The maximum number of orders to retrieve
|
|
4784
5249
|
* @param {object} [params] exchange specific parameters
|
|
4785
|
-
*
|
|
5250
|
+
* @param {boolean} [params.uta] true for fetch orders with uta endpoint (default is false)
|
|
5251
|
+
* Check fetchSpotOrdersByStatus(), fetchContractOrdersByStatus() and fetchUtaOrdersByStatus() for more details on the extra parameters that can be used in params
|
|
4786
5252
|
* @returns An [array of order structures]{@link https://docs.ccxt.com/?id=order-structure}
|
|
4787
5253
|
*/
|
|
4788
5254
|
async fetchOrdersByStatus(status, symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
4789
5255
|
await this.loadMarkets();
|
|
5256
|
+
let uta = await this.isUTAEnabled();
|
|
5257
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchOrdersByStatus', 'uta', uta);
|
|
4790
5258
|
let marketType = undefined;
|
|
4791
5259
|
if (symbol === undefined) {
|
|
4792
5260
|
const type = this.safeString(params, 'type'); // exchange has specific param for order type
|
|
@@ -4796,14 +5264,26 @@ export default class kucoin extends Exchange {
|
|
|
4796
5264
|
params = this.omit(params, 'type');
|
|
4797
5265
|
}
|
|
4798
5266
|
else {
|
|
4799
|
-
|
|
5267
|
+
const methodOptions = this.safeDict(this.options, 'fetchOrdersByStatus', {});
|
|
5268
|
+
const methodDefaultType = this.safeString2(methodOptions, 'defaultType', 'type');
|
|
5269
|
+
if (methodDefaultType === undefined) {
|
|
5270
|
+
marketType = this.safeString2(this.options, 'defaultType', 'type', 'spot');
|
|
5271
|
+
}
|
|
5272
|
+
else {
|
|
5273
|
+
marketType = methodDefaultType;
|
|
5274
|
+
}
|
|
4800
5275
|
}
|
|
4801
5276
|
}
|
|
4802
5277
|
else {
|
|
4803
5278
|
const market = this.market(symbol);
|
|
4804
5279
|
marketType = market['type'];
|
|
4805
5280
|
}
|
|
4806
|
-
if (
|
|
5281
|
+
if (uta) {
|
|
5282
|
+
params = this.omit(params, 'uta');
|
|
5283
|
+
params = this.extend(params, { 'marketType': marketType });
|
|
5284
|
+
return await this.fetchUtaOrdersByStatus(status, symbol, since, limit, params);
|
|
5285
|
+
}
|
|
5286
|
+
else if ((marketType === 'spot') || (marketType === 'margin')) {
|
|
4807
5287
|
return await this.fetchSpotOrdersByStatus(status, symbol, since, limit, params);
|
|
4808
5288
|
}
|
|
4809
5289
|
else {
|
|
@@ -5068,6 +5548,128 @@ export default class kucoin extends Exchange {
|
|
|
5068
5548
|
const orders = this.safeList(responseData, 'items', []);
|
|
5069
5549
|
return this.parseOrders(orders, market, since, limit);
|
|
5070
5550
|
}
|
|
5551
|
+
/**
|
|
5552
|
+
* @method
|
|
5553
|
+
* @name kucoin#fetchUtaOrdersByStatus
|
|
5554
|
+
* @description helper method for fetching orders by status with uta endpoint
|
|
5555
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-open-order-list
|
|
5556
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-order-history
|
|
5557
|
+
* @param {string} status 'active' or 'closed', only 'active' is valid for stop orders
|
|
5558
|
+
* @param {string} symbol unified symbol for the market to retrieve orders from
|
|
5559
|
+
* @param {int} [since] timestamp in ms of the earliest order to retrieve
|
|
5560
|
+
* @param {int} [limit] The maximum number of orders to retrieve
|
|
5561
|
+
* @param {object} [params] exchange specific parameters
|
|
5562
|
+
* @param {int} [params.until] End time in ms
|
|
5563
|
+
* @param {string} [params.side] *closed orders only* 'BUY' or 'SELL'
|
|
5564
|
+
* @param {string} [params.accountMode] 'unified' or 'classic' (default is unified)
|
|
5565
|
+
* @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)
|
|
5566
|
+
* @returns An [array of order structures]{@link https://docs.ccxt.com/?id=order-structure}
|
|
5567
|
+
*/
|
|
5568
|
+
async fetchUtaOrdersByStatus(status, symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
5569
|
+
await this.loadMarkets();
|
|
5570
|
+
let paginate = false;
|
|
5571
|
+
const maxLimit = 200;
|
|
5572
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchOrdersByStatus', 'paginate');
|
|
5573
|
+
if (paginate) {
|
|
5574
|
+
return await this.fetchPaginatedCallDynamic('fetchOrdersByStatus', symbol, since, limit, params, maxLimit);
|
|
5575
|
+
}
|
|
5576
|
+
let accountMode = 'unified';
|
|
5577
|
+
[accountMode, params] = this.handleOptionAndParams(params, 'fetchUtaOrdersByStatus', 'accountMode', accountMode);
|
|
5578
|
+
let request = {
|
|
5579
|
+
'accountMode': accountMode,
|
|
5580
|
+
};
|
|
5581
|
+
let marketType = undefined;
|
|
5582
|
+
let market = undefined;
|
|
5583
|
+
if (symbol !== undefined) {
|
|
5584
|
+
market = this.market(symbol);
|
|
5585
|
+
marketType = market['type'];
|
|
5586
|
+
request['symbol'] = market['id'];
|
|
5587
|
+
}
|
|
5588
|
+
else {
|
|
5589
|
+
marketType = this.safeString(params, 'marketType');
|
|
5590
|
+
}
|
|
5591
|
+
params = this.omit(params, 'marketType');
|
|
5592
|
+
const isContract = (marketType !== 'spot') && (marketType !== 'margin');
|
|
5593
|
+
if (!isContract && (symbol === undefined)) {
|
|
5594
|
+
throw new ArgumentsRequired(this.id + ' fetchOrdersByStatus() requires a symbol argument for spot and margin markets when using uta endpoint');
|
|
5595
|
+
}
|
|
5596
|
+
let marginMode = undefined;
|
|
5597
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchOrdersByStatus', params);
|
|
5598
|
+
const tradeType = this.handleTradeType(isContract, marginMode, params);
|
|
5599
|
+
params['tradeType'] = tradeType;
|
|
5600
|
+
if (since !== undefined) {
|
|
5601
|
+
request['startAt'] = since;
|
|
5602
|
+
}
|
|
5603
|
+
[request, params] = this.handleUntilOption('endAt', request, params);
|
|
5604
|
+
if (limit !== undefined) {
|
|
5605
|
+
request['pageSize'] = limit;
|
|
5606
|
+
}
|
|
5607
|
+
let lowercaseStatus = status.toLowerCase();
|
|
5608
|
+
if (lowercaseStatus === 'open') {
|
|
5609
|
+
lowercaseStatus = 'active';
|
|
5610
|
+
}
|
|
5611
|
+
else if (lowercaseStatus === 'closed') {
|
|
5612
|
+
lowercaseStatus = 'done';
|
|
5613
|
+
}
|
|
5614
|
+
let response = undefined;
|
|
5615
|
+
if (lowercaseStatus === 'active') {
|
|
5616
|
+
//
|
|
5617
|
+
// {
|
|
5618
|
+
// "code": "200000",
|
|
5619
|
+
// "data": {
|
|
5620
|
+
// "pageNumber": 1,
|
|
5621
|
+
// "pageSize": 50,
|
|
5622
|
+
// "totalNum": 1,
|
|
5623
|
+
// "totalPage": 1,
|
|
5624
|
+
// "items": [
|
|
5625
|
+
// {
|
|
5626
|
+
// "orderId": "426328635071352832",
|
|
5627
|
+
// "symbol": "ETH-USDT",
|
|
5628
|
+
// "orderType": "LIMIT",
|
|
5629
|
+
// "side": "BUY",
|
|
5630
|
+
// "size": "0.001",
|
|
5631
|
+
// "price": "1000",
|
|
5632
|
+
// "timeInForce": "GTC",
|
|
5633
|
+
// "tags": "partner:ccxt",
|
|
5634
|
+
// "orderTime": 1774457869404794617,
|
|
5635
|
+
// "stp": "",
|
|
5636
|
+
// "cancelAfter": null,
|
|
5637
|
+
// "postOnly": false,
|
|
5638
|
+
// "reduceOnly": false,
|
|
5639
|
+
// "triggerDirection": "",
|
|
5640
|
+
// "triggerPrice": "",
|
|
5641
|
+
// "triggerPriceType": "",
|
|
5642
|
+
// "tpTriggerPrice": "",
|
|
5643
|
+
// "tpTriggerPriceType": "",
|
|
5644
|
+
// "slTriggerPrice": "",
|
|
5645
|
+
// "slTriggerPriceType": "",
|
|
5646
|
+
// "filledSize": "0",
|
|
5647
|
+
// "avgPrice": "0",
|
|
5648
|
+
// "fee": "0",
|
|
5649
|
+
// "feeCurrency": "USDT",
|
|
5650
|
+
// "tax": "0",
|
|
5651
|
+
// "updatedTime": 1774457869469028819,
|
|
5652
|
+
// "triggerOrderId": "",
|
|
5653
|
+
// "cancelReason": "",
|
|
5654
|
+
// "cancelSize": "0",
|
|
5655
|
+
// "clientOid": "708987d5-c346-487a-a70c-ea267377b0ca",
|
|
5656
|
+
// "sizeUnit": "BASECCY",
|
|
5657
|
+
// "status": 2
|
|
5658
|
+
// }
|
|
5659
|
+
// ],
|
|
5660
|
+
// "tradeType": "SPOT"
|
|
5661
|
+
// }
|
|
5662
|
+
// }
|
|
5663
|
+
//
|
|
5664
|
+
response = await this.utaPrivateGetAccountModeOrderOpenList(this.extend(request, params));
|
|
5665
|
+
}
|
|
5666
|
+
else {
|
|
5667
|
+
response = await this.utaPrivateGetAccountModeOrderHistory(this.extend(request, params));
|
|
5668
|
+
}
|
|
5669
|
+
const data = this.safeDict(response, 'data', {});
|
|
5670
|
+
const orders = this.safeList(data, 'items', []);
|
|
5671
|
+
return this.parseOrders(orders, market, since, limit);
|
|
5672
|
+
}
|
|
5071
5673
|
/**
|
|
5072
5674
|
* @method
|
|
5073
5675
|
* @name kucoin#fetchClosedOrders
|
|
@@ -5078,6 +5680,7 @@ export default class kucoin extends Exchange {
|
|
|
5078
5680
|
* @see https://www.kucoin.com/docs-new/rest/futures-trading/orders/get-stop-order-list
|
|
5079
5681
|
* @see https://www.kucoin.com/docs-new/rest/margin-trading/orders/get-open-orders
|
|
5080
5682
|
* @see https://www.kucoin.com/docs-new/rest/margin-trading/orders/get-closed-orders
|
|
5683
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-order-history
|
|
5081
5684
|
* @param {string} symbol unified market symbol of the market orders were made in
|
|
5082
5685
|
* @param {int} [since] the earliest time in ms to fetch orders for
|
|
5083
5686
|
* @param {int} [limit] the maximum number of order structures to retrieve
|
|
@@ -5111,6 +5714,7 @@ export default class kucoin extends Exchange {
|
|
|
5111
5714
|
* @see https://www.kucoin.com/docs-new/rest/margin-trading/orders/get-open-orders
|
|
5112
5715
|
* @see https://www.kucoin.com/docs-new/rest/margin-trading/orders/get-closed-orders
|
|
5113
5716
|
* @see https://www.kucoin.com/docs-new/rest/margin-trading/orders/get-stop-order-list
|
|
5717
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-open-order-list
|
|
5114
5718
|
* @param {string} symbol unified market symbol
|
|
5115
5719
|
* @param {int} [since] the earliest time in ms to fetch open orders for
|
|
5116
5720
|
* @param {int} [limit] the maximum number of open orders structures to retrieve
|
|
@@ -5149,15 +5753,23 @@ export default class kucoin extends Exchange {
|
|
|
5149
5753
|
* @see https://www.kucoin.com/docs-new/rest/margin-trading/orders/get-stop-order-by-clientoid
|
|
5150
5754
|
* @see https://www.kucoin.com/docs-new/rest/futures-trading/orders/get-order-by-orderld
|
|
5151
5755
|
* @see https://www.kucoin.com/docs-new/rest/futures-trading/get-stop-order-by-clientoid
|
|
5756
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-order-details
|
|
5152
5757
|
* @param {string} id order id
|
|
5153
5758
|
* @param {string} symbol unified symbol of the market the order was made in
|
|
5154
5759
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
5155
5760
|
* @param {string} [params.type] 'spot' or 'swap', used if symbol is not provided (default is 'spot')
|
|
5156
|
-
*
|
|
5761
|
+
* @param {bool} [params.uta] true if fetching an order with uta endpoint (default is false)
|
|
5762
|
+
* Check fetchSpotOrder(), fetchContractOrder() and fetchUtaOrder() for more details on the extra parameters that can be used in params
|
|
5157
5763
|
* @returns {object} An [order structure]{@link https://docs.ccxt.com/?id=order-structure}
|
|
5158
5764
|
*/
|
|
5159
5765
|
async fetchOrder(id, symbol = undefined, params = {}) {
|
|
5160
5766
|
await this.loadMarkets();
|
|
5767
|
+
let uta = await this.isUTAEnabled();
|
|
5768
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchOrder', 'uta', uta);
|
|
5769
|
+
if (uta) {
|
|
5770
|
+
params = this.omit(params, 'uta');
|
|
5771
|
+
return await this.fetchUtaOrder(id, symbol, params);
|
|
5772
|
+
}
|
|
5161
5773
|
let marketType = undefined;
|
|
5162
5774
|
if (symbol === undefined) {
|
|
5163
5775
|
[marketType, params] = this.handleMarketTypeAndParams('fetchOrder', undefined, params);
|
|
@@ -5348,7 +5960,115 @@ export default class kucoin extends Exchange {
|
|
|
5348
5960
|
const responseData = this.safeDict(response, 'data');
|
|
5349
5961
|
return this.parseOrder(responseData, market);
|
|
5350
5962
|
}
|
|
5963
|
+
/**
|
|
5964
|
+
* @method
|
|
5965
|
+
* @name kucoin#fetchUtaOrder
|
|
5966
|
+
* @description fetch uta order
|
|
5967
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-order-details
|
|
5968
|
+
* @param {string} id order id
|
|
5969
|
+
* @param {string} symbol unified symbol of the market the order was made in
|
|
5970
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
5971
|
+
* @param {string} [params.accountMode] 'unified' or 'classic' (default is 'unified')
|
|
5972
|
+
* @param {string} [params.clientOrderId] client order id, required if id is not provided
|
|
5973
|
+
* @param {string} [params.marginMode] 'cross' or 'isolated', required if fetching a margin order
|
|
5974
|
+
* @returns {object} An [order structure]{@link https://docs.ccxt.com/?id=order-structure}
|
|
5975
|
+
*/
|
|
5976
|
+
async fetchUtaOrder(id, symbol = undefined, params = {}) {
|
|
5977
|
+
if (symbol === undefined) {
|
|
5978
|
+
throw new ArgumentsRequired(this.id + ' fetchOrder() requires a symbol argument for uta orders');
|
|
5979
|
+
}
|
|
5980
|
+
const request = {};
|
|
5981
|
+
const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId');
|
|
5982
|
+
if (clientOrderId !== undefined) {
|
|
5983
|
+
request['clientOid'] = clientOrderId;
|
|
5984
|
+
params = this.omit(params, ['clientOid', 'clientOrderId']);
|
|
5985
|
+
}
|
|
5986
|
+
else {
|
|
5987
|
+
if (id === undefined) {
|
|
5988
|
+
throw new ArgumentsRequired(this.id + ' fetchOrder() requires an id argument or clientOrderId parameter');
|
|
5989
|
+
}
|
|
5990
|
+
request['orderId'] = id;
|
|
5991
|
+
}
|
|
5992
|
+
await this.loadMarkets();
|
|
5993
|
+
const market = this.market(symbol);
|
|
5994
|
+
request['symbol'] = market['id'];
|
|
5995
|
+
let accountMode = 'unified';
|
|
5996
|
+
[accountMode, params] = this.handleOptionAndParams(params, 'fetchOrder', 'accountMode', accountMode);
|
|
5997
|
+
request['accountMode'] = accountMode;
|
|
5998
|
+
let marginMode = undefined;
|
|
5999
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchOrder', params);
|
|
6000
|
+
const tradeType = this.handleTradeType(market['contract'], marginMode, params);
|
|
6001
|
+
request['tradeType'] = tradeType;
|
|
6002
|
+
const response = await this.utaPrivateGetAccountModeOrderDetail(this.extend(request, params));
|
|
6003
|
+
//
|
|
6004
|
+
// {
|
|
6005
|
+
// "code": "200000",
|
|
6006
|
+
// "data": {
|
|
6007
|
+
// "orderId": "426319129738321920",
|
|
6008
|
+
// "symbol": "ETH-USDT",
|
|
6009
|
+
// "orderType": "LIMIT",
|
|
6010
|
+
// "side": "BUY",
|
|
6011
|
+
// "size": "0.001",
|
|
6012
|
+
// "price": "1000",
|
|
6013
|
+
// "timeInForce": "GTC",
|
|
6014
|
+
// "tags": "partner:ccxt",
|
|
6015
|
+
// "orderTime": 1774455603156417582,
|
|
6016
|
+
// "stp": "",
|
|
6017
|
+
// "cancelAfter": null,
|
|
6018
|
+
// "postOnly": false,
|
|
6019
|
+
// "reduceOnly": false,
|
|
6020
|
+
// "triggerDirection": "",
|
|
6021
|
+
// "triggerPrice": "",
|
|
6022
|
+
// "triggerPriceType": "",
|
|
6023
|
+
// "tpTriggerPrice": "",
|
|
6024
|
+
// "tpTriggerPriceType": "",
|
|
6025
|
+
// "slTriggerPrice": "",
|
|
6026
|
+
// "slTriggerPriceType": "",
|
|
6027
|
+
// "filledSize": "0",
|
|
6028
|
+
// "avgPrice": "0",
|
|
6029
|
+
// "fee": "0",
|
|
6030
|
+
// "feeCurrency": "USDT",
|
|
6031
|
+
// "tax": "0",
|
|
6032
|
+
// "updatedTime": 1774455603371523690,
|
|
6033
|
+
// "triggerOrderId": "",
|
|
6034
|
+
// "cancelReason": "",
|
|
6035
|
+
// "cancelSize": "0",
|
|
6036
|
+
// "clientOid": "b896c118-a674-4863-baf4-a9ea3cd696c5",
|
|
6037
|
+
// "sizeUnit": "BASECCY",
|
|
6038
|
+
// "tradeType": "SPOT",
|
|
6039
|
+
// "tradeId": "",
|
|
6040
|
+
// "status": 2
|
|
6041
|
+
// }
|
|
6042
|
+
// }
|
|
6043
|
+
//
|
|
6044
|
+
const data = this.safeDict(response, 'data', {});
|
|
6045
|
+
return this.parseOrder(data, market);
|
|
6046
|
+
}
|
|
6047
|
+
handleTradeType(isContractMarket = false, marginMode = undefined, params = {}) {
|
|
6048
|
+
let tradeType = this.safeString(params, 'tradeType');
|
|
6049
|
+
if (tradeType === undefined) {
|
|
6050
|
+
if (isContractMarket) {
|
|
6051
|
+
tradeType = 'FUTURES';
|
|
6052
|
+
}
|
|
6053
|
+
else if (marginMode !== undefined) {
|
|
6054
|
+
tradeType = marginMode.toUpperCase();
|
|
6055
|
+
}
|
|
6056
|
+
else {
|
|
6057
|
+
tradeType = 'SPOT';
|
|
6058
|
+
}
|
|
6059
|
+
}
|
|
6060
|
+
return tradeType;
|
|
6061
|
+
}
|
|
5351
6062
|
parseOrder(order, market = undefined) {
|
|
6063
|
+
const tradeType = this.safeString(order, 'tradeType');
|
|
6064
|
+
const utaTradeTypes = ['SPOT', 'CROSS', 'ISOLATED', 'FUTURES']; // tradeType specific for uta endpoint
|
|
6065
|
+
let isUtaOrder = this.inArray(tradeType, utaTradeTypes);
|
|
6066
|
+
if ('sizeUnit' in order) { // property specific for uta endpoint
|
|
6067
|
+
isUtaOrder = true;
|
|
6068
|
+
}
|
|
6069
|
+
if (isUtaOrder) {
|
|
6070
|
+
return this.parseUtaOrder(order, market);
|
|
6071
|
+
}
|
|
5352
6072
|
const marketId = this.safeString(order, 'symbol');
|
|
5353
6073
|
market = this.safeMarket(marketId, market);
|
|
5354
6074
|
if ((market !== undefined) && (market['contract'])) {
|
|
@@ -5673,6 +6393,128 @@ export default class kucoin extends Exchange {
|
|
|
5673
6393
|
'trades': undefined,
|
|
5674
6394
|
}, market);
|
|
5675
6395
|
}
|
|
6396
|
+
parseUtaOrder(order, market = undefined) {
|
|
6397
|
+
//
|
|
6398
|
+
// createOrder
|
|
6399
|
+
// {
|
|
6400
|
+
// "orderId": "426319129738321920",
|
|
6401
|
+
// "tradeType": "SPOT",
|
|
6402
|
+
// "ts": 1774455603216000000,
|
|
6403
|
+
// "clientOid": "b896c118-a674-4863-baf4-a9ea3cd696c5"
|
|
6404
|
+
// }
|
|
6405
|
+
//
|
|
6406
|
+
// fetchOrder
|
|
6407
|
+
// {
|
|
6408
|
+
// "orderId": "426319129738321920",
|
|
6409
|
+
// "symbol": "ETH-USDT",
|
|
6410
|
+
// "orderType": "LIMIT",
|
|
6411
|
+
// "side": "BUY",
|
|
6412
|
+
// "size": "0.001",
|
|
6413
|
+
// "price": "1000",
|
|
6414
|
+
// "timeInForce": "GTC",
|
|
6415
|
+
// "tags": "partner:ccxt",
|
|
6416
|
+
// "orderTime": 1774455603156417582,
|
|
6417
|
+
// "stp": "",
|
|
6418
|
+
// "cancelAfter": null,
|
|
6419
|
+
// "postOnly": false,
|
|
6420
|
+
// "reduceOnly": false,
|
|
6421
|
+
// "triggerDirection": "",
|
|
6422
|
+
// "triggerPrice": "",
|
|
6423
|
+
// "triggerPriceType": "",
|
|
6424
|
+
// "tpTriggerPrice": "",
|
|
6425
|
+
// "tpTriggerPriceType": "",
|
|
6426
|
+
// "slTriggerPrice": "",
|
|
6427
|
+
// "slTriggerPriceType": "",
|
|
6428
|
+
// "filledSize": "0",
|
|
6429
|
+
// "avgPrice": "0",
|
|
6430
|
+
// "fee": "0",
|
|
6431
|
+
// "feeCurrency": "USDT",
|
|
6432
|
+
// "tax": "0",
|
|
6433
|
+
// "updatedTime": 1774455603371523690,
|
|
6434
|
+
// "triggerOrderId": "",
|
|
6435
|
+
// "cancelReason": "",
|
|
6436
|
+
// "cancelSize": "0",
|
|
6437
|
+
// "clientOid": "b896c118-a674-4863-baf4-a9ea3cd696c5",
|
|
6438
|
+
// "sizeUnit": "BASECCY",
|
|
6439
|
+
// "tradeType": "SPOT",
|
|
6440
|
+
// "tradeId": "",
|
|
6441
|
+
// "status": 2
|
|
6442
|
+
// }
|
|
6443
|
+
//
|
|
6444
|
+
const marketId = this.safeString(order, 'symbol');
|
|
6445
|
+
market = this.safeMarket(marketId, market);
|
|
6446
|
+
const symbol = market['symbol'];
|
|
6447
|
+
const timestamp = this.safeIntegerProduct2(order, 'orderTime', 'ts', 0.000001);
|
|
6448
|
+
const lastUpdateTimestamp = this.safeIntegerProduct(order, 'updatedTime', 0.000001);
|
|
6449
|
+
const rawTimeInForce = this.safeString(order, 'timeInForce');
|
|
6450
|
+
let amount = undefined;
|
|
6451
|
+
let cost = undefined;
|
|
6452
|
+
const sizeUnit = this.safeString(order, 'sizeUnit');
|
|
6453
|
+
const size = this.safeString(order, 'size');
|
|
6454
|
+
const rawStatus = this.safeString(order, 'status');
|
|
6455
|
+
const average = this.safeString(order, 'avgPrice');
|
|
6456
|
+
let filled = this.safeString(order, 'filledSize'); // might be in base or quote, need to check sizeUnit
|
|
6457
|
+
if ((sizeUnit === 'BASECCY') || (sizeUnit === 'UNIT')) {
|
|
6458
|
+
amount = size;
|
|
6459
|
+
}
|
|
6460
|
+
else {
|
|
6461
|
+
cost = filled;
|
|
6462
|
+
filled = Precise.stringDiv(filled, average);
|
|
6463
|
+
filled = this.amountToPrecision(symbol, filled);
|
|
6464
|
+
}
|
|
6465
|
+
const fee = {
|
|
6466
|
+
'currency': this.safeCurrencyCode(this.safeString(order, 'feeCurrency')),
|
|
6467
|
+
'cost': this.safeString(order, 'fee'),
|
|
6468
|
+
};
|
|
6469
|
+
return this.safeOrder({
|
|
6470
|
+
'id': this.safeString(order, 'orderId'),
|
|
6471
|
+
'clientOrderId': this.safeString(order, 'clientOid'),
|
|
6472
|
+
'symbol': symbol,
|
|
6473
|
+
'type': this.safeStringLower(order, 'orderType'),
|
|
6474
|
+
'timeInForce': this.parseOrderTimeInForce(rawTimeInForce),
|
|
6475
|
+
'postOnly': this.safeBool(order, 'postOnly'),
|
|
6476
|
+
'reduceOnly': this.safeBool(order, 'reduceOnly'),
|
|
6477
|
+
'side': this.safeStringLower(order, 'side'),
|
|
6478
|
+
'amount': amount,
|
|
6479
|
+
'price': this.safeString(order, 'price'),
|
|
6480
|
+
'triggerPrice': this.safeString2(order, 'stopPrice', 'triggerPrice'),
|
|
6481
|
+
'cost': cost,
|
|
6482
|
+
'filled': filled,
|
|
6483
|
+
'remaining': undefined,
|
|
6484
|
+
'timestamp': timestamp,
|
|
6485
|
+
'datetime': this.iso8601(timestamp),
|
|
6486
|
+
'fee': fee,
|
|
6487
|
+
'status': this.parseOrderStatus(rawStatus),
|
|
6488
|
+
'lastTradeTimestamp': undefined,
|
|
6489
|
+
'lastUpdateTimestamp': lastUpdateTimestamp,
|
|
6490
|
+
'average': average,
|
|
6491
|
+
'trades': undefined,
|
|
6492
|
+
'stopLossPrice': this.safeString(order, 'slTriggerPrice'),
|
|
6493
|
+
'takeProfitPrice': this.safeString(order, 'tpTriggerPrice'),
|
|
6494
|
+
'info': order,
|
|
6495
|
+
}, market);
|
|
6496
|
+
}
|
|
6497
|
+
parseOrderTimeInForce(timeInForce) {
|
|
6498
|
+
const timeInForces = {
|
|
6499
|
+
'GTC': 'GTC',
|
|
6500
|
+
'IOC': 'IOC',
|
|
6501
|
+
'FOK': 'FOK',
|
|
6502
|
+
'GTT': 'GTD',
|
|
6503
|
+
};
|
|
6504
|
+
return this.safeString(timeInForces, timeInForce, timeInForce);
|
|
6505
|
+
}
|
|
6506
|
+
parseOrderStatus(status) {
|
|
6507
|
+
const statuses = {
|
|
6508
|
+
'0': 'open',
|
|
6509
|
+
'1': 'open',
|
|
6510
|
+
'2': 'open',
|
|
6511
|
+
'3': 'closed',
|
|
6512
|
+
'4': 'open',
|
|
6513
|
+
'5': 'canceled',
|
|
6514
|
+
'6': 'closed', // partial canceled
|
|
6515
|
+
};
|
|
6516
|
+
return this.safeString(statuses, status, status);
|
|
6517
|
+
}
|
|
5676
6518
|
/**
|
|
5677
6519
|
* @method
|
|
5678
6520
|
* @name kucoin#fetchOrderTrades
|
|
@@ -5680,12 +6522,14 @@ export default class kucoin extends Exchange {
|
|
|
5680
6522
|
* @see https://docs.kucoin.com/#list-fills
|
|
5681
6523
|
* @see https://www.kucoin.com/docs-new/rest/futures-trading/orders/get-trade-history
|
|
5682
6524
|
* @see https://www.kucoin.com/docs-new/rest/margin-trading/orders/get-trade-history
|
|
6525
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-trade-history
|
|
5683
6526
|
* @param {string} id order id
|
|
5684
6527
|
* @param {string} symbol unified market symbol
|
|
5685
6528
|
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
5686
6529
|
* @param {int} [limit] the maximum number of trades to retrieve
|
|
5687
6530
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
5688
6531
|
* @param {string} [params.type] 'spot' or 'swap', used if symbol is not provided (default is 'spot')
|
|
6532
|
+
* @param {boolean} [params.uta] set to true if fetching trades from uta endpoint, default is false.
|
|
5689
6533
|
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/?id=trade-structure}
|
|
5690
6534
|
*/
|
|
5691
6535
|
async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
@@ -5699,6 +6543,7 @@ export default class kucoin extends Exchange {
|
|
|
5699
6543
|
* @name kucoin#fetchMyTrades
|
|
5700
6544
|
* @see https://www.kucoin.com/docs-new/rest/spot-trading/orders/get-trade-history
|
|
5701
6545
|
* @see https://www.kucoin.com/docs-new/rest/margin-trading/orders/get-trade-history
|
|
6546
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-trade-history
|
|
5702
6547
|
* @description fetch all trades made by the user
|
|
5703
6548
|
* @param {string} symbol unified market symbol
|
|
5704
6549
|
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
@@ -5717,6 +6562,12 @@ export default class kucoin extends Exchange {
|
|
|
5717
6562
|
market = this.market(symbol);
|
|
5718
6563
|
}
|
|
5719
6564
|
[marketType, params] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);
|
|
6565
|
+
let uta = await this.isUTAEnabled();
|
|
6566
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'uta', uta);
|
|
6567
|
+
if (uta) {
|
|
6568
|
+
params = this.extend(params, { 'marketType': marketType });
|
|
6569
|
+
return await this.fetchMyUtaTrades(symbol, since, limit, params);
|
|
6570
|
+
}
|
|
5720
6571
|
if ((marketType === 'spot') || (marketType === 'margin')) {
|
|
5721
6572
|
return await this.fetchMySpotTrades(symbol, since, limit, params);
|
|
5722
6573
|
}
|
|
@@ -5933,57 +6784,144 @@ export default class kucoin extends Exchange {
|
|
|
5933
6784
|
}
|
|
5934
6785
|
/**
|
|
5935
6786
|
* @method
|
|
5936
|
-
* @name kucoin#
|
|
5937
|
-
* @
|
|
5938
|
-
* @
|
|
5939
|
-
* @
|
|
5940
|
-
* @
|
|
5941
|
-
* @param {
|
|
5942
|
-
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
5943
|
-
* @param {int} [limit] the maximum amount of trades to fetch
|
|
6787
|
+
* @name kucoin#fetchMyUtaTrades
|
|
6788
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-trade-history
|
|
6789
|
+
* @description fetch all trades made by the user
|
|
6790
|
+
* @param {string} symbol unified market symbol
|
|
6791
|
+
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
6792
|
+
* @param {int} [limit] the maximum number of trades structures to retrieve (default is 50, max is 200)
|
|
5944
6793
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
5945
|
-
* @param {
|
|
5946
|
-
* @
|
|
6794
|
+
* @param {int} [params.until] the latest time in ms to fetch entries for
|
|
6795
|
+
* @param {string} [params.accountMode] 'unified' or 'classic', defaults to 'unified'
|
|
6796
|
+
* @param {string} [params.marginMode] 'cross' or 'isolated', only for margin trades
|
|
6797
|
+
* @param {string} [params.side] 'BUY' or 'SELL' (both if not provided)
|
|
6798
|
+
* @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)
|
|
6799
|
+
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/?id=trade-structure}
|
|
5947
6800
|
*/
|
|
5948
|
-
async
|
|
6801
|
+
async fetchMyUtaTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
5949
6802
|
await this.loadMarkets();
|
|
5950
|
-
|
|
5951
|
-
|
|
5952
|
-
|
|
5953
|
-
|
|
5954
|
-
|
|
5955
|
-
|
|
5956
|
-
|
|
5957
|
-
|
|
5958
|
-
|
|
5959
|
-
|
|
5960
|
-
|
|
5961
|
-
let
|
|
5962
|
-
|
|
5963
|
-
|
|
5964
|
-
|
|
5965
|
-
|
|
5966
|
-
|
|
5967
|
-
if (
|
|
5968
|
-
|
|
5969
|
-
|
|
5970
|
-
|
|
5971
|
-
|
|
5972
|
-
|
|
5973
|
-
|
|
5974
|
-
|
|
5975
|
-
|
|
5976
|
-
|
|
5977
|
-
|
|
5978
|
-
|
|
5979
|
-
|
|
5980
|
-
|
|
5981
|
-
|
|
5982
|
-
|
|
5983
|
-
|
|
5984
|
-
|
|
5985
|
-
|
|
5986
|
-
|
|
6803
|
+
let paginate = false;
|
|
6804
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');
|
|
6805
|
+
if (paginate) {
|
|
6806
|
+
return await this.fetchPaginatedCallDynamic('fetchMyTrades', symbol, since, limit, params);
|
|
6807
|
+
}
|
|
6808
|
+
const marketType = this.safeString(params, 'marketType');
|
|
6809
|
+
if (marketType !== undefined) {
|
|
6810
|
+
params = this.omit(params, 'marketType');
|
|
6811
|
+
}
|
|
6812
|
+
let request = {};
|
|
6813
|
+
let isContract = false;
|
|
6814
|
+
let market = undefined;
|
|
6815
|
+
if (symbol !== undefined) {
|
|
6816
|
+
market = this.market(symbol);
|
|
6817
|
+
request['symbol'] = market['id'];
|
|
6818
|
+
isContract = market['contract'];
|
|
6819
|
+
}
|
|
6820
|
+
else if ((marketType === 'spot') || (marketType === 'margin')) {
|
|
6821
|
+
throw new ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol parameter for uta spot or margin trades');
|
|
6822
|
+
}
|
|
6823
|
+
else {
|
|
6824
|
+
isContract = true;
|
|
6825
|
+
}
|
|
6826
|
+
let marginMode = undefined;
|
|
6827
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);
|
|
6828
|
+
const tradeType = this.handleTradeType(isContract, marginMode, params);
|
|
6829
|
+
request['tradeType'] = tradeType;
|
|
6830
|
+
let accountMode = 'unified';
|
|
6831
|
+
[accountMode, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'accountMode', accountMode);
|
|
6832
|
+
request['accountMode'] = accountMode;
|
|
6833
|
+
if (since !== undefined) {
|
|
6834
|
+
request['startAt'] = since;
|
|
6835
|
+
}
|
|
6836
|
+
if (limit !== undefined) {
|
|
6837
|
+
request['pageSize'] = limit;
|
|
6838
|
+
}
|
|
6839
|
+
[request, params] = this.handleUntilOption('endAt', request, params);
|
|
6840
|
+
const response = await this.utaPrivateGetAccountModeOrderExecution(this.extend(request, params));
|
|
6841
|
+
//
|
|
6842
|
+
// {
|
|
6843
|
+
// "code": "200000",
|
|
6844
|
+
// "data": {
|
|
6845
|
+
// "tradeType": "FUTURES",
|
|
6846
|
+
// "lastId": 30000000000531982,
|
|
6847
|
+
// "items": [
|
|
6848
|
+
// {
|
|
6849
|
+
// "orderId": "426373228194254848",
|
|
6850
|
+
// "symbol": "DOGEUSDTM",
|
|
6851
|
+
// "orderType": "MARKET",
|
|
6852
|
+
// "side": "BUY",
|
|
6853
|
+
// "tradeId": "1711108516570",
|
|
6854
|
+
// "size": "1",
|
|
6855
|
+
// "price": "0.09641",
|
|
6856
|
+
// "value": "9.641",
|
|
6857
|
+
// "executionTime": 1774468501294000000,
|
|
6858
|
+
// "fee": "0.0057846",
|
|
6859
|
+
// "feeCurrency": "USDT",
|
|
6860
|
+
// "tax": "",
|
|
6861
|
+
// "liquidityRole": "TAKER",
|
|
6862
|
+
// "fillType": "NORMAL"
|
|
6863
|
+
// }
|
|
6864
|
+
// ]
|
|
6865
|
+
// }
|
|
6866
|
+
// }
|
|
6867
|
+
//
|
|
6868
|
+
const data = this.safeDict(response, 'data', {});
|
|
6869
|
+
const trades = this.safeList(data, 'items', []);
|
|
6870
|
+
return this.parseTrades(trades, market, since, limit);
|
|
6871
|
+
}
|
|
6872
|
+
/**
|
|
6873
|
+
* @method
|
|
6874
|
+
* @name kucoin#fetchTrades
|
|
6875
|
+
* @description get the list of most recent trades for a particular symbol
|
|
6876
|
+
* @see https://www.kucoin.com/docs-new/rest/spot-trading/market-data/get-trade-history
|
|
6877
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-trades
|
|
6878
|
+
* @see https://www.kucoin.com/docs-new/rest/futures-trading/market-data/get-trade-history
|
|
6879
|
+
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
6880
|
+
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
6881
|
+
* @param {int} [limit] the maximum amount of trades to fetch
|
|
6882
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
6883
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
6884
|
+
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/?id=public-trades}
|
|
6885
|
+
*/
|
|
6886
|
+
async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
|
|
6887
|
+
await this.loadMarkets();
|
|
6888
|
+
const market = this.market(symbol);
|
|
6889
|
+
const request = {
|
|
6890
|
+
'symbol': market['id'],
|
|
6891
|
+
};
|
|
6892
|
+
// pagination is not supported on the exchange side anymore
|
|
6893
|
+
// if (since !== undefined) {
|
|
6894
|
+
// request['startAt'] = Math.floor (since / 1000);
|
|
6895
|
+
// }
|
|
6896
|
+
// if (limit !== undefined) {
|
|
6897
|
+
// request['pageSize'] = limit;
|
|
6898
|
+
// }
|
|
6899
|
+
let uta = false;
|
|
6900
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchTrades', 'uta', uta);
|
|
6901
|
+
let response = undefined;
|
|
6902
|
+
let trades = undefined;
|
|
6903
|
+
let type = undefined;
|
|
6904
|
+
[type, params] = this.handleMarketTypeAndParams('fetchTrades', market, params);
|
|
6905
|
+
if (uta) {
|
|
6906
|
+
if ((type === 'spot') || (type === 'margin')) {
|
|
6907
|
+
request['tradeType'] = 'SPOT';
|
|
6908
|
+
}
|
|
6909
|
+
else {
|
|
6910
|
+
request['tradeType'] = 'FUTURES';
|
|
6911
|
+
}
|
|
6912
|
+
response = await this.utaGetMarketTrade(this.extend(request, params));
|
|
6913
|
+
//
|
|
6914
|
+
// {
|
|
6915
|
+
// "code": "200000",
|
|
6916
|
+
// "data": {
|
|
6917
|
+
// "tradeType": "SPOT",
|
|
6918
|
+
// "list": [
|
|
6919
|
+
// {
|
|
6920
|
+
// "sequence": "18746044393340932",
|
|
6921
|
+
// "tradeId": "18746044393340932",
|
|
6922
|
+
// "price": "104355.6",
|
|
6923
|
+
// "size": "0.00011886",
|
|
6924
|
+
// "side": "sell",
|
|
5987
6925
|
// "ts": 1762242540829000000
|
|
5988
6926
|
// },
|
|
5989
6927
|
// ]
|
|
@@ -6035,6 +6973,9 @@ export default class kucoin extends Exchange {
|
|
|
6035
6973
|
return this.parseTrades(trades, market, since, limit);
|
|
6036
6974
|
}
|
|
6037
6975
|
parseTrade(trade, market = undefined) {
|
|
6976
|
+
if ('liquidityRole' in trade) { // property specific to myTrades from uta endpoint
|
|
6977
|
+
return this.parseMyUtaTrade(trade, market);
|
|
6978
|
+
}
|
|
6038
6979
|
const marketId = this.safeString(trade, 'symbol');
|
|
6039
6980
|
market = this.safeMarket(marketId, market);
|
|
6040
6981
|
if ((market === undefined) || (market['spot'])) {
|
|
@@ -6321,23 +7262,97 @@ export default class kucoin extends Exchange {
|
|
|
6321
7262
|
'fee': fee,
|
|
6322
7263
|
}, market);
|
|
6323
7264
|
}
|
|
7265
|
+
parseMyUtaTrade(trade, market = undefined) {
|
|
7266
|
+
//
|
|
7267
|
+
// {
|
|
7268
|
+
// "orderId": "426373228194254848",
|
|
7269
|
+
// "symbol": "DOGEUSDTM",
|
|
7270
|
+
// "orderType": "MARKET",
|
|
7271
|
+
// "side": "BUY",
|
|
7272
|
+
// "tradeId": "1711108516570",
|
|
7273
|
+
// "size": "1",
|
|
7274
|
+
// "price": "0.09641",
|
|
7275
|
+
// "value": "9.641",
|
|
7276
|
+
// "executionTime": 1774468501294000000,
|
|
7277
|
+
// "fee": "0.0057846",
|
|
7278
|
+
// "feeCurrency": "USDT",
|
|
7279
|
+
// "tax": "",
|
|
7280
|
+
// "liquidityRole": "TAKER",
|
|
7281
|
+
// "fillType": "NORMAL"
|
|
7282
|
+
// }
|
|
7283
|
+
//
|
|
7284
|
+
const marketId = this.safeString(trade, 'symbol');
|
|
7285
|
+
market = this.safeMarket(marketId, market);
|
|
7286
|
+
const timestamp = this.safeIntegerProduct(trade, 'executionTime', 0.000001);
|
|
7287
|
+
const fee = {
|
|
7288
|
+
'cost': this.safeString(trade, 'fee'),
|
|
7289
|
+
'currency': this.safeCurrencyCode(this.safeString(trade, 'feeCurrency')),
|
|
7290
|
+
};
|
|
7291
|
+
return this.safeTrade({
|
|
7292
|
+
'info': trade,
|
|
7293
|
+
'id': this.safeString(trade, 'tradeId'),
|
|
7294
|
+
'order': this.safeString(trade, 'orderId'),
|
|
7295
|
+
'timestamp': timestamp,
|
|
7296
|
+
'datetime': this.iso8601(timestamp),
|
|
7297
|
+
'symbol': market['symbol'],
|
|
7298
|
+
'type': this.safeStringLower(trade, 'orderType'),
|
|
7299
|
+
'takerOrMaker': this.safeStringLower(trade, 'liquidityRole'),
|
|
7300
|
+
'side': this.safeStringLower(trade, 'side'),
|
|
7301
|
+
'price': this.safeString(trade, 'price'),
|
|
7302
|
+
'amount': this.safeString(trade, 'size'),
|
|
7303
|
+
'cost': this.safeString(trade, 'value'),
|
|
7304
|
+
'fee': fee,
|
|
7305
|
+
}, market);
|
|
7306
|
+
}
|
|
6324
7307
|
/**
|
|
6325
7308
|
* @method
|
|
6326
7309
|
* @name kucoin#fetchTradingFee
|
|
6327
7310
|
* @description fetch the trading fees for a market
|
|
6328
7311
|
* @see https://www.kucoin.com/docs-new/rest/account-info/trade-fee/get-actual-fee-spot-margin
|
|
6329
7312
|
* @see https://www.kucoin.com/docs-new/rest/account-info/trade-fee/get-actual-fee-futures
|
|
7313
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-actual-fee
|
|
6330
7314
|
* @param {string} symbol unified market symbol
|
|
6331
7315
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
7316
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta) endpoint, defaults to false
|
|
6332
7317
|
* @returns {object} a [fee structure]{@link https://docs.ccxt.com/?id=fee-structure}
|
|
6333
7318
|
*/
|
|
6334
7319
|
async fetchTradingFee(symbol, params = {}) {
|
|
6335
7320
|
await this.loadMarkets();
|
|
6336
7321
|
const market = this.market(symbol);
|
|
7322
|
+
let uta = await this.isUTAEnabled();
|
|
7323
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchTradingFee', 'uta', uta);
|
|
6337
7324
|
const request = {};
|
|
6338
7325
|
let response = undefined;
|
|
6339
7326
|
let entry = undefined;
|
|
6340
|
-
if (
|
|
7327
|
+
if (uta) {
|
|
7328
|
+
if (market['spot']) {
|
|
7329
|
+
request['tradeType'] = 'SPOT';
|
|
7330
|
+
}
|
|
7331
|
+
else {
|
|
7332
|
+
request['tradeType'] = 'FUTURES';
|
|
7333
|
+
}
|
|
7334
|
+
request['symbol'] = market['id'];
|
|
7335
|
+
response = await this.utaPrivateGetUserFeeRate(this.extend(request, params));
|
|
7336
|
+
//
|
|
7337
|
+
// {
|
|
7338
|
+
// "code": "200000",
|
|
7339
|
+
// "data": {
|
|
7340
|
+
// "tradeType": "SPOT",
|
|
7341
|
+
// "list": [
|
|
7342
|
+
// {
|
|
7343
|
+
// "symbol": "ETH-USDT",
|
|
7344
|
+
// "takerFeeRate": "0.001",
|
|
7345
|
+
// "makerFeeRate": "0.001"
|
|
7346
|
+
// }
|
|
7347
|
+
// ]
|
|
7348
|
+
// }
|
|
7349
|
+
// }
|
|
7350
|
+
//
|
|
7351
|
+
const data = this.safeDict(response, 'data', {});
|
|
7352
|
+
const dataList = this.safeList(data, 'list', []);
|
|
7353
|
+
entry = this.safeDict(dataList, 0);
|
|
7354
|
+
}
|
|
7355
|
+
else if (market['spot']) {
|
|
6341
7356
|
request['symbols'] = market['id'];
|
|
6342
7357
|
response = await this.privateGetTradeFees(this.extend(request, params));
|
|
6343
7358
|
//
|
|
@@ -6413,7 +7428,7 @@ export default class kucoin extends Exchange {
|
|
|
6413
7428
|
let networkCode = undefined;
|
|
6414
7429
|
[networkCode, params] = this.handleNetworkCodeAndParams(params);
|
|
6415
7430
|
if (networkCode !== undefined) {
|
|
6416
|
-
request['chain'] = this.networkCodeToId(networkCode).toLowerCase();
|
|
7431
|
+
request['chain'] = this.networkCodeToId(networkCode, currency['code']).toLowerCase();
|
|
6417
7432
|
}
|
|
6418
7433
|
request['amount'] = parseFloat(this.currencyToPrecision(code, amount, networkCode));
|
|
6419
7434
|
let includeFee = undefined;
|
|
@@ -6534,12 +7549,13 @@ export default class kucoin extends Exchange {
|
|
|
6534
7549
|
}
|
|
6535
7550
|
const internal = this.safeBool(transaction, 'isInner');
|
|
6536
7551
|
const tag = this.safeString(transaction, 'memo');
|
|
7552
|
+
const chainId = this.safeString(transaction, 'chain');
|
|
6537
7553
|
return {
|
|
6538
7554
|
'info': transaction,
|
|
6539
7555
|
'id': this.safeString2(transaction, 'id', 'withdrawalId'),
|
|
6540
7556
|
'timestamp': timestamp,
|
|
6541
7557
|
'datetime': this.iso8601(timestamp),
|
|
6542
|
-
'network': this.networkIdToCode(
|
|
7558
|
+
'network': this.networkIdToCode(chainId, code),
|
|
6543
7559
|
'address': address,
|
|
6544
7560
|
'addressTo': address,
|
|
6545
7561
|
'addressFrom': undefined,
|
|
@@ -6731,10 +7747,11 @@ export default class kucoin extends Exchange {
|
|
|
6731
7747
|
if (accountType === 'contract') {
|
|
6732
7748
|
return await this.fetchContractWithdrawals(code, since, limit, params);
|
|
6733
7749
|
}
|
|
7750
|
+
const maxLimit = 500;
|
|
6734
7751
|
let paginate = false;
|
|
6735
7752
|
[paginate, params] = this.handleOptionAndParams(params, 'fetchWithdrawals', 'paginate');
|
|
6736
7753
|
if (paginate) {
|
|
6737
|
-
return await this.fetchPaginatedCallDynamic('fetchWithdrawals', code, since, limit, params,
|
|
7754
|
+
return await this.fetchPaginatedCallDynamic('fetchWithdrawals', code, since, limit, params, maxLimit);
|
|
6738
7755
|
}
|
|
6739
7756
|
let request = {};
|
|
6740
7757
|
let currency = undefined;
|
|
@@ -6874,14 +7891,24 @@ export default class kucoin extends Exchange {
|
|
|
6874
7891
|
* @see https://www.kucoin.com/docs-new/rest/account-info/account-funding/get-account-cross-margin
|
|
6875
7892
|
* @see https://www.kucoin.com/docs-new/rest/account-info/account-funding/get-account-isolated-margin
|
|
6876
7893
|
* @see https://www.kucoin.com/docs-new/rest/account-info/account-funding/get-account-futures
|
|
7894
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-account-currency-assets-uta
|
|
7895
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-account-currency-assets-classic
|
|
6877
7896
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
6878
7897
|
* @param {object} [params.marginMode] 'cross' or 'isolated', margin type for fetching margin balance
|
|
6879
7898
|
* @param {object} [params.type] extra parameters specific to the exchange API endpoint
|
|
6880
7899
|
* @param {object} [params.hf] *default if false* if true, the result includes the balance of the high frequency account
|
|
7900
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta) endpoint, defaults to false
|
|
6881
7901
|
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/?id=balance-structure}
|
|
6882
7902
|
*/
|
|
6883
7903
|
async fetchBalance(params = {}) {
|
|
6884
7904
|
await this.loadMarkets();
|
|
7905
|
+
let uta = await this.isUTAEnabled();
|
|
7906
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchBalance', 'uta', uta);
|
|
7907
|
+
if (uta) {
|
|
7908
|
+
return await this.fetchUtaBalance(params);
|
|
7909
|
+
}
|
|
7910
|
+
let response = undefined;
|
|
7911
|
+
const request = {};
|
|
6885
7912
|
const code = this.safeString(params, 'code');
|
|
6886
7913
|
let currency = undefined;
|
|
6887
7914
|
if (code !== undefined) {
|
|
@@ -6900,26 +7927,25 @@ export default class kucoin extends Exchange {
|
|
|
6900
7927
|
if (hf && (type !== 'main')) {
|
|
6901
7928
|
type = 'trade_hf';
|
|
6902
7929
|
}
|
|
6903
|
-
|
|
6904
|
-
|
|
6905
|
-
const request = {};
|
|
7930
|
+
let marginMode = undefined;
|
|
7931
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchBalance', params);
|
|
6906
7932
|
const isolated = (marginMode === 'isolated') || (type === 'isolated');
|
|
6907
7933
|
const cross = (marginMode === 'cross') || (type === 'margin');
|
|
6908
7934
|
if (isolated) {
|
|
6909
7935
|
if (currency !== undefined) {
|
|
6910
7936
|
request['balanceCurrency'] = currency['id'];
|
|
6911
7937
|
}
|
|
6912
|
-
response = await this.privateGetIsolatedAccounts(this.extend(request,
|
|
7938
|
+
response = await this.privateGetIsolatedAccounts(this.extend(request, params));
|
|
6913
7939
|
}
|
|
6914
7940
|
else if (cross) {
|
|
6915
|
-
response = await this.privateGetMarginAccount(this.extend(request,
|
|
7941
|
+
response = await this.privateGetMarginAccount(this.extend(request, params));
|
|
6916
7942
|
}
|
|
6917
7943
|
else {
|
|
6918
7944
|
if (currency !== undefined) {
|
|
6919
7945
|
request['currency'] = currency['id'];
|
|
6920
7946
|
}
|
|
6921
7947
|
request['type'] = type;
|
|
6922
|
-
response = await this.privateGetAccounts(this.extend(request,
|
|
7948
|
+
response = await this.privateGetAccounts(this.extend(request, params));
|
|
6923
7949
|
}
|
|
6924
7950
|
//
|
|
6925
7951
|
// Spot
|
|
@@ -7103,11 +8129,260 @@ export default class kucoin extends Exchange {
|
|
|
7103
8129
|
result[currencyCode] = account;
|
|
7104
8130
|
return this.safeBalance(result);
|
|
7105
8131
|
}
|
|
8132
|
+
/**
|
|
8133
|
+
* @method
|
|
8134
|
+
* @name kucoin#fetchUtaBalance
|
|
8135
|
+
* @description helper method for fetching balance with unified trading account (uta) endpoint
|
|
8136
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-account-currency-assets-uta
|
|
8137
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-account-currency-assets-classic
|
|
8138
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
8139
|
+
* @param {string} [params.type] 'spot', 'unified', 'funding', 'cross', 'isolated' or 'swap' (default is 'spot')
|
|
8140
|
+
* @param {string} [params.marginMode] 'cross' or 'isolated', margin type for fetching margin balance, only applicable if type is margin (default is cross)
|
|
8141
|
+
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/?id=balance-structure}
|
|
8142
|
+
*/
|
|
8143
|
+
async fetchUtaBalance(params = {}) {
|
|
8144
|
+
await this.loadMarkets();
|
|
8145
|
+
let requestedType = undefined;
|
|
8146
|
+
[requestedType, params] = this.handleMarketTypeAndParams('fetchUtaBalance', undefined, params);
|
|
8147
|
+
if (requestedType === 'margin') {
|
|
8148
|
+
// assume cross margin if margin is specified but marginMode is not specified
|
|
8149
|
+
let marginMode = 'cross';
|
|
8150
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchUtaBalance', params, marginMode);
|
|
8151
|
+
requestedType = marginMode;
|
|
8152
|
+
}
|
|
8153
|
+
const utaAccountsByType = this.safeDict(this.options, 'utaAccountsByType', {});
|
|
8154
|
+
let type = undefined;
|
|
8155
|
+
type = this.safeString(utaAccountsByType, requestedType, type);
|
|
8156
|
+
const isIsolated = (type === 'ISOLATED');
|
|
8157
|
+
const request = {};
|
|
8158
|
+
let response = undefined;
|
|
8159
|
+
if (type === 'unified') {
|
|
8160
|
+
request['accountMode'] = type;
|
|
8161
|
+
// uta
|
|
8162
|
+
// {
|
|
8163
|
+
// "code": "200000",
|
|
8164
|
+
// "data": {
|
|
8165
|
+
// "accountType": "UNIFIED",
|
|
8166
|
+
// "ts": 1764731696945,
|
|
8167
|
+
// "accounts": [
|
|
8168
|
+
// {
|
|
8169
|
+
// "currencies": [
|
|
8170
|
+
// {
|
|
8171
|
+
// "currency": "USDT",
|
|
8172
|
+
// "equity": "97.9936711985",
|
|
8173
|
+
// "hold": "0.0000000000",
|
|
8174
|
+
// "balance": "97.9936711985",
|
|
8175
|
+
// "available": "97.9936711985",
|
|
8176
|
+
// "liability": "0.0000000000"
|
|
8177
|
+
// },
|
|
8178
|
+
// {
|
|
8179
|
+
// "currency": "BTC",
|
|
8180
|
+
// "equity": "0.0000216000",
|
|
8181
|
+
// "hold": "0.0000000000",
|
|
8182
|
+
// "balance": "0.0000216000",
|
|
8183
|
+
// "available": "0.0000216000",
|
|
8184
|
+
// "liability": "0.0000000000"
|
|
8185
|
+
// }
|
|
8186
|
+
// ]
|
|
8187
|
+
// }
|
|
8188
|
+
// ]
|
|
8189
|
+
// }
|
|
8190
|
+
// }
|
|
8191
|
+
//
|
|
8192
|
+
response = await this.utaPrivateGetAccountModeAccountBalance(this.extend(request, params));
|
|
8193
|
+
}
|
|
8194
|
+
else {
|
|
8195
|
+
request['accountType'] = type;
|
|
8196
|
+
//
|
|
8197
|
+
// isolated
|
|
8198
|
+
// {
|
|
8199
|
+
// "code": "200000",
|
|
8200
|
+
// "data": {
|
|
8201
|
+
// "accountType": "ISOLATED",
|
|
8202
|
+
// "ts": 1774244660519,
|
|
8203
|
+
// "accounts": [
|
|
8204
|
+
// {
|
|
8205
|
+
// "accountSubtype": "LTC-USDT",
|
|
8206
|
+
// "riskRatio": "0",
|
|
8207
|
+
// "currencies": [
|
|
8208
|
+
// {
|
|
8209
|
+
// "currency": "LTC",
|
|
8210
|
+
// "hold": "0",
|
|
8211
|
+
// "available": "0",
|
|
8212
|
+
// "liability": "0",
|
|
8213
|
+
// "balance": "0",
|
|
8214
|
+
// "equity": "0"},{
|
|
8215
|
+
// "currency": "USDT",
|
|
8216
|
+
// "hold": "0",
|
|
8217
|
+
// "available": "6",
|
|
8218
|
+
// "liability": "0",
|
|
8219
|
+
// "balance": "6",
|
|
8220
|
+
// "equity": "6"
|
|
8221
|
+
// }
|
|
8222
|
+
// ]
|
|
8223
|
+
// }
|
|
8224
|
+
// ]
|
|
8225
|
+
// }
|
|
8226
|
+
// }
|
|
8227
|
+
//
|
|
8228
|
+
response = await this.utaPrivateGetAccountBalance(this.extend(request, params));
|
|
8229
|
+
}
|
|
8230
|
+
const data = this.safeDict(response, 'data', {});
|
|
8231
|
+
const timestamp = this.safeInteger(data, 'ts');
|
|
8232
|
+
const result = {
|
|
8233
|
+
'info': response,
|
|
8234
|
+
'timestamp': timestamp,
|
|
8235
|
+
'datetime': this.iso8601(timestamp),
|
|
8236
|
+
};
|
|
8237
|
+
const accounts = this.safeList(data, 'accounts', []);
|
|
8238
|
+
if (isIsolated) {
|
|
8239
|
+
for (let i = 0; i < accounts.length; i++) {
|
|
8240
|
+
const entry = accounts[i];
|
|
8241
|
+
const marketId = this.safeString(entry, 'accountSubtype');
|
|
8242
|
+
const symbol = this.safeSymbol(marketId, undefined, '-');
|
|
8243
|
+
const subResult = {};
|
|
8244
|
+
const currencies = this.safeList(entry, 'currencies', []);
|
|
8245
|
+
for (let j = 0; j < currencies.length; j++) {
|
|
8246
|
+
const currencyEntry = this.safeDict(currencies, j, {});
|
|
8247
|
+
const currencyId = this.safeString(currencyEntry, 'currency');
|
|
8248
|
+
const currencyCode = this.safeCurrencyCode(currencyId);
|
|
8249
|
+
subResult[currencyCode] = this.parseBalanceHelper(currencyEntry);
|
|
8250
|
+
}
|
|
8251
|
+
result[symbol] = this.safeBalance(subResult);
|
|
8252
|
+
}
|
|
8253
|
+
}
|
|
8254
|
+
else {
|
|
8255
|
+
const firstAccount = this.safeDict(accounts, 0, {});
|
|
8256
|
+
const currencies = this.safeList(firstAccount, 'currencies', []);
|
|
8257
|
+
for (let i = 0; i < currencies.length; i++) {
|
|
8258
|
+
const currencyEntry = this.safeDict(currencies, i, {});
|
|
8259
|
+
const currencyId = this.safeString(currencyEntry, 'currency');
|
|
8260
|
+
const currencyCode = this.safeCurrencyCode(currencyId);
|
|
8261
|
+
result[currencyCode] = this.parseBalanceHelper(currencyEntry);
|
|
8262
|
+
}
|
|
8263
|
+
}
|
|
8264
|
+
let returnType = result;
|
|
8265
|
+
if (!isIsolated) {
|
|
8266
|
+
returnType = this.safeBalance(result);
|
|
8267
|
+
}
|
|
8268
|
+
return returnType;
|
|
8269
|
+
}
|
|
7106
8270
|
/**
|
|
7107
8271
|
* @method
|
|
7108
8272
|
* @name kucoin#transfer
|
|
7109
8273
|
* @description transfer currency internally between wallets on the same account
|
|
7110
8274
|
* @see https://www.kucoin.com/docs-new/rest/account-info/transfer/flex-transfer?lang=en_US&
|
|
8275
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/flex-transfer
|
|
8276
|
+
* @param {string} code unified currency code
|
|
8277
|
+
* @param {float} amount amount to transfer
|
|
8278
|
+
* @param {string} fromAccount account to transfer from
|
|
8279
|
+
* @param {string} toAccount account to transfer to
|
|
8280
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
8281
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta) endpoint, defaults to false
|
|
8282
|
+
* Check transferClassic() and transferUta() for more details on params
|
|
8283
|
+
* @returns {object} a [transfer structure]{@link https://docs.ccxt.com/?id=transfer-structure}
|
|
8284
|
+
*/
|
|
8285
|
+
async transfer(code, amount, fromAccount, toAccount, params = {}) {
|
|
8286
|
+
await this.loadMarkets();
|
|
8287
|
+
let uta = await this.isUTAEnabled();
|
|
8288
|
+
[uta, params] = this.handleOptionAndParams(params, 'transfer', 'uta', uta);
|
|
8289
|
+
if (uta) {
|
|
8290
|
+
return await this.transferUta(code, amount, fromAccount, toAccount, params);
|
|
8291
|
+
}
|
|
8292
|
+
return await this.transferClassic(code, amount, fromAccount, toAccount, params);
|
|
8293
|
+
}
|
|
8294
|
+
/**
|
|
8295
|
+
* @method
|
|
8296
|
+
* @name kucoin#transferUta
|
|
8297
|
+
* @description transfer currency internally between wallets on the same account with uta endpoint
|
|
8298
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/flex-transfer
|
|
8299
|
+
* @param {string} code unified currency code
|
|
8300
|
+
* @param {float} amount amount to transfer
|
|
8301
|
+
* @param {string} fromAccount account to transfer from
|
|
8302
|
+
* @param {string} toAccount account to transfer to
|
|
8303
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
8304
|
+
* @param {string} [params.transferType] INTERNAL, PARENT_TO_SUB, SUB_TO_PARENT, SUB_TO_SUB (default is INTERNAL)
|
|
8305
|
+
* @param {string} [params.fromUserId] required if transferType is SUB_TO_PARENT or SUB_TO_SUB
|
|
8306
|
+
* @param {string} [params.toUserId] required if transferType is PARENT_TO_SUB or SUB_TO_SUB
|
|
8307
|
+
* @returns {object} a [transfer structure]{@link https://docs.ccxt.com/?id=transfer-structure}
|
|
8308
|
+
*/
|
|
8309
|
+
async transferUta(code, amount, fromAccount, toAccount, params = {}) {
|
|
8310
|
+
await this.loadMarkets();
|
|
8311
|
+
const currency = this.currency(code);
|
|
8312
|
+
const requestedAmount = this.currencyToPrecision(code, amount);
|
|
8313
|
+
const request = {
|
|
8314
|
+
'currency': currency['id'],
|
|
8315
|
+
'amount': requestedAmount,
|
|
8316
|
+
};
|
|
8317
|
+
let transferType = 'INTERNAL';
|
|
8318
|
+
[transferType, params] = this.handleParamString2(params, 'transferType', 'type', transferType);
|
|
8319
|
+
let fromUserId = undefined;
|
|
8320
|
+
[fromUserId, params] = this.handleParamString2(params, 'fromUserId', 'fromUid', fromUserId);
|
|
8321
|
+
let toUserId = undefined;
|
|
8322
|
+
[toUserId, params] = this.handleParamString2(params, 'toUserId', 'toUid', toUserId);
|
|
8323
|
+
if (transferType === 'PARENT_TO_SUB' || transferType === 'SUB_TO_SUB') {
|
|
8324
|
+
if (toUserId === undefined) {
|
|
8325
|
+
throw new ExchangeError(this.id + ' transfer() requires a toUserId param for PARENT_TO_SUB or SUB_TO_SUB transfers');
|
|
8326
|
+
}
|
|
8327
|
+
else {
|
|
8328
|
+
request['toUid'] = toUserId;
|
|
8329
|
+
}
|
|
8330
|
+
}
|
|
8331
|
+
else if (transferType === 'SUB_TO_PARENT' || transferType === 'SUB_TO_SUB') {
|
|
8332
|
+
if (fromUserId === undefined) {
|
|
8333
|
+
throw new ExchangeError(this.id + ' transfer() requires a fromUserId param for SUB_TO_PARENT or SUB_TO_SUB transfers');
|
|
8334
|
+
}
|
|
8335
|
+
else {
|
|
8336
|
+
request['fromUid'] = fromUserId;
|
|
8337
|
+
}
|
|
8338
|
+
}
|
|
8339
|
+
let clientOid = this.uuid();
|
|
8340
|
+
[clientOid, params] = this.handleParamString2(params, 'clientOid', 'clientOrderId', clientOid);
|
|
8341
|
+
request['clientOid'] = clientOid;
|
|
8342
|
+
let fromId = this.convertTypeToAccount(fromAccount);
|
|
8343
|
+
let toId = this.convertTypeToAccount(toAccount);
|
|
8344
|
+
const fromIsolated = this.inArray(fromId, this.ids);
|
|
8345
|
+
const toIsolated = this.inArray(toId, this.ids);
|
|
8346
|
+
if (fromIsolated) {
|
|
8347
|
+
request['fromAccountSymbol'] = fromId;
|
|
8348
|
+
fromId = 'ISOLATED';
|
|
8349
|
+
}
|
|
8350
|
+
if (toIsolated) {
|
|
8351
|
+
request['toAccountSymbol'] = toId;
|
|
8352
|
+
toId = 'ISOLATED';
|
|
8353
|
+
}
|
|
8354
|
+
const utaAccountsByType = this.safeDict(this.options, 'utaAccountsByType', {});
|
|
8355
|
+
fromId = this.safeString(utaAccountsByType, fromId, fromId);
|
|
8356
|
+
toId = this.safeString(utaAccountsByType, toId, toId);
|
|
8357
|
+
request['fromAccountType'] = fromId.toUpperCase();
|
|
8358
|
+
request['toAccountType'] = toId.toUpperCase();
|
|
8359
|
+
const types = {
|
|
8360
|
+
'INTERNAL': '0',
|
|
8361
|
+
'PARENT_TO_SUB': '1',
|
|
8362
|
+
'SUB_TO_PARENT': '2',
|
|
8363
|
+
'SUB_TO_SUB': '3',
|
|
8364
|
+
};
|
|
8365
|
+
request['type'] = this.safeString(types, transferType, transferType);
|
|
8366
|
+
const response = await this.utaPrivatePostAccountTransfer(this.extend(request, params));
|
|
8367
|
+
//
|
|
8368
|
+
//
|
|
8369
|
+
const data = this.safeDict(response, 'data');
|
|
8370
|
+
const transfer = this.parseTransfer(data, currency);
|
|
8371
|
+
const transferOptions = this.safeDict(this.options, 'transfer', {});
|
|
8372
|
+
const fillResponseFromRequest = this.safeBool(transferOptions, 'fillResponseFromRequest', true);
|
|
8373
|
+
if (fillResponseFromRequest) {
|
|
8374
|
+
transfer['amount'] = amount;
|
|
8375
|
+
transfer['fromAccount'] = fromAccount;
|
|
8376
|
+
transfer['toAccount'] = toAccount;
|
|
8377
|
+
transfer['status'] = 'ok';
|
|
8378
|
+
}
|
|
8379
|
+
return transfer;
|
|
8380
|
+
}
|
|
8381
|
+
/**
|
|
8382
|
+
* @method
|
|
8383
|
+
* @name kucoin#transferClassic
|
|
8384
|
+
* @description transfer currency internally between wallets on the same account with classic endpoints
|
|
8385
|
+
* @see https://www.kucoin.com/docs-new/rest/account-info/transfer/flex-transfer?lang=en_US&
|
|
7111
8386
|
* @param {string} code unified currency code
|
|
7112
8387
|
* @param {float} amount amount to transfer
|
|
7113
8388
|
* @param {string} fromAccount account to transfer from
|
|
@@ -7118,7 +8393,7 @@ export default class kucoin extends Exchange {
|
|
|
7118
8393
|
* @param {string} [params.toUserId] required if transferType is PARENT_TO_SUB
|
|
7119
8394
|
* @returns {object} a [transfer structure]{@link https://docs.ccxt.com/?id=transfer-structure}
|
|
7120
8395
|
*/
|
|
7121
|
-
async
|
|
8396
|
+
async transferClassic(code, amount, fromAccount, toAccount, params = {}) {
|
|
7122
8397
|
await this.loadMarkets();
|
|
7123
8398
|
const currency = this.currency(code);
|
|
7124
8399
|
const requestedAmount = this.currencyToPrecision(code, amount);
|
|
@@ -7332,12 +8607,32 @@ export default class kucoin extends Exchange {
|
|
|
7332
8607
|
// 'Pool transactions': 'Pool transactions', // Pool-X transactions
|
|
7333
8608
|
'Instant Exchange': 'trade',
|
|
7334
8609
|
'Sub-account transfer': 'transfer',
|
|
7335
|
-
'Liquidation Fees': 'fee',
|
|
8610
|
+
'Liquidation Fees': 'fee',
|
|
7336
8611
|
// 'Soft Staking Profits': 'Soft Staking Profits', // Soft Staking Profits
|
|
7337
8612
|
// 'Voting Earnings': 'Voting Earnings', // Voting Earnings on Pool-X
|
|
7338
8613
|
// 'Redemption of Voting': 'Redemption of Voting', // Redemption of Voting on Pool-X
|
|
7339
8614
|
// 'Voting': 'Voting', // Voting on Pool-X
|
|
7340
8615
|
// 'Convert to KCS': 'Convert to KCS', // Convert to KCS
|
|
8616
|
+
'RealisedPNL': 'trade',
|
|
8617
|
+
'TransferIn': 'transfer',
|
|
8618
|
+
'TransferOut': 'transfer',
|
|
8619
|
+
'TRADE_EXCHANGE': 'trade',
|
|
8620
|
+
'TRANSFER': 'transfer',
|
|
8621
|
+
'SUB_TRANSFER': 'transfer',
|
|
8622
|
+
'RETURNED_FEES': 'fee',
|
|
8623
|
+
'DEDUCTION_FEES': 'fee',
|
|
8624
|
+
'OTHER': 'other',
|
|
8625
|
+
'SUB_TO_SUB_TRANSFER': 'transfer',
|
|
8626
|
+
'SPOT_EXCHANGE': 'trade',
|
|
8627
|
+
'SPOT_EXCHANGE_REBATE': 'rebate',
|
|
8628
|
+
'FUTURES_EXCHANGE_OPEN': 'trade',
|
|
8629
|
+
'FUTURES_EXCHANGE_CLOSE': 'trade',
|
|
8630
|
+
'FUTURES_EXCHANGE_REBATE': 'rebate',
|
|
8631
|
+
'FUNDING_FEE': 'fee',
|
|
8632
|
+
'LIABILITY_INTEREST': 'fee',
|
|
8633
|
+
'KCS_DEDUCTION_FEES': 'fee',
|
|
8634
|
+
'KCS_RETURNED_FEES': 'fee',
|
|
8635
|
+
'AUTO_EXCHANGE_USER': 'trade',
|
|
7341
8636
|
};
|
|
7342
8637
|
return this.safeString(types, type, type);
|
|
7343
8638
|
}
|
|
@@ -7347,6 +8642,8 @@ export default class kucoin extends Exchange {
|
|
|
7347
8642
|
'out': 'out',
|
|
7348
8643
|
'TransferIn': 'in',
|
|
7349
8644
|
'TransferOut': 'out',
|
|
8645
|
+
'IN': 'in',
|
|
8646
|
+
'OUT': 'out',
|
|
7350
8647
|
};
|
|
7351
8648
|
return this.safeString(directions, direction, direction);
|
|
7352
8649
|
}
|
|
@@ -7385,14 +8682,28 @@ export default class kucoin extends Exchange {
|
|
|
7385
8682
|
// "currency": "USDT"
|
|
7386
8683
|
// }
|
|
7387
8684
|
//
|
|
8685
|
+
// ledger entry from UTA API
|
|
8686
|
+
// {
|
|
8687
|
+
// "accountType": "UNIFIED",
|
|
8688
|
+
// "id": "30000000001200350",
|
|
8689
|
+
// "currency": "USDT",
|
|
8690
|
+
// "direction": "IN",
|
|
8691
|
+
// "businessType": "TRANSFER",
|
|
8692
|
+
// "amount": "30",
|
|
8693
|
+
// "balance": "30",
|
|
8694
|
+
// "fee": "0",
|
|
8695
|
+
// "tax": "0",
|
|
8696
|
+
// "remark": "Funding Account",
|
|
8697
|
+
// "ts": 1774241648267000000
|
|
8698
|
+
// }
|
|
8699
|
+
//
|
|
7388
8700
|
const id = this.safeString(item, 'id');
|
|
7389
8701
|
const currencyId = this.safeString(item, 'currency');
|
|
7390
8702
|
const code = this.safeCurrencyCode(currencyId, currency);
|
|
7391
8703
|
currency = this.safeCurrency(currencyId, currency);
|
|
7392
8704
|
const amount = this.safeString(item, 'amount');
|
|
7393
|
-
const balanceAfter =
|
|
7394
|
-
|
|
7395
|
-
const bizType = this.safeString(item, 'bizType');
|
|
8705
|
+
const balanceAfter = this.safeNumberOmitZero(item, 'balance');
|
|
8706
|
+
const bizType = this.safeStringN(item, ['bizType', 'businessType', 'type']);
|
|
7396
8707
|
const type = this.parseLedgerEntryType(bizType);
|
|
7397
8708
|
const direction = this.safeString2(item, 'direction', 'type');
|
|
7398
8709
|
let account = this.safeString(item, 'accountType'); // MAIN, TRADE, MARGIN, or CONTRACT
|
|
@@ -7402,6 +8713,9 @@ export default class kucoin extends Exchange {
|
|
|
7402
8713
|
if (timestamp !== undefined) {
|
|
7403
8714
|
account = 'CONTRACT'; // contract ledger entries do not have an accountType field, so we set it to CONTRACT if the time field is present
|
|
7404
8715
|
}
|
|
8716
|
+
else {
|
|
8717
|
+
timestamp = this.safeIntegerProduct(item, 'ts', 0.000001); // for UTA API
|
|
8718
|
+
}
|
|
7405
8719
|
}
|
|
7406
8720
|
const datetime = this.iso8601(timestamp);
|
|
7407
8721
|
const context = this.safeString(item, 'context'); // contains other information about the ledger entry
|
|
@@ -7470,6 +8784,7 @@ export default class kucoin extends Exchange {
|
|
|
7470
8784
|
* @see https://www.kucoin.com/docs-new/rest/account-info/account-funding/get-account-ledgers-tradehf
|
|
7471
8785
|
* @see https://www.kucoin.com/docs-new/rest/account-info/account-funding/get-account-ledgers-marginhf
|
|
7472
8786
|
* @see https://www.kucoin.com/docs-new/rest/account-info/account-funding/get-account-ledgers-futures
|
|
8787
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-account-ledger
|
|
7473
8788
|
* @param {string} [code] unified currency code, default is undefined
|
|
7474
8789
|
* @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined
|
|
7475
8790
|
* @param {int} [limit] max number of ledger entries to return, default is undefined
|
|
@@ -7477,18 +8792,50 @@ export default class kucoin extends Exchange {
|
|
|
7477
8792
|
* @param {object} [params.type] extra parameters specific to the exchange API endpoint
|
|
7478
8793
|
* @param {boolean} [params.hf] default false, when true will fetch ledger entries for the high frequency trading account
|
|
7479
8794
|
* @param {int} [params.until] the latest time in ms to fetch entries for
|
|
8795
|
+
* @param {boolean} [params.uta] default false, when true will fetch ledger entries for the unified trading account (UTA) instead of the regular accounts endpoint
|
|
7480
8796
|
* @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)
|
|
7481
8797
|
* @returns {object} a [ledger structure]{@link https://docs.ccxt.com/?id=ledger-entry-structure}
|
|
7482
8798
|
*/
|
|
7483
8799
|
async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
7484
8800
|
await this.loadMarkets();
|
|
7485
8801
|
await this.loadAccounts();
|
|
7486
|
-
let
|
|
7487
|
-
[
|
|
8802
|
+
let uta = await this.isUTAEnabled();
|
|
8803
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchLedger', 'uta', uta);
|
|
7488
8804
|
let hf = undefined;
|
|
7489
8805
|
[hf, params] = this.handleHfAndParams(params);
|
|
8806
|
+
let requestedType = undefined;
|
|
8807
|
+
[requestedType, params] = this.handleMarketTypeAndParams('fetchLedger', undefined, params);
|
|
8808
|
+
let marginMode = undefined;
|
|
8809
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchLedger', params);
|
|
8810
|
+
if (uta && (requestedType === 'margin')) {
|
|
8811
|
+
marginMode = (marginMode === undefined) ? 'cross' : marginMode; // default to cross margin for UTA if margin is requested but marginMode is not specified
|
|
8812
|
+
requestedType = marginMode;
|
|
8813
|
+
}
|
|
8814
|
+
let accountsByType = this.safeDict(this.options, 'accountsByType');
|
|
8815
|
+
if (uta) {
|
|
8816
|
+
accountsByType = this.safeDict(this.options, 'utaAccountsByType');
|
|
8817
|
+
}
|
|
8818
|
+
let type = undefined;
|
|
8819
|
+
type = this.safeString(accountsByType, requestedType, requestedType);
|
|
8820
|
+
let maxLimit = 500; // for spot non-uta and margin
|
|
8821
|
+
if (hf) {
|
|
8822
|
+
maxLimit = 200;
|
|
8823
|
+
}
|
|
8824
|
+
else if (type === 'contract') {
|
|
8825
|
+
maxLimit = 50;
|
|
8826
|
+
}
|
|
8827
|
+
else if (uta) {
|
|
8828
|
+
if ((type === 'UNIFIED') || (type === 'SPOT')) {
|
|
8829
|
+
maxLimit = 200;
|
|
8830
|
+
}
|
|
8831
|
+
else if (type === 'FUTURES') {
|
|
8832
|
+
maxLimit = 100;
|
|
8833
|
+
}
|
|
8834
|
+
}
|
|
8835
|
+
let paginate = false;
|
|
8836
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchLedger', 'paginate');
|
|
7490
8837
|
if (paginate) {
|
|
7491
|
-
return await this.fetchPaginatedCallDynamic('fetchLedger', code, since, limit, params);
|
|
8838
|
+
return await this.fetchPaginatedCallDynamic('fetchLedger', code, since, limit, params, maxLimit);
|
|
7492
8839
|
}
|
|
7493
8840
|
let request = {
|
|
7494
8841
|
// 'currency': currency['id'], // can choose up to 10, if not provided returns for all currencies by default
|
|
@@ -7507,14 +8854,23 @@ export default class kucoin extends Exchange {
|
|
|
7507
8854
|
request['currency'] = currency['id'];
|
|
7508
8855
|
}
|
|
7509
8856
|
[request, params] = this.handleUntilOption('endAt', request, params);
|
|
7510
|
-
|
|
7511
|
-
|
|
7512
|
-
|
|
7513
|
-
|
|
7514
|
-
|
|
7515
|
-
|
|
8857
|
+
if (limit !== undefined) {
|
|
8858
|
+
if (type === 'contract') {
|
|
8859
|
+
request['maxCount'] = limit;
|
|
8860
|
+
}
|
|
8861
|
+
else if (hf) {
|
|
8862
|
+
request['limit'] = limit;
|
|
8863
|
+
}
|
|
8864
|
+
else {
|
|
8865
|
+
request['pageSize'] = limit;
|
|
8866
|
+
}
|
|
8867
|
+
}
|
|
7516
8868
|
let response = undefined;
|
|
7517
|
-
if (
|
|
8869
|
+
if (uta) {
|
|
8870
|
+
request['accountType'] = type;
|
|
8871
|
+
response = await this.utaPrivateGetAccountLedger(this.extend(request, params));
|
|
8872
|
+
}
|
|
8873
|
+
else if (hf) {
|
|
7518
8874
|
if (marginMode !== undefined) {
|
|
7519
8875
|
response = await this.privateGetHfMarginAccountLedgers(this.extend(request, params));
|
|
7520
8876
|
}
|
|
@@ -7756,12 +9112,14 @@ export default class kucoin extends Exchange {
|
|
|
7756
9112
|
// Cross
|
|
7757
9113
|
//
|
|
7758
9114
|
// {
|
|
7759
|
-
// "currency": "
|
|
7760
|
-
// "total": "
|
|
7761
|
-
// "available": "
|
|
9115
|
+
// "currency": "DOGE",
|
|
9116
|
+
// "total": "119.99995308",
|
|
9117
|
+
// "available": "119.99995308",
|
|
7762
9118
|
// "hold": "0",
|
|
7763
|
-
// "liability": "
|
|
7764
|
-
// "
|
|
9119
|
+
// "liability": "10.00004692",
|
|
9120
|
+
// "liabilityPrincipal": "10",
|
|
9121
|
+
// "liabilityInterest": "0.00004692",
|
|
9122
|
+
// "maxBorrowSize": "1140",
|
|
7765
9123
|
// "borrowEnabled": true,
|
|
7766
9124
|
// "transferInEnabled": true
|
|
7767
9125
|
// }
|
|
@@ -7769,30 +9127,32 @@ export default class kucoin extends Exchange {
|
|
|
7769
9127
|
// Isolated
|
|
7770
9128
|
//
|
|
7771
9129
|
// {
|
|
7772
|
-
// "symbol": "
|
|
7773
|
-
// "
|
|
7774
|
-
// "
|
|
9130
|
+
// "symbol": "DOGE-USDT",
|
|
9131
|
+
// "status": "EFFECTIVE",
|
|
9132
|
+
// "debtRatio": "0.0822",
|
|
7775
9133
|
// "baseAsset": {
|
|
7776
|
-
// "currency": "
|
|
9134
|
+
// "currency": "DOGE",
|
|
7777
9135
|
// "borrowEnabled": true,
|
|
7778
|
-
// "
|
|
7779
|
-
// "
|
|
7780
|
-
// "
|
|
7781
|
-
// "
|
|
7782
|
-
// "
|
|
9136
|
+
// "transferInEnabled": true,
|
|
9137
|
+
// "liability": "10.00009385",
|
|
9138
|
+
// "liabilityPrincipal": "10.00004692",
|
|
9139
|
+
// "liabilityInterest": "0.00004693",
|
|
9140
|
+
// "total": "10",
|
|
9141
|
+
// "available": "10",
|
|
7783
9142
|
// "hold": "0",
|
|
7784
|
-
// "maxBorrowSize": "
|
|
9143
|
+
// "maxBorrowSize": "990"
|
|
7785
9144
|
// },
|
|
7786
9145
|
// "quoteAsset": {
|
|
7787
9146
|
// "currency": "USDT",
|
|
7788
9147
|
// "borrowEnabled": true,
|
|
7789
|
-
// "
|
|
7790
|
-
// "
|
|
7791
|
-
// "
|
|
7792
|
-
// "
|
|
7793
|
-
// "
|
|
9148
|
+
// "transferInEnabled": true,
|
|
9149
|
+
// "liability": "0",
|
|
9150
|
+
// "liabilityPrincipal": "0",
|
|
9151
|
+
// "liabilityInterest": "0",
|
|
9152
|
+
// "total": "10",
|
|
9153
|
+
// "available": "10",
|
|
7794
9154
|
// "hold": "0",
|
|
7795
|
-
// "maxBorrowSize": "
|
|
9155
|
+
// "maxBorrowSize": "89"
|
|
7796
9156
|
// }
|
|
7797
9157
|
// }
|
|
7798
9158
|
//
|
|
@@ -7800,19 +9160,18 @@ export default class kucoin extends Exchange {
|
|
|
7800
9160
|
const marginMode = (marketId === undefined) ? 'cross' : 'isolated';
|
|
7801
9161
|
market = this.safeMarket(marketId, market);
|
|
7802
9162
|
const symbol = this.safeString(market, 'symbol');
|
|
7803
|
-
const timestamp = this.safeInteger(info, 'createdAt');
|
|
7804
9163
|
const isolatedBase = this.safeDict(info, 'baseAsset', {});
|
|
7805
9164
|
let amountBorrowed = undefined;
|
|
7806
9165
|
let interest = undefined;
|
|
7807
9166
|
let currencyId = undefined;
|
|
7808
9167
|
if (marginMode === 'isolated') {
|
|
7809
|
-
amountBorrowed = this.safeNumber(isolatedBase, '
|
|
7810
|
-
interest = this.safeNumber(isolatedBase, '
|
|
9168
|
+
amountBorrowed = this.safeNumber(isolatedBase, 'liabilityPrincipal');
|
|
9169
|
+
interest = this.safeNumber(isolatedBase, 'liabilityInterest');
|
|
7811
9170
|
currencyId = this.safeString(isolatedBase, 'currency');
|
|
7812
9171
|
}
|
|
7813
9172
|
else {
|
|
7814
|
-
amountBorrowed = this.safeNumber(info, '
|
|
7815
|
-
interest = this.safeNumber(info, '
|
|
9173
|
+
amountBorrowed = this.safeNumber(info, 'liabilityPrincipal');
|
|
9174
|
+
interest = this.safeNumber(info, 'liabilityInterest');
|
|
7816
9175
|
currencyId = this.safeString(info, 'currency');
|
|
7817
9176
|
}
|
|
7818
9177
|
return {
|
|
@@ -7823,8 +9182,8 @@ export default class kucoin extends Exchange {
|
|
|
7823
9182
|
'interestRate': this.safeNumber(info, 'dailyIntRate'),
|
|
7824
9183
|
'amountBorrowed': amountBorrowed,
|
|
7825
9184
|
'marginMode': marginMode,
|
|
7826
|
-
'timestamp':
|
|
7827
|
-
'datetime':
|
|
9185
|
+
'timestamp': undefined,
|
|
9186
|
+
'datetime': undefined,
|
|
7828
9187
|
};
|
|
7829
9188
|
}
|
|
7830
9189
|
/**
|
|
@@ -8207,9 +9566,11 @@ export default class kucoin extends Exchange {
|
|
|
8207
9566
|
* @description set the level of leverage for a market
|
|
8208
9567
|
* @see https://www.kucoin.com/docs-new/rest/margin-trading/debit/modify-leverage
|
|
8209
9568
|
* @see https://www.kucoin.com/docs-new/rest/futures-trading/positions/modify-cross-margin-leverage
|
|
9569
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/modify-leverage-uta
|
|
8210
9570
|
* @param {int } [leverage] New leverage multiplier. Must be greater than 1 and up to two decimal places, and cannot be less than the user's current debt leverage or greater than the system's maximum leverage
|
|
8211
9571
|
* @param {string} [symbol] unified market symbol
|
|
8212
9572
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
9573
|
+
* @param {boolean} [params.uta] *contract markets only* set to true for the unified trading account (uta)
|
|
8213
9574
|
* @returns {object} response from the exchange
|
|
8214
9575
|
*/
|
|
8215
9576
|
async setLeverage(leverage, symbol = undefined, params = {}) {
|
|
@@ -8218,11 +9579,19 @@ export default class kucoin extends Exchange {
|
|
|
8218
9579
|
let marketType = undefined;
|
|
8219
9580
|
[marketType, params] = this.handleMarketTypeAndParams('setLeverage', undefined, params);
|
|
8220
9581
|
if ((symbol !== undefined) || ((marketType !== 'spot') && (marketType !== 'margin'))) {
|
|
9582
|
+
if (symbol === undefined) {
|
|
9583
|
+
throw new ArgumentsRequired(this.id + ' setLeverage requires a symbol argument for contract markets');
|
|
9584
|
+
}
|
|
8221
9585
|
market = this.market(symbol);
|
|
8222
9586
|
if (market['contract']) {
|
|
8223
9587
|
return await this.setContractLeverage(leverage, symbol, params);
|
|
8224
9588
|
}
|
|
8225
9589
|
}
|
|
9590
|
+
let uta = await this.isUTAEnabled();
|
|
9591
|
+
[uta, params] = this.handleOptionAndParams(params, 'setLeverage', 'uta', uta);
|
|
9592
|
+
if (uta) {
|
|
9593
|
+
throw new NotSupported(this.id + ' setLeverage with params["uta"] is supported for contract markets only');
|
|
9594
|
+
}
|
|
8226
9595
|
let marginMode = undefined;
|
|
8227
9596
|
[marginMode, params] = this.handleMarginModeAndParams('setLeverage', params);
|
|
8228
9597
|
if (marginMode === undefined) {
|
|
@@ -8244,15 +9613,17 @@ export default class kucoin extends Exchange {
|
|
|
8244
9613
|
* @name kucoin#setContractLeverage
|
|
8245
9614
|
* @description set the level of leverage for a market
|
|
8246
9615
|
* @see https://www.kucoin.com/docs-new/rest/futures-trading/positions/modify-cross-margin-leverage
|
|
9616
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/modify-leverage-uta
|
|
8247
9617
|
* @param {float} leverage the rate of leverage
|
|
8248
9618
|
* @param {string} symbol unified market symbol
|
|
8249
9619
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
9620
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta)
|
|
8250
9621
|
* @returns {object} response from the exchange
|
|
8251
9622
|
*/
|
|
8252
9623
|
async setContractLeverage(leverage, symbol = undefined, params = {}) {
|
|
8253
9624
|
let marginMode = undefined;
|
|
8254
9625
|
[marginMode, params] = this.handleMarginModeAndParams(symbol, params);
|
|
8255
|
-
if (marginMode !== 'cross') {
|
|
9626
|
+
if ((marginMode !== undefined) && (marginMode !== 'cross')) {
|
|
8256
9627
|
throw new NotSupported(this.id + ' setLeverage() currently supports only params["marginMode"] = "cross" for contracts');
|
|
8257
9628
|
}
|
|
8258
9629
|
await this.loadMarkets();
|
|
@@ -8261,14 +9632,24 @@ export default class kucoin extends Exchange {
|
|
|
8261
9632
|
'symbol': market['id'],
|
|
8262
9633
|
'leverage': leverage.toString(),
|
|
8263
9634
|
};
|
|
8264
|
-
|
|
8265
|
-
|
|
8266
|
-
|
|
8267
|
-
|
|
8268
|
-
|
|
8269
|
-
|
|
8270
|
-
|
|
8271
|
-
|
|
9635
|
+
let uta = await this.isUTAEnabled();
|
|
9636
|
+
[uta, params] = this.handleOptionAndParams(params, 'setLeverage', 'uta', uta);
|
|
9637
|
+
let response = undefined;
|
|
9638
|
+
if (uta) {
|
|
9639
|
+
request['accountMode'] = 'unified';
|
|
9640
|
+
response = await this.utaPrivatePostAccountModeAccountModifyLeverage(this.extend(request, params));
|
|
9641
|
+
}
|
|
9642
|
+
else {
|
|
9643
|
+
//
|
|
9644
|
+
// {
|
|
9645
|
+
// "code": "200000",
|
|
9646
|
+
// "data": true
|
|
9647
|
+
// }
|
|
9648
|
+
//
|
|
9649
|
+
response = await this.futuresPrivatePostChangeCrossUserLeverage(this.extend(request, params));
|
|
9650
|
+
}
|
|
9651
|
+
const data = this.safeDict(response, 'data', {});
|
|
9652
|
+
const leverageNum = this.safeNumber(data, 'leverage');
|
|
8272
9653
|
return {
|
|
8273
9654
|
'info': response,
|
|
8274
9655
|
'symbol': market['symbol'],
|
|
@@ -8427,7 +9808,7 @@ export default class kucoin extends Exchange {
|
|
|
8427
9808
|
'symbol': market['id'],
|
|
8428
9809
|
};
|
|
8429
9810
|
const until = this.safeInteger(params, 'until');
|
|
8430
|
-
let uta =
|
|
9811
|
+
let uta = false;
|
|
8431
9812
|
[uta, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'uta', uta);
|
|
8432
9813
|
params = this.omit(params, 'until');
|
|
8433
9814
|
let start = since;
|
|
@@ -8582,9 +9963,11 @@ export default class kucoin extends Exchange {
|
|
|
8582
9963
|
* @method
|
|
8583
9964
|
* @name kucoin#fetchPosition
|
|
8584
9965
|
* @see https://www.kucoin.com/docs-new/rest/futures-trading/positions/get-position-details
|
|
9966
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-position-list-uta
|
|
8585
9967
|
* @description fetch data on an open position
|
|
8586
9968
|
* @param {string} symbol unified market symbol of the market the position is held in
|
|
8587
9969
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
9970
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
8588
9971
|
* @returns {object} a [position structure]{@link https://docs.ccxt.com/?id=position-structure}
|
|
8589
9972
|
*/
|
|
8590
9973
|
async fetchPosition(symbol, params = {}) {
|
|
@@ -8593,112 +9976,157 @@ export default class kucoin extends Exchange {
|
|
|
8593
9976
|
const request = {
|
|
8594
9977
|
'symbol': market['id'],
|
|
8595
9978
|
};
|
|
8596
|
-
|
|
8597
|
-
|
|
8598
|
-
|
|
8599
|
-
|
|
8600
|
-
|
|
8601
|
-
|
|
8602
|
-
|
|
8603
|
-
|
|
8604
|
-
|
|
8605
|
-
|
|
8606
|
-
|
|
8607
|
-
|
|
8608
|
-
|
|
8609
|
-
|
|
8610
|
-
|
|
8611
|
-
|
|
8612
|
-
|
|
8613
|
-
|
|
8614
|
-
|
|
8615
|
-
|
|
8616
|
-
|
|
8617
|
-
|
|
8618
|
-
|
|
8619
|
-
|
|
8620
|
-
|
|
8621
|
-
|
|
8622
|
-
|
|
8623
|
-
|
|
8624
|
-
|
|
8625
|
-
|
|
8626
|
-
|
|
8627
|
-
|
|
8628
|
-
|
|
8629
|
-
|
|
8630
|
-
|
|
8631
|
-
|
|
8632
|
-
|
|
8633
|
-
|
|
8634
|
-
|
|
8635
|
-
|
|
8636
|
-
|
|
8637
|
-
|
|
8638
|
-
|
|
8639
|
-
|
|
8640
|
-
|
|
8641
|
-
|
|
8642
|
-
|
|
9979
|
+
let uta = await this.isUTAEnabled();
|
|
9980
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchPosition', 'uta', uta);
|
|
9981
|
+
let response = undefined;
|
|
9982
|
+
let position = undefined;
|
|
9983
|
+
if (uta) {
|
|
9984
|
+
request['accountMode'] = 'unified';
|
|
9985
|
+
response = await this.utaPrivateGetAccountModePositionOpenList(this.extend(request, params));
|
|
9986
|
+
//
|
|
9987
|
+
// {
|
|
9988
|
+
// "code": "200000",
|
|
9989
|
+
// "data": [
|
|
9990
|
+
// {
|
|
9991
|
+
// "symbol": "DOGEUSDTM",
|
|
9992
|
+
// "id": "30000000000084351",
|
|
9993
|
+
// "marginMode": "CROSS",
|
|
9994
|
+
// "size": "2",
|
|
9995
|
+
// "entryPrice": "0.093795",
|
|
9996
|
+
// "positionValue": "18.298",
|
|
9997
|
+
// "markPrice": "0.09149",
|
|
9998
|
+
// "leverage": "3",
|
|
9999
|
+
// "unrealizedPnL": "-0.461",
|
|
10000
|
+
// "realizedPnL": "-0.01122489",
|
|
10001
|
+
// "initialMargin": "6.0993333327234",
|
|
10002
|
+
// "mmr": "0.007",
|
|
10003
|
+
// "maintenanceMargin": "0.128086",
|
|
10004
|
+
// "creationTime": 1774469753178000000
|
|
10005
|
+
// }
|
|
10006
|
+
// ]
|
|
10007
|
+
// }
|
|
10008
|
+
//
|
|
10009
|
+
const data = this.safeList(response, 'data', []);
|
|
10010
|
+
position = this.safeDict(data, 0, {});
|
|
10011
|
+
}
|
|
10012
|
+
else {
|
|
10013
|
+
response = await this.futuresPrivateGetPosition(this.extend(request, params));
|
|
10014
|
+
//
|
|
10015
|
+
// {
|
|
10016
|
+
// "code": "200000",
|
|
10017
|
+
// "data": {
|
|
10018
|
+
// "id": "6505ee6eaff4070001f651c4",
|
|
10019
|
+
// "symbol": "XBTUSDTM",
|
|
10020
|
+
// "autoDeposit": false,
|
|
10021
|
+
// "maintMarginReq": 0,
|
|
10022
|
+
// "riskLimit": 200,
|
|
10023
|
+
// "realLeverage": 0.0,
|
|
10024
|
+
// "crossMode": false,
|
|
10025
|
+
// "delevPercentage": 0.0,
|
|
10026
|
+
// "currentTimestamp": 1694887534594,
|
|
10027
|
+
// "currentQty": 0,
|
|
10028
|
+
// "currentCost": 0.0,
|
|
10029
|
+
// "currentComm": 0.0,
|
|
10030
|
+
// "unrealisedCost": 0.0,
|
|
10031
|
+
// "realisedGrossCost": 0.0,
|
|
10032
|
+
// "realisedCost": 0.0,
|
|
10033
|
+
// "isOpen": false,
|
|
10034
|
+
// "markPrice": 26611.71,
|
|
10035
|
+
// "markValue": 0.0,
|
|
10036
|
+
// "posCost": 0.0,
|
|
10037
|
+
// "posCross": 0,
|
|
10038
|
+
// "posInit": 0.0,
|
|
10039
|
+
// "posComm": 0.0,
|
|
10040
|
+
// "posLoss": 0.0,
|
|
10041
|
+
// "posMargin": 0.0,
|
|
10042
|
+
// "posMaint": 0.0,
|
|
10043
|
+
// "maintMargin": 0.0,
|
|
10044
|
+
// "realisedGrossPnl": 0.0,
|
|
10045
|
+
// "realisedPnl": 0.0,
|
|
10046
|
+
// "unrealisedPnl": 0.0,
|
|
10047
|
+
// "unrealisedPnlPcnt": 0,
|
|
10048
|
+
// "unrealisedRoePcnt": 0,
|
|
10049
|
+
// "avgEntryPrice": 0.0,
|
|
10050
|
+
// "liquidationPrice": 0.0,
|
|
10051
|
+
// "bankruptPrice": 0.0,
|
|
10052
|
+
// "settleCurrency": "USDT",
|
|
10053
|
+
// "maintainMargin": 0,
|
|
10054
|
+
// "riskLimitLevel": 1
|
|
10055
|
+
// }
|
|
10056
|
+
// }
|
|
10057
|
+
//
|
|
10058
|
+
position = this.safeDict(response, 'data', {});
|
|
10059
|
+
}
|
|
10060
|
+
return this.parsePosition(position, market);
|
|
8643
10061
|
}
|
|
8644
10062
|
/**
|
|
8645
10063
|
* @method
|
|
8646
10064
|
* @name kucoin#fetchPositions
|
|
8647
10065
|
* @description fetch all open positions
|
|
8648
10066
|
* @see https://www.kucoin.com/docs-new/rest/futures-trading/positions/get-position-list
|
|
10067
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-position-list-uta
|
|
8649
10068
|
* @param {string[]|undefined} symbols list of unified market symbols
|
|
8650
10069
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
10070
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
8651
10071
|
* @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/?id=position-structure}
|
|
8652
10072
|
*/
|
|
8653
10073
|
async fetchPositions(symbols = undefined, params = {}) {
|
|
8654
10074
|
await this.loadMarkets();
|
|
8655
|
-
|
|
8656
|
-
|
|
8657
|
-
|
|
8658
|
-
|
|
8659
|
-
|
|
8660
|
-
|
|
8661
|
-
|
|
8662
|
-
|
|
8663
|
-
|
|
8664
|
-
|
|
8665
|
-
|
|
8666
|
-
|
|
8667
|
-
|
|
8668
|
-
|
|
8669
|
-
|
|
8670
|
-
|
|
8671
|
-
|
|
8672
|
-
|
|
8673
|
-
|
|
8674
|
-
|
|
8675
|
-
|
|
8676
|
-
|
|
8677
|
-
|
|
8678
|
-
|
|
8679
|
-
|
|
8680
|
-
|
|
8681
|
-
|
|
8682
|
-
|
|
8683
|
-
|
|
8684
|
-
|
|
8685
|
-
|
|
8686
|
-
|
|
8687
|
-
|
|
8688
|
-
|
|
8689
|
-
|
|
8690
|
-
|
|
8691
|
-
|
|
8692
|
-
|
|
8693
|
-
|
|
8694
|
-
|
|
8695
|
-
|
|
8696
|
-
|
|
8697
|
-
|
|
8698
|
-
|
|
8699
|
-
|
|
8700
|
-
|
|
8701
|
-
|
|
10075
|
+
let uta = await this.isUTAEnabled();
|
|
10076
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchPositions', 'uta', uta);
|
|
10077
|
+
let response = undefined;
|
|
10078
|
+
if (uta) {
|
|
10079
|
+
response = await this.utaPrivateGetAccountModePositionOpenList(this.extend(params, { 'accountMode': 'unified' }));
|
|
10080
|
+
}
|
|
10081
|
+
else {
|
|
10082
|
+
response = await this.futuresPrivateGetPositions(params);
|
|
10083
|
+
//
|
|
10084
|
+
// {
|
|
10085
|
+
// "code": "200000",
|
|
10086
|
+
// "data": [
|
|
10087
|
+
// {
|
|
10088
|
+
// "id": "615ba79f83a3410001cde321",
|
|
10089
|
+
// "symbol": "ETHUSDTM",
|
|
10090
|
+
// "autoDeposit": false,
|
|
10091
|
+
// "maintMarginReq": 0.005,
|
|
10092
|
+
// "riskLimit": 1000000,
|
|
10093
|
+
// "realLeverage": 18.61,
|
|
10094
|
+
// "crossMode": false,
|
|
10095
|
+
// "delevPercentage": 0.86,
|
|
10096
|
+
// "openingTimestamp": 1638563515618,
|
|
10097
|
+
// "currentTimestamp": 1638576872774,
|
|
10098
|
+
// "currentQty": 2,
|
|
10099
|
+
// "currentCost": 83.64200000,
|
|
10100
|
+
// "currentComm": 0.05018520,
|
|
10101
|
+
// "unrealisedCost": 83.64200000,
|
|
10102
|
+
// "realisedGrossCost": 0.00000000,
|
|
10103
|
+
// "realisedCost": 0.05018520,
|
|
10104
|
+
// "isOpen": true,
|
|
10105
|
+
// "markPrice": 4225.01,
|
|
10106
|
+
// "markValue": 84.50020000,
|
|
10107
|
+
// "posCost": 83.64200000,
|
|
10108
|
+
// "posCross": 0.0000000000,
|
|
10109
|
+
// "posInit": 3.63660870,
|
|
10110
|
+
// "posComm": 0.05236717,
|
|
10111
|
+
// "posLoss": 0.00000000,
|
|
10112
|
+
// "posMargin": 3.68897586,
|
|
10113
|
+
// "posMaint": 0.50637594,
|
|
10114
|
+
// "maintMargin": 4.54717586,
|
|
10115
|
+
// "realisedGrossPnl": 0.00000000,
|
|
10116
|
+
// "realisedPnl": -0.05018520,
|
|
10117
|
+
// "unrealisedPnl": 0.85820000,
|
|
10118
|
+
// "unrealisedPnlPcnt": 0.0103,
|
|
10119
|
+
// "unrealisedRoePcnt": 0.2360,
|
|
10120
|
+
// "avgEntryPrice": 4182.10,
|
|
10121
|
+
// "liquidationPrice": 4023.00,
|
|
10122
|
+
// "bankruptPrice": 4000.25,
|
|
10123
|
+
// "settleCurrency": "USDT",
|
|
10124
|
+
// "isInverse": false
|
|
10125
|
+
// }
|
|
10126
|
+
// ]
|
|
10127
|
+
// }
|
|
10128
|
+
//
|
|
10129
|
+
}
|
|
8702
10130
|
const data = this.safeList(response, 'data');
|
|
8703
10131
|
return this.parsePositions(data, symbols);
|
|
8704
10132
|
}
|
|
@@ -8707,69 +10135,120 @@ export default class kucoin extends Exchange {
|
|
|
8707
10135
|
* @name kucoin#fetchPositionsHistory
|
|
8708
10136
|
* @description fetches historical positions
|
|
8709
10137
|
* @see https://www.kucoin.com/docs-new/rest/futures-trading/positions/get-positions-history
|
|
10138
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-position-history-uta
|
|
8710
10139
|
* @param {string[]} [symbols] list of unified market symbols
|
|
8711
10140
|
* @param {int} [since] the earliest time in ms to fetch position history for
|
|
8712
10141
|
* @param {int} [limit] the maximum number of entries to retrieve
|
|
8713
10142
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
8714
10143
|
* @param {int} [params.until] closing end time
|
|
8715
10144
|
* @param {int} [params.pageId] page id
|
|
10145
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
|
|
8716
10146
|
* @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/?id=position-structure}
|
|
8717
10147
|
*/
|
|
8718
10148
|
async fetchPositionsHistory(symbols = undefined, since = undefined, limit = undefined, params = {}) {
|
|
8719
10149
|
await this.loadMarkets();
|
|
8720
|
-
|
|
8721
|
-
|
|
10150
|
+
let uta = await this.isUTAEnabled();
|
|
10151
|
+
[uta, params] = this.handleOptionAndParams(params, 'fetchPositionsHistory', 'uta', uta);
|
|
10152
|
+
let response = undefined;
|
|
10153
|
+
let request = {};
|
|
10154
|
+
symbols = this.marketSymbols(symbols);
|
|
10155
|
+
if (symbols !== undefined) {
|
|
10156
|
+
const length = symbols.length;
|
|
10157
|
+
if (length === 1) {
|
|
10158
|
+
const market = this.market(symbols[0]);
|
|
10159
|
+
request['symbol'] = market['id'];
|
|
10160
|
+
}
|
|
8722
10161
|
}
|
|
8723
|
-
|
|
8724
|
-
|
|
8725
|
-
|
|
8726
|
-
|
|
8727
|
-
|
|
10162
|
+
if (uta) {
|
|
10163
|
+
if (since !== undefined) {
|
|
10164
|
+
request['startAt'] = since;
|
|
10165
|
+
}
|
|
10166
|
+
if (limit !== undefined) {
|
|
10167
|
+
request['pageSize'] = limit;
|
|
10168
|
+
}
|
|
10169
|
+
[request, params] = this.handleUntilOption('endAt', request, params);
|
|
10170
|
+
//
|
|
10171
|
+
// {
|
|
10172
|
+
// "code": "200000",
|
|
10173
|
+
// "data": {
|
|
10174
|
+
// "items": [
|
|
10175
|
+
// {
|
|
10176
|
+
// "symbol": "DOGEUSDTM",
|
|
10177
|
+
// "closeId": "30000000000162175",
|
|
10178
|
+
// "marginMode": "CROSS",
|
|
10179
|
+
// "side": "LONG",
|
|
10180
|
+
// "entryPrice": "0.09641",
|
|
10181
|
+
// "closePrice": "0.09613",
|
|
10182
|
+
// "maxSize": "1",
|
|
10183
|
+
// "avgClosePrice": "0.09613",
|
|
10184
|
+
// "leverage": "3",
|
|
10185
|
+
// "realizedPnL": "-0.0395524",
|
|
10186
|
+
// "fee": "0.0115524",
|
|
10187
|
+
// "tax": "0",
|
|
10188
|
+
// "fundingFee": "0",
|
|
10189
|
+
// "closingTime": 1774469647311000000,
|
|
10190
|
+
// "creationTime": 1774468501294000000
|
|
10191
|
+
// }
|
|
10192
|
+
// ],
|
|
10193
|
+
// "lastId": 30000000000162175
|
|
10194
|
+
// }
|
|
10195
|
+
// }
|
|
10196
|
+
//
|
|
10197
|
+
response = await this.utaPrivateGetPositionHistory(this.extend(request, params));
|
|
8728
10198
|
}
|
|
8729
|
-
|
|
8730
|
-
|
|
8731
|
-
|
|
8732
|
-
|
|
10199
|
+
else {
|
|
10200
|
+
if (limit === undefined) {
|
|
10201
|
+
limit = 200;
|
|
10202
|
+
}
|
|
10203
|
+
request['limit'] = limit;
|
|
10204
|
+
if (since !== undefined) {
|
|
10205
|
+
request['from'] = since;
|
|
10206
|
+
}
|
|
10207
|
+
const until = this.safeInteger(params, 'until');
|
|
10208
|
+
if (until !== undefined) {
|
|
10209
|
+
params = this.omit(params, 'until');
|
|
10210
|
+
request['to'] = until;
|
|
10211
|
+
}
|
|
10212
|
+
//
|
|
10213
|
+
// {
|
|
10214
|
+
// "success": true,
|
|
10215
|
+
// "code": "200",
|
|
10216
|
+
// "msg": "success",
|
|
10217
|
+
// "retry": false,
|
|
10218
|
+
// "data": {
|
|
10219
|
+
// "currentPage": 1,
|
|
10220
|
+
// "pageSize": 10,
|
|
10221
|
+
// "totalNum": 25,
|
|
10222
|
+
// "totalPage": 3,
|
|
10223
|
+
// "items": [
|
|
10224
|
+
// {
|
|
10225
|
+
// "closeId": "300000000000000030",
|
|
10226
|
+
// "positionId": "300000000000000009",
|
|
10227
|
+
// "uid": 99996908309485,
|
|
10228
|
+
// "userId": "6527d4fc8c7f3d0001f40f5f",
|
|
10229
|
+
// "symbol": "XBTUSDM",
|
|
10230
|
+
// "settleCurrency": "XBT",
|
|
10231
|
+
// "leverage": "0.0",
|
|
10232
|
+
// "type": "LIQUID_LONG",
|
|
10233
|
+
// "side": null,
|
|
10234
|
+
// "closeSize": null,
|
|
10235
|
+
// "pnl": "-1.0000003793999999",
|
|
10236
|
+
// "realisedGrossCost": "0.9993849748999999",
|
|
10237
|
+
// "withdrawPnl": "0.0",
|
|
10238
|
+
// "roe": null,
|
|
10239
|
+
// "tradeFee": "0.0006154045",
|
|
10240
|
+
// "fundingFee": "0.0",
|
|
10241
|
+
// "openTime": 1713785751181,
|
|
10242
|
+
// "closeTime": 1713785752784,
|
|
10243
|
+
// "openPrice": null,
|
|
10244
|
+
// "closePrice": null
|
|
10245
|
+
// }
|
|
10246
|
+
// ]
|
|
10247
|
+
// }
|
|
10248
|
+
// }
|
|
10249
|
+
//
|
|
10250
|
+
response = await this.futuresPrivateGetHistoryPositions(this.extend(request, params));
|
|
8733
10251
|
}
|
|
8734
|
-
const response = await this.futuresPrivateGetHistoryPositions(this.extend(request, params));
|
|
8735
|
-
//
|
|
8736
|
-
// {
|
|
8737
|
-
// "success": true,
|
|
8738
|
-
// "code": "200",
|
|
8739
|
-
// "msg": "success",
|
|
8740
|
-
// "retry": false,
|
|
8741
|
-
// "data": {
|
|
8742
|
-
// "currentPage": 1,
|
|
8743
|
-
// "pageSize": 10,
|
|
8744
|
-
// "totalNum": 25,
|
|
8745
|
-
// "totalPage": 3,
|
|
8746
|
-
// "items": [
|
|
8747
|
-
// {
|
|
8748
|
-
// "closeId": "300000000000000030",
|
|
8749
|
-
// "positionId": "300000000000000009",
|
|
8750
|
-
// "uid": 99996908309485,
|
|
8751
|
-
// "userId": "6527d4fc8c7f3d0001f40f5f",
|
|
8752
|
-
// "symbol": "XBTUSDM",
|
|
8753
|
-
// "settleCurrency": "XBT",
|
|
8754
|
-
// "leverage": "0.0",
|
|
8755
|
-
// "type": "LIQUID_LONG",
|
|
8756
|
-
// "side": null,
|
|
8757
|
-
// "closeSize": null,
|
|
8758
|
-
// "pnl": "-1.0000003793999999",
|
|
8759
|
-
// "realisedGrossCost": "0.9993849748999999",
|
|
8760
|
-
// "withdrawPnl": "0.0",
|
|
8761
|
-
// "roe": null,
|
|
8762
|
-
// "tradeFee": "0.0006154045",
|
|
8763
|
-
// "fundingFee": "0.0",
|
|
8764
|
-
// "openTime": 1713785751181,
|
|
8765
|
-
// "closeTime": 1713785752784,
|
|
8766
|
-
// "openPrice": null,
|
|
8767
|
-
// "closePrice": null
|
|
8768
|
-
// }
|
|
8769
|
-
// ]
|
|
8770
|
-
// }
|
|
8771
|
-
// }
|
|
8772
|
-
//
|
|
8773
10252
|
const data = this.safeDict(response, 'data');
|
|
8774
10253
|
const items = this.safeList(data, 'items', []);
|
|
8775
10254
|
return this.parsePositions(items, symbols);
|
|
@@ -8844,61 +10323,107 @@ export default class kucoin extends Exchange {
|
|
|
8844
10323
|
// "closePrice": null
|
|
8845
10324
|
// }
|
|
8846
10325
|
//
|
|
10326
|
+
// uta fetchPositions
|
|
10327
|
+
// {
|
|
10328
|
+
// "symbol": "DOGEUSDTM",
|
|
10329
|
+
// "id": "30000000000084351",
|
|
10330
|
+
// "marginMode": "CROSS",
|
|
10331
|
+
// "size": "2",
|
|
10332
|
+
// "entryPrice": "0.093795",
|
|
10333
|
+
// "positionValue": "18.298",
|
|
10334
|
+
// "markPrice": "0.09149",
|
|
10335
|
+
// "leverage": "3",
|
|
10336
|
+
// "unrealizedPnL": "-0.461",
|
|
10337
|
+
// "realizedPnL": "-0.01122489",
|
|
10338
|
+
// "initialMargin": "6.0993333327234",
|
|
10339
|
+
// "mmr": "0.007",
|
|
10340
|
+
// "maintenanceMargin": "0.128086",
|
|
10341
|
+
// "creationTime": 1774469753178000000
|
|
10342
|
+
// }
|
|
10343
|
+
//
|
|
10344
|
+
// uta fetchPositionsHistory
|
|
10345
|
+
// {
|
|
10346
|
+
// "symbol": "DOGEUSDTM",
|
|
10347
|
+
// "closeId": "30000000000162175",
|
|
10348
|
+
// "marginMode": "CROSS",
|
|
10349
|
+
// "side": "LONG",
|
|
10350
|
+
// "entryPrice": "0.09641",
|
|
10351
|
+
// "closePrice": "0.09613",
|
|
10352
|
+
// "maxSize": "1",
|
|
10353
|
+
// "avgClosePrice": "0.09613",
|
|
10354
|
+
// "leverage": "3",
|
|
10355
|
+
// "realizedPnL": "-0.0395524",
|
|
10356
|
+
// "fee": "0.0115524",
|
|
10357
|
+
// "tax": "0",
|
|
10358
|
+
// "fundingFee": "0",
|
|
10359
|
+
// "closingTime": 1774469647311000000,
|
|
10360
|
+
// "creationTime": 1774468501294000000
|
|
10361
|
+
// }
|
|
10362
|
+
//
|
|
8847
10363
|
const symbol = this.safeString(position, 'symbol');
|
|
8848
10364
|
market = this.safeMarket(symbol, market);
|
|
8849
|
-
|
|
8850
|
-
|
|
8851
|
-
|
|
8852
|
-
const type = this.safeStringLower(position, 'type');
|
|
8853
|
-
if (size !== undefined) {
|
|
8854
|
-
if (Precise.stringGt(size, '0')) {
|
|
8855
|
-
side = 'long';
|
|
8856
|
-
}
|
|
8857
|
-
else if (Precise.stringLt(size, '0')) {
|
|
8858
|
-
side = 'short';
|
|
8859
|
-
}
|
|
10365
|
+
let timestamp = this.safeInteger(position, 'currentTimestamp');
|
|
10366
|
+
if (timestamp === undefined) {
|
|
10367
|
+
timestamp = this.safeIntegerProduct(position, 'creationTime', 0.000001);
|
|
8860
10368
|
}
|
|
8861
|
-
|
|
8862
|
-
|
|
8863
|
-
|
|
10369
|
+
const size = this.safeStringN(position, ['currentQty', 'size', 'maxSize', 'closeSize']);
|
|
10370
|
+
let side = this.safeStringLower(position, 'side');
|
|
10371
|
+
const type = this.safeStringLower(position, 'type');
|
|
10372
|
+
if (side === undefined) {
|
|
10373
|
+
if (size !== undefined) {
|
|
10374
|
+
if (Precise.stringGt(size, '0')) {
|
|
10375
|
+
side = 'long';
|
|
10376
|
+
}
|
|
10377
|
+
else if (Precise.stringLt(size, '0')) {
|
|
10378
|
+
side = 'short';
|
|
10379
|
+
}
|
|
8864
10380
|
}
|
|
8865
|
-
else {
|
|
8866
|
-
|
|
10381
|
+
else if (type !== undefined) {
|
|
10382
|
+
if (type.indexOf('long') > -1) {
|
|
10383
|
+
side = 'long';
|
|
10384
|
+
}
|
|
10385
|
+
else {
|
|
10386
|
+
side = 'short';
|
|
10387
|
+
}
|
|
8867
10388
|
}
|
|
8868
10389
|
}
|
|
8869
|
-
const notional = Precise.stringAbs(this.
|
|
8870
|
-
const initialMargin = this.
|
|
10390
|
+
const notional = Precise.stringAbs(this.safeString2(position, 'posCost', 'positionValue'));
|
|
10391
|
+
const initialMargin = this.safeString2(position, 'posInit', 'initialMargin');
|
|
8871
10392
|
const initialMarginPercentage = Precise.stringDiv(initialMargin, notional);
|
|
8872
10393
|
// const marginRatio = Precise.stringDiv (maintenanceRate, collateral);
|
|
8873
|
-
const unrealisedPnl = this.
|
|
10394
|
+
const unrealisedPnl = this.safeString2(position, 'unrealisedPnl', 'unrealizedPnL');
|
|
8874
10395
|
const crossMode = this.safeValue(position, 'crossMode');
|
|
8875
10396
|
// currently crossMode is always set to false and only isolated positions are supported
|
|
8876
|
-
let marginMode =
|
|
10397
|
+
let marginMode = this.safeStringLower(position, 'marginMode');
|
|
8877
10398
|
if (crossMode !== undefined) {
|
|
8878
10399
|
marginMode = crossMode ? 'cross' : 'isolated';
|
|
8879
10400
|
}
|
|
10401
|
+
let lastUpdateTimestamp = this.safeInteger(position, 'closeTime');
|
|
10402
|
+
if (lastUpdateTimestamp === undefined) {
|
|
10403
|
+
lastUpdateTimestamp = this.safeIntegerProduct(position, 'closingTime', 0.000001);
|
|
10404
|
+
}
|
|
8880
10405
|
return this.safePosition({
|
|
8881
10406
|
'info': position,
|
|
8882
|
-
'id': this.
|
|
10407
|
+
'id': this.safeStringN(position, ['id', 'positionId', 'closeId']),
|
|
8883
10408
|
'symbol': this.safeString(market, 'symbol'),
|
|
8884
10409
|
'timestamp': timestamp,
|
|
8885
10410
|
'datetime': this.iso8601(timestamp),
|
|
8886
|
-
'lastUpdateTimestamp':
|
|
10411
|
+
'lastUpdateTimestamp': lastUpdateTimestamp,
|
|
8887
10412
|
'initialMargin': this.parseNumber(initialMargin),
|
|
8888
10413
|
'initialMarginPercentage': this.parseNumber(initialMarginPercentage),
|
|
8889
|
-
'maintenanceMargin': this.
|
|
8890
|
-
'maintenanceMarginPercentage': this.
|
|
8891
|
-
'entryPrice': this.
|
|
10414
|
+
'maintenanceMargin': this.safeNumber2(position, 'posMaint', 'maintenanceMargin'),
|
|
10415
|
+
'maintenanceMarginPercentage': this.safeNumber2(position, 'maintMarginReq', 'mmr'),
|
|
10416
|
+
'entryPrice': this.safeNumberN(position, ['avgEntryPrice', 'openPrice', 'entryPrice']),
|
|
8892
10417
|
'notional': this.parseNumber(notional),
|
|
8893
10418
|
'leverage': this.safeNumber2(position, 'realLeverage', 'leverage'),
|
|
8894
10419
|
'unrealizedPnl': this.parseNumber(unrealisedPnl),
|
|
8895
10420
|
'contracts': this.parseNumber(Precise.stringAbs(size)),
|
|
8896
10421
|
'contractSize': this.safeValue(market, 'contractSize'),
|
|
8897
|
-
'realizedPnl': this.
|
|
10422
|
+
'realizedPnl': this.safeNumberN(position, ['realisedPnl', 'pnl', 'realizedPnL']),
|
|
8898
10423
|
'marginRatio': undefined,
|
|
8899
10424
|
'liquidationPrice': this.safeNumber(position, 'liquidationPrice'),
|
|
8900
10425
|
'markPrice': this.safeNumber(position, 'markPrice'),
|
|
8901
|
-
'lastPrice':
|
|
10426
|
+
'lastPrice': this.safeNumber(position, 'closePrice'),
|
|
8902
10427
|
'collateral': this.safeNumber(position, 'maintMargin'),
|
|
8903
10428
|
'marginMode': marginMode,
|
|
8904
10429
|
'side': side,
|
|
@@ -8912,18 +10437,31 @@ export default class kucoin extends Exchange {
|
|
|
8912
10437
|
* @name kucoin#cancelOrders
|
|
8913
10438
|
* @description cancel multiple orders for contract markets
|
|
8914
10439
|
* @see https://www.kucoin.com/docs-new/3470241e0
|
|
10440
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/batch-cancel-order-by-id
|
|
8915
10441
|
* @param {string[]} ids order ids
|
|
8916
10442
|
* @param {string} symbol unified symbol of the market the order was made in
|
|
8917
10443
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
8918
10444
|
* @param {string[]} [params.clientOrderIds] client order ids
|
|
10445
|
+
* @param {boolean} [params.uta] set to true to use the unified trading account (uta) endpoint, defaults to false for the contract orders
|
|
10446
|
+
* @param {string} [params.accountMode] *for uta endpoint only* 'unified' or 'classic' (default is 'unified')
|
|
10447
|
+
* @param {string} [params.marginMode] *for margin orders only* 'cross' or 'isolated'
|
|
8919
10448
|
* @returns {object} an list of [order structures]{@link https://docs.ccxt.com/?id=order-structure}
|
|
8920
10449
|
*/
|
|
8921
10450
|
async cancelOrders(ids, symbol = undefined, params = {}) {
|
|
8922
|
-
// contract markets only
|
|
8923
10451
|
await this.loadMarkets();
|
|
10452
|
+
let uta = await this.isUTAEnabled();
|
|
10453
|
+
[uta, params] = this.handleOptionAndParams(params, 'cancelOrders', 'uta', uta);
|
|
8924
10454
|
let market = undefined;
|
|
10455
|
+
let isContractMarket = true; // default to contract market orders if symbol is not provided, uta endpoint requires a symbol to be provided
|
|
8925
10456
|
if (symbol !== undefined) {
|
|
8926
10457
|
market = this.market(symbol);
|
|
10458
|
+
isContractMarket = market['contract'];
|
|
10459
|
+
if (!isContractMarket) {
|
|
10460
|
+
uta = true; // spot market orders can only be cancelled via the uta endpoint
|
|
10461
|
+
}
|
|
10462
|
+
}
|
|
10463
|
+
else if (uta) {
|
|
10464
|
+
throw new ArgumentsRequired(this.id + ' cancelOrders() requires a symbol argument for uta endpoint');
|
|
8927
10465
|
}
|
|
8928
10466
|
const ordersRequests = [];
|
|
8929
10467
|
const clientOrderIds = this.safeList2(params, 'clientOrderIds', 'clientOids', []);
|
|
@@ -8940,33 +10478,59 @@ export default class kucoin extends Exchange {
|
|
|
8940
10478
|
});
|
|
8941
10479
|
}
|
|
8942
10480
|
for (let i = 0; i < ids.length; i++) {
|
|
8943
|
-
|
|
10481
|
+
const orderId = ids[i];
|
|
10482
|
+
if (uta) {
|
|
10483
|
+
ordersRequests.push({
|
|
10484
|
+
'orderId': orderId,
|
|
10485
|
+
'symbol': market['id'],
|
|
10486
|
+
});
|
|
10487
|
+
}
|
|
10488
|
+
else {
|
|
10489
|
+
ordersRequests.push(ids[i]);
|
|
10490
|
+
}
|
|
8944
10491
|
}
|
|
8945
|
-
const requestKey = useClientorderId ? 'clientOidsList' : 'orderIdsList';
|
|
8946
10492
|
const request = {};
|
|
8947
|
-
|
|
8948
|
-
|
|
8949
|
-
|
|
8950
|
-
|
|
8951
|
-
|
|
8952
|
-
|
|
8953
|
-
|
|
8954
|
-
|
|
8955
|
-
|
|
8956
|
-
|
|
8957
|
-
|
|
8958
|
-
|
|
8959
|
-
|
|
8960
|
-
|
|
8961
|
-
|
|
8962
|
-
|
|
8963
|
-
|
|
8964
|
-
|
|
8965
|
-
|
|
8966
|
-
|
|
8967
|
-
|
|
8968
|
-
|
|
8969
|
-
|
|
10493
|
+
let response = undefined;
|
|
10494
|
+
let orders = [];
|
|
10495
|
+
if (uta) {
|
|
10496
|
+
let accountMode = 'unified';
|
|
10497
|
+
[accountMode, params] = this.handleOptionAndParams(params, 'cancelOrders', 'accountMode', accountMode);
|
|
10498
|
+
request['accountMode'] = accountMode;
|
|
10499
|
+
let marginMode = undefined;
|
|
10500
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchOrder', params);
|
|
10501
|
+
const tradeType = this.handleTradeType(isContractMarket, marginMode, params);
|
|
10502
|
+
request['tradeType'] = tradeType;
|
|
10503
|
+
request['cancelOrderList'] = ordersRequests;
|
|
10504
|
+
response = await this.utaPrivatePostAccountModeOrderCancelBatch(this.extend(request, params));
|
|
10505
|
+
const data = this.safeDict(response, 'data', {});
|
|
10506
|
+
orders = this.safeList(data, 'items', []);
|
|
10507
|
+
}
|
|
10508
|
+
else {
|
|
10509
|
+
const requestKey = useClientorderId ? 'clientOidsList' : 'orderIdsList';
|
|
10510
|
+
request[requestKey] = ordersRequests;
|
|
10511
|
+
response = await this.futuresPrivateDeleteOrdersMultiCancel(this.extend(request, params));
|
|
10512
|
+
//
|
|
10513
|
+
// {
|
|
10514
|
+
// "code": "200000",
|
|
10515
|
+
// "data":
|
|
10516
|
+
// [
|
|
10517
|
+
// {
|
|
10518
|
+
// "orderId": "80465574458560512",
|
|
10519
|
+
// "clientOid": null,
|
|
10520
|
+
// "code": "200",
|
|
10521
|
+
// "msg": "success"
|
|
10522
|
+
// },
|
|
10523
|
+
// {
|
|
10524
|
+
// "orderId": "80465575289094144",
|
|
10525
|
+
// "clientOid": null,
|
|
10526
|
+
// "code": "200",
|
|
10527
|
+
// "msg": "success"
|
|
10528
|
+
// }
|
|
10529
|
+
// ]
|
|
10530
|
+
// }
|
|
10531
|
+
//
|
|
10532
|
+
orders = this.safeList(response, 'data', []);
|
|
10533
|
+
}
|
|
8970
10534
|
return this.parseOrders(orders, market);
|
|
8971
10535
|
}
|
|
8972
10536
|
/**
|
|
@@ -9431,6 +10995,139 @@ export default class kucoin extends Exchange {
|
|
|
9431
10995
|
}
|
|
9432
10996
|
return result;
|
|
9433
10997
|
}
|
|
10998
|
+
/**
|
|
10999
|
+
* @method
|
|
11000
|
+
* @name kucoin#fetchOpenInterests
|
|
11001
|
+
* @description Retrieves the open interest for a list of symbols
|
|
11002
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-futures-open-interset
|
|
11003
|
+
* @param {string[]} [symbols] Unified CCXT market symbol
|
|
11004
|
+
* @param {object} [params] exchange specific parameters
|
|
11005
|
+
* @returns {object} an open interest structure{@link https://docs.ccxt.com/?id=open-interest-structure}
|
|
11006
|
+
*/
|
|
11007
|
+
async fetchOpenInterests(symbols = undefined, params = {}) {
|
|
11008
|
+
await this.loadMarkets();
|
|
11009
|
+
symbols = this.marketSymbols(symbols);
|
|
11010
|
+
const request = {};
|
|
11011
|
+
if (symbols !== undefined) {
|
|
11012
|
+
const length = symbols.length;
|
|
11013
|
+
if (length < 11) {
|
|
11014
|
+
// the endpoint does not accept more than 10 symbols at a time
|
|
11015
|
+
// if user provided more than 10 symbols, we will fetch all symbols
|
|
11016
|
+
const marketIds = this.marketIds(symbols);
|
|
11017
|
+
request['symbol'] = marketIds.join(',');
|
|
11018
|
+
}
|
|
11019
|
+
}
|
|
11020
|
+
const response = await this.utaGetMarketOpenInterest(this.extend(request, params));
|
|
11021
|
+
//
|
|
11022
|
+
// {
|
|
11023
|
+
// "code": "200000",
|
|
11024
|
+
// "data": [
|
|
11025
|
+
// {
|
|
11026
|
+
// "symbol": "ETHUSDTM",
|
|
11027
|
+
// "openInterest": "8053960",
|
|
11028
|
+
// "ts": 1774007467050
|
|
11029
|
+
// }
|
|
11030
|
+
// ]
|
|
11031
|
+
// }
|
|
11032
|
+
//
|
|
11033
|
+
const data = this.safeList(response, 'data', []);
|
|
11034
|
+
return this.parseOpenInterests(data, symbols);
|
|
11035
|
+
}
|
|
11036
|
+
parseOpenInterest(interest, market = undefined) {
|
|
11037
|
+
//
|
|
11038
|
+
// {
|
|
11039
|
+
// "symbol": "ETHUSDTM",
|
|
11040
|
+
// "openInterest": "8053960",
|
|
11041
|
+
// "ts": 1774007467050
|
|
11042
|
+
// }
|
|
11043
|
+
//
|
|
11044
|
+
const marketId = this.safeString(interest, 'symbol');
|
|
11045
|
+
market = this.safeMarket(marketId, market);
|
|
11046
|
+
const timestamp = this.safeInteger(interest, 'ts');
|
|
11047
|
+
return this.safeOpenInterest({
|
|
11048
|
+
'symbol': this.safeSymbol(marketId),
|
|
11049
|
+
'openInterestAmount': this.safeNumber(interest, 'openInterest'),
|
|
11050
|
+
'openInterestValue': undefined,
|
|
11051
|
+
'timestamp': timestamp,
|
|
11052
|
+
'datetime': this.iso8601(timestamp),
|
|
11053
|
+
'info': interest,
|
|
11054
|
+
}, market);
|
|
11055
|
+
}
|
|
11056
|
+
/**
|
|
11057
|
+
* @method
|
|
11058
|
+
* @name kucoin#fetchOpenInterestHistory
|
|
11059
|
+
* @description Retrieves the open interest history of a currency
|
|
11060
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-futures-open-interset
|
|
11061
|
+
* @param {string} symbol Unified CCXT market symbol
|
|
11062
|
+
* @param {string} timeframe '5m', '15m', '30m', '1h', '4h' or '1d'
|
|
11063
|
+
* @param {int} [since] the time(ms) of the earliest record to retrieve as a unix timestamp
|
|
11064
|
+
* @param {int} [limit] default 30,max 200
|
|
11065
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
11066
|
+
* @param {int} [params.until] the latest time in ms to fetch entries for
|
|
11067
|
+
* @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)
|
|
11068
|
+
* @returns {object} an array of [open interest structures]{@link https://docs.ccxt.com/?id=open-interest-structure}
|
|
11069
|
+
*/
|
|
11070
|
+
async fetchOpenInterestHistory(symbol, timeframe = '5m', since = undefined, limit = undefined, params = {}) {
|
|
11071
|
+
const timeframes = {
|
|
11072
|
+
'5m': '5min',
|
|
11073
|
+
'15m': '15min',
|
|
11074
|
+
'30m': '30min',
|
|
11075
|
+
'1h': '1hour',
|
|
11076
|
+
'4h': '4hour',
|
|
11077
|
+
'1d': '1day',
|
|
11078
|
+
'5min': '5min',
|
|
11079
|
+
'15min': '15min',
|
|
11080
|
+
'30min': '30min',
|
|
11081
|
+
'1hour': '1hour',
|
|
11082
|
+
'4hour': '4hour',
|
|
11083
|
+
'1day': '1day',
|
|
11084
|
+
};
|
|
11085
|
+
const interval = this.safeString(timeframes, timeframe);
|
|
11086
|
+
if (interval === undefined) {
|
|
11087
|
+
throw new BadRequest(this.id + ' fetchOpenInterestHistory() invalid timeframe, supported are 5m, 15m, 30m, 1h, 4h, 1d');
|
|
11088
|
+
}
|
|
11089
|
+
await this.loadMarkets();
|
|
11090
|
+
const market = this.market(symbol);
|
|
11091
|
+
const maxLimit = 200;
|
|
11092
|
+
let paginate = false;
|
|
11093
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchOpenInterestHistory', 'paginate', paginate);
|
|
11094
|
+
if (paginate) {
|
|
11095
|
+
return await this.fetchPaginatedCallDeterministic('fetchOpenInterestHistory', symbol, since, limit, timeframe, params, maxLimit);
|
|
11096
|
+
}
|
|
11097
|
+
let request = {
|
|
11098
|
+
'symbol': market['id'],
|
|
11099
|
+
'interval': interval,
|
|
11100
|
+
};
|
|
11101
|
+
if (since !== undefined) {
|
|
11102
|
+
request['startAt'] = since;
|
|
11103
|
+
}
|
|
11104
|
+
if (limit !== undefined) {
|
|
11105
|
+
request['pageSize'] = limit;
|
|
11106
|
+
}
|
|
11107
|
+
[request, params] = this.handleUntilOption('endAt', request, params);
|
|
11108
|
+
const response = await this.utaGetMarketOpenInterest(this.extend(request, params));
|
|
11109
|
+
const data = this.safeList(response, 'data');
|
|
11110
|
+
return this.parseOpenInterestsHistory(data, market, since, limit);
|
|
11111
|
+
}
|
|
11112
|
+
/**
|
|
11113
|
+
* @method
|
|
11114
|
+
* @name kucoin#isUTAEnabled
|
|
11115
|
+
* @see https://www.kucoin.com/docs-new/rest/ua/get-account-mode
|
|
11116
|
+
* @description returns true or false so the user can check if unified account is enabled
|
|
11117
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
11118
|
+
* @returns {boolean} true if unified account is enabled, false otherwise
|
|
11119
|
+
*/
|
|
11120
|
+
async isUTAEnabled(params = {}) {
|
|
11121
|
+
let uta = this.safeBool(this.options, 'uta');
|
|
11122
|
+
if (uta === undefined) {
|
|
11123
|
+
const response = await this.utaPrivateGetAccountMode(params);
|
|
11124
|
+
const data = this.safeDict(response, 'data', {});
|
|
11125
|
+
const accountMode = this.safeString(data, 'selfAccountMode');
|
|
11126
|
+
uta = (accountMode === 'UNIFIED');
|
|
11127
|
+
this.options['uta'] = uta;
|
|
11128
|
+
}
|
|
11129
|
+
return this.safeBool(this.options, 'uta', false);
|
|
11130
|
+
}
|
|
9434
11131
|
sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
9435
11132
|
//
|
|
9436
11133
|
// the v2 URL is https://openapi-v2.kucoin.com/api/v1/endpoint
|
|
@@ -9461,11 +11158,15 @@ export default class kucoin extends Exchange {
|
|
|
9461
11158
|
let endpart = '';
|
|
9462
11159
|
headers = (headers !== undefined) ? headers : {};
|
|
9463
11160
|
let url = this.urls['api'][api];
|
|
11161
|
+
const tradeType = this.safeString(query, 'tradeType');
|
|
9464
11162
|
if (!this.isEmpty(query)) {
|
|
9465
11163
|
if (((method === 'GET') || (method === 'DELETE')) && (path !== 'orders/multi-cancel')) {
|
|
9466
11164
|
endpoint += '?' + this.rawencode(query);
|
|
9467
11165
|
}
|
|
9468
11166
|
else {
|
|
11167
|
+
if (endpoint === '/api/ua/v1/classic/order/place') {
|
|
11168
|
+
endpoint += '?tradeType=' + tradeType;
|
|
11169
|
+
}
|
|
9469
11170
|
body = this.json(query);
|
|
9470
11171
|
endpart = body;
|
|
9471
11172
|
headers['Content-Type'] = 'application/json';
|
|
@@ -9496,7 +11197,9 @@ export default class kucoin extends Exchange {
|
|
|
9496
11197
|
const signature = this.hmac(this.encode(payload), this.encode(this.secret), sha256, 'base64');
|
|
9497
11198
|
headers['KC-API-SIGN'] = signature;
|
|
9498
11199
|
let partner = this.safeDict(this.options, 'partner', {});
|
|
9499
|
-
|
|
11200
|
+
const isUtaFuturePrivate = isUtaPrivate && (tradeType === 'FUTURES');
|
|
11201
|
+
const isFuturePartner = isFuturePrivate || isUtaFuturePrivate;
|
|
11202
|
+
partner = isFuturePartner ? this.safeValue(partner, 'future', partner) : this.safeValue(partner, 'spot', partner);
|
|
9500
11203
|
const partnerId = this.safeString(partner, 'id');
|
|
9501
11204
|
const partnerSecret = this.safeString2(partner, 'secret', 'key');
|
|
9502
11205
|
if ((partnerId !== undefined) && (partnerSecret !== undefined)) {
|