@proton/ccxt
Version:
A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 130+ exchanges
1,103 lines (1,101 loc) • 209 kB
JavaScript
// ----------------------------------------------------------------------------
// 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 Exchange from './abstract/bitget.js';
import { ExchangeError, ExchangeNotAvailable, NotSupported, OnMaintenance, ArgumentsRequired, BadRequest, AccountSuspended, InvalidAddress, PermissionDenied, DDoSProtection, InsufficientFunds, InvalidNonce, CancelPending, InvalidOrder, OrderNotFound, AuthenticationError, RequestTimeout, BadSymbol, RateLimitExceeded } from './base/errors.js';
import { Precise } from './base/Precise.js';
import { TICK_SIZE } from './base/functions/number.js';
import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
// ---------------------------------------------------------------------------
export default class bitget extends Exchange {
describe() {
return this.deepExtend(super.describe(), {
'id': 'bitget',
'name': 'Bitget',
'countries': ['SG'],
'version': 'v1',
'rateLimit': 50,
'certified': true,
'pro': true,
'has': {
'CORS': undefined,
'spot': true,
'margin': false,
'swap': true,
'future': true,
'option': false,
'addMargin': true,
'cancelAllOrders': true,
'cancelOrder': true,
'cancelOrders': true,
'createOrder': true,
'createReduceOnlyOrder': false,
'editOrder': true,
'fetchAccounts': false,
'fetchBalance': true,
'fetchBorrowRate': false,
'fetchBorrowRateHistories': false,
'fetchBorrowRateHistory': false,
'fetchBorrowRates': false,
'fetchBorrowRatesPerSymbol': false,
'fetchCanceledOrders': true,
'fetchClosedOrders': true,
'fetchCurrencies': true,
'fetchDepositAddress': true,
'fetchDepositAddresses': false,
'fetchDeposits': true,
'fetchDepositWithdrawFee': 'emulated',
'fetchDepositWithdrawFees': true,
'fetchFundingHistory': true,
'fetchFundingRate': true,
'fetchFundingRateHistory': true,
'fetchFundingRates': false,
'fetchIndexOHLCV': false,
'fetchLedger': true,
'fetchLeverage': true,
'fetchLeverageTiers': false,
'fetchMarginMode': undefined,
'fetchMarketLeverageTiers': true,
'fetchMarkets': true,
'fetchMarkOHLCV': false,
'fetchMyTrades': true,
'fetchOHLCV': true,
'fetchOpenInterest': true,
'fetchOpenInterestHistory': false,
'fetchOpenOrders': true,
'fetchOrder': true,
'fetchOrderBook': true,
'fetchOrders': false,
'fetchOrderTrades': true,
'fetchPosition': true,
'fetchPositionMode': false,
'fetchPositions': true,
'fetchPositionsRisk': false,
'fetchPremiumIndexOHLCV': false,
'fetchTicker': true,
'fetchTickers': true,
'fetchTime': true,
'fetchTrades': true,
'fetchTradingFee': true,
'fetchTradingFees': true,
'fetchTransfer': false,
'fetchTransfers': true,
'fetchWithdrawal': false,
'fetchWithdrawals': true,
'reduceMargin': true,
'setLeverage': true,
'setMarginMode': true,
'setPositionMode': true,
'transfer': true,
'withdraw': false,
},
'timeframes': {
'1m': '1m',
'3m': '3m',
'5m': '5m',
'15m': '15m',
'30m': '30m',
'1h': '1h',
'2h': '2h',
'4h': '4h',
'6h': '6h',
'12h': '12h',
'1d': '1d',
'3d': '3d',
'1w': '1w',
'1M': '1m',
},
'hostname': 'bitget.com',
'urls': {
'logo': 'https://user-images.githubusercontent.com/1294454/195989417-4253ddb0-afbe-4a1c-9dea-9dbcd121fa5d.jpg',
'api': {
'spot': 'https://api.{hostname}',
'mix': 'https://api.{hostname}',
'user': 'https://api.{hostname}',
'p2p': 'https://api.{hostname}',
'broker': 'https://api.{hostname}',
'margin': 'https://api.{hostname}',
},
'www': 'https://www.bitget.com',
'doc': [
'https://bitgetlimited.github.io/apidoc/en/mix',
'https://bitgetlimited.github.io/apidoc/en/spot',
'https://bitgetlimited.github.io/apidoc/en/broker',
'https://bitgetlimited.github.io/apidoc/en/margin',
],
'fees': 'https://www.bitget.cc/zh-CN/rate?tab=1',
'referral': 'https://www.bitget.com/expressly?languageType=0&channelCode=ccxt&vipCode=tg9j',
},
'api': {
'public': {
'spot': {
'get': {
'public/time': 1,
'public/currencies': 6.6667,
'public/products': 1,
'public/product': 1,
'market/ticker': 1,
'market/tickers': 1,
'market/fills': 2,
'market/fills-history': 2,
'market/candles': 1,
'market/depth': 1,
'market/spot-vip-level': 2,
},
},
'mix': {
'get': {
'market/contracts': 1,
'market/depth': 1,
'market/ticker': 1,
'market/tickers': 1,
'market/contract-vip-level': 2,
'market/fills': 1,
'market/fills-history': 2,
'market/candles': 1,
'market/index': 1,
'market/funding-time': 1,
'market/history-fundRate': 1,
'market/current-fundRate': 1,
'market/open-interest': 1,
'market/mark-price': 1,
'market/symbol-leverage': 1,
'market/queryPositionLever': 1,
},
},
'margin': {
'get': {
'cross/public/interestRateAndLimit': 2,
'isolated/public/interestRateAndLimit': 2,
'cross/public/tierData': 2,
'isolated/public/tierData': 2,
'public/currencies': 1,
'cross/account/assets': 2,
'isolated/account/assets': 2, // 10 times/1s (IP) => 20/10 = 2
},
},
},
'private': {
'spot': {
'get': {
'wallet/deposit-address': 4,
'wallet/withdrawal-list': 1,
'wallet/deposit-list': 1,
'account/getInfo': 20,
'account/assets': 2,
'account/assets-lite': 2,
'account/transferRecords': 1, // 20 times/1s (UID) => 20/20 = 1
},
'post': {
'wallet/transfer': 4,
'wallet/transfer-v2': 4,
'wallet/subTransfer': 10,
'wallet/withdrawal': 4,
'wallet/withdrawal-v2': 4,
'wallet/withdrawal-inner': 4,
'wallet/withdrawal-inner-v2': 4,
'account/sub-account-spot-assets': 200,
'account/bills': 2,
'trade/orders': 2,
'trade/batch-orders': 4,
'trade/cancel-order': 2,
'trade/cancel-order-v2': 2,
'trade/cancel-symbol-order': 2,
'trade/cancel-batch-orders': 4,
'trade/cancel-batch-orders-v2': 4,
'trade/orderInfo': 1,
'trade/open-orders': 1,
'trade/history': 1,
'trade/fills': 1,
'plan/placePlan': 1,
'plan/modifyPlan': 1,
'plan/cancelPlan': 1,
'plan/currentPlan': 1,
'plan/historyPlan': 1,
'plan/batchCancelPlan': 2,
'trace/order/orderCurrentList': 2,
'trace/order/orderHistoryList': 2,
'trace/order/closeTrackingOrder': 2,
'trace/order/updateTpsl': 2,
'trace/order/followerEndOrder': 2,
'trace/order/spotInfoList': 2,
'trace/config/getTraderSettings': 2,
'trace/config/getFollowerSettings': 2,
'trace/user/myTraders': 2,
'trace/config/setFollowerConfig': 2,
'trace/user/myFollowers': 2,
'trace/config/setProductCode': 2,
'trace/user/removeTrader': 2,
'trace/profit/totalProfitInfo': 2,
'trace/profit/totalProfitList': 2,
'trace/profit/profitHisList': 2,
'trace/profit/profitHisDetailList': 2,
'trace/profit/waitProfitDetailList': 2,
'trace/user/getTraderInfo': 2, // 10 times/1s (UID) => 20/10 = 2
},
},
'mix': {
'get': {
'account/account': 2,
'account/accounts': 2,
'position/singlePosition': 2,
'position/singlePosition-v2': 2,
'position/allPosition': 4,
'position/allPosition-v2': 4,
'account/accountBill': 2,
'account/accountBusinessBill': 4,
'order/current': 1,
'order/marginCoinCurrent': 1,
'order/history': 2,
'order/historyProductType': 4,
'order/detail': 2,
'order/fills': 2,
'order/allFills': 2,
'plan/currentPlan': 1,
'plan/historyPlan': 2,
'trace/currentTrack': 2,
'trace/followerOrder': 2,
'trace/followerHistoryOrders': 2,
'trace/historyTrack': 2,
'trace/summary': 1,
'trace/profitSettleTokenIdGroup': 1,
'trace/profitDateGroupList': 1,
'trade/profitDateList': 2,
'trace/waitProfitDateList': 1,
'trace/traderSymbols': 1,
'trace/traderList': 2,
'trace/traderDetail': 2,
'trace/queryTraceConfig': 2,
},
'post': {
'account/sub-account-contract-assets': 200,
'account/open-count': 1,
'account/setLeverage': 4,
'account/setMargin': 4,
'account/setMarginMode': 4,
'account/setPositionMode': 4,
'order/placeOrder': 2,
'order/batch-orders': 2,
'order/cancel-order': 2,
'order/cancel-batch-orders': 2,
'order/modifyOrder': 2,
'order/cancel-symbol-orders': 2,
'order/cancel-all-orders': 2,
'order/close-all-positions': 20,
'plan/placePlan': 2,
'plan/modifyPlan': 2,
'plan/modifyPlanPreset': 2,
'plan/placeTPSL': 2,
'plan/placeTrailStop': 2,
'plan/placePositionsTPSL': 2,
'plan/modifyTPSLPlan': 2,
'plan/cancelPlan': 2,
'plan/cancelSymbolPlan': 2,
'plan/cancelAllPlan': 2,
'trace/closeTrackOrder': 2,
'trace/modifyTPSL': 2,
'trace/setUpCopySymbols': 2,
'trace/followerSetBatchTraceConfig': 2,
'trace/followerCloseByTrackingNo': 2,
'trace/followerCloseByAll': 2,
'trace/followerSetTpsl': 2,
'trace/cancelCopyTrader': 4,
'trace/traderUpdateConfig': 2,
'trace/myTraderList': 2,
'trace/myFollowerList': 2,
'trace/removeFollower': 2,
'trace/public/getFollowerConfig': 2,
'trace/report/order/historyList': 2,
'trace/report/order/currentList': 2,
'trace/queryTraderTpslRatioConfig': 2,
'trace/traderUpdateTpslRatioConfig': 2, // 10 times/1s (UID) => 20/10 = 2
},
},
'user': {
'get': {
'fee/query': 2,
'sub/virtual-list': 2,
'sub/virtual-api-list': 2,
'tax/spot-record': 1,
'tax/future-record': 1,
'tax/margin-record': 1,
'tax/p2p-record': 1,
},
'post': {
'sub/virtual-create': 4,
'sub/virtual-modify': 4,
'sub/virtual-api-batch-create': 20,
'sub/virtual-api-create': 4,
'sub/virtual-api-modify': 4,
},
},
'p2p': {
'get': {
'merchant/merchantList': 2,
'merchant/merchantInfo': 2,
'merchant/advList': 2,
'merchant/orderList': 2, // 10 times/1s (UID) => 20/10 = 2
},
},
'broker': {
'get': {
'account/info': 2,
'account/sub-list': 20,
'account/sub-email': 20,
'account/sub-spot-assets': 2,
'account/sub-future-assets': 2,
'account/sub-api-list': 2, // 10 times/1s (UID) => 20/10 = 2
},
'post': {
'account/sub-create': 20,
'account/sub-modify': 20,
'account/sub-modify-email': 20,
'account/sub-address': 2,
'account/sub-withdrawal': 2,
'account/sub-auto-transfer': 4,
'account/sub-api-create': 2,
'account/sub-api-modify': 2, // 10 times/1s (UID) => 20/10 = 2
},
},
'margin': {
'get': {
'cross/account/riskRate': 2,
'cross/account/maxTransferOutAmount': 2,
'isolated/account/maxTransferOutAmount': 2,
'isolated/order/openOrders': 2,
'isolated/order/history': 2,
'isolated/order/fills': 2,
'isolated/loan/list': 2,
'isolated/repay/list': 2,
'isolated/interest/list': 2,
'isolated/liquidation/list': 2,
'isolated/fin/list': 2,
'cross/order/openOrders': 2,
'cross/order/history': 2,
'cross/order/fills': 2,
'cross/loan/list': 2,
'cross/repay/list': 2,
'cross/interest/list': 2,
'cross/liquidation/list': 2,
'cross/fin/list': 2, // 10 times/1s (UID) => 20/10 = 2
},
'post': {
'cross/account/borrow': 2,
'isolated/account/borrow': 2,
'cross/account/repay': 2,
'isolated/account/repay': 2,
'isolated/account/riskRate': 2,
'cross/account/maxBorrowableAmount': 2,
'isolated/account/maxBorrowableAmount': 2,
'isolated/order/placeOrder': 4,
'isolated/order/batchPlaceOrder': 4,
'isolated/order/cancelOrder': 2,
'isolated/order/batchCancelOrder': 2,
'cross/order/placeOrder': 2,
'cross/order/batchPlaceOrder': 2,
'cross/order/cancelOrder': 2,
'cross/order/batchCancelOrder': 2, // 10 times/1s (UID) => 20/10 = 2
},
},
},
},
'fees': {
'spot': {
'taker': this.parseNumber('0.002'),
'maker': this.parseNumber('0.002'),
},
'swap': {
'taker': this.parseNumber('0.0006'),
'maker': this.parseNumber('0.0004'),
},
},
'requiredCredentials': {
'apiKey': true,
'secret': true,
'password': true,
},
'exceptions': {
// http error codes
// 400 Bad Request — Invalid request format
// 401 Unauthorized — Invalid API Key
// 403 Forbidden — You do not have access to the requested resource
// 404 Not Found
// 500 Internal Server Error — We had a problem with our server
'exact': {
'1': ExchangeError,
// undocumented
'failure to get a peer from the ring-balancer': ExchangeNotAvailable,
'4010': PermissionDenied,
// common
// '0': ExchangeError, // 200 successful,when the order placement / cancellation / operation is successful
'4001': ExchangeError,
'4002': ExchangeError,
// --------------------------------------------------------
'30001': AuthenticationError,
'30002': AuthenticationError,
'30003': AuthenticationError,
'30004': AuthenticationError,
'30005': InvalidNonce,
'30006': AuthenticationError,
'30007': BadRequest,
'30008': RequestTimeout,
'30009': ExchangeError,
'30010': AuthenticationError,
'30011': PermissionDenied,
'30012': AuthenticationError,
'30013': AuthenticationError,
'30014': DDoSProtection,
'30015': AuthenticationError,
'30016': ExchangeError,
'30017': ExchangeError,
'30018': ExchangeError,
'30019': ExchangeNotAvailable,
'30020': BadRequest,
'30021': BadRequest,
'30022': PermissionDenied,
'30023': BadRequest,
'30024': BadSymbol,
'30025': BadRequest,
'30026': DDoSProtection,
'30027': AuthenticationError,
'30028': PermissionDenied,
'30029': AccountSuspended,
'30030': ExchangeError,
'30031': BadRequest,
'30032': BadSymbol,
'30033': BadRequest,
'30034': ExchangeError,
'30035': ExchangeError,
'30036': ExchangeError,
'30037': ExchangeNotAvailable,
// '30038': AuthenticationError, // { "code": 30038, "message": "user does not exist" }
'30038': OnMaintenance,
// futures
'32001': AccountSuspended,
'32002': PermissionDenied,
'32003': CancelPending,
'32004': ExchangeError,
'32005': InvalidOrder,
'32006': InvalidOrder,
'32007': InvalidOrder,
'32008': InvalidOrder,
'32009': InvalidOrder,
'32010': ExchangeError,
'32011': ExchangeError,
'32012': ExchangeError,
'32013': ExchangeError,
'32014': ExchangeError,
'32015': ExchangeError,
'32016': ExchangeError,
'32017': ExchangeError,
'32018': ExchangeError,
'32019': ExchangeError,
'32020': ExchangeError,
'32021': ExchangeError,
'32022': ExchangeError,
'32023': ExchangeError,
'32024': ExchangeError,
'32025': ExchangeError,
'32026': ExchangeError,
'32027': ExchangeError,
'32028': AccountSuspended,
'32029': ExchangeError,
'32030': InvalidOrder,
'32031': ArgumentsRequired,
'32038': AuthenticationError,
'32040': ExchangeError,
'32044': ExchangeError,
'32045': ExchangeError,
'32046': ExchangeError,
'32047': ExchangeError,
'32048': InvalidOrder,
'32049': ExchangeError,
'32050': InvalidOrder,
'32051': InvalidOrder,
'32052': ExchangeError,
'32053': ExchangeError,
'32057': ExchangeError,
'32054': ExchangeError,
'32055': InvalidOrder,
'32056': ExchangeError,
'32058': ExchangeError,
'32059': InvalidOrder,
'32060': InvalidOrder,
'32061': InvalidOrder,
'32062': InvalidOrder,
'32063': InvalidOrder,
'32064': ExchangeError,
'32065': ExchangeError,
'32066': ExchangeError,
'32067': ExchangeError,
'32068': ExchangeError,
'32069': ExchangeError,
'32070': ExchangeError,
'32071': ExchangeError,
'32072': ExchangeError,
'32073': ExchangeError,
'32074': ExchangeError,
'32075': ExchangeError,
'32076': ExchangeError,
'32077': ExchangeError,
'32078': ExchangeError,
'32079': ExchangeError,
'32080': ExchangeError,
'32083': ExchangeError,
// token and margin trading
'33001': PermissionDenied,
'33002': AccountSuspended,
'33003': InsufficientFunds,
'33004': ExchangeError,
'33005': ExchangeError,
'33006': ExchangeError,
'33007': ExchangeError,
'33008': InsufficientFunds,
'33009': ExchangeError,
'33010': ExchangeError,
'33011': ExchangeError,
'33012': ExchangeError,
'33013': InvalidOrder,
'33014': OrderNotFound,
'33015': InvalidOrder,
'33016': ExchangeError,
'33017': InsufficientFunds,
'33018': ExchangeError,
'33020': ExchangeError,
'33021': BadRequest,
'33022': InvalidOrder,
'33023': ExchangeError,
'33024': InvalidOrder,
'33025': InvalidOrder,
'33026': ExchangeError,
'33027': InvalidOrder,
'33028': InvalidOrder,
'33029': InvalidOrder,
'33034': ExchangeError,
'33035': ExchangeError,
'33036': ExchangeError,
'33037': ExchangeError,
'33038': ExchangeError,
'33039': ExchangeError,
'33040': ExchangeError,
'33041': ExchangeError,
'33042': ExchangeError,
'33043': ExchangeError,
'33044': ExchangeError,
'33045': ExchangeError,
'33046': ExchangeError,
'33047': ExchangeError,
'33048': ExchangeError,
'33049': ExchangeError,
'33050': ExchangeError,
'33051': ExchangeError,
'33059': BadRequest,
'33060': BadRequest,
'33061': ExchangeError,
'33062': ExchangeError,
'33063': ExchangeError,
'33064': ExchangeError,
'33065': ExchangeError,
// account
'21009': ExchangeError,
'34001': PermissionDenied,
'34002': InvalidAddress,
'34003': ExchangeError,
'34004': ExchangeError,
'34005': ExchangeError,
'34006': ExchangeError,
'34007': ExchangeError,
'34008': InsufficientFunds,
'34009': ExchangeError,
'34010': ExchangeError,
'34011': ExchangeError,
'34012': ExchangeError,
'34013': ExchangeError,
'34014': ExchangeError,
'34015': ExchangeError,
'34016': PermissionDenied,
'34017': AccountSuspended,
'34018': AuthenticationError,
'34019': PermissionDenied,
'34020': PermissionDenied,
'34021': InvalidAddress,
'34022': ExchangeError,
'34023': PermissionDenied,
'34026': ExchangeError,
'34036': ExchangeError,
'34037': ExchangeError,
'34038': ExchangeError,
'34039': ExchangeError,
// swap
'35001': ExchangeError,
'35002': ExchangeError,
'35003': ExchangeError,
'35004': ExchangeError,
'35005': AuthenticationError,
'35008': InvalidOrder,
'35010': InvalidOrder,
'35012': InvalidOrder,
'35014': InvalidOrder,
'35015': InvalidOrder,
'35017': ExchangeError,
'35019': InvalidOrder,
'35020': InvalidOrder,
'35021': InvalidOrder,
'35022': ExchangeError,
'35024': ExchangeError,
'35025': InsufficientFunds,
'35026': ExchangeError,
'35029': OrderNotFound,
'35030': InvalidOrder,
'35031': InvalidOrder,
'35032': ExchangeError,
'35037': ExchangeError,
'35039': ExchangeError,
'35040': InvalidOrder,
'35044': ExchangeError,
'35046': InsufficientFunds,
'35047': InsufficientFunds,
'35048': ExchangeError,
'35049': InvalidOrder,
'35050': InvalidOrder,
'35052': InsufficientFunds,
'35053': ExchangeError,
'35055': InsufficientFunds,
'35057': ExchangeError,
'35058': ExchangeError,
'35059': BadRequest,
'35060': BadRequest,
'35061': BadRequest,
'35062': InvalidOrder,
'35063': InvalidOrder,
'35064': InvalidOrder,
'35066': InvalidOrder,
'35067': InvalidOrder,
'35068': InvalidOrder,
'35069': InvalidOrder,
'35070': InvalidOrder,
'35071': InvalidOrder,
'35072': InvalidOrder,
'35073': InvalidOrder,
'35074': InvalidOrder,
'35075': InvalidOrder,
'35076': InvalidOrder,
'35077': InvalidOrder,
'35078': InvalidOrder,
'35079': InvalidOrder,
'35080': InvalidOrder,
'35081': InvalidOrder,
'35082': InvalidOrder,
'35083': InvalidOrder,
'35084': InvalidOrder,
'35085': InvalidOrder,
'35086': InvalidOrder,
'35087': InvalidOrder,
'35088': InvalidOrder,
'35089': InvalidOrder,
'35090': ExchangeError,
'35091': ExchangeError,
'35092': ExchangeError,
'35093': ExchangeError,
'35094': ExchangeError,
'35095': BadRequest,
'35096': ExchangeError,
'35097': ExchangeError,
'35098': ExchangeError,
'35099': ExchangeError,
// option
'36001': BadRequest,
'36002': BadRequest,
'36005': ExchangeError,
'36101': AuthenticationError,
'36102': PermissionDenied,
'36103': AccountSuspended,
'36104': PermissionDenied,
'36105': PermissionDenied,
'36106': AccountSuspended,
'36107': PermissionDenied,
'36108': InsufficientFunds,
'36109': PermissionDenied,
'36201': PermissionDenied,
'36202': PermissionDenied,
'36203': InvalidOrder,
'36204': ExchangeError,
'36205': BadRequest,
'36206': BadRequest,
'36207': InvalidOrder,
'36208': InvalidOrder,
'36209': InvalidOrder,
'36210': InvalidOrder,
'36211': InvalidOrder,
'36212': InvalidOrder,
'36213': InvalidOrder,
'36214': ExchangeError,
'36216': OrderNotFound,
'36217': InvalidOrder,
'36218': InvalidOrder,
'36219': InvalidOrder,
'36220': InvalidOrder,
'36221': InvalidOrder,
'36222': InvalidOrder,
'36223': InvalidOrder,
'36224': InvalidOrder,
'36225': InvalidOrder,
'36226': InvalidOrder,
'36227': InvalidOrder,
'36228': InvalidOrder,
'36229': InvalidOrder,
'36230': InvalidOrder,
// --------------------------------------------------------
// swap
'400': BadRequest,
'401': AuthenticationError,
'403': PermissionDenied,
'404': BadRequest,
'405': BadRequest,
'415': BadRequest,
'429': DDoSProtection,
'500': ExchangeNotAvailable,
'1001': RateLimitExceeded,
'1002': ExchangeError,
'1003': ExchangeError,
// '00000': ExchangeError, // success
'40001': AuthenticationError,
'40002': AuthenticationError,
'40003': AuthenticationError,
'40004': InvalidNonce,
'40005': InvalidNonce,
'40006': AuthenticationError,
'40007': BadRequest,
'40008': InvalidNonce,
'40009': AuthenticationError,
'40010': AuthenticationError,
'40011': AuthenticationError,
'40012': AuthenticationError,
'40013': ExchangeError,
'40014': PermissionDenied,
'40015': ExchangeError,
'40016': PermissionDenied,
'40017': ExchangeError,
'40018': PermissionDenied,
'40019': BadRequest,
'40102': BadRequest,
'40103': BadRequest,
'40104': ExchangeError,
'40105': ExchangeError,
'40106': ExchangeError,
'40107': ExchangeError,
'40108': InvalidOrder,
'40109': OrderNotFound,
'40200': OnMaintenance,
'40201': InvalidOrder,
'40202': ExchangeError,
'40203': BadRequest,
'40204': BadRequest,
'40205': BadRequest,
'40206': BadRequest,
'40207': BadRequest,
'40208': BadRequest,
'40209': BadRequest,
'40300': ExchangeError,
'40301': PermissionDenied,
'40302': BadRequest,
'40303': BadRequest,
'40304': BadRequest,
'40305': BadRequest,
'40306': ExchangeError,
'40308': OnMaintenance,
'40309': BadSymbol,
'40400': ExchangeError,
'40401': ExchangeError,
'40402': BadRequest,
'40403': BadRequest,
'40404': BadRequest,
'40405': BadRequest,
'40406': BadRequest,
'40407': ExchangeError,
'40408': ExchangeError,
'40409': ExchangeError,
'40500': InvalidOrder,
'40501': ExchangeError,
'40502': ExchangeError,
'40503': ExchangeError,
'40504': ExchangeError,
'40505': ExchangeError,
'40506': AuthenticationError,
'40507': AuthenticationError,
'40508': ExchangeError,
'40509': ExchangeError,
'40600': ExchangeError,
'40601': ExchangeError,
'40602': ExchangeError,
'40603': ExchangeError,
'40604': ExchangeNotAvailable,
'40605': ExchangeError,
'40606': ExchangeError,
'40607': ExchangeError,
'40608': ExchangeError,
'40609': ExchangeError,
'40700': BadRequest,
'40701': ExchangeError,
'40702': ExchangeError,
'40703': ExchangeError,
'40704': ExchangeError,
'40705': BadRequest,
'40706': InvalidOrder,
'40707': BadRequest,
'40708': BadRequest,
'40709': ExchangeError,
'40710': ExchangeError,
'40711': InsufficientFunds,
'40712': InsufficientFunds,
'40713': ExchangeError,
'40714': ExchangeError,
'41114': OnMaintenance,
'43011': InvalidOrder,
'43025': InvalidOrder,
'45110': InvalidOrder,
// spot
'invalid sign': AuthenticationError,
'invalid currency': BadSymbol,
'invalid symbol': BadSymbol,
'invalid period': BadRequest,
'invalid user': ExchangeError,
'invalid amount': InvalidOrder,
'invalid type': InvalidOrder,
'invalid orderId': InvalidOrder,
'invalid record': ExchangeError,
'invalid accountId': BadRequest,
'invalid address': BadRequest,
'accesskey not null': AuthenticationError,
'illegal accesskey': AuthenticationError,
'sign not null': AuthenticationError,
'req_time is too much difference from server time': InvalidNonce,
'permissions not right': PermissionDenied,
'illegal sign invalid': AuthenticationError,
'user locked': AccountSuspended,
'Request Frequency Is Too High': RateLimitExceeded,
'more than a daily rate of cash': BadRequest,
'more than the maximum daily withdrawal amount': BadRequest,
'need to bind email or mobile': ExchangeError,
'user forbid': PermissionDenied,
'User Prohibited Cash Withdrawal': PermissionDenied,
'Cash Withdrawal Is Less Than The Minimum Value': BadRequest,
'Cash Withdrawal Is More Than The Maximum Value': BadRequest,
'the account with in 24 hours ban coin': PermissionDenied,
'order cancel fail': BadRequest,
'base symbol error': BadSymbol,
'base date error': ExchangeError,
'api signature not valid': AuthenticationError,
'gateway internal error': ExchangeError,
'audit failed': ExchangeError,
'order queryorder invalid': BadRequest,
'market no need price': InvalidOrder,
'limit need price': InvalidOrder,
'userid not equal to account_id': ExchangeError,
'your balance is low': InsufficientFunds,
'address invalid cointype': ExchangeError,
'system exception': ExchangeError,
'50003': ExchangeError,
'50004': BadSymbol,
'50006': PermissionDenied,
'50007': PermissionDenied,
'50008': RequestTimeout,
'50009': RateLimitExceeded,
'50010': ExchangeError,
'50014': InvalidOrder,
'50015': InvalidOrder,
'50016': InvalidOrder,
'50017': InvalidOrder,
'50018': InvalidOrder,
'50019': InvalidOrder,
'50020': InsufficientFunds,
'50021': InvalidOrder,
'50026': InvalidOrder,
'invalid order query time': ExchangeError,
'invalid start time': BadRequest,
'invalid end time': BadRequest,
'20003': ExchangeError,
'01001': ExchangeError,
'43111': PermissionDenied, // {"code":"43111","msg":"参数错误 address not in address book","requestTime":1665394201164,"data":null}
},
'broad': {
'invalid size, valid range': ExchangeError,
},
},
'precisionMode': TICK_SIZE,
'commonCurrencies': {
'JADE': 'Jade Protocol',
},
'options': {
'timeframes': {
'spot': {
'1m': '1min',
'5m': '5min',
'15m': '15min',
'30m': '30min',
'1h': '1h',
'4h': '4h',
'6h': '6Hutc',
'12h': '12Hutc',
'1d': '1Dutc',
'3d': '3Dutc',
'1w': '1Wutc',
'1M': '1Mutc',
},
'swap': {
'1m': '1m',
'3m': '3m',
'5m': '5m',
'15m': '15m',
'30m': '30m',
'1h': '1H',
'2h': '2H',
'4h': '4H',
'6h': '6Hutc',
'12h': '12Hutc',
'1d': '1Dutc',
'3d': '3Dutc',
'1w': '1Wutc',
'1M': '1Mutc',
},
},
'fetchMarkets': [
'spot',
'swap',
],
'defaultType': 'spot',
'defaultSubType': 'linear',
'createMarketBuyOrderRequiresPrice': true,
'broker': 'p4sve',
'withdraw': {
'fillResponseFromRequest': true,
},
'accountsByType': {
'main': 'EXCHANGE',
'spot': 'EXCHANGE',
'future': 'USDT_MIX',
'contract': 'CONTRACT',
'mix': 'USD_MIX',
},
'accountsById': {
'EXCHANGE': 'spot',
'USDT_MIX': 'future',
'CONTRACT': 'swap',
'USD_MIX': 'swap',
},
'sandboxMode': false,
'networks': {
'TRX': 'TRC20',
'ETH': 'ERC20',
'BSC': 'BEP20',
},
'networksById': {
'TRC20': 'TRX',
'BSC': 'BEP20',
},
'defaultTimeInForce': 'GTC', // 'GTC' = Good To Cancel (default), 'IOC' = Immediate Or Cancel
},
});
}
setSandboxMode(enabled) {
this.options['sandboxMode'] = enabled;
}
async fetchTime(params = {}) {
/**
* @method
* @name bitget#fetchTime
* @description fetches the current integer timestamp in milliseconds from the exchange server
* @param {object} params extra parameters specific to the bitget api endpoint
* @returns {int} the current integer timestamp in milliseconds from the exchange server
*/
const response = await this.publicSpotGetPublicTime(params);
//
// {
// code: '00000',
// msg: 'success',
// requestTime: 1645837773501,
// data: '1645837773501'
// }
//
return this.safeInteger(response, 'data');
}
async fetchMarkets(params = {}) {
/**
* @method
* @name bitget#fetchMarkets
* @description retrieves data on all markets for bitget
* @param {object} params extra parameters specific to the exchange api endpoint
* @returns {[object]} an array of objects representing market data
*/
const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);
let types = this.safeValue(this.options, 'fetchMarkets', ['spot', 'swap']);
if (sandboxMode) {
types = ['swap'];
}
let promises = [];
for (let i = 0; i < types.length; i++) {
const type = types[i];
if (type === 'swap') {
let subTypes = undefined;
if (sandboxMode) {
// the following are simulated trading markets [ 'sumcbl', 'sdmcbl', 'scmcbl' ];
subTypes = ['sumcbl', 'sdmcbl', 'scmcbl'];
}
else {
subTypes = ['umcbl', 'dmcbl', 'cmcbl'];
}
for (let j = 0; j < subTypes.length; j++) {
promises.push(this.fetchMarketsByType(type, this.extend(params, {
'productType': subTypes[j],
})));
}
}
else {
promises.push(this.fetchMarketsByType(types[i], params));
}
}
promises = await Promise.all(promises);
let result = promises[0];
for (let i = 1; i < promises.length; i++) {
result = this.arrayConcat(result, promises[i]);
}
return result;
}
parseMarkets(markets) {
const result = [];
for (let i = 0; i < markets.length; i++) {
result.push(this.parseMarket(markets[i]));
}
return result;
}
parseMarket(market) {
//
// spot
//
// {
// symbol: 'ALPHAUSDT_SPBL',
// symbolName: 'ALPHAUSDT',
// baseCoin: 'ALPHA',
// quoteCoin: 'USDT',
// minTradeAmount: '2',
// maxTradeAmount: '0',
// minTradeUSDT": '5',
// takerFeeRate: '0.001',
// makerFeeRate: '0.001',
// priceScale: '4',
// quantityScale: '4',
// status: 'online'
// }
//
// swap
//
// {
// symbol: 'BTCUSDT_UMCBL',
// makerFeeRate: '0.0002',
// takerFeeRate: '0.0006',
// feeRateUpRatio: '0.005',
// openCostUpRatio: '0.01',
// quoteCoin: 'USDT',
//