ccxt 2.9.8__py2.py3-none-any.whl → 2.9.9__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
ccxt/__init__.py CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '2.9.8'
25
+ __version__ = '2.9.9'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '2.9.8'
7
+ __version__ = '2.9.9'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '2.9.8'
5
+ __version__ = '2.9.9'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -6,6 +6,7 @@
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.base.errors import ExchangeError
8
8
  from ccxt.base.errors import AuthenticationError
9
+ from ccxt.base.errors import PermissionDenied
9
10
  from ccxt.base.errors import ArgumentsRequired
10
11
  from ccxt.base.errors import BadRequest
11
12
  from ccxt.base.errors import InsufficientFunds
@@ -228,10 +229,12 @@ class btcex(Exchange):
228
229
  '403': AuthenticationError, # ACCESS_DENIED_ERROR Access denied
229
230
  '1000': ExchangeNotAvailable, # NO_SERVICE No service found
230
231
  '1001': BadRequest, # BAD_REQUEST Bad requested
232
+ '1005': DDoSProtection, # {"code":1005,"message":"Operate too frequently"}
231
233
  '2000': AuthenticationError, # NEED_LOGIN Login is required
232
234
  '2001': AuthenticationError, # ACCOUNT_NOT_MATCH Account information does not match
233
235
  '2002': AuthenticationError, # ACCOUNT_NEED_ENABLE Account needs to be activated
234
236
  '2003': AuthenticationError, # ACCOUNT_NOT_AVAILABLE Account not available
237
+ '2010': PermissionDenied, # {"code":2010,"message":"Access denied","data":{}}
235
238
  '3000': AuthenticationError, # TEST user
236
239
  '3002': AuthenticationError, # NICKNAME_EXIST Nicknames exist
237
240
  '3003': AuthenticationError, # ACCOUNT_NOT_EXIST No account
@@ -296,6 +299,7 @@ class btcex(Exchange):
296
299
  '5013': InvalidOrder, # ORDER_PRICE_RANGE_IS_TOO_HIGH order price range is too high.
297
300
  '5014': InvalidOrder, # ORDER_PRICE_RANGE_IS_TOO_LOW Order price range is too low.
298
301
  '5109': InvalidOrder, # ORDER_PRICE_RANGE_IS_TOO_LOW Order price range is too low.
302
+ '5119': InvalidOrder, # {"code":5119,"message":"Cannot be less than the minimum order value:10USDT, instrument: GXE/USDT","data":{"coinType":"USDT","amount":"10","instrumentName":"GXE/USDT"}}
299
303
  '5135': InvalidOrder, # The quantity should be larger than: 0.01
300
304
  '5901': InvalidOrder, # TRANSFER_RESULT transfer out success.
301
305
  '5902': InvalidOrder, # ORDER_SUCCESS place order success.
@@ -1254,7 +1258,7 @@ class btcex(Exchange):
1254
1258
  'instrument_name': market['id'],
1255
1259
  'type': type,
1256
1260
  }
1257
- if side == 'sell':
1261
+ if side == 'sell' or type == 'limit':
1258
1262
  request['amount'] = self.amount_to_precision(symbol, amount)
1259
1263
  if type == 'limit':
1260
1264
  request['price'] = self.price_to_precision(symbol, price)
@@ -39,7 +39,7 @@ class gate(Exchange):
39
39
  'pro': True,
40
40
  'urls': {
41
41
  'logo': 'https://user-images.githubusercontent.com/1294454/31784029-0313c702-b509-11e7-9ccc-bc0da6a0e435.jpg',
42
- 'doc': 'https://www.gate.io/docs/apiv4/en/index.html',
42
+ 'doc': 'https://www.gate.io/docs/developers/apiv4/en/',
43
43
  'www': 'https://gate.io/',
44
44
  'api': {
45
45
  'public': {
@@ -699,6 +699,11 @@ class gate(Exchange):
699
699
  async def fetch_markets(self, params={}):
700
700
  """
701
701
  retrieves data on all markets for gate
702
+ see https://www.gate.io/docs/developers/apiv4/en/#list-all-currency-pairs-supported # spot
703
+ see https://www.gate.io/docs/developers/apiv4/en/#list-all-supported-currency-pairs-supported-in-margin-trading # margin
704
+ see https://www.gate.io/docs/developers/apiv4/en/#list-all-futures-contracts # swap
705
+ see https://www.gate.io/docs/developers/apiv4/en/#list-all-futures-contracts-2 # future
706
+ see https://www.gate.io/docs/developers/apiv4/en/#list-all-the-contracts-with-specified-underlying-and-expiration-time # option
702
707
  :param dict params: extra parameters specific to the exchange api endpoint
703
708
  :returns [dict]: an array of objects representing market data
704
709
  """
@@ -2303,10 +2308,14 @@ class gate(Exchange):
2303
2308
  async def fetch_ohlcv(self, symbol, timeframe='1m', since=None, limit=None, params={}):
2304
2309
  """
2305
2310
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
2311
+ see https://www.gate.io/docs/developers/apiv4/en/#market-candlesticks # spot
2312
+ see https://www.gate.io/docs/developers/apiv4/en/#get-futures-candlesticks # swap
2313
+ see https://www.gate.io/docs/developers/apiv4/en/#market-candlesticks # future
2314
+ see https://www.gate.io/docs/developers/apiv4/en/#get-options-candlesticks # option
2306
2315
  :param str symbol: unified symbol of the market to fetch OHLCV data for
2307
2316
  :param str timeframe: the length of time each candle represents
2308
2317
  :param int|None since: timestamp in ms of the earliest candle to fetch
2309
- :param int|None limit: the maximum amount of candles to fetch
2318
+ :param int|None limit: the maximum amount of candles to fetch, limit is conflicted with since and params["until"], If either since and params["until"] is specified, request will be rejected
2310
2319
  :param dict params: extra parameters specific to the gateio api endpoint
2311
2320
  :param str|None params['price']: "mark" or "index" for mark price and index price candles
2312
2321
  :param int|None params['until']: timestamp in ms of the latest candle to fetch
ccxt/async_support/okx.py CHANGED
@@ -3577,26 +3577,31 @@ class okx(Exchange):
3577
3577
  currency = self.currency(code)
3578
3578
  if (tag is not None) and (len(tag) > 0):
3579
3579
  address = address + ':' + tag
3580
- fee = self.safe_string(params, 'fee')
3581
- if fee is None:
3582
- raise ArgumentsRequired(self.id + " withdraw() requires a 'fee' string parameter, network transaction fee must be ≥ 0. Withdrawals to OKCoin or OKX are fee-free, please set '0'. Withdrawing to external digital asset address requires network transaction fee.")
3583
3580
  request = {
3584
3581
  'ccy': currency['id'],
3585
3582
  'toAddr': address,
3586
3583
  'dest': '4', # 2 = OKCoin International, 3 = OKX 4 = others
3587
3584
  'amt': self.number_to_string(amount),
3588
- 'fee': self.number_to_string(fee), # withdrawals to OKCoin or OKX are fee-free, please set 0
3589
3585
  }
3590
- if 'password' in params:
3591
- request['pwd'] = params['password']
3592
- elif 'pwd' in params:
3593
- request['pwd'] = params['pwd']
3594
3586
  networks = self.safe_value(self.options, 'networks', {})
3595
3587
  network = self.safe_string_upper(params, 'network') # self line allows the user to specify either ERC20 or ETH
3596
3588
  network = self.safe_string(networks, network, network) # handle ETH>ERC20 alias
3597
3589
  if network is not None:
3598
3590
  request['chain'] = currency['id'] + '-' + network
3599
3591
  params = self.omit(params, 'network')
3592
+ fee = self.safe_string(params, 'fee')
3593
+ if fee is None:
3594
+ currencies = await self.fetch_currencies()
3595
+ self.currencies = self.deep_extend(self.currencies, currencies)
3596
+ targetNetwork = self.safe_value(currency['networks'], self.network_id_to_code(network), {})
3597
+ fee = self.safe_string(targetNetwork, 'fee')
3598
+ if fee is None:
3599
+ raise ArgumentsRequired(self.id + " withdraw() requires a 'fee' string parameter, network transaction fee must be ≥ 0. Withdrawals to OKCoin or OKX are fee-free, please set '0'. Withdrawing to external digital asset address requires network transaction fee.")
3600
+ request['fee'] = self.number_to_string(fee) # withdrawals to OKCoin or OKX are fee-free, please set 0
3601
+ if 'password' in params:
3602
+ request['pwd'] = params['password']
3603
+ elif 'pwd' in params:
3604
+ request['pwd'] = params['pwd']
3600
3605
  query = self.omit(params, ['fee', 'password', 'pwd'])
3601
3606
  if not ('pwd' in request):
3602
3607
  raise ExchangeError(self.id + ' withdraw() requires a password parameter or a pwd parameter, it must be the funding password, not the API passphrase')
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '2.9.8'
7
+ __version__ = '2.9.9'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
ccxt/btcex.py CHANGED
@@ -6,6 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.base.errors import ExchangeError
8
8
  from ccxt.base.errors import AuthenticationError
9
+ from ccxt.base.errors import PermissionDenied
9
10
  from ccxt.base.errors import ArgumentsRequired
10
11
  from ccxt.base.errors import BadRequest
11
12
  from ccxt.base.errors import InsufficientFunds
@@ -228,10 +229,12 @@ class btcex(Exchange):
228
229
  '403': AuthenticationError, # ACCESS_DENIED_ERROR Access denied
229
230
  '1000': ExchangeNotAvailable, # NO_SERVICE No service found
230
231
  '1001': BadRequest, # BAD_REQUEST Bad requested
232
+ '1005': DDoSProtection, # {"code":1005,"message":"Operate too frequently"}
231
233
  '2000': AuthenticationError, # NEED_LOGIN Login is required
232
234
  '2001': AuthenticationError, # ACCOUNT_NOT_MATCH Account information does not match
233
235
  '2002': AuthenticationError, # ACCOUNT_NEED_ENABLE Account needs to be activated
234
236
  '2003': AuthenticationError, # ACCOUNT_NOT_AVAILABLE Account not available
237
+ '2010': PermissionDenied, # {"code":2010,"message":"Access denied","data":{}}
235
238
  '3000': AuthenticationError, # TEST user
236
239
  '3002': AuthenticationError, # NICKNAME_EXIST Nicknames exist
237
240
  '3003': AuthenticationError, # ACCOUNT_NOT_EXIST No account
@@ -296,6 +299,7 @@ class btcex(Exchange):
296
299
  '5013': InvalidOrder, # ORDER_PRICE_RANGE_IS_TOO_HIGH order price range is too high.
297
300
  '5014': InvalidOrder, # ORDER_PRICE_RANGE_IS_TOO_LOW Order price range is too low.
298
301
  '5109': InvalidOrder, # ORDER_PRICE_RANGE_IS_TOO_LOW Order price range is too low.
302
+ '5119': InvalidOrder, # {"code":5119,"message":"Cannot be less than the minimum order value:10USDT, instrument: GXE/USDT","data":{"coinType":"USDT","amount":"10","instrumentName":"GXE/USDT"}}
299
303
  '5135': InvalidOrder, # The quantity should be larger than: 0.01
300
304
  '5901': InvalidOrder, # TRANSFER_RESULT transfer out success.
301
305
  '5902': InvalidOrder, # ORDER_SUCCESS place order success.
@@ -1254,7 +1258,7 @@ class btcex(Exchange):
1254
1258
  'instrument_name': market['id'],
1255
1259
  'type': type,
1256
1260
  }
1257
- if side == 'sell':
1261
+ if side == 'sell' or type == 'limit':
1258
1262
  request['amount'] = self.amount_to_precision(symbol, amount)
1259
1263
  if type == 'limit':
1260
1264
  request['price'] = self.price_to_precision(symbol, price)
ccxt/gate.py CHANGED
@@ -38,7 +38,7 @@ class gate(Exchange):
38
38
  'pro': True,
39
39
  'urls': {
40
40
  'logo': 'https://user-images.githubusercontent.com/1294454/31784029-0313c702-b509-11e7-9ccc-bc0da6a0e435.jpg',
41
- 'doc': 'https://www.gate.io/docs/apiv4/en/index.html',
41
+ 'doc': 'https://www.gate.io/docs/developers/apiv4/en/',
42
42
  'www': 'https://gate.io/',
43
43
  'api': {
44
44
  'public': {
@@ -698,6 +698,11 @@ class gate(Exchange):
698
698
  def fetch_markets(self, params={}):
699
699
  """
700
700
  retrieves data on all markets for gate
701
+ see https://www.gate.io/docs/developers/apiv4/en/#list-all-currency-pairs-supported # spot
702
+ see https://www.gate.io/docs/developers/apiv4/en/#list-all-supported-currency-pairs-supported-in-margin-trading # margin
703
+ see https://www.gate.io/docs/developers/apiv4/en/#list-all-futures-contracts # swap
704
+ see https://www.gate.io/docs/developers/apiv4/en/#list-all-futures-contracts-2 # future
705
+ see https://www.gate.io/docs/developers/apiv4/en/#list-all-the-contracts-with-specified-underlying-and-expiration-time # option
701
706
  :param dict params: extra parameters specific to the exchange api endpoint
702
707
  :returns [dict]: an array of objects representing market data
703
708
  """
@@ -2301,10 +2306,14 @@ class gate(Exchange):
2301
2306
  def fetch_ohlcv(self, symbol, timeframe='1m', since=None, limit=None, params={}):
2302
2307
  """
2303
2308
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
2309
+ see https://www.gate.io/docs/developers/apiv4/en/#market-candlesticks # spot
2310
+ see https://www.gate.io/docs/developers/apiv4/en/#get-futures-candlesticks # swap
2311
+ see https://www.gate.io/docs/developers/apiv4/en/#market-candlesticks # future
2312
+ see https://www.gate.io/docs/developers/apiv4/en/#get-options-candlesticks # option
2304
2313
  :param str symbol: unified symbol of the market to fetch OHLCV data for
2305
2314
  :param str timeframe: the length of time each candle represents
2306
2315
  :param int|None since: timestamp in ms of the earliest candle to fetch
2307
- :param int|None limit: the maximum amount of candles to fetch
2316
+ :param int|None limit: the maximum amount of candles to fetch, limit is conflicted with since and params["until"], If either since and params["until"] is specified, request will be rejected
2308
2317
  :param dict params: extra parameters specific to the gateio api endpoint
2309
2318
  :param str|None params['price']: "mark" or "index" for mark price and index price candles
2310
2319
  :param int|None params['until']: timestamp in ms of the latest candle to fetch
ccxt/okx.py CHANGED
@@ -3575,26 +3575,31 @@ class okx(Exchange):
3575
3575
  currency = self.currency(code)
3576
3576
  if (tag is not None) and (len(tag) > 0):
3577
3577
  address = address + ':' + tag
3578
- fee = self.safe_string(params, 'fee')
3579
- if fee is None:
3580
- raise ArgumentsRequired(self.id + " withdraw() requires a 'fee' string parameter, network transaction fee must be ≥ 0. Withdrawals to OKCoin or OKX are fee-free, please set '0'. Withdrawing to external digital asset address requires network transaction fee.")
3581
3578
  request = {
3582
3579
  'ccy': currency['id'],
3583
3580
  'toAddr': address,
3584
3581
  'dest': '4', # 2 = OKCoin International, 3 = OKX 4 = others
3585
3582
  'amt': self.number_to_string(amount),
3586
- 'fee': self.number_to_string(fee), # withdrawals to OKCoin or OKX are fee-free, please set 0
3587
3583
  }
3588
- if 'password' in params:
3589
- request['pwd'] = params['password']
3590
- elif 'pwd' in params:
3591
- request['pwd'] = params['pwd']
3592
3584
  networks = self.safe_value(self.options, 'networks', {})
3593
3585
  network = self.safe_string_upper(params, 'network') # self line allows the user to specify either ERC20 or ETH
3594
3586
  network = self.safe_string(networks, network, network) # handle ETH>ERC20 alias
3595
3587
  if network is not None:
3596
3588
  request['chain'] = currency['id'] + '-' + network
3597
3589
  params = self.omit(params, 'network')
3590
+ fee = self.safe_string(params, 'fee')
3591
+ if fee is None:
3592
+ currencies = self.fetch_currencies()
3593
+ self.currencies = self.deep_extend(self.currencies, currencies)
3594
+ targetNetwork = self.safe_value(currency['networks'], self.network_id_to_code(network), {})
3595
+ fee = self.safe_string(targetNetwork, 'fee')
3596
+ if fee is None:
3597
+ raise ArgumentsRequired(self.id + " withdraw() requires a 'fee' string parameter, network transaction fee must be ≥ 0. Withdrawals to OKCoin or OKX are fee-free, please set '0'. Withdrawing to external digital asset address requires network transaction fee.")
3598
+ request['fee'] = self.number_to_string(fee) # withdrawals to OKCoin or OKX are fee-free, please set 0
3599
+ if 'password' in params:
3600
+ request['pwd'] = params['password']
3601
+ elif 'pwd' in params:
3602
+ request['pwd'] = params['pwd']
3598
3603
  query = self.omit(params, ['fee', 'password', 'pwd'])
3599
3604
  if not ('pwd' in request):
3600
3605
  raise ExchangeError(self.id + ' withdraw() requires a password parameter or a pwd parameter, it must be the funding password, not the API passphrase')
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '2.9.8'
7
+ __version__ = '2.9.9'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
ccxt/pro/base/exchange.py CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '2.9.8'
5
+ __version__ = '2.9.9'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 2.9.8
3
+ Version: 2.9.9
4
4
  Summary: A JavaScript / Python / PHP cryptocurrency trading library with support for 130+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -89,7 +89,7 @@ Current feature list:
89
89
  | [![bitmart](https://user-images.githubusercontent.com/1294454/129991357-8f47464b-d0f4-41d6-8a82-34122f0d1398.jpg)](http://www.bitmart.com/?r=rQCFLh) | bitmart | [BitMart](http://www.bitmart.com/?r=rQCFLh) | [![API Version 2](https://img.shields.io/badge/2-lightgray)](https://developer-pro.bitmart.com/) | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | [![Sign up with BitMart using CCXT's referral link for a 30% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d30%25&color=orange)](http://www.bitmart.com/?r=rQCFLh) |
90
90
  | [![bitvavo](https://user-images.githubusercontent.com/1294454/169202626-bd130fc5-fcf9-41bb-8d97-6093225c73cd.jpg)](https://bitvavo.com/?a=24F34952F7) | bitvavo | [Bitvavo](https://bitvavo.com/?a=24F34952F7) | [![API Version 2](https://img.shields.io/badge/2-lightgray)](https://docs.bitvavo.com/) | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | |
91
91
  | [![bybit](https://user-images.githubusercontent.com/51840849/76547799-daff5b80-649e-11ea-87fb-3be9bac08954.jpg)](https://www.bybit.com/register?affiliate_id=35953) | bybit | [Bybit](https://www.bybit.com/register?affiliate_id=35953) | [![API Version 5](https://img.shields.io/badge/5-lightgray)](https://bybit-exchange.github.io/docs/inverse/) | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | |
92
- | [![gate](https://user-images.githubusercontent.com/1294454/31784029-0313c702-b509-11e7-9ccc-bc0da6a0e435.jpg)](https://www.gate.io/ref/2436035) | gate | [Gate.io](https://www.gate.io/ref/2436035) | [![API Version 4](https://img.shields.io/badge/4-lightgray)](https://www.gate.io/docs/apiv4/en/index.html) | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | [![Sign up with Gate.io using CCXT's referral link for a 20% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d20%25&color=orange)](https://www.gate.io/ref/2436035) |
92
+ | [![gate](https://user-images.githubusercontent.com/1294454/31784029-0313c702-b509-11e7-9ccc-bc0da6a0e435.jpg)](https://www.gate.io/ref/2436035) | gate | [Gate.io](https://www.gate.io/ref/2436035) | [![API Version 4](https://img.shields.io/badge/4-lightgray)](https://www.gate.io/docs/developers/apiv4/en/) | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | [![Sign up with Gate.io using CCXT's referral link for a 20% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d20%25&color=orange)](https://www.gate.io/ref/2436035) |
93
93
  | [![huobi](https://user-images.githubusercontent.com/1294454/76137448-22748a80-604e-11ea-8069-6e389271911d.jpg)](https://www.huobi.com/en-us/v/register/double-invite/?inviter_id=11343840&invite_code=6rmm2223) | huobi | [Huobi](https://www.huobi.com/en-us/v/register/double-invite/?inviter_id=11343840&invite_code=6rmm2223) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://huobiapi.github.io/docs/spot/v1/en/) | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | [![Sign up with Huobi using CCXT's referral link for a 15% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d15%25&color=orange)](https://www.huobi.com/en-us/v/register/double-invite/?inviter_id=11343840&invite_code=6rmm2223) |
94
94
  | [![idex](https://user-images.githubusercontent.com/51840849/94481303-2f222100-01e0-11eb-97dd-bc14c5943a86.jpg)](https://idex.io) | idex | [IDEX](https://idex.io) | [![API Version 3](https://img.shields.io/badge/3-lightgray)](https://docs.idex.io/) | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | |
95
95
  | [![kucoin](https://user-images.githubusercontent.com/51840849/87295558-132aaf80-c50e-11ea-9801-a2fb0c57c799.jpg)](https://www.kucoin.com/ucenter/signup?rcode=E5wkqe) | kucoin | [KuCoin](https://www.kucoin.com/ucenter/signup?rcode=E5wkqe) | [![API Version 2](https://img.shields.io/badge/2-lightgray)](https://docs.kucoin.com) | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | |
@@ -160,7 +160,7 @@ The CCXT library currently supports the following 105 cryptocurrency exchange ma
160
160
  | [![exmo](https://user-images.githubusercontent.com/1294454/27766491-1b0ea956-5eda-11e7-9225-40d67b481b8d.jpg)](https://exmo.me/?ref=131685) | exmo | [EXMO](https://exmo.me/?ref=131685) | [![API Version 1.1](https://img.shields.io/badge/1.1-lightgray)](https://exmo.me/en/api_doc?ref=131685) | | |
161
161
  | [![flowbtc](https://user-images.githubusercontent.com/51840849/87443317-01c0d080-c5fe-11ea-95c2-9ebe1a8fafd9.jpg)](https://one.ndax.io/bfQiSL) | flowbtc | [flowBTC](https://one.ndax.io/bfQiSL) | [![API Version *](https://img.shields.io/badge/*-lightgray)](https://www.flowbtc.com.br/api.html) | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
162
162
  | [![fmfwio](https://user-images.githubusercontent.com/1294454/159177712-b685b40c-5269-4cea-ac83-f7894c49525d.jpg)](https://fmfw.io/referral/da948b21d6c92d69) | fmfwio | [FMFW.io](https://fmfw.io/referral/da948b21d6c92d69) | [![API Version 2](https://img.shields.io/badge/2-lightgray)](https://api.fmfw.io/api/2/explore/) | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
163
- | [![gate](https://user-images.githubusercontent.com/1294454/31784029-0313c702-b509-11e7-9ccc-bc0da6a0e435.jpg)](https://www.gate.io/ref/2436035) | gate | [Gate.io](https://www.gate.io/ref/2436035) | [![API Version 4](https://img.shields.io/badge/4-lightgray)](https://www.gate.io/docs/apiv4/en/index.html) | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
163
+ | [![gate](https://user-images.githubusercontent.com/1294454/31784029-0313c702-b509-11e7-9ccc-bc0da6a0e435.jpg)](https://www.gate.io/ref/2436035) | gate | [Gate.io](https://www.gate.io/ref/2436035) | [![API Version 4](https://img.shields.io/badge/4-lightgray)](https://www.gate.io/docs/developers/apiv4/en/) | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
164
164
  | [![gemini](https://user-images.githubusercontent.com/1294454/27816857-ce7be644-6096-11e7-82d6-3c257263229c.jpg)](https://gemini.com/) | gemini | [Gemini](https://gemini.com/) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://docs.gemini.com/rest-api) | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
165
165
  | [![hitbtc](https://user-images.githubusercontent.com/1294454/27766555-8eaec20e-5edc-11e7-9c5b-6dc69fc42f5e.jpg)](https://hitbtc.com/?ref_id=5a5d39a65d466) | hitbtc | [HitBTC](https://hitbtc.com/?ref_id=5a5d39a65d466) | [![API Version 2](https://img.shields.io/badge/2-lightgray)](https://api.hitbtc.com/v2) | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
166
166
  | [![hitbtc3](https://user-images.githubusercontent.com/1294454/27766555-8eaec20e-5edc-11e7-9c5b-6dc69fc42f5e.jpg)](https://hitbtc.com/?ref_id=5a5d39a65d466) | hitbtc3 | [HitBTC](https://hitbtc.com/?ref_id=5a5d39a65d466) | [![API Version 3](https://img.shields.io/badge/3-lightgray)](https://api.hitbtc.com) | | |
@@ -259,13 +259,13 @@ console.log (ccxt.exchanges) // print all available exchanges
259
259
 
260
260
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
261
261
 
262
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@2.9.8/dist/ccxt.browser.js
263
- * unpkg: https://unpkg.com/ccxt@2.9.8/dist/ccxt.browser.js
262
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@2.9.9/dist/ccxt.browser.js
263
+ * unpkg: https://unpkg.com/ccxt@2.9.9/dist/ccxt.browser.js
264
264
 
265
265
  CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
266
266
 
267
267
  ```HTML
268
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@2.9.8/dist/ccxt.browser.js"></script>
268
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@2.9.9/dist/ccxt.browser.js"></script>
269
269
  ```
270
270
 
271
271
  Creates a global `ccxt` object:
@@ -1,4 +1,4 @@
1
- ccxt/__init__.py,sha256=Enrh7VInMpn7xJobYgnsWWPLMy-W6f_PHLKPjZafDyE,15912
1
+ ccxt/__init__.py,sha256=EsxMjnrSlpveBH_vBSbtmk0GUSC8utPz562MwZcSLwI,15912
2
2
  ccxt/ace.py,sha256=LHJs8ki3q_vhTf67M2dY5PhdhlNe3iYdWpI8Ac2rtB8,41009
3
3
  ccxt/alpaca.py,sha256=dd8lDHGg24qRhOyfvXgyjiLZ6YgnJ5ODpW4t4GFR8d8,32910
4
4
  ccxt/ascendex.py,sha256=lmBXXBJxSnfQP_Yl2e8djgx1v1aKPdMEFHNRXKv_f1o,125846
@@ -34,7 +34,7 @@ ccxt/bl3p.py,sha256=acdOKkTdRhw-xZCxetX_m_yFQZGK4o154np9TcIv9E4,16070
34
34
  ccxt/blockchaincom.py,sha256=IcWTOgO3kCltoMPdBj_ZcKOCGaHUDlbo7NE9MJWj5Eo,46632
35
35
  ccxt/btcalpha.py,sha256=Qtu0ZBYCsJfZPp6fyCGuesq4-YeHFP-XfyuHlGwTNlA,34666
36
36
  ccxt/btcbox.py,sha256=0URf87IdA9Pr84WyTdozuvkG-LM6S_5gE0nmK8Soy08,22169
37
- ccxt/btcex.py,sha256=HbjIFK6QD-uLYmQgD7izF-a7_71MEB-98Qu1MwjPVEw,109580
37
+ ccxt/btcex.py,sha256=juePyEUEB_XQHEjObpfekSQXp7LO69mG2e-ME0S5DHY,110055
38
38
  ccxt/btcmarkets.py,sha256=trlczer8FfF-G8goHx7JGL69t4dKEicqN1s3vTPkLNc,48035
39
39
  ccxt/btctradeua.py,sha256=eyflzEU3iWPLTnc2Rlpwztj3mrhfl4CeMB4kDpvCnfk,21661
40
40
  ccxt/btcturk.py,sha256=nCpy58mPkvJexbFgYpBVTK42r0KbBPzMVYDR4LQMujY,34977
@@ -58,7 +58,7 @@ ccxt/digifinex.py,sha256=LBx3ocJrcfGFjp-R0oPr1q_9ZVuxeKvVJqrW3QNv5Qo,151213
58
58
  ccxt/exmo.py,sha256=GS5h7TgVAMp_qGIx-OTvmbEcsDse9DasclVb1HtwMHo,87997
59
59
  ccxt/flowbtc.py,sha256=YPvm6tbsHJJUQBspFcHuVPQfVmiWzwnVvfzRqBdQX6U,1169
60
60
  ccxt/fmfwio.py,sha256=9yqAG-NvgAny6NE08VOh_FQe_RylCaD5uF0d5t_0f44,1180
61
- ccxt/gate.py,sha256=UbVdjAojTxehZkZNOOd3LZgwFj2LGd2iqwjEdBTqHnY,217481
61
+ ccxt/gate.py,sha256=rptiRa6SW3ogqpf6J5h13p_MwFyYD9FJpNDnyZP9B5g,218659
62
62
  ccxt/gateio.py,sha256=GgoKg6c0l1Wndp_GRw76jmW-HvKE5Gr7FvyTVdPmHJU,387
63
63
  ccxt/gemini.py,sha256=j3_9NMjmHFXcODAGQA0sSjsc0Qu2roycW-R8c2-ZXNc,68600
64
64
  ccxt/hitbtc.py,sha256=Rf2CUROSy8fyV9HBFToJrlUY3rGXCHe34_sBmSYVJFQ,61602
@@ -90,7 +90,7 @@ ccxt/oceanex.py,sha256=WMk7FhhrdVmRtBLGzod04qIHOsdvbxfuYqVLIXxxSLc,36733
90
90
  ccxt/okcoin.py,sha256=JLud4dZXKJ2aOXxCM-HQ778WnBYafu6ESfifOKrlBMo,177429
91
91
  ccxt/okex.py,sha256=yVJP17cwsKQy1wuLljWL9dTiPQIP6UdMj7AnMSV2PL8,378
92
92
  ccxt/okex5.py,sha256=O7oiOpzvw_K7bO3evsceKI-zItrXr5StA07DGMt2Hoo,384
93
- ccxt/okx.py,sha256=43umPIFTQbWm-Dm4pplclxsmtzx88tS1U0p0ZsoUtgo,259305
93
+ ccxt/okx.py,sha256=BBYeeqhB-l_IQj7M3fshQX9B5Rj7qTJYdFRSK8F77nw,259632
94
94
  ccxt/paymium.py,sha256=tFKD930DyU2dhQBCpQKbPIoh2cdxSTflfRW-xEGRrBE,22543
95
95
  ccxt/phemex.py,sha256=jgjtgNjYT_3i8acScrkaStCKrF33Kvoa5YvIN2WmEv8,182787
96
96
  ccxt/poloniex.py,sha256=dBA23y-Bstpi5CVlXtCrgbM1BWsROm6ZP5kLH-Uaf-Q,83276
@@ -110,7 +110,7 @@ ccxt/yobit.py,sha256=XSwUxMPj7615KMSJ0uO_6r_XC86PVI9JmoFW7Sa5rhQ,50480
110
110
  ccxt/zaif.py,sha256=amUZYqnOc_YQHoEHYmXQDAuprZX9IiLwIVQELrM4EdY,27619
111
111
  ccxt/zb.py,sha256=ET77-_n6472ce0w2rEvmm9yaxTaH3fsXHoVn58i-tEA,183164
112
112
  ccxt/zonda.py,sha256=BgryogRDDWndzXIhzUCVmDp-Z-4NStgUQ52KveQ3F_k,72727
113
- ccxt/async_support/__init__.py,sha256=QEsT9pEX4HvOcf1DecLDHXz2ht09BWDZ50ZwRVMvhuA,15745
113
+ ccxt/async_support/__init__.py,sha256=SYzqUkfg6wD4NEKTZL3S9g0u6cCbAdV3nQSBbR7M_vE,15745
114
114
  ccxt/async_support/ace.py,sha256=KBkF9jOtfuexziucqdz9hVQ8EQDYEaHAnF7qpb3sUT8,41239
115
115
  ccxt/async_support/alpaca.py,sha256=4vMmD34LgVuwoWN4AK_2Wt12dL5KA3uwGJKQuzG6sAg,33056
116
116
  ccxt/async_support/ascendex.py,sha256=epuquvLlW0vwcjs46tlMTuRf2kAP3rqzCqUMg9IDppw,126460
@@ -146,7 +146,7 @@ ccxt/async_support/bl3p.py,sha256=Lsargo-0A-EryC9tu9O59uxcds-p31aGIKBE575Psmk,16
146
146
  ccxt/async_support/blockchaincom.py,sha256=BfeCR1h9KURIW9vEjiawXDDrHBe-t72XJ5ymcwsXKL4,47060
147
147
  ccxt/async_support/btcalpha.py,sha256=M7EGVVsdAHPXE7u8--RM2UQ3m9G134MvLdi8HIDDGq4,34944
148
148
  ccxt/async_support/btcbox.py,sha256=ej6RzOaIfNbfJ71RyaeBQenz2OUcaW5VzdmpqhJ0TIE,22363
149
- ccxt/async_support/btcex.py,sha256=rstr4ZXdz46PUOmBdaIz_ct2P2bKivPZgvkOYG8s0gk,110206
149
+ ccxt/async_support/btcex.py,sha256=l-lEw-EQInMN6EGKkVkyqyOsNFPPW1odOTjfLZ60WwA,110681
150
150
  ccxt/async_support/btcmarkets.py,sha256=mqB-YZnh_ZRK9PwpvAcp579Cj6Ul_A3d3AIEOtGmFjQ,48385
151
151
  ccxt/async_support/btctradeua.py,sha256=B5OlisST-2mpE_r8svLfxqj4LWZ1EMyaAMcOb971cg0,21807
152
152
  ccxt/async_support/btcturk.py,sha256=jhTw3LqZNdkfnBcF-3nJubvMKdr_nICJ_-u2qFy9UyM,35195
@@ -170,7 +170,7 @@ ccxt/async_support/digifinex.py,sha256=mwWtWNiYPYvbtlT2Vw0IxhvYaajI3lKdhWV3-a_84
170
170
  ccxt/async_support/exmo.py,sha256=A_9XE1aA2Ch2yMtyJGctVnCrsTCXYAeUsB8eNJXrN_g,88539
171
171
  ccxt/async_support/flowbtc.py,sha256=bCnvtcNnPxxaxqVjI1GGXKhIpz_1r4GIFWqqPokvCR0,1183
172
172
  ccxt/async_support/fmfwio.py,sha256=8ag6QCIc8UV5eE3BpSc5mFP2nuJR2Wu2wGyOGKFej2g,1194
173
- ccxt/async_support/gate.py,sha256=wpXot7fOpDGPdB0PPnrf0PflbZZ5VhyllI9yArub8cg,218335
173
+ ccxt/async_support/gate.py,sha256=PyzbsNpBrs6-90hj8W__3VIAJZN-AOPY3rkKp6tw17E,219513
174
174
  ccxt/async_support/gateio.py,sha256=89g56dHNlw5e8yaAbwnoxoxufj9JP1ksiz9dgyP8VuQ,401
175
175
  ccxt/async_support/gemini.py,sha256=wGZfJYRBHjil5ag5xO6_1y2m6EMDD0cbee7q3on0OKU,69076
176
176
  ccxt/async_support/hitbtc.py,sha256=gO4SYBdjSFXZoLX0dkCFzSgPMc7vrLunQRvlzqK4lco,62036
@@ -202,7 +202,7 @@ ccxt/async_support/oceanex.py,sha256=J3DbqR42xMvrDk9GMAP9ngYqLV_VsDz0IESJE3S0iNo
202
202
  ccxt/async_support/okcoin.py,sha256=861qonrLRM8QnDgglCEk8h75gQMxxIuLtiBIkPXn_tA,177893
203
203
  ccxt/async_support/okex.py,sha256=6pyaxRyqPd4-BF_7xAGE965VD233eihKZBq6l3KgZtM,392
204
204
  ccxt/async_support/okex5.py,sha256=A3NMLSKaCaMcZptkv3WsLju3xSLAnTAo8-NMueRfH5E,398
205
- ccxt/async_support/okx.py,sha256=PxUzgUzXEgFvRr8wfHUNGMP5tAOYL31wVg7D7LHhrPI,260327
205
+ ccxt/async_support/okx.py,sha256=2zmtStg4eQTnKesSmM27SBatKd7jHpgMQs14UdQQcmE,260660
206
206
  ccxt/async_support/paymium.py,sha256=jr7ezlYsxIRh-pT7Eu0N3NsS9-hv845oGQoHyrhKS7A,22731
207
207
  ccxt/async_support/phemex.py,sha256=QRUMAQmzgsz7bgFTEatJKiuTEuU8ymY234N0IOdK2XA,183323
208
208
  ccxt/async_support/poloniex.py,sha256=NnZzjR1aJ5gmZMEDhlYIfTfS5jV04IQjMsJcGUraDv0,83776
@@ -223,14 +223,14 @@ ccxt/async_support/zaif.py,sha256=pU8VIbfzoal-aYYOwXjCJom1wv39QQHp2QWVmf7v5uI,27
223
223
  ccxt/async_support/zb.py,sha256=f91YoThqWGOyYl_ywW2x6pw_LQABGS8_4DczWAQKLpU,183868
224
224
  ccxt/async_support/zonda.py,sha256=9pqglR6VBN-iqEYj7CBIZC-96tl05WFrkLf_5csxPVk,73017
225
225
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
226
- ccxt/async_support/base/exchange.py,sha256=m9wcNPdnbT3-9N_tABnSWt2UMqsun5ywOCUSBrk4REs,108097
226
+ ccxt/async_support/base/exchange.py,sha256=I6VBnPvjTQ_QJcy16Db8jRvvr1FEuOF-soZ8eTzEs2Y,108097
227
227
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
228
228
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
229
229
  ccxt/base/decimal_to_precision.py,sha256=FG3IBmZKwWPg7Kj2mgCX7txELUEhfgfmnxrbKwVVtok,6531
230
230
  ccxt/base/errors.py,sha256=-LVeTNyXvu3QEgb-p-KzMpcBgzHlvFTwDzmZK7Gfc14,3401
231
- ccxt/base/exchange.py,sha256=cQix4OkUDByv_oOqWgU7LEcPAzE84hkpNxijnbyBGE0,163549
231
+ ccxt/base/exchange.py,sha256=uNhb-ApI9e1tVYRdEpstS1Xh78O7kstgm4cN4rr0zHU,163549
232
232
  ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
233
- ccxt/pro/__init__.py,sha256=ymjwi8GfX4QTiEs5r-Dsq4FnspOn9-hxA3BHaF1_Ias,5946
233
+ ccxt/pro/__init__.py,sha256=11yhyUIBbi2pN1ATXUX2NOkFQQb-o1q2z2AMztFSr_0,5946
234
234
  ccxt/pro/alpaca.py,sha256=7o59h7qBbF9U1_jVBFVlGvstywQOh_dkfV4yqXuspgo,26426
235
235
  ccxt/pro/ascendex.py,sha256=UikwO6-yiSfIV-OImOOIZ2xO_zanAB49VDQsoDN6Q5M,34311
236
236
  ccxt/pro/bequant.py,sha256=qz8JjnpkAQY_CFiFSKGqrjjgZ2167_TBKjSJOb9NeDw,1081
@@ -289,7 +289,7 @@ ccxt/pro/base/__init__.py,sha256=XscxcHui5I8za8dAzz0O3J-UeyxGkUEXlErAaBWHCjY,184
289
289
  ccxt/pro/base/aiohttp_client.py,sha256=wd0ae_KYgQ3gqYgj7uYeJcDPfJWzxMKUQsxs8ZZcTr4,4961
290
290
  ccxt/pro/base/cache.py,sha256=r9l1tEvR3sfN4Joqj6bPBRS0Xrg7mjAFjTDW4QBMozY,6085
291
291
  ccxt/pro/base/client.py,sha256=XvQt-puPiGBXYw1s9nFXj_xXRNkDxc8hF5kvQBVwBnk,7270
292
- ccxt/pro/base/exchange.py,sha256=xMG-VnZJp4yXD8y3qZm6hyifPKBHT8YGAeRLNqpqHjM,8212
292
+ ccxt/pro/base/exchange.py,sha256=OlPgFPNw_iDOvpbi8T-lnromq_lhv7NSUHfjo2YLlrE,8212
293
293
  ccxt/pro/base/fast_client.py,sha256=NCAHUS35OzhsPve2owVLzM9BmM7cTsYcNFEJBw1UESU,3245
294
294
  ccxt/pro/base/functions.py,sha256=vf2FUrlCak5Tf5a6-vbTtmtzHzbXi0nECRygTmNhxFw,1495
295
295
  ccxt/pro/base/future.py,sha256=hcvcH5rUP4Jn7qbQwx19P4ItM1DWZU2vvRS8Ob6MIDU,249
@@ -326,7 +326,7 @@ ccxt/test/test_sync.py,sha256=omZA0xK_2nl58Gwoz65Oi4xRN4uLyuZ0AWZwf2Eqa9w,22795
326
326
  ccxt/test/test_throttle.py,sha256=GvLQWtA4fAk_yJrxeisek-wAz7eJdHj0DDKR4_V1beg,3123
327
327
  ccxt/test/test_trade.py,sha256=-pw3gxe26wozFeN_Vy4zWNUQr0fSXOg3FRu-gVvOrqE,3243
328
328
  ccxt/test/test_transaction.py,sha256=IlyTFDWDwGUGzk94yx6vLaJy9zyCRlhEVigXE6hDd40,1514
329
- ccxt-2.9.8.dist-info/METADATA,sha256=8GyhjZl3ZIc8Ksgqs_OTYiVtrdas78I_x68dO0ehX0E,110825
330
- ccxt-2.9.8.dist-info/WHEEL,sha256=bb2Ot9scclHKMOLDEHY6B2sicWOgugjFKaJsT7vwMQo,110
331
- ccxt-2.9.8.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
332
- ccxt-2.9.8.dist-info/RECORD,,
329
+ ccxt-2.9.9.dist-info/METADATA,sha256=2-klFi1hlyOPzqH4JM50fO_4nfOJ_Evdxm_Cz4Cv_g0,110825
330
+ ccxt-2.9.9.dist-info/WHEEL,sha256=bb2Ot9scclHKMOLDEHY6B2sicWOgugjFKaJsT7vwMQo,110
331
+ ccxt-2.9.9.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
332
+ ccxt-2.9.9.dist-info/RECORD,,
File without changes