UNPKG

ccxt

Version:

A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges

1,060 lines (1,057 loc) • 371 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/gate.js'; import { Precise } from './base/Precise.js'; import { TICK_SIZE } from './base/functions/number.js'; import { ExchangeError, BadRequest, ArgumentsRequired, AuthenticationError, PermissionDenied, AccountSuspended, InsufficientFunds, RateLimitExceeded, ExchangeNotAvailable, BadSymbol, InvalidOrder, OrderNotFound, NotSupported, AccountNotEnabled, OrderImmediatelyFillable } from './base/errors.js'; import { sha512 } from './static_dependencies/noble-hashes/sha512.js'; /** * @class gate * @augments Exchange */ export default class gate extends Exchange { describe() { return this.deepExtend(super.describe(), { 'id': 'gate', 'name': 'Gate.io', 'countries': ['KR'], 'rateLimit': 50, 'version': 'v4', 'certified': true, 'pro': true, 'urls': { 'logo': 'https://github.com/user-attachments/assets/64f988c5-07b6-4652-b5c1-679a6bf67c85', 'doc': 'https://www.gate.io/docs/developers/apiv4/en/', 'www': 'https://gate.io/', 'api': { 'public': { 'wallet': 'https://api.gateio.ws/api/v4', 'futures': 'https://api.gateio.ws/api/v4', 'margin': 'https://api.gateio.ws/api/v4', 'delivery': 'https://api.gateio.ws/api/v4', 'spot': 'https://api.gateio.ws/api/v4', 'options': 'https://api.gateio.ws/api/v4', 'sub_accounts': 'https://api.gateio.ws/api/v4', 'earn': 'https://api.gateio.ws/api/v4', }, 'private': { 'withdrawals': 'https://api.gateio.ws/api/v4', 'wallet': 'https://api.gateio.ws/api/v4', 'futures': 'https://api.gateio.ws/api/v4', 'margin': 'https://api.gateio.ws/api/v4', 'delivery': 'https://api.gateio.ws/api/v4', 'spot': 'https://api.gateio.ws/api/v4', 'options': 'https://api.gateio.ws/api/v4', 'subAccounts': 'https://api.gateio.ws/api/v4', 'unified': 'https://api.gateio.ws/api/v4', 'rebate': 'https://api.gateio.ws/api/v4', 'earn': 'https://api.gateio.ws/api/v4', 'account': 'https://api.gateio.ws/api/v4', 'loan': 'https://api.gateio.ws/api/v4', }, }, 'test': { 'public': { 'futures': 'https://fx-api-testnet.gateio.ws/api/v4', 'delivery': 'https://fx-api-testnet.gateio.ws/api/v4', 'options': 'https://fx-api-testnet.gateio.ws/api/v4', }, 'private': { 'futures': 'https://fx-api-testnet.gateio.ws/api/v4', 'delivery': 'https://fx-api-testnet.gateio.ws/api/v4', 'options': 'https://fx-api-testnet.gateio.ws/api/v4', }, }, 'referral': { 'url': 'https://www.gate.io/signup/2436035', 'discount': 0.2, }, }, 'has': { 'CORS': undefined, 'spot': true, 'margin': true, 'swap': true, 'future': true, 'option': true, 'addMargin': true, 'borrowCrossMargin': true, 'borrowIsolatedMargin': true, 'cancelAllOrders': true, 'cancelOrder': true, 'cancelOrders': true, 'cancelOrdersForSymbols': true, 'createMarketBuyOrderWithCost': true, 'createMarketOrder': true, 'createMarketOrderWithCost': false, 'createMarketSellOrderWithCost': false, 'createOrder': true, 'createOrders': true, 'createPostOnlyOrder': true, 'createReduceOnlyOrder': true, 'createStopLimitOrder': true, 'createStopLossOrder': true, 'createStopMarketOrder': false, 'createStopOrder': true, 'createTakeProfitOrder': true, 'createTriggerOrder': true, 'editOrder': true, 'fetchBalance': true, 'fetchBorrowInterest': true, 'fetchBorrowRateHistories': false, 'fetchBorrowRateHistory': false, 'fetchClosedOrders': true, 'fetchCrossBorrowRate': false, 'fetchCrossBorrowRates': false, 'fetchCurrencies': true, 'fetchDepositAddress': true, 'fetchDepositAddresses': false, 'fetchDepositAddressesByNetwork': true, 'fetchDeposits': true, 'fetchDepositWithdrawFee': 'emulated', 'fetchDepositWithdrawFees': true, 'fetchFundingHistory': true, 'fetchFundingRate': true, 'fetchFundingRateHistory': true, 'fetchFundingRates': true, 'fetchGreeks': true, 'fetchIndexOHLCV': true, 'fetchIsolatedBorrowRate': false, 'fetchIsolatedBorrowRates': false, 'fetchLedger': true, 'fetchLeverage': true, 'fetchLeverages': true, 'fetchLeverageTiers': true, 'fetchLiquidations': true, 'fetchMarginAdjustmentHistory': false, 'fetchMarginMode': false, 'fetchMarketLeverageTiers': true, 'fetchMarkets': true, 'fetchMarkOHLCV': true, 'fetchMyLiquidations': true, 'fetchMySettlementHistory': true, 'fetchMyTrades': true, 'fetchNetworkDepositAddress': true, 'fetchOHLCV': true, 'fetchOpenInterest': false, 'fetchOpenInterestHistory': true, 'fetchOpenOrders': true, 'fetchOption': true, 'fetchOptionChain': true, 'fetchOrder': true, 'fetchOrderBook': true, 'fetchPosition': true, 'fetchPositionHistory': 'emulated', 'fetchPositionMode': false, 'fetchPositions': true, 'fetchPositionsHistory': true, 'fetchPremiumIndexOHLCV': false, 'fetchSettlementHistory': true, 'fetchTicker': true, 'fetchTickers': true, 'fetchTime': true, 'fetchTrades': true, 'fetchTradingFee': true, 'fetchTradingFees': true, 'fetchTransactionFees': true, 'fetchUnderlyingAssets': true, 'fetchVolatilityHistory': false, 'fetchWithdrawals': true, 'reduceMargin': true, 'repayCrossMargin': true, 'repayIsolatedMargin': true, 'sandbox': true, 'setLeverage': true, 'setMarginMode': false, 'setPositionMode': true, 'signIn': false, 'transfer': true, 'withdraw': true, }, 'api': { 'public': { // All public endpoints 200r/10s per endpoint 'wallet': { 'get': { 'currency_chains': 1, }, }, 'spot': { 'get': { 'currencies': 1, 'currencies/{currency}': 1, 'currency_pairs': 1, 'currency_pairs/{currency_pair}': 1, 'tickers': 1, 'order_book': 1, 'trades': 1, 'candlesticks': 1, 'time': 1, }, }, 'margin': { 'get': { 'currency_pairs': 1, 'currency_pairs/{currency_pair}': 1, 'funding_book': 1, 'cross/currencies': 1, 'cross/currencies/{currency}': 1, 'uni/currency_pairs': 1, 'uni/currency_pairs/{currency_pair}': 1, }, }, 'flash_swap': { 'get': { 'currencies': 1, }, }, 'futures': { 'get': { '{settle}/contracts': 1, '{settle}/contracts/{contract}': 1, '{settle}/order_book': 1, '{settle}/trades': 1, '{settle}/candlesticks': 1, '{settle}/premium_index': 1, '{settle}/tickers': 1, '{settle}/funding_rate': 1, '{settle}/insurance': 1, '{settle}/contract_stats': 1, '{settle}/index_constituents/{index}': 1, '{settle}/liq_orders': 1, '{settle}/risk_limit_tiers': 1, }, }, 'delivery': { 'get': { '{settle}/contracts': 1, '{settle}/contracts/{contract}': 1, '{settle}/order_book': 1, '{settle}/trades': 1, '{settle}/candlesticks': 1, '{settle}/tickers': 1, '{settle}/insurance': 1, }, }, 'options': { 'get': { 'underlyings': 1, 'expirations': 1, 'contracts': 1, 'contracts/{contract}': 1, 'settlements': 1, 'settlements/{contract}': 1, 'order_book': 1, 'tickers': 1, 'underlying/tickers/{underlying}': 1, 'candlesticks': 1, 'underlying/candlesticks': 1, 'trades': 1, }, }, 'earn': { 'get': { 'uni/currencies': 1, 'uni/currencies/{currency}': 1, }, }, }, 'private': { // private endpoints default is 150r/10s per endpoint 'withdrawals': { 'post': { 'withdrawals': 20, 'push': 1, }, 'delete': { 'withdrawals/{withdrawal_id}': 1, }, }, 'wallet': { 'get': { 'deposit_address': 1, 'withdrawals': 1, 'deposits': 1, 'sub_account_transfers': 1, 'order_status': 1, 'withdraw_status': 1, 'sub_account_balances': 2.5, 'sub_account_margin_balances': 2.5, 'sub_account_futures_balances': 2.5, 'sub_account_cross_margin_balances': 2.5, 'saved_address': 1, 'fee': 1, 'total_balance': 2.5, 'small_balance': 1, 'small_balance_history': 1, 'push': 1, }, 'post': { 'transfers': 2.5, 'sub_account_transfers': 2.5, 'sub_account_to_sub_account': 2.5, 'small_balance': 1, }, }, 'subAccounts': { 'get': { 'sub_accounts': 2.5, 'sub_accounts/{user_id}': 2.5, 'sub_accounts/{user_id}/keys': 2.5, 'sub_accounts/{user_id}/keys/{key}': 2.5, }, 'post': { 'sub_accounts': 2.5, 'sub_accounts/{user_id}/keys': 2.5, 'sub_accounts/{user_id}/lock': 2.5, 'sub_accounts/{user_id}/unlock': 2.5, }, 'put': { 'sub_accounts/{user_id}/keys/{key}': 2.5, }, 'delete': { 'sub_accounts/{user_id}/keys/{key}': 2.5, }, }, 'unified': { 'get': { 'accounts': 20 / 15, 'account_mode': 20 / 15, 'borrowable': 20 / 15, 'transferable': 20 / 15, 'loans': 20 / 15, 'loan_records': 20 / 15, 'interest_records': 20 / 15, 'estimate_rate': 20 / 15, 'currency_discount_tiers': 20 / 15, 'risk_units': 20 / 15, 'unified_mode': 20 / 15, 'loan_margin_tiers': 20 / 15, 'leverage/user_currency_config': 20 / 15, 'leverage/user_currency_setting': 20 / 15, }, 'post': { 'account_mode': 20 / 15, 'loans': 200 / 15, 'portfolio_calculator': 20 / 15, 'leverage/user_currency_setting': 20 / 15, }, 'put': { 'unified_mode': 20 / 15, }, }, 'spot': { // default is 200r/10s 'get': { 'fee': 1, 'batch_fee': 1, 'accounts': 1, 'account_book': 1, 'open_orders': 1, 'orders': 1, 'orders/{order_id}': 1, 'my_trades': 1, 'price_orders': 1, 'price_orders/{order_id}': 1, }, 'post': { 'batch_orders': 0.4, 'cross_liquidate_orders': 1, 'orders': 0.4, 'cancel_batch_orders': 20 / 75, 'countdown_cancel_all': 20 / 75, 'amend_batch_orders': 0.4, 'price_orders': 0.4, }, 'delete': { 'orders': 20 / 75, 'orders/{order_id}': 20 / 75, 'price_orders': 20 / 75, 'price_orders/{order_id}': 20 / 75, }, 'patch': { 'orders/{order_id}': 0.4, }, }, 'margin': { 'get': { 'accounts': 20 / 15, 'account_book': 20 / 15, 'funding_accounts': 20 / 15, 'auto_repay': 20 / 15, 'transferable': 20 / 15, 'loans': 20 / 15, 'loans/{loan_id}': 20 / 15, 'loans/{loan_id}/repayment': 20 / 15, 'loan_records': 20 / 15, 'loan_records/{loan_record_id}': 20 / 15, 'borrowable': 20 / 15, 'cross/accounts': 20 / 15, 'cross/account_book': 20 / 15, 'cross/loans': 20 / 15, 'cross/loans/{loan_id}': 20 / 15, 'cross/repayments': 20 / 15, 'cross/interest_records': 20 / 15, 'cross/transferable': 20 / 15, 'cross/estimate_rate': 20 / 15, 'cross/borrowable': 20 / 15, 'uni/estimate_rate': 20 / 15, 'uni/loans': 20 / 15, 'uni/loan_records': 20 / 15, 'uni/interest_records': 20 / 15, 'uni/borrowable': 20 / 15, }, 'post': { 'auto_repay': 20 / 15, 'loans': 20 / 15, 'merged_loans': 20 / 15, 'loans/{loan_id}/repayment': 20 / 15, 'cross/loans': 20 / 15, 'cross/repayments': 20 / 15, 'uni/loans': 20 / 15, }, 'patch': { 'loans/{loan_id}': 20 / 15, 'loan_records/{loan_record_id}': 20 / 15, }, 'delete': { 'loans/{loan_id}': 20 / 15, }, }, 'flash_swap': { 'get': { 'currencies': 1, 'currency_pairs': 1, 'orders': 1, 'orders/{order_id}': 1, }, 'post': { 'orders': 1, 'orders/preview': 1, }, }, 'futures': { 'get': { '{settle}/accounts': 1, '{settle}/account_book': 1, '{settle}/positions': 1, '{settle}/positions/{contract}': 1, '{settle}/dual_comp/positions/{contract}': 1, '{settle}/orders': 1, '{settle}/orders_timerange': 1, '{settle}/orders/{order_id}': 1, '{settle}/my_trades': 1, '{settle}/my_trades_timerange': 1, '{settle}/position_close': 1, '{settle}/liquidates': 1, '{settle}/auto_deleverages': 1, '{settle}/fee': 1, '{settle}/risk_limit_tiers': 1, '{settle}/price_orders': 1, '{settle}/price_orders/{order_id}': 1, }, 'post': { '{settle}/positions/{contract}/margin': 1, '{settle}/positions/{contract}/leverage': 1, '{settle}/positions/{contract}/risk_limit': 1, '{settle}/dual_mode': 1, '{settle}/dual_comp/positions/{contract}/margin': 1, '{settle}/dual_comp/positions/{contract}/leverage': 1, '{settle}/dual_comp/positions/{contract}/risk_limit': 1, '{settle}/orders': 0.4, '{settle}/batch_orders': 0.4, '{settle}/countdown_cancel_all': 0.4, '{settle}/batch_cancel_orders': 0.4, '{settle}/price_orders': 0.4, }, 'put': { '{settle}/orders/{order_id}': 1, }, 'delete': { '{settle}/orders': 20 / 75, '{settle}/orders/{order_id}': 20 / 75, '{settle}/price_orders': 20 / 75, '{settle}/price_orders/{order_id}': 20 / 75, }, }, 'delivery': { 'get': { '{settle}/accounts': 20 / 15, '{settle}/account_book': 20 / 15, '{settle}/positions': 20 / 15, '{settle}/positions/{contract}': 20 / 15, '{settle}/orders': 20 / 15, '{settle}/orders/{order_id}': 20 / 15, '{settle}/my_trades': 20 / 15, '{settle}/position_close': 20 / 15, '{settle}/liquidates': 20 / 15, '{settle}/settlements': 20 / 15, '{settle}/price_orders': 20 / 15, '{settle}/price_orders/{order_id}': 20 / 15, }, 'post': { '{settle}/positions/{contract}/margin': 20 / 15, '{settle}/positions/{contract}/leverage': 20 / 15, '{settle}/positions/{contract}/risk_limit': 20 / 15, '{settle}/orders': 20 / 15, '{settle}/price_orders': 20 / 15, }, 'delete': { '{settle}/orders': 20 / 15, '{settle}/orders/{order_id}': 20 / 15, '{settle}/price_orders': 20 / 15, '{settle}/price_orders/{order_id}': 20 / 15, }, }, 'options': { 'get': { 'my_settlements': 20 / 15, 'accounts': 20 / 15, 'account_book': 20 / 15, 'positions': 20 / 15, 'positions/{contract}': 20 / 15, 'position_close': 20 / 15, 'orders': 20 / 15, 'orders/{order_id}': 20 / 15, 'my_trades': 20 / 15, 'mmp': 20 / 15, }, 'post': { 'orders': 20 / 15, 'countdown_cancel_all': 20 / 15, 'mmp': 20 / 15, 'mmp/reset': 20 / 15, }, 'delete': { 'orders': 20 / 15, 'orders/{order_id}': 20 / 15, }, }, 'earn': { 'get': { 'uni/currencies': 20 / 15, 'uni/currencies/{currency}': 20 / 15, 'uni/lends': 20 / 15, 'uni/lend_records': 20 / 15, 'uni/interests/{currency}': 20 / 15, 'uni/interest_records': 20 / 15, 'uni/interest_status/{currency}': 20 / 15, }, 'post': { 'uni/lends': 20 / 15, }, 'put': { 'uni/interest_reinvest': 20 / 15, }, 'patch': { 'uni/lends': 20 / 15, }, }, 'loan': { 'get': { 'collateral/orders': 20 / 15, 'collateral/orders/{order_id}': 20 / 15, 'collateral/repay_records': 20 / 15, 'collateral/collaterals': 20 / 15, 'collateral/total_amount': 20 / 15, 'collateral/ltv': 20 / 15, 'collateral/currencies': 20 / 15, 'multi_collateral/orders': 20 / 15, 'multi_collateral/orders/{order_id}': 20 / 15, 'multi_collateral/repay': 20 / 15, 'multi_collateral/mortgage': 20 / 15, 'multi_collateral/currency_quota': 20 / 15, 'multi_collateral/currencies': 20 / 15, 'multi_collateral/ltv': 20 / 15, 'multi_collateral/fixed_rate': 20 / 15, 'multi_collateral/current_rate': 20 / 15, }, 'post': { 'collateral/orders': 20 / 15, 'collateral/repay': 20 / 15, 'collateral/collaterals': 20 / 15, 'multi_collateral/orders': 20 / 15, 'multi_collateral/repay': 20 / 15, 'multi_collateral/mortgage': 20 / 15, }, }, 'account': { 'get': { 'detail': 20 / 15, 'rate_limit': 20 / 15, 'stp_groups': 20 / 15, 'stp_groups/{stp_id}/users': 20 / 15, 'stp_groups/debit_fee': 20 / 15, }, 'post': { 'stp_groups': 20 / 15, 'stp_groups/{stp_id}/users': 20 / 15, }, 'delete': { 'stp_groups/{stp_id}/users': 20 / 15, }, }, 'rebate': { 'get': { 'agency/transaction_history': 20 / 15, 'agency/commission_history': 20 / 15, }, }, }, }, 'timeframes': { '10s': '10s', '1m': '1m', '5m': '5m', '15m': '15m', '30m': '30m', '1h': '1h', '2h': '2h', '4h': '4h', '8h': '8h', '1d': '1d', '7d': '7d', '1w': '7d', }, // copied from gatev2 'commonCurrencies': { 'ORT': 'XREATORS', 'ASS': 'ASSF', '88MPH': 'MPH', 'AXIS': 'AXISDEFI', 'BIFI': 'BITCOINFILE', 'BOX': 'DEFIBOX', 'BYN': 'BEYONDFI', 'EGG': 'GOOSEFINANCE', 'GTC': 'GAMECOM', 'GTC_HT': 'GAMECOM_HT', 'GTC_BSC': 'GAMECOM_BSC', 'HIT': 'HITCHAIN', 'MM': 'MILLION', 'MPH': 'MORPHER', 'POINT': 'GATEPOINT', 'RAI': 'RAIREFLEXINDEX', 'RED': 'RedLang', 'SBTC': 'SUPERBITCOIN', 'TNC': 'TRINITYNETWORKCREDIT', 'VAI': 'VAIOT', 'TRAC': 'TRACO', // conflict with OriginTrail (TRAC) }, 'requiredCredentials': { 'apiKey': true, 'secret': true, }, 'headers': { 'X-Gate-Channel-Id': 'ccxt', }, 'options': { 'timeDifference': 0, 'adjustForTimeDifference': false, 'sandboxMode': false, 'unifiedAccount': undefined, 'createOrder': { 'expiration': 86400, // for conditional orders }, 'createMarketBuyOrderRequiresPrice': true, 'networks': { 'BTC': 'BTC', 'BRC20': 'BTCBRC', 'ETH': 'ETH', 'ERC20': 'ETH', 'TRX': 'TRX', 'TRC20': 'TRX', 'HECO': 'HT', 'HRC20': 'HT', 'BSC': 'BSC', 'BEP20': 'BSC', 'SOL': 'SOL', 'POLYGON': 'POL', 'MATIC': 'POL', 'OP': 'OPETH', 'OPTIMISM': 'OPETH', 'ADA': 'ADA', 'AVAXC': 'AVAX_C', 'NEAR': 'NEAR', 'ARBONE': 'ARBEVM', 'BASE': 'BASEEVM', 'SUI': 'SUI', 'CRONOS': 'CRO', 'CRO': 'CRO', 'APT': 'APT', 'SCROLL': 'SCROLLETH', 'TAIKO': 'TAIKOETH', 'HYPE': 'HYPE', 'ALGO': 'ALGO', // KAVA: ['KAVA', 'KAVAEVM'] // SEI: ['SEI', 'SEIEVM'] 'LINEA': 'LINEAETH', 'BLAST': 'BLASTETH', 'XLM': 'XLM', 'RSK': 'RBTC', 'TON': 'TON', 'MNT': 'MNT', // 'RUNE': 'BTCRUNES', probably, cant verify atm 'CELO': 'CELO', 'HBAR': 'HBAR', // 'FTM': SONIC REBRAND, todo 'ZKSERA': 'ZKSERA', 'KLAY': 'KLAY', 'EOS': 'EOS', 'ACA': 'ACA', // TLOS: ['TLOS', 'TLOSEVM'] // ASTR: ['ASTR', 'ASTREVM'] // CFX: ['CFX', 'CFXEVM'] 'XTZ': 'XTZ', 'EGLD': 'EGLD', 'GLMR': 'GLMR', 'AURORA': 'AURORAEVM', // others 'KON': 'KONET', 'GATECHAIN': 'GTEVM', 'KUSAMA': 'KSMSM', 'OKC': 'OKT', 'POLKADOT': 'DOTSM', 'LUNA': 'LUNC', }, 'networksById': { 'OPETH': 'OP', 'ETH': 'ERC20', 'ERC20': 'ERC20', 'TRX': 'TRC20', 'TRC20': 'TRC20', 'HT': 'HRC20', 'HECO': 'HRC20', 'BSC': 'BEP20', 'BEP20': 'BEP20', 'POLYGON': 'MATIC', 'POL': 'MATIC', }, 'timeInForce': { 'GTC': 'gtc', 'IOC': 'ioc', 'PO': 'poc', 'POC': 'poc', 'FOK': 'fok', }, 'accountsByType': { 'funding': 'spot', 'spot': 'spot', 'margin': 'margin', 'cross_margin': 'cross_margin', 'cross': 'cross_margin', 'isolated': 'margin', 'swap': 'futures', 'future': 'delivery', 'futures': 'futures', 'delivery': 'delivery', 'option': 'options', 'options': 'options', }, 'swap': { 'fetchMarkets': { 'settlementCurrencies': ['usdt', 'btc'], }, }, 'future': { 'fetchMarkets': { 'settlementCurrencies': ['usdt'], }, }, }, 'features': { 'default': { 'sandbox': true, 'createOrder': { 'marginMode': true, 'triggerPrice': true, 'triggerDirection': true, 'triggerPriceType': undefined, 'stopLossPrice': true, 'takeProfitPrice': true, 'attachedStopLossTakeProfit': undefined, 'timeInForce': { 'IOC': true, 'FOK': true, 'PO': true, 'GTD': false, }, 'hedged': false, 'trailing': false, 'iceberg': true, 'selfTradePrevention': true, 'leverage': false, 'marketBuyByCost': true, 'marketBuyRequiresPrice': true, }, 'createOrders': { 'max': 40, // NOTE! max 10 per symbol }, 'fetchMyTrades': { 'marginMode': true, 'limit': 1000, 'daysBack': undefined, 'untilDays': 30, 'symbolRequired': false, }, 'fetchOrder': { 'marginMode': false, 'trigger': true, 'trailing': false, 'symbolRequired': true, }, 'fetchOpenOrders': { 'marginMode': true, 'trigger': true, 'trailing': false, 'limit': 100, 'symbolRequired': false, }, 'fetchOrders': undefined, 'fetchClosedOrders': { 'marginMode': true, 'trigger': true, 'trailing': false, 'limit': 100, 'untilDays': 30, 'daysBack': undefined, 'daysBackCanceled': undefined, 'symbolRequired': false, }, 'fetchOHLCV': { 'limit': 1000, }, }, 'spot': { 'extends': 'default', }, 'forDerivatives': { 'extends': 'spot', 'createOrder': { 'marginMode': false, 'triggerPriceType': { 'last': true, 'mark': true, 'index': true, }, }, 'createOrders': { 'max': 10, }, 'fetchMyTrades': { 'marginMode': false, 'untilDays': undefined, }, 'fetchOpenOrders': { 'marginMode': false, }, 'fetchClosedOrders': { 'marginMode': false, 'untilDays': undefined, 'limit': 1000, }, 'fetchOHLCV': { 'limit': 1999, }, }, 'swap': { 'linear': { 'extends': 'forDerivatives', }, 'inverse': { 'extends': 'forDerivatives', }, }, 'future': { 'linear': { 'extends': 'forDerivatives', }, 'inverse': { 'extends': 'forDerivatives', }, }, }, 'precisionMode': TICK_SIZE, 'fees': { 'trading': { 'tierBased': true, 'feeSide': 'get', 'percentage': true, 'maker': this.parseNumber('0.002'), 'taker': this.parseNumber('0.002'), 'tiers': { // volume is in BTC 'maker': [ [this.parseNumber('0'), this.parseNumber('0.002')], [this.parseNumber('1.5'), this.parseNumber('0.00185')], [this.parseNumber('3'), this.parseNumber('0.00175')], [this.parseNumber('6'), this.parseNumber('0.00165')], [this.parseNumber('12.5'), this.parseNumber('0.00155')], [this.parseNumber('25'), this.parseNumber('0.00145')], [this.parseNumber('75'), this.parseNumber('0.00135')], [this.parseNumber('200'), this.parseNumber('0.00125')], [this.parseNumber('500'), this.parseNumber('0.00115')], [this.parseNumber('1250'), this.parseNumber('0.00105')], [this.parseNumber('2500'), this.parseNumber('0.00095')], [this.parseNumber('3000'), this.parseNumber('0.00085')], [this.parseNumber('6000'), this.parseNumber('0.00075')], [this.parseNumber('11000'), this.parseNumber('0.00065')], [this.parseNumber('20000'), this.parseNumber('0.00055')], [this.parseNumber('40000'), this.parseNumber('0.00055')], [this.parseNumber('75000'), this.parseNumber('0.00055')], ], 'taker': [ [this.parseNumber('0'), this.parseNumber('0.002')], [this.parseNumber('1.5'), this.parseNumber('0.00195')], [this.parseNumber('3'), this.parseNumber('0.00185')], [this.parseNumber('6'), this.parseNumber('0.00175')], [this.parseNumber('12.5'), this.parseNumber('0.00165')], [this.parseNumber('25'), this.parseNumber('0.00155')], [this.parseNumber('75'), this.parseNumber('0.00145')], [this.parseNumber('200'), this.parseNumber('0.00135')], [this.parseNumber('500'), this.parseNumber('0.00125')], [this.parseNumber('1250'), this.parseNumber('0.00115')], [this.parseNumber('2500'), this.parseNumber('0.00105')], [this.parseNumber('3000'), this.parseNumber('0.00095')], [this.parseNumber('6000'), this.parseNumber('0.00085')], [this.parseNumber('11000'), this.parseNumber('0.00075')], [this.parseNumber('20000'), this.parseNumber('0.00065')], [this.parseNumber('40000'), this.parseNumber('0.00065')], [this.parseNumber('75000'), this.parseNumber('0.00065')], ], }, }, 'swap': { 'tierBased': true, 'feeSide': 'base', 'percentage': true, 'maker': this.parseNumber('0.0'), 'taker': this.parseNumber('0.0005'), 'tiers': { 'maker': [ [this.parseNumber('0'), this.parseNumber('0.0000')], [this.parseNumber('1.5'), this.parseNumber('-0.00005')], [this.parseNumber('3'), this.parseNumber('-0.00005')], [this.parseNumber('6'), this.parseNumber('-0.00005')], [this.parseNumber('12.5'), this.parseNumber('-0.00005')], [this.parseNumber('25'), this.parseNumber('-0.00005')], [this.parseNumber('75'), this.parseNumber('-0.00005')], [this.parseNumber('200'), this.parseNumber('-0.00005')], [this.parseNumber('500'), this.parseNumber('-0.00005')], [this.parseNumber('1250'), this.parseNumber('-0.00005')], [this.parseNumber('2500'), this.parseNumber('-0.00005')], [this.parseNumber('3000'), this.parseNumber('-0.00008')], [this.parseNumber('6000'), this.parseNumber('-0.01000')], [this.parseNumber('11000'), this.parseNumber('-0.01002')], [this.parseNumber('20000'), this.parseNumber('-0.01005')], [this.parseNumber('40000'), this.parseNumber('-0.02000')], [this.parseNumber('75000'), this.parseNumber('-0.02005')], ], 'taker': [ [this.parseNumber('0'), this.parseNumber('0.00050')], [this.parseNumber('1.5'), this.parseNumber('0.00048')], [this.parseNumber('3'), this.parseNumber('0.00046')], [this.parseNumber('6'), this.parseNumber('0.00044')], [this.parseNumber('12.5'), this.parseNumber('0.00042')], [this.parseNumber('25'), this.parseNumber('0.00040')], [this.parseNumber('75'), this.parseNumber('0.00038')], [this.parseNumber('200'), this.parseNumber('0.00036')], [this.parseNumber('500'), this.parseNumber('0.00034')], [this.parseNumber('1250'), this.parseNumber('0.00032')], [this.parseNumber('2500'), this.parseNumber('0.00030')], [this.parseNumber('3000'), this.parseNumber('0.00030')], [this.parseNumber('6000'), this.parseNumber('0.00030')], [this.parseNumber('11000'), this.parseNumber('0.00030')], [this.parseNumber('20000'), this.parseNumber('0.00030')], [this.parseNumber('40000'), this.parseNumber('0.00030')], [this.parseNumber('75000'), this.parseNumber('0.00030')], ], }, }, }, // https://www.gate.io/docs/developers/apiv4/en/#label-list 'exceptions': { 'exact': { 'INVALID_PARAM_VALUE': BadRequest, 'INVALID_PROTOCOL': BadRequest, 'INVALID_ARGUMENT': BadRequest, 'INVALID_REQUEST_BODY': BadRequest, 'MISSING_REQUIRED_PARAM': ArgumentsRequired, 'BAD_REQUEST': BadRequest, 'INVALID_CONTENT_TYPE': BadRequest, 'NOT_ACCEPTABLE': BadRequest, 'METHOD_NOT_ALLOWED': BadRequest, 'NOT_FOUND': ExchangeError, 'AUTHENTICATION_FAILED': AuthenticationError, 'INVALID_CREDENTIALS': AuthenticationError, 'INVALID_KEY': AuthenticationError, 'IP_FORBIDDEN': AuthenticationError, 'READ_ONLY': PermissionDenied, 'INVALID_SIGNATURE': AuthenticationError, 'MISSING_REQUIRED_HEADER': AuthenticationError, 'REQUEST_EXPIRED': AuthenticationError, 'ACCOUNT_LOCKED': AccountSuspended, 'FORBIDDEN': PermissionDenied, 'SUB_ACCOUNT_NOT_FOUND': ExchangeError, 'SUB_ACCOUNT_LOCKED': AccountSuspended, 'MARGIN_BALANCE_EXCEPTION': ExchangeError, 'MARGIN_TRANSFER_FAILED': ExchangeError, 'TOO_MUCH_FUTURES_AVAILABLE': ExchangeError, 'FUTURES_BALANCE_NOT_ENOUGH': InsufficientFunds, 'ACCOUNT_EXCEPTION': ExchangeError, 'SUB_ACCOUNT_TRANSFER_FAILED': ExchangeError, 'ADDRESS_NOT_USED': ExchangeError, 'TOO_FAST': RateLimitExceeded, 'WITHDRAWAL_OVER_LIMIT': ExchangeError, 'API_WITHDRAW_DISABLED': ExchangeNotAvailable, 'INVALID_WITHDRAW_ID': ExchangeError, 'INVALID_WITHDRAW_CANCEL_STATUS': ExchangeError, 'INVALID_PRECISION': InvalidOrder, 'INVALID_CURRENCY': BadSymbol, 'INVALID_CURRENCY_PAIR': BadSymbol, 'POC_FILL_IMMEDIATELY': OrderImmediatelyFillable, 'ORDER_NOT_FOUND': OrderNotFound, 'CLIENT_ID_NOT_FOUND': OrderNotFound, 'ORDER_CLOSED': InvalidOrder, 'ORDER_CANCELLED': InvalidOrder, 'QUANTITY_NOT_ENOUGH': InvalidOrder, 'BALANCE_NOT_ENOUGH': InsufficientFunds, 'MARGIN_NOT_SUPPORTED': InvalidOrder, 'MARGIN_BALANCE_NOT_ENOUGH': InsufficientFunds, 'AMOUNT_TOO_LITTLE': InvalidOrder, 'AMOUNT_TOO_MUCH': InvalidOrder, 'REPEATED_CREATION': InvalidOrder, 'LOAN_NOT_FOUND': OrderNotFound, 'LOAN_RECORD_NOT_FOUND': OrderNotFound, 'NO_MATCHED_LOAN': ExchangeError, 'NOT_MERGEABLE': ExchangeError, 'NO_CHANGE': ExchangeError, 'REPAY_TOO_MUCH': ExchangeError, 'TOO_MANY_CURRENCY_PAIRS': InvalidOrder, 'TOO_MANY_ORDERS': InvalidOrder, 'TOO_MANY_REQUESTS': RateLimitExceeded, 'MIXED_ACCOUNT_TYPE': InvalidOrder, 'AUTO_BORROW_TOO_MUCH': ExchangeError, 'TRADE_RESTRICTED': InsufficientFunds, 'USER_NOT_FOUND': AccountNotEnabled, 'CONTRACT_NO_COUNTER': ExchangeError, 'CONTRACT_NOT_FOUND': BadSymbol, 'RISK_LIMIT_EXCEEDED': ExchangeError, 'INSUFFICIENT_AVAILABLE': InsufficientFunds, 'LIQUIDATE_IMMEDIATELY': InvalidOrder, 'LEVERAGE_TOO_HIGH': InvalidOrder, 'LEVERAGE_TOO_LOW': InvalidOrder, 'ORDER_NOT_OWNED': ExchangeError, 'ORDER_FINISHED': ExchangeError, 'POSITION_CROSS_MARGIN': ExchangeError, 'POSITION_IN_LIQUIDATION': ExchangeError, 'POSITION_IN_CLOSE': ExchangeError, 'POSITION_EMPTY': InvalidOrder, 'REMOVE_TOO_MUCH': ExchangeError, 'RISK_LIMIT_NOT_MULTIPLE': ExchangeError, 'RISK_LIMIT_TOO_HIGH': ExchangeError, 'RISK_LIMIT_TOO_lOW': ExchangeError, 'PRICE_TOO_DEVIATED': InvalidOrder, 'SIZE_TOO_LARGE': InvalidOrder,