UNPKG

@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
// ---------------------------------------------------------------------------- // 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', //