UNPKG

ccxt

Version:

A cryptocurrency trading API with more than 100 exchanges in JavaScript / TypeScript / Python / C# / PHP / Go

764 lines (762 loc) • 497 kB
// ---------------------------------------------------------------------------- // PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN: // https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code // EDIT THE CORRESPONDENT .ts FILE INSTEAD // --------------------------------------------------------------------------- import { sha256 } from '@noble/hashes/sha2.js'; import Exchange from './abstract/bybit.js'; import { TICK_SIZE } from './base/functions/number.js'; import { AuthenticationError, ExchangeError, ArgumentsRequired, PermissionDenied, AccountSuspended, InvalidOrder, OrderNotFound, InsufficientFunds, BadRequest, RateLimitExceeded, InvalidNonce, NotSupported, RequestTimeout, MarginModeAlreadySet, NoChange, ManualInteractionNeeded, BadSymbol, RestrictedLocation } from './base/errors.js'; import { Precise } from './base/Precise.js'; import { rsa } from './base/functions/rsa.js'; // --------------------------------------------------------------------------- /** * @class bybit * @augments Exchange */ export default class bybit extends Exchange { describe() { return this.deepExtend(super.describe(), { 'id': 'bybit', 'name': 'Bybit', 'countries': ['VG'], // British Virgin Islands 'version': 'v5', 'userAgent': undefined, 'rateLimit': 20, 'hostname': 'bybit.com', // bybit.com, bytick.com, bybit.nl, bybit.com.hk 'pro': true, 'certified': true, 'has': { 'CORS': true, 'spot': true, 'margin': true, 'swap': true, 'future': true, 'option': true, 'borrowCrossMargin': true, 'cancelAllOrders': true, 'cancelAllOrdersAfter': true, 'cancelOrder': true, 'cancelOrders': true, 'cancelOrdersForSymbols': true, 'closeAllPositions': false, 'closePosition': false, 'createConvertTrade': true, 'createMarketBuyOrderWithCost': true, 'createMarketSellOrderWithCost': true, 'createOrder': true, 'createOrders': true, 'createOrderWithTakeProfitAndStopLoss': true, 'createPostOnlyOrder': true, 'createReduceOnlyOrder': true, 'createStopLimitOrder': true, 'createStopLossOrder': true, 'createStopMarketOrder': true, 'createStopOrder': true, 'createTakeProfitOrder': true, 'createTrailingAmountOrder': true, 'createTriggerOrder': true, 'editOrder': true, 'editOrders': true, 'fetchAllGreeks': true, 'fetchBalance': true, 'fetchBidsAsks': 'emulated', 'fetchBorrowInterest': false, // temporarily disabled, as it doesn't work 'fetchBorrowRateHistories': false, 'fetchBorrowRateHistory': false, 'fetchCanceledAndClosedOrders': true, 'fetchCanceledOrders': true, 'fetchClosedOrder': true, 'fetchClosedOrders': true, 'fetchConvertCurrencies': true, 'fetchConvertQuote': true, 'fetchConvertTrade': true, 'fetchConvertTradeHistory': true, 'fetchCrossBorrowRate': true, 'fetchCrossBorrowRates': false, 'fetchCurrencies': true, 'fetchDeposit': false, 'fetchDepositAddress': true, 'fetchDepositAddresses': false, 'fetchDepositAddressesByNetwork': true, 'fetchDeposits': true, 'fetchDepositWithdrawFee': 'emulated', 'fetchDepositWithdrawFees': true, 'fetchFundingHistory': true, 'fetchFundingRate': 'emulated', // emulated in exchange 'fetchFundingRateHistory': true, 'fetchFundingRates': true, 'fetchGreeks': true, 'fetchIndexOHLCV': true, 'fetchIsolatedBorrowRate': false, 'fetchIsolatedBorrowRates': false, 'fetchLedger': true, 'fetchLeverage': true, 'fetchLeverageTiers': true, 'fetchLongShortRatio': false, 'fetchLongShortRatioHistory': true, 'fetchMarginAdjustmentHistory': false, 'fetchMarginMode': true, 'fetchMarketLeverageTiers': true, 'fetchMarkets': true, 'fetchMarkOHLCV': true, 'fetchMyLiquidations': true, 'fetchMySettlementHistory': true, 'fetchMyTrades': true, 'fetchOHLCV': true, 'fetchOpenInterest': true, 'fetchOpenInterestHistory': true, 'fetchOpenOrder': true, 'fetchOpenOrders': true, 'fetchOption': true, 'fetchOptionChain': true, 'fetchOrder': true, 'fetchOrderBook': true, 'fetchOrders': false, 'fetchOrderTrades': true, 'fetchPosition': true, 'fetchPositionADLRank': true, 'fetchPositionHistory': 'emulated', 'fetchPositions': true, 'fetchPositionsADLRank': true, 'fetchPositionsHistory': true, 'fetchPremiumIndexOHLCV': true, 'fetchSettlementHistory': true, 'fetchStatus': true, 'fetchTicker': true, 'fetchTickers': true, 'fetchTime': true, 'fetchTrades': true, 'fetchTradingFee': true, 'fetchTradingFees': true, 'fetchTransactions': false, 'fetchTransfers': true, 'fetchUnderlyingAssets': false, 'fetchVolatilityHistory': true, 'fetchWithdrawals': true, 'repayCrossMargin': true, 'sandbox': true, 'setLeverage': true, 'setMarginMode': true, 'setPositionMode': true, 'transfer': true, 'withdraw': true, }, 'timeframes': { '1m': '1', '3m': '3', '5m': '5', '15m': '15', '30m': '30', '1h': '60', '2h': '120', '4h': '240', '6h': '360', '12h': '720', '1d': 'D', '1w': 'W', '1M': 'M', }, 'urls': { 'test': { 'spot': 'https://api-testnet.{hostname}', 'futures': 'https://api-testnet.{hostname}', 'v2': 'https://api-testnet.{hostname}', 'public': 'https://api-testnet.{hostname}', 'private': 'https://api-testnet.{hostname}', }, 'logo': 'https://github.com/user-attachments/assets/97a5d0b3-de10-423d-90e1-6620960025ed', 'api': { 'spot': 'https://api.{hostname}', 'futures': 'https://api.{hostname}', 'v2': 'https://api.{hostname}', 'public': 'https://api.{hostname}', 'private': 'https://api.{hostname}', }, 'demotrading': { 'spot': 'https://api-demo.{hostname}', 'futures': 'https://api-demo.{hostname}', 'v2': 'https://api-demo.{hostname}', 'public': 'https://api-demo.{hostname}', 'private': 'https://api-demo.{hostname}', }, 'www': 'https://www.bybit.com', 'doc': [ 'https://bybit-exchange.github.io/docs/inverse/', 'https://bybit-exchange.github.io/docs/linear/', 'https://github.com/bybit-exchange', ], 'fees': 'https://help.bybit.com/hc/en-us/articles/360039261154', 'referral': 'https://www.bybit.com/invite?ref=XDK12WP', }, 'api': { 'public': { 'get': { // spot 'spot/v3/public/symbols': 1, 'spot/v3/public/quote/depth': 1, 'spot/v3/public/quote/depth/merged': 1, 'spot/v3/public/quote/trades': 1, 'spot/v3/public/quote/kline': 1, 'spot/v3/public/quote/ticker/24hr': 1, 'spot/v3/public/quote/ticker/price': 1, 'spot/v3/public/quote/ticker/bookTicker': 1, 'spot/v3/public/server-time': 1, 'spot/v3/public/infos': 1, 'spot/v3/public/margin-product-infos': 1, 'spot/v3/public/margin-ensure-tokens': 1, // data 'v3/public/time': 1, 'contract/v3/public/copytrading/symbol/list': 1, // derivative 'derivatives/v3/public/order-book/L2': 1, 'derivatives/v3/public/kline': 1, 'derivatives/v3/public/tickers': 1, 'derivatives/v3/public/instruments-info': 1, 'derivatives/v3/public/mark-price-kline': 1, 'derivatives/v3/public/index-price-kline': 1, 'derivatives/v3/public/funding/history-funding-rate': 1, 'derivatives/v3/public/risk-limit/list': 1, 'derivatives/v3/public/delivery-price': 1, 'derivatives/v3/public/recent-trade': 1, 'derivatives/v3/public/open-interest': 1, 'derivatives/v3/public/insurance': 1, // v5 'v5/announcements/index': 5, // 10/s = 1000 / (20 * 5) 'v5/system/status': 5, // market 'v5/market/time': 5, 'v5/market/kline': 5, 'v5/market/mark-price-kline': 5, 'v5/market/index-price-kline': 5, 'v5/market/premium-index-price-kline': 5, 'v5/market/instruments-info': 5, 'v5/market/orderbook': 5, 'v5/market/rpi_orderbook': 5, 'v5/market/full_orderbook': 5, 'v5/market/tickers': 5, 'v5/market/funding/history': 5, 'v5/market/recent-trade': 5, 'v5/market/open-interest': 5, 'v5/market/historical-volatility': 5, 'v5/market/insurance': 5, 'v5/market/risk-limit': 5, 'v5/market/delivery-price': 5, 'v5/market/new-delivery-price': 5, 'v5/market/account-ratio': 5, 'v5/market/index-price-components': 5, 'v5/market/price-limit': 5, 'v5/market/adlAlert': 5, 'v5/market/fee-group-info': 5, // spot leverage token 'v5/spot-lever-token/info': 5, 'v5/spot-lever-token/reference': 5, // spot margin trade 'v5/spot-margin-trade/data': 5, 'v5/spot-margin-trade/collateral': 5, 'v5/spot-cross-margin-trade/data': 5, 'v5/spot-cross-margin-trade/pledge-token': 5, 'v5/spot-cross-margin-trade/borrow-token': 5, // crypto loan 'v5/crypto-loan/collateral-data': 5, 'v5/crypto-loan/loanable-data': 5, // crypto loan (new) 'v5/crypto-loan-common/loanable-data': 5, 'v5/crypto-loan-common/collateral-data': 5, 'v5/crypto-loan-fixed/supply-order-quote': 5, 'v5/crypto-loan-fixed/borrow-order-quote': 5, // institutional lending 'v5/ins-loan/product-infos': 5, 'v5/ins-loan/ensure-tokens-convert': 5, // earn 'v5/earn/product': 5, }, }, 'private': { 'get': { 'v5/market/instruments-info': 5, // Legacy inverse swap 'v2/private/wallet/fund/records': 25, // 120 per minute = 2 per second => cost = 50 / 2 = 25 // spot 'spot/v3/private/order': 2.5, 'spot/v3/private/open-orders': 2.5, 'spot/v3/private/history-orders': 2.5, 'spot/v3/private/my-trades': 2.5, 'spot/v3/private/account': 2.5, 'spot/v3/private/reference': 2.5, 'spot/v3/private/record': 2.5, 'spot/v3/private/cross-margin-orders': 10, 'spot/v3/private/cross-margin-account': 10, 'spot/v3/private/cross-margin-loan-info': 10, 'spot/v3/private/cross-margin-repay-history': 10, 'spot/v3/private/margin-loan-infos': 10, 'spot/v3/private/margin-repaid-infos': 10, 'spot/v3/private/margin-ltv': 10, // account 'asset/v3/private/transfer/inter-transfer/list/query': 50, // 60 per minute = 1 per second => cost = 50 / 1 = 50 'asset/v3/private/transfer/sub-member/list/query': 50, 'asset/v3/private/transfer/sub-member-transfer/list/query': 50, 'asset/v3/private/transfer/universal-transfer/list/query': 25, 'asset/v3/private/coin-info/query': 25, // 2/s 'asset/v3/private/deposit/address/query': 10, 'contract/v3/private/copytrading/order/list': 30, // 100 req/min = 1000 / (20 * 30) = 1.66666666667/s 'contract/v3/private/copytrading/position/list': 40, // 75 req/min = 1000 / (20 * 40) = 1.25/s 'contract/v3/private/copytrading/wallet/balance': 25, // 120 req/min = 1000 / (20 * 25) = 2/s 'contract/v3/private/position/limit-info': 25, // 120 per minute = 2 per second => cost = 50 / 2 = 25 'contract/v3/private/order/unfilled-orders': 1, 'contract/v3/private/order/list': 1, 'contract/v3/private/position/list': 1, 'contract/v3/private/execution/list': 1, 'contract/v3/private/position/closed-pnl': 1, 'contract/v3/private/account/wallet/balance': 1, 'contract/v3/private/account/fee-rate': 1, 'contract/v3/private/account/wallet/fund-records': 1, // derivative 'unified/v3/private/order/unfilled-orders': 1, 'unified/v3/private/order/list': 1, 'unified/v3/private/position/list': 1, 'unified/v3/private/execution/list': 1, 'unified/v3/private/delivery-record': 1, 'unified/v3/private/settlement-record': 1, 'unified/v3/private/account/wallet/balance': 1, 'unified/v3/private/account/transaction-log': 1, 'unified/v3/private/account/borrow-history': 1, 'unified/v3/private/account/borrow-rate': 1, 'unified/v3/private/account/info': 1, 'user/v3/private/frozen-sub-member': 10, // 5/s 'user/v3/private/query-sub-members': 5, // 10/s 'user/v3/private/query-api': 5, // 10/s 'user/v3/private/get-member-type': 1, 'asset/v3/private/transfer/transfer-coin/list/query': 50, 'asset/v3/private/transfer/account-coin/balance/query': 50, 'asset/v3/private/transfer/account-coins/balance/query': 25, 'asset/v3/private/transfer/asset-info/query': 50, 'asset/v3/public/deposit/allowed-deposit-list/query': 0.17, // 300/s 'asset/v3/private/deposit/record/query': 10, 'asset/v3/private/withdraw/record/query': 10, // v5 // trade 'v5/order/realtime': 5, // 10/s => cost = 50 / 10 = 5 'v5/order/history': 5, // 10/s => cost = 50 / 10 = 5 'v5/order/spot-borrow-check': 1, // 50/s = 1000 / (20 * 1) // position 'v5/position/list': 5, // 10/s => cost = 50 / 10 = 5 'v5/execution/list': 5, // 10/s => cost = 50 / 10 = 5 'v5/position/closed-pnl': 5, // 10/s => cost = 50 / 10 = 5 'v5/position/get-closed-positions': 5, 'v5/position/move-history': 5, // 10/s => cost = 50 / 10 = 5 'v5/position/symbol-info': 5, // pre-upgrade 'v5/pre-upgrade/order/history': 5, 'v5/pre-upgrade/execution/list': 5, 'v5/pre-upgrade/position/closed-pnl': 5, 'v5/pre-upgrade/account/transaction-log': 5, 'v5/pre-upgrade/asset/delivery-record': 5, 'v5/pre-upgrade/asset/settlement-record': 5, // account 'v5/account/wallet-balance': 1, 'v5/account/borrow-history': 1, 'v5/account/instruments-info': 1, 'v5/account/collateral-info': 1, 'v5/account/option-asset-info': 1, 'v5/asset/coin-greeks': 1, 'v5/account/fee-rate': 10, // 5/s = 1000 / (20 * 10) 'v5/account/info': 5, 'v5/account/transaction-log': 1.66, // 30/s = 50 / 30 'v5/account/contract-transaction-log': 1, // deprecated 'v5/account/query-dcp-info': 5, 'v5/account/user-setting-config': 5, 'v5/account/pay-info': 5, 'v5/account/trade-info-for-analysis': 5, 'v5/account/smp-group': 1, 'v5/account/mmp-state': 5, 'v5/account/withdrawal': 5, // asset 'v5/asset/asset-overview': 5, 'v5/asset/exchange/query-coin-list': 0.5, // 100/s => cost = 50 / 100 = 0.5 'v5/asset/exchange/convert-result-query': 0.5, // 100/s => cost = 50 / 100 = 0.5 'v5/asset/exchange/query-convert-history': 0.5, // 100/s => cost = 50 / 100 = 0.5 'v5/asset/exchange/order-record': 5, // 10/s => cost = 50 / 10 = 5 'v5/asset/fundinghistory': 5, 'v5/asset/portfolio-margin': 5, 'v5/asset/total-members-assets': 5, 'v5/asset/delivery-record': 5, 'v5/asset/settlement-record': 5, 'v5/asset/transfer/query-asset-info': 50, // deprecated, 1/s => cost = 50 / 1 = 50 'v5/asset/transfer/query-account-coins-balance': 25, // 2/s => cost = 50 / 2 = 25 'v5/asset/transfer/query-account-coin-balance': 50, // 1/s => cost = 50 / 1 = 50 'v5/asset/transfer/query-transfer-coin-list': 50, // 1/s => cost = 50 / 1 = 50 'v5/asset/transfer/query-inter-transfer-list': 50, // 1/s => cost = 50 / 1 = 50 'v5/asset/transfer/query-sub-member-list': 50, // 1/s => cost = 50 / 1 = 50 'v5/asset/transfer/query-universal-transfer-list': 25, // 2/s => cost = 50 / 2 = 25 'v5/asset/deposit/query-allowed-list': 5, 'v5/asset/deposit/query-record': 10, // 5/s => cost = 50 / 5 = 10 'v5/asset/deposit/query-sub-member-record': 10, // 5/s => cost = 50 / 5 = 10 'v5/asset/deposit/query-internal-record': 5, 'v5/asset/deposit/query-address': 10, // 5/s => cost = 50 / 5 = 10 'v5/asset/deposit/query-sub-member-address': 10, // 5/s => cost = 50 / 5 = 10 'v5/asset/coin/query-info': 28, // should be 25 but exceeds ratelimit unless the weight is 28 or higher 'v5/asset/withdraw/query-address': 10, 'v5/asset/withdraw/query-record': 10, // 5/s => cost = 50 / 5 = 10 'v5/asset/withdraw/withdrawable-amount': 5, 'v5/asset/withdraw/vasp/list': 5, 'v5/asset/covert/small-balance-list': 5, // 10/s => cost = 50 / 10 = 5 'v5/asset/covert/small-balance-history': 5, // 10/s => cost = 50 / 10 = 5 'v5/asset/convert/small-balance-list': 5, // 10/s => cost = 50 / 10 = 5 'v5/asset/convert/small-balance-history': 5, // 10/s => cost = 50 / 10 = 5 'v5/fiat/query-coin-list': 5, 'v5/fiat/reference-price': 5, 'v5/fiat/trade-query': 5, 'v5/fiat/query-trade-history': 5, 'v5/fiat/balance-query': 5, // user 'v5/user/query-sub-members': 5, // 10/s => cost = 50 / 10 = 5 'v5/user/query-api': 5, // 10/s => cost = 50 / 10 = 5 'v5/user/sub-apikeys': 5, 'v5/user/get-member-type': 5, 'v5/user/aff-customer-info': 5, 'v5/user/del-submember': 5, 'v5/user/submembers': 5, 'v5/user/escrow_sub_members': 5, 'v5/user/invitation/referrals': 5, // affilate 'v5/affiliate/aff-user-list': 5, 'v5/affiliate/affiliate-sub-list': 5, // spot leverage token 'v5/spot-lever-token/order-record': 1, // 50/s => cost = 50 / 50 = 1 // spot margin trade 'v5/spot-margin-trade/interest-rate-history': 5, 'v5/spot-margin-trade/state': 5, 'v5/spot-margin-trade/max-borrowable': 5, 'v5/spot-margin-trade/position-tiers': 5, 'v5/spot-margin-trade/coinstate': 5, 'v5/spot-margin-trade/currency-data': 5, 'v5/spot-margin-trade/fixedborrow-contract-info': 5, 'v5/spot-margin-trade/fixedborrow-order-info': 5, 'v5/spot-margin-trade/fixedborrow-order-quote': 5, 'v5/spot-margin-trade/liability': 5, 'v5/spot-margin-trade/repayment-available-amount': 5, 'v5/spot-margin-trade/get-auto-repay-mode': 5, 'v5/spot-cross-margin-trade/loan-info': 1, // 50/s => cost = 50 / 50 = 1 'v5/spot-cross-margin-trade/account': 1, // 50/s => cost = 50 / 50 = 1 'v5/spot-cross-margin-trade/orders': 1, // 50/s => cost = 50 / 50 = 1 'v5/spot-cross-margin-trade/repay-history': 1, // 50/s => cost = 50 / 50 = 1 // crypto loan 'v5/crypto-loan/borrowable-collateralisable-number': 5, 'v5/crypto-loan/ongoing-orders': 5, 'v5/crypto-loan/repayment-history': 5, 'v5/crypto-loan/borrow-history': 5, 'v5/crypto-loan/max-collateral-amount': 5, 'v5/crypto-loan/adjustment-history': 5, // crypto loan (new) 'v5/crypto-loan-common/max-collateral-amount': 10, // 5/s => cost = 50 / 5 = 10 'v5/crypto-loan-common/adjustment-history': 10, // 5/s => cost = 50 / 5 = 10 'v5/crypto-loan-common/position': 10, // 5/s => cost = 50 / 5 = 10 'v5/crypto-loan-flexible/ongoing-coin': 10, // 5/s => cost = 50 / 5 = 10 'v5/crypto-loan-flexible/borrow-history': 10, // 5/s => cost = 50 / 5 = 10 'v5/crypto-loan-flexible/repayment-history': 10, // 5/s => cost = 50 / 5 = 10 'v5/crypto-loan-fixed/borrow-contract-info': 10, // 5/s => cost = 50 / 5 = 10 'v5/crypto-loan-fixed/supply-contract-info': 10, // 5/s => cost = 50 / 5 = 10 'v5/crypto-loan-fixed/borrow-order-info': 10, // 5/s => cost = 50 / 5 = 10 'v5/crypto-loan-fixed/renew-info': 10, // 5/s => cost = 50 / 5 = 10 'v5/crypto-loan-fixed/supply-order-info': 10, // 5/s => cost = 50 / 5 = 10 'v5/crypto-loan-fixed/repayment-history': 10, // 5/s => cost = 50 / 5 = 10 // institutional lending 'v5/ins-loan/product-infos': 5, 'v5/ins-loan/ensure-tokens': 5, // deprecated 'v5/ins-loan/ensure-tokens-convert': 5, 'v5/ins-loan/loan-order': 5, 'v5/ins-loan/repaid-history': 5, 'v5/ins-loan/ltv': 5, // deprecated 'v5/ins-loan/ltv-convert': 5, 'v5/ins-loan/coin-delta-amount': 5, // c2c lending 'v5/lending/info': 5, // deprecated 'v5/lending/history-order': 5, // deprecated 'v5/lending/account': 5, // deprecated // broker 'v5/broker/earning-record': 5, // deprecated 'v5/broker/earnings-info': 5, 'v5/broker/account-info': 5, 'v5/broker/asset/query-sub-member-deposit-record': 10, // earn 'v5/earn/product': 5, 'v5/earn/order': 5, 'v5/earn/position': 5, 'v5/earn/yield': 5, 'v5/earn/hourly-yield': 5, }, 'post': { // spot 'spot/v3/private/order': 2.5, 'spot/v3/private/cancel-order': 2.5, 'spot/v3/private/cancel-orders': 2.5, 'spot/v3/private/cancel-orders-by-ids': 2.5, 'spot/v3/private/purchase': 2.5, 'spot/v3/private/redeem': 2.5, 'spot/v3/private/cross-margin-loan': 10, 'spot/v3/private/cross-margin-repay': 10, // account 'asset/v3/private/transfer/inter-transfer': 150, // 20 per minute = 0.333 per second => cost = 50 / 0.3333 = 150 'asset/v3/private/withdraw/create': 300, 'asset/v3/private/withdraw/cancel': 50, 'asset/v3/private/transfer/sub-member-transfer': 150, 'asset/v3/private/transfer/transfer-sub-member-save': 150, 'asset/v3/private/transfer/universal-transfer': 10, // 5/s 'user/v3/private/create-sub-member': 10, // 5/s 'user/v3/private/create-sub-api': 10, // 5/s 'user/v3/private/update-api': 10, // 5/s 'user/v3/private/delete-api': 10, // 5/s 'user/v3/private/update-sub-api': 10, // 5/s 'user/v3/private/delete-sub-api': 10, // 5/s // contract 'contract/v3/private/copytrading/order/create': 30, // 100 req/min = 1000 / (20 * 30) = 1.66666666667/s 'contract/v3/private/copytrading/order/cancel': 30, 'contract/v3/private/copytrading/order/close': 30, 'contract/v3/private/copytrading/position/close': 40, // 75 req/min = 1000 / (20 * 40) = 1.25/s 'contract/v3/private/copytrading/position/set-leverage': 40, 'contract/v3/private/copytrading/wallet/transfer': 25, // 120 req/min = 1000 / (20 * 25) = 2/s 'contract/v3/private/copytrading/order/trading-stop': 2.5, 'contract/v3/private/order/create': 1, 'contract/v3/private/order/cancel': 1, 'contract/v3/private/order/cancel-all': 1, 'contract/v3/private/order/replace': 1, 'contract/v3/private/position/set-auto-add-margin': 1, 'contract/v3/private/position/switch-isolated': 1, 'contract/v3/private/position/switch-mode': 1, 'contract/v3/private/position/switch-tpsl-mode': 1, 'contract/v3/private/position/set-leverage': 1, 'contract/v3/private/position/trading-stop': 1, 'contract/v3/private/position/set-risk-limit': 1, 'contract/v3/private/account/setMarginMode': 1, // derivative 'unified/v3/private/order/create': 30, // 100 req/min (shared) = 1000 / (20 * 30) = 1.66666666667/s 'unified/v3/private/order/replace': 30, 'unified/v3/private/order/cancel': 30, 'unified/v3/private/order/create-batch': 30, 'unified/v3/private/order/replace-batch': 30, 'unified/v3/private/order/cancel-batch': 30, 'unified/v3/private/order/cancel-all': 30, 'unified/v3/private/position/set-leverage': 2.5, 'unified/v3/private/position/tpsl/switch-mode': 2.5, 'unified/v3/private/position/set-risk-limit': 2.5, 'unified/v3/private/position/trading-stop': 2.5, 'unified/v3/private/account/upgrade-unified-account': 2.5, 'unified/v3/private/account/setMarginMode': 2.5, // tax 'fht/compliance/tax/v3/private/registertime': 50, 'fht/compliance/tax/v3/private/create': 50, 'fht/compliance/tax/v3/private/status': 50, 'fht/compliance/tax/v3/private/url': 50, // v5 // trade 'v5/order/create': 2.5, // 20/s = 1000 / (20 * 2.5) 'v5/order/amend': 5, // 10/s => cost = 50 / 10 = 5 'v5/order/cancel': 2.5, 'v5/order/cancel-all': 50, // 1/s = 1000 / (20 * 50) 'v5/order/create-batch': 5, // 10/s => cost = 50 / 10 = 5 'v5/order/amend-batch': 5, // 10/s => cost = 50 / 10 = 5 'v5/order/cancel-batch': 5, // 10/s => cost = 50 / 10 = 5 'v5/order/disconnected-cancel-all': 5, 'v5/order/pre-check': 5, // position 'v5/position/set-leverage': 5, // 10/s => cost = 50 / 10 = 5 'v5/position/switch-isolated': 5, // deprecated 'v5/position/set-tpsl-mode': 5, // deprecated, 10/s => cost = 50 / 10 = 5 'v5/position/switch-mode': 5, 'v5/position/set-risk-limit': 5, // deprecated, 10/s => cost = 50 / 10 = 5 'v5/position/trading-stop': 5, // 10/s => cost = 50 / 10 = 5 'v5/position/set-auto-add-margin': 5, 'v5/position/add-margin': 5, 'v5/position/move-positions': 5, 'v5/position/confirm-pending-mmr': 5, // account 'v5/account/upgrade-to-uta': 5, 'v5/account/quick-repayment': 5, 'v5/account/set-margin-mode': 5, 'v5/account/set-hedging-mode': 5, 'v5/account/mmp-modify': 5, 'v5/account/mmp-reset': 5, 'v5/account/borrow': 5, 'v5/account/repay': 5, 'v5/account/no-convert-repay': 5, 'v5/account/set-limit-px-action': 5, 'v5/account/set-delta-mode': 5, // asset 'v5/asset/exchange/quote-apply': 1, // 50/s 'v5/asset/exchange/convert-execute': 1, // 50/s 'v5/asset/transfer/inter-transfer': 50, // 1/s => cost = 50 / 1 = 50 'v5/asset/transfer/save-transfer-sub-member': 150, // deprecated, 1/3/s => cost = 50 / 1/3 = 150 'v5/asset/transfer/universal-transfer': 10, // 5/s => cost = 50 / 5 = 10 'v5/asset/deposit/deposit-to-account': 5, 'v5/asset/travel-rule/deposit/submit': 5, 'v5/asset/withdraw/create': 50, // 1/s => cost = 50 / 1 = 50 'v5/asset/withdraw/cancel': 50, // 1/s => cost = 50 / 1 = 50 'v5/asset/covert/get-quote': 10, // 5/s => cost = 50 / 5 = 10 'v5/asset/covert/small-balance-execute': 10, // 5/s => cost = 50 / 5 = 10 'v5/fiat/quote-apply': 10, 'v5/fiat/trade-execute': 10, // user 'v5/user/create-sub-member': 10, // 5/s => cost = 50 / 5 = 10 'v5/user/create-sub-api': 10, // 5/s => cost = 50 / 5 = 10 'v5/user/frozen-sub-member': 10, // 5/s => cost = 50 / 5 = 10 'v5/user/update-api': 10, // 5/s => cost = 50 / 5 = 10 'v5/user/update-sub-api': 10, // 5/s => cost = 50 / 5 = 10 'v5/user/delete-api': 10, // 5/s => cost = 50 / 5 = 10 'v5/user/delete-sub-api': 10, // 5/s => cost = 50 / 5 = 10 'v5/user/agreement': 10, // 5/s => cost = 50 / 5 = 10 'v5/user/create-demo-member': 10, // 5/s => cost = 50 / 5 = 10 // spot leverage token 'v5/spot-lever-token/purchase': 2.5, // 20/s => cost = 50 / 20 = 2.5 'v5/spot-lever-token/redeem': 2.5, // 20/s => cost = 50 / 20 = 2.5 // spot margin trade 'v5/spot-margin-trade/switch-mode': 5, 'v5/spot-margin-trade/set-leverage': 5, 'v5/spot-margin-trade/set-auto-repay-mode': 5, 'v5/spot-margin-trade/fixedborrow': 5, 'v5/spot-margin-trade/fixedborrow-renew': 5, 'v5/spot-cross-margin-trade/loan': 2.5, // 20/s => cost = 50 / 20 = 2.5 'v5/spot-cross-margin-trade/repay': 2.5, // 20/s => cost = 50 / 20 = 2.5 'v5/spot-cross-margin-trade/switch': 2.5, // 20/s => cost = 50 / 20 = 2.5 // crypto loan 'v5/crypto-loan/borrow': 5, 'v5/crypto-loan/repay': 5, 'v5/crypto-loan/adjust-ltv': 5, // crypto loan (new) 'v5/crypto-loan-common/adjust-ltv': 50, // 1/s => cost = 50 / 1 = 50 'v5/crypto-loan-common/max-loan': 10, // 5/s => cost = 50 / 5 = 10 'v5/crypto-loan-flexible/borrow': 50, // 1/s => cost = 50 / 1 = 50 'v5/crypto-loan-flexible/repay': 50, // 1/s => cost = 50 / 1 = 50 'v5/crypto-loan-flexible/repay-collateral': 50, // 1/s => cost = 50 / 1 = 50 'v5/crypto-loan-fixed/borrow': 50, // 1/s => cost = 50 / 1 = 50 'v5/crypto-loan-fixed/renew': 50, // 1/s => cost = 50 / 1 = 50 'v5/crypto-loan-fixed/supply': 50, // 1/s => cost = 50 / 1 = 50 'v5/crypto-loan-fixed/borrow-order-cancel': 50, // 1/s => cost = 50 / 1 = 50 'v5/crypto-loan-fixed/supply-order-cancel': 50, // 1/s => cost = 50 / 1 = 50 'v5/crypto-loan-fixed/fully-repay': 50, // 1/s => cost = 50 / 1 = 50 'v5/crypto-loan-fixed/repay-collateral': 50, // 1/s => cost = 50 / 1 = 50 // institutional lending 'v5/ins-loan/association-uid': 5, 'v5/ins-loan/repay-loan': 5, // c2c lending 'v5/lending/purchase': 5, // deprecated 'v5/lending/redeem': 5, // deprecated 'v5/lending/redeem-cancel': 5, // deprecated 'v5/account/set-collateral-switch': 5, 'v5/account/set-collateral-switch-batch': 5, // demo trading 'v5/account/demo-apply-money': 5, // broker 'v5/broker/award/info': 5, 'v5/broker/award/distribute-award': 5, 'v5/broker/award/distribution-record': 5, // earn 'v5/earn/place-order': 5, }, }, }, 'httpExceptions': { '403': RateLimitExceeded, // Forbidden -- You request too many times }, 'exceptions': { // Uncodumented explanation of error strings: // - oc_diff: order cost needed to place this order // - new_oc: total order cost of open orders including the order you are trying to open // - ob: order balance - the total cost of current open orders // - ab: available balance 'exact': { '-10009': BadRequest, // {"ret_code":-10009,"ret_msg":"Invalid period!","result":null,"token":null} '-1004': BadRequest, // {"ret_code":-1004,"ret_msg":"Missing required parameter \u0027symbol\u0027","ext_code":null,"ext_info":null,"result":null} '-1021': BadRequest, // {"ret_code":-1021,"ret_msg":"Timestamp for this request is outside of the recvWindow.","ext_code":null,"ext_info":null,"result":null} '-1103': BadRequest, // An unknown parameter was sent. '-1140': InvalidOrder, // {"ret_code":-1140,"ret_msg":"Transaction amount lower than the minimum.","result":{},"ext_code":"","ext_info":null,"time_now":"1659204910.248576"} '-1197': InvalidOrder, // {"ret_code":-1197,"ret_msg":"Your order quantity to buy is too large. The filled price may deviate significantly from the market price. Please try again","result":{},"ext_code":"","ext_info":null,"time_now":"1659204531.979680"} '-2013': InvalidOrder, // {"ret_code":-2013,"ret_msg":"Order does not exist.","ext_code":null,"ext_info":null,"result":null} '-2015': AuthenticationError, // Invalid API-key, IP, or permissions for action. '-6017': BadRequest, // Repayment amount has exceeded the total liability '-6025': BadRequest, // Amount to borrow cannot be lower than the min. amount to borrow (per transaction) '-6029': BadRequest, // Amount to borrow has exceeded the user's estimated max amount to borrow '5004': ExchangeError, // {"retCode":5004,"retMsg":"Server Timeout","result":null,"retExtInfo":{},"time":1667577060106} '7001': BadRequest, // {"retCode":7001,"retMsg":"request params type error"} '10001': BadRequest, // parameter error '10002': InvalidNonce, // request expired, check your timestamp and recv_window '10003': AuthenticationError, // Invalid apikey '10004': AuthenticationError, // invalid sign '10005': PermissionDenied, // permission denied for current apikey '10006': RateLimitExceeded, // too many requests '10007': AuthenticationError, // api_key not found in your request parameters '10008': AccountSuspended, // User had been banned '10009': AuthenticationError, // IP had been banned '10010': PermissionDenied, // request ip mismatch '10014': BadRequest, // Request is duplicate '10016': ExchangeError, // {"retCode":10016,"retMsg":"System error. Please try again later."} '10017': BadRequest, // request path not found or request method is invalid '10018': RateLimitExceeded, // exceed ip rate limit '10020': PermissionDenied, // {"retCode":10020,"retMsg":"your account is not a unified margin account, please update your account","result":null,"retExtInfo":null,"time":1664783731123} '10024': PermissionDenied, // Compliance rules triggered '10027': PermissionDenied, // Trading Banned '10028': PermissionDenied, // The API can only be accessed by unified account users. '10029': PermissionDenied, // The requested symbol is invalid, please check symbol whitelist '12137': InvalidOrder, // {"retCode":12137,"retMsg":"Order quantity has too many decimals.","result":{},"retExtInfo":{},"time":1695900943033} '12201': BadRequest, // {"retCode":12201,"retMsg":"Invalid orderCategory parameter.","result":{},"retExtInfo":null,"time":1666699391220} '12141': BadRequest, // "retCode":12141,"retMsg":"Duplicate clientOrderId.","result":{},"retExtInfo":{},"time":1686134298989} '100028': PermissionDenied, // The API cannot be accessed by unified account users. '110001': OrderNotFound, // Order does not exist '110003': InvalidOrder, // Order price is out of permissible range '110004': InsufficientFunds, // Insufficient wallet balance '110005': InvalidOrder, // position status '110006': InsufficientFunds, // cannot afford estimated position_margin '110007': InsufficientFunds, // {"retCode":110007,"retMsg":"ab not enough for new order","result":{},"retExtInfo":{},"time":1668838414793} '110008': InvalidOrder, // Order has been finished or canceled '110009': InvalidOrder, // The number of stop orders exceeds maximum limit allowed '110010': InvalidOrder, // Order already cancelled '110011': InvalidOrder, // Any adjustments made will trigger immediate liquidation '110012': InsufficientFunds, // Available balance not enough '110013': BadRequest, // Due to risk limit, cannot set leverage '110014': InsufficientFunds, // Available balance not enough to add margin '110015': BadRequest, // the position is in cross_margin '110016': InvalidOrder, // Requested quantity of contracts exceeds risk limit, please adjust your risk limit level before trying again '110017': InvalidOrder, // Reduce-only rule not satisfied '110018': BadRequest, // userId illegal '110019': InvalidOrder, // orderId illegal '110020': InvalidOrder, // number of active orders greater than 500 '110021': InvalidOrder, // Open Interest exceeded '110022': InvalidOrder, // qty has been limited, cannot modify the order to add qty '110023': InvalidOrder, // This contract only supports position reduction operation, please contact customer service for details '110024': BadRequest, // You have an existing position, so position mode cannot be switched '110025': NoChange, // Position mode is not modified '110026': MarginModeAlreadySet, // Cross/isolated margin mode is not modified '110027': NoChange, // Margin is not modified '110028': BadRequest, // Open orders exist, so you cannot change position mode '110029': BadRequest, // Hedge mode is not available for this symbol '110030': InvalidOrder, // Duplicate orderId '110031': InvalidOrder, // risk limit info does not exists '110032': InvalidOrder, // Illegal order '110033': InvalidOrder, // Margin cannot be set without open position '110034': InvalidOrder, // There is no net position '110035': InvalidOrder, // Cancel order is not completed before liquidation '110036': InvalidOrder, // Cross margin mode is not allowed to change leverage '110037': InvalidOrder, // User setting list does not have this symbol '110038': InvalidOrder, // Portfolio margin mode is not allowed to change leverage '110039': InvalidOrder, // Maintain margin rate is too high, which may trigger liquidation '110040': InvalidOrder, // Order will trigger forced liquidation, please resubmit the order '110041': InvalidOrder, // Skip liquidation is not allowed when a position or maker order exists '110042': InvalidOrder, // Pre-delivery status can only reduce positions '110043': BadRequest, // Set leverage not modified '110044': InsufficientFunds, // Insufficient available margin '110045': InsufficientFunds, // Insufficient wallet balance '110046': BadRequest, // Any adjustments made will trigger immediate liquidation '110047': BadRequest, // Risk limit cannot be adjusted due to insufficient available margin '110048': BadRequest, // Risk limit cannot be adjusted as the current/expected position value held exceeds the revised risk limit '110049': BadRequest, // Tick notes can only be numbers '110050': BadRequest, // Coin is not in the range of selected '110051': InsufficientFunds, // The user's available balance cannot cover the lowest price of the current market '110052': InsufficientFunds, // User's available balance is insufficient to set a price '110053': InsufficientFunds, // The user's available balance cannot cover the current market price and upper limit price '110054': InvalidOrder, // This position has at least one take profit link order, so the take profit and stop loss mode cannot be switched '110055': InvalidOrder, // This position has at least one stop loss link order, so the take profit and stop loss mode cannot be switched '110056': InvalidOrder, // This position has at least one trailing stop link order, so the take profit and stop loss mode cannot be switched '110057': InvalidOrder, // Conditional order or limit order contains TP/SL related params '110058': InvalidOrder, // Insufficient number of remaining position size to set take profit and stop loss '110059': InvalidOrder, // In the case of partial filled of the open order, it is not allowed to modify the take profit and stop loss settings of the open order '110060': BadRequest, // Under full TP/SL mode, it i