ccxt 4.3.3__py2.py3-none-any.whl → 4.3.5__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.

Potentially problematic release.


This version of ccxt might be problematic. Click here for more details.

ccxt/pro/cex.py CHANGED
@@ -297,7 +297,7 @@ class cex(ccxt.async_support.cex):
297
297
  return result
298
298
  return self.filter_by_array(self.tickers, 'symbol', symbols)
299
299
 
300
- async def fetch_ticker_ws(self, symbol: str, params={}):
300
+ async def fetch_ticker_ws(self, symbol: str, params={}) -> Ticker:
301
301
  """
302
302
  :see: https://docs.cex.io/#ws-api-ticker-deprecated
303
303
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
ccxt/pro/lbank.py CHANGED
@@ -227,7 +227,7 @@ class lbank(ccxt.async_support.lbank):
227
227
  messageHash = 'ohlcv:' + symbol + ':' + timeframeId
228
228
  client.resolve(stored, messageHash)
229
229
 
230
- async def fetch_ticker_ws(self, symbol, params={}) -> Ticker:
230
+ async def fetch_ticker_ws(self, symbol: str, params={}) -> Ticker:
231
231
  """
232
232
  :see: https://www.lbank.com/en-US/docs/index.html#request-amp-subscription-instruction
233
233
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
ccxt/pro/woo.py CHANGED
@@ -79,7 +79,6 @@ class woo(ccxt.async_support.woo):
79
79
  return newValue
80
80
 
81
81
  async def watch_public(self, messageHash, message):
82
- self.check_required_uid()
83
82
  url = self.urls['api']['ws']['public'] + '/' + self.uid
84
83
  requestId = self.request_id(url)
85
84
  subscribe = {
ccxt/test/test_async.py CHANGED
@@ -278,7 +278,7 @@ class testMainClass(baseMainTestClass):
278
278
  self.load_keys = get_cli_arg_value('--loadKeys')
279
279
  self.ws_tests = get_cli_arg_value('--ws')
280
280
 
281
- async def init(self, exchange_id, symbol_argv):
281
+ async def init(self, exchange_id, symbol_argv, method_argv):
282
282
  self.parse_cli_args()
283
283
  if self.request_tests and self.response_tests:
284
284
  await self.run_static_request_tests(exchange_id, symbol_argv)
@@ -293,13 +293,12 @@ class testMainClass(baseMainTestClass):
293
293
  if self.id_tests:
294
294
  await self.run_broker_id_tests()
295
295
  return
296
- symbol_str = symbol_argv if symbol_argv is not None else 'all'
297
- exchange_object = {
296
+ dump(self.new_line + '' + self.new_line + '' + '[INFO] TESTING ', self.ext, {
298
297
  'exchange': exchange_id,
299
- 'symbol': symbol_str,
298
+ 'symbol': symbol_argv,
299
+ 'method': method_argv,
300
300
  'isWs': self.ws_tests,
301
- }
302
- dump(self.new_line + '' + self.new_line + '' + '[INFO] TESTING ', self.ext, json_stringify(exchange_object), self.new_line)
301
+ }, self.new_line)
303
302
  exchange_args = {
304
303
  'verbose': self.verbose,
305
304
  'debug': self.debug,
@@ -312,25 +311,22 @@ class testMainClass(baseMainTestClass):
312
311
  await self.import_files(exchange)
313
312
  assert len(list(self.test_files.keys())) > 0, 'Test files were not loaded' # ensure test files are found & filled
314
313
  self.expand_settings(exchange)
315
- symbol = self.check_if_specific_test_is_chosen(symbol_argv)
316
- await self.start_test(exchange, symbol)
314
+ self.check_if_specific_test_is_chosen(method_argv)
315
+ await self.start_test(exchange, symbol_argv)
317
316
  exit_script(0) # needed to be explicitly finished for WS tests
318
317
 
319
- def check_if_specific_test_is_chosen(self, symbol_argv):
320
- if symbol_argv is not None:
318
+ def check_if_specific_test_is_chosen(self, method_argv):
319
+ if method_argv is not None:
321
320
  test_file_names = list(self.test_files.keys())
322
- possible_method_names = symbol_argv.split(',') # i.e. `test.ts binance fetchBalance,fetchDeposits`
321
+ possible_method_names = method_argv.split(',') # i.e. `test.ts binance fetchBalance,fetchDeposits`
323
322
  if len(possible_method_names) >= 1:
324
323
  for i in range(0, len(test_file_names)):
325
324
  test_file_name = test_file_names[i]
326
325
  for j in range(0, len(possible_method_names)):
327
326
  method_name = possible_method_names[j]
327
+ method_name = method_name.replace('()', '')
328
328
  if test_file_name == method_name:
329
329
  self.only_specific_tests.append(test_file_name)
330
- # if method names were found, then remove them from symbolArgv
331
- if len(self.only_specific_tests) > 0:
332
- return None
333
- return symbol_argv
334
330
 
335
331
  async def import_files(self, exchange):
336
332
  properties = list(exchange.has.keys())
@@ -1579,5 +1575,7 @@ class testMainClass(baseMainTestClass):
1579
1575
 
1580
1576
 
1581
1577
  if __name__ == '__main__':
1582
- symbol = argv.symbol if argv.symbol else None
1583
- asyncio.run(testMainClass().init(argv.exchange, symbol))
1578
+ argvSymbol = argv.symbol if argv.symbol and '/' in argv.symbol else None
1579
+ # in python, we check it through "symbol" arg (as opposed to JS/PHP) because argvs were already built above
1580
+ argvMethod = argv.symbol if argv.symbol and '()' in argv.symbol else None
1581
+ asyncio.run(testMainClass().init(argv.exchange, argvSymbol, argvMethod))
ccxt/test/test_sync.py CHANGED
@@ -277,7 +277,7 @@ class testMainClass(baseMainTestClass):
277
277
  self.load_keys = get_cli_arg_value('--loadKeys')
278
278
  self.ws_tests = get_cli_arg_value('--ws')
279
279
 
280
- def init(self, exchange_id, symbol_argv):
280
+ def init(self, exchange_id, symbol_argv, method_argv):
281
281
  self.parse_cli_args()
282
282
  if self.request_tests and self.response_tests:
283
283
  self.run_static_request_tests(exchange_id, symbol_argv)
@@ -292,13 +292,12 @@ class testMainClass(baseMainTestClass):
292
292
  if self.id_tests:
293
293
  self.run_broker_id_tests()
294
294
  return
295
- symbol_str = symbol_argv if symbol_argv is not None else 'all'
296
- exchange_object = {
295
+ dump(self.new_line + '' + self.new_line + '' + '[INFO] TESTING ', self.ext, {
297
296
  'exchange': exchange_id,
298
- 'symbol': symbol_str,
297
+ 'symbol': symbol_argv,
298
+ 'method': method_argv,
299
299
  'isWs': self.ws_tests,
300
- }
301
- dump(self.new_line + '' + self.new_line + '' + '[INFO] TESTING ', self.ext, json_stringify(exchange_object), self.new_line)
300
+ }, self.new_line)
302
301
  exchange_args = {
303
302
  'verbose': self.verbose,
304
303
  'debug': self.debug,
@@ -311,25 +310,22 @@ class testMainClass(baseMainTestClass):
311
310
  self.import_files(exchange)
312
311
  assert len(list(self.test_files.keys())) > 0, 'Test files were not loaded' # ensure test files are found & filled
313
312
  self.expand_settings(exchange)
314
- symbol = self.check_if_specific_test_is_chosen(symbol_argv)
315
- self.start_test(exchange, symbol)
313
+ self.check_if_specific_test_is_chosen(method_argv)
314
+ self.start_test(exchange, symbol_argv)
316
315
  exit_script(0) # needed to be explicitly finished for WS tests
317
316
 
318
- def check_if_specific_test_is_chosen(self, symbol_argv):
319
- if symbol_argv is not None:
317
+ def check_if_specific_test_is_chosen(self, method_argv):
318
+ if method_argv is not None:
320
319
  test_file_names = list(self.test_files.keys())
321
- possible_method_names = symbol_argv.split(',') # i.e. `test.ts binance fetchBalance,fetchDeposits`
320
+ possible_method_names = method_argv.split(',') # i.e. `test.ts binance fetchBalance,fetchDeposits`
322
321
  if len(possible_method_names) >= 1:
323
322
  for i in range(0, len(test_file_names)):
324
323
  test_file_name = test_file_names[i]
325
324
  for j in range(0, len(possible_method_names)):
326
325
  method_name = possible_method_names[j]
326
+ method_name = method_name.replace('()', '')
327
327
  if test_file_name == method_name:
328
328
  self.only_specific_tests.append(test_file_name)
329
- # if method names were found, then remove them from symbolArgv
330
- if len(self.only_specific_tests) > 0:
331
- return None
332
- return symbol_argv
333
329
 
334
330
  def import_files(self, exchange):
335
331
  properties = list(exchange.has.keys())
@@ -1578,5 +1574,7 @@ class testMainClass(baseMainTestClass):
1578
1574
 
1579
1575
 
1580
1576
  if __name__ == '__main__':
1581
- symbol = argv.symbol if argv.symbol else None
1582
- (testMainClass().init(argv.exchange, symbol))
1577
+ argvSymbol = argv.symbol if argv.symbol and '/' in argv.symbol else None
1578
+ # in python, we check it through "symbol" arg (as opposed to JS/PHP) because argvs were already built above
1579
+ argvMethod = argv.symbol if argv.symbol and '()' in argv.symbol else None
1580
+ (testMainClass().init(argv.exchange, argvSymbol, argvMethod))
ccxt/whitebit.py CHANGED
@@ -41,7 +41,7 @@ class whitebit(Exchange, ImplicitAPI):
41
41
  'swap': False,
42
42
  'future': False,
43
43
  'option': False,
44
- 'cancelAllOrders': False,
44
+ 'cancelAllOrders': True,
45
45
  'cancelOrder': True,
46
46
  'cancelOrders': False,
47
47
  'createOrder': True,
@@ -186,11 +186,13 @@ class whitebit(Exchange, ImplicitAPI):
186
186
  'ping',
187
187
  'markets',
188
188
  'futures',
189
+ 'platform/status',
189
190
  ],
190
191
  },
191
192
  'private': {
192
193
  'post': [
193
194
  'collateral-account/balance',
195
+ 'collateral-account/balance-summary',
194
196
  'collateral-account/positions/history',
195
197
  'collateral-account/leverage',
196
198
  'collateral-account/positions/open',
@@ -207,21 +209,40 @@ class whitebit(Exchange, ImplicitAPI):
207
209
  'main-account/withdraw',
208
210
  'main-account/withdraw-pay',
209
211
  'main-account/transfer',
212
+ 'main-account/smart/plans',
213
+ 'main-account/smart/investment',
214
+ 'main-account/smart/investment/close',
215
+ 'main-account/smart/investments',
216
+ 'main-account/fee',
217
+ 'main-account/smart/interest-payment-history',
210
218
  'trade-account/balance',
211
219
  'trade-account/executed-history',
212
220
  'trade-account/order',
213
221
  'trade-account/order/history',
214
222
  'order/collateral/limit',
215
223
  'order/collateral/market',
216
- 'order/collateral/trigger_market',
224
+ 'order/collateral/stop-limit',
225
+ 'order/collateral/trigger-market',
217
226
  'order/new',
218
227
  'order/market',
219
228
  'order/stock_market',
220
229
  'order/stop_limit',
221
230
  'order/stop_market',
222
231
  'order/cancel',
232
+ 'order/cancel/all',
233
+ 'order/kill-switch',
234
+ 'order/kill-switch/status',
235
+ 'order/bulk',
236
+ 'order/modify',
223
237
  'orders',
238
+ 'oco-orders',
239
+ 'order/collateral/oco',
240
+ 'order/oco-cancel',
241
+ 'order/oto-cancel',
224
242
  'profile/websocket_token',
243
+ 'convert/estimate',
244
+ 'convert/confirm',
245
+ 'convert/history',
225
246
  ],
226
247
  },
227
248
  },
@@ -1203,6 +1224,58 @@ class whitebit(Exchange, ImplicitAPI):
1203
1224
  response = self.v4PrivatePostOrderStockMarket(self.extend(request, params))
1204
1225
  return self.parse_order(response)
1205
1226
 
1227
+ def edit_order(self, id: str, symbol: str, type: OrderType, side: OrderSide, amount: Num = None, price: Num = None, params={}):
1228
+ """
1229
+ edit a trade order
1230
+ :see: https://docs.whitebit.com/private/http-trade-v4/#modify-order
1231
+ :param str id: cancel order id
1232
+ :param str symbol: unified symbol of the market to create an order in
1233
+ :param str type: 'market' or 'limit'
1234
+ :param str side: 'buy' or 'sell'
1235
+ :param float amount: how much of currency you want to trade in units of base currency
1236
+ :param float price: the price at which the order is to be fullfilled, in units of the base currency, ignored in market orders
1237
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1238
+ :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1239
+ """
1240
+ if id is None:
1241
+ raise ArgumentsRequired(self.id + ' editOrder() requires a id argument')
1242
+ if symbol is None:
1243
+ raise ArgumentsRequired(self.id + ' editOrder() requires a symbol argument')
1244
+ self.load_markets()
1245
+ market = self.market(symbol)
1246
+ request = {
1247
+ 'orderId': id,
1248
+ 'market': market['id'],
1249
+ }
1250
+ clientOrderId = self.safe_string_2(params, 'clOrdId', 'clientOrderId')
1251
+ if clientOrderId is not None:
1252
+ # Update clientOrderId of the order
1253
+ request['clientOrderId'] = clientOrderId
1254
+ isLimitOrder = type == 'limit'
1255
+ stopPrice = self.safe_number_n(params, ['triggerPrice', 'stopPrice', 'activation_price'])
1256
+ isStopOrder = (stopPrice is not None)
1257
+ params = self.omit(params, ['clOrdId', 'clientOrderId', 'triggerPrice', 'stopPrice'])
1258
+ if isStopOrder:
1259
+ request['activation_price'] = self.price_to_precision(symbol, stopPrice)
1260
+ if isLimitOrder:
1261
+ # stop limit order
1262
+ request['amount'] = self.amount_to_precision(symbol, amount)
1263
+ request['price'] = self.price_to_precision(symbol, price)
1264
+ else:
1265
+ # stop market order
1266
+ if side == 'buy':
1267
+ # Use total parameter instead of amount for modify buy stop market order
1268
+ request['total'] = self.amount_to_precision(symbol, amount)
1269
+ else:
1270
+ request['amount'] = self.amount_to_precision(symbol, amount)
1271
+ else:
1272
+ request['amount'] = self.amount_to_precision(symbol, amount)
1273
+ if isLimitOrder:
1274
+ # limit order
1275
+ request['price'] = self.price_to_precision(symbol, price)
1276
+ response = self.v4PrivatePostOrderModify(self.extend(request, params))
1277
+ return self.parse_order(response)
1278
+
1206
1279
  def cancel_order(self, id: str, symbol: Str = None, params={}):
1207
1280
  """
1208
1281
  cancels an open order
@@ -1222,6 +1295,43 @@ class whitebit(Exchange, ImplicitAPI):
1222
1295
  }
1223
1296
  return self.v4PrivatePostOrderCancel(self.extend(request, params))
1224
1297
 
1298
+ def cancel_all_orders(self, symbol: Str = None, params={}):
1299
+ """
1300
+ cancel all open orders
1301
+ :see: https://docs.whitebit.com/private/http-trade-v4/#cancel-all-orders
1302
+ :param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
1303
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1304
+ :param str [params.type]: market type, ['swap', 'spot']
1305
+ :param boolean [params.isMargin]: cancel all margin orders
1306
+ :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1307
+ """
1308
+ self.load_markets()
1309
+ market = None
1310
+ request = {}
1311
+ if symbol is not None:
1312
+ market = self.market(symbol)
1313
+ request['market'] = market['id']
1314
+ type = None
1315
+ type, params = self.handle_market_type_and_params('cancelAllOrders', market, params)
1316
+ requestType = []
1317
+ if type == 'spot':
1318
+ isMargin = None
1319
+ isMargin, params = self.handle_option_and_params(params, 'cancelAllOrders', 'isMargin', False)
1320
+ if isMargin:
1321
+ requestType.append('margin')
1322
+ else:
1323
+ requestType.append('spot')
1324
+ elif type == 'swap':
1325
+ requestType.append('futures')
1326
+ else:
1327
+ raise NotSupported(self.id + ' cancelAllOrders() does not support ' + type + ' type')
1328
+ request['type'] = requestType
1329
+ response = self.v4PrivatePostOrderCancelAll(self.extend(request, params))
1330
+ #
1331
+ # []
1332
+ #
1333
+ return response
1334
+
1225
1335
  def parse_balance(self, response) -> Balances:
1226
1336
  balanceKeys = list(response.keys())
1227
1337
  result = {}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.3.3
3
+ Version: 4.3.5
4
4
  Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -262,13 +262,13 @@ console.log(version, Object.keys(exchanges));
262
262
 
263
263
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
264
264
 
265
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.3/dist/ccxt.browser.js
266
- * unpkg: https://unpkg.com/ccxt@4.3.3/dist/ccxt.browser.js
265
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.5/dist/ccxt.browser.js
266
+ * unpkg: https://unpkg.com/ccxt@4.3.5/dist/ccxt.browser.js
267
267
 
268
268
  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.
269
269
 
270
270
  ```HTML
271
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.3/dist/ccxt.browser.js"></script>
271
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.5/dist/ccxt.browser.js"></script>
272
272
  ```
273
273
 
274
274
  Creates a global `ccxt` object:
@@ -1,10 +1,10 @@
1
- ccxt/__init__.py,sha256=4Zf20TWsbyV1AvrGAYuAdi0qGEbqi4i6O9gsbRI_MBs,15655
1
+ ccxt/__init__.py,sha256=SPjZtTc-g2C8kO8z7wwrleAYUBGCfU4aXu7OKThZf_c,15655
2
2
  ccxt/ace.py,sha256=yGGKYViya2zCyr1DjWhEu9mknkDAEVsobHmrvJxHfX0,41420
3
3
  ccxt/alpaca.py,sha256=6P2wAEGJQOjjoKQbzv1KvSuZvEZmOX987a1NqB7z9mk,46908
4
4
  ccxt/ascendex.py,sha256=T5dbI_93gq24rPswAnm1rrncTMatz7XdcRQMYVbT8WQ,151384
5
5
  ccxt/bequant.py,sha256=RBiAmaTbL35DgiV3Hl6uchLUd78V0z1T9riTlNsrpdc,1174
6
6
  ccxt/bigone.py,sha256=rgg8BdMqBPa0jJjDh9xP7Y7Y6lMKAIJXzmE-g6EEm4I,92185
7
- ccxt/binance.py,sha256=0u6xYyjI6xeepw51XOH7lTyY03PlM2L9Q0rGHqRh7tM,610985
7
+ ccxt/binance.py,sha256=gjmBjCTxD2zgeiYDHM_aq7i_FbKW04Ri7HuIjLYkfqo,611288
8
8
  ccxt/binancecoinm.py,sha256=pncdw6Xw2X1Po-vEvAB4nL37scoS_axGAVxetPy1YQs,1645
9
9
  ccxt/binanceus.py,sha256=hdcT4OnadcdFFFjF3GtM0nWv90jqojqwdVS3xWGuW40,9163
10
10
  ccxt/binanceusdm.py,sha256=KPQGlCalQ0eGlPCs2tSanOxaP8O0zFRQjGntA16Yprw,2480
@@ -71,7 +71,7 @@ ccxt/independentreserve.py,sha256=nRprUlIbJ2ipFavUim5Ad46oYSEz8cpqFL1gg1hN-Mg,32
71
71
  ccxt/indodax.py,sha256=0Uv6cHkrvmLHOV5YaMMfs3Le5qwbNtAmLP2eZl_m8wo,51779
72
72
  ccxt/kraken.py,sha256=7DKXOeIDQqJ-6-z1d7Y7qK8E4l8myCRhtT2oz-z9B7k,124178
73
73
  ccxt/krakenfutures.py,sha256=2QLNQ5Jw1vc2VELeVOtGNY029lKRAovFoV2iBzb_rCw,115673
74
- ccxt/kucoin.py,sha256=euNv22NfoFHkqRin1hWZUmc7GRc2peDCuddV5CMNy5U,215078
74
+ ccxt/kucoin.py,sha256=Cfjh909Fb4dF3oSQBtfFSHvsndeO9PINl5Z-u2Ym5-w,217613
75
75
  ccxt/kucoinfutures.py,sha256=Mkzn3sg13r-qW_gEgt8RsrW4MezlZtX96DXJerCVw6k,118519
76
76
  ccxt/kuna.py,sha256=vBWvg6-OPQvpEWwfCiZ8qkKaoTjiQ728l-Y5ThlcuVc,95980
77
77
  ccxt/latoken.py,sha256=gVAVH_Yp68SzObhjtYXpMBn8g__tHAnHYL-4skplYgA,78780
@@ -88,7 +88,7 @@ ccxt/okx.py,sha256=vOt_twMp7Tx0Ug3o4YytiXhmUBTyhgxH6BwkDX5-RsU,362446
88
88
  ccxt/onetrading.py,sha256=-Jda6aa1YmjfiiJ80SuncaNxaWjyNKnmLL5ZZ9wialo,87957
89
89
  ccxt/p2b.py,sha256=Uea-rKf4-h9G3h9OmrmPU17IGmRqZMhqKdD8h_RLj_M,54074
90
90
  ccxt/paymium.py,sha256=2mBwmyT93k-dXBEKEix48G8PsA2IEN_5yScEM985Z10,24203
91
- ccxt/phemex.py,sha256=qQXlWB0pgUtL9A3G7-ubFhd68rTkPczynH4GoRFo95Y,218625
91
+ ccxt/phemex.py,sha256=ZuvjcAzLZUhSKq94M4-J4s3R8moF4MpFayaEIbgVRhA,218806
92
92
  ccxt/poloniex.py,sha256=koq79DTlr9oJF0tnzPpt-JRh1sTc0ScBf-GFT4bLhpo,101948
93
93
  ccxt/poloniexfutures.py,sha256=jGrnEnoaYM9Vl5P-_PaSOXnG6fWH8ptzFj2IT9c9QyA,77808
94
94
  ccxt/probit.py,sha256=RwgQAxfYjhYY_YxbUtsfqGFI3bJ09JlUUGQwYqvQ-CE,76208
@@ -98,7 +98,7 @@ ccxt/tradeogre.py,sha256=xweL2bfRU0hIe5Ge68Ei1KI7hUy9JgnjGmXBeraQRhM,23761
98
98
  ccxt/upbit.py,sha256=DdWcGVelc6jXj1NnBAJ8MLIOHIGo2hxwCQw153bt_dI,81600
99
99
  ccxt/wavesexchange.py,sha256=UN0I0imFsVCxg6UQLxAjBiNk9iQsZ6w9vNwhr6-zzaU,113400
100
100
  ccxt/wazirx.py,sha256=6wp-sysqg8cJ7Dbr5qRruWOhVRfVQCEty7e4pwaM86M,51191
101
- ccxt/whitebit.py,sha256=MN99vNk-cS37hGliZXXeSaBcNGHjB6JfPWlPGinJpWY,100934
101
+ ccxt/whitebit.py,sha256=xn_TWYXAYsxnXBj0wHWbaG7i8B4GMWsbWM6pqFZRYEU,106442
102
102
  ccxt/woo.py,sha256=UuTqKobDDZ8k8yJaQYikwHbL5UxAhGls665FOcA-leY,137401
103
103
  ccxt/yobit.py,sha256=rzUO9bMxZnDaL9EBSGaXwkEhde1qVcedXDxjQsOWCtc,53066
104
104
  ccxt/zaif.py,sha256=qfJ1dB3lfeDobEFlEtS7QW1C7nkwSBtc3xsEFeU5Xwg,27952
@@ -202,18 +202,18 @@ ccxt/abstract/tradeogre.py,sha256=sIdA_22RHztwsIeznysBPtvta5V_mQwUXeYK6OyUJqQ,13
202
202
  ccxt/abstract/upbit.py,sha256=fPIEwrzoNk01aQbxhuRveTFHHKGBfAweOn4Uv8Ru0UM,3576
203
203
  ccxt/abstract/wavesexchange.py,sha256=8LIgZiPixoaUFPKGSWJpjI1BYXVqeQh9NLcjfXciZMc,19631
204
204
  ccxt/abstract/wazirx.py,sha256=UfQvsyKwf4kImpkPlxdnoWDq0iUT5t1kSa2iDr_XkDw,2782
205
- ccxt/abstract/whitebit.py,sha256=IaK-PxBd3rBoE2m9EExB4rGaqovubRHPHOATUUMbJ9o,8029
205
+ ccxt/abstract/whitebit.py,sha256=FP5zn3RvbaRcJ2LLgeaTKra2L6aaq9Bj6gZ79VMzAwE,10977
206
206
  ccxt/abstract/woo.py,sha256=E-QXVJKVI4EOW72NX6wv99px9EyitWtd9KWvXUc9Tyo,10216
207
207
  ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
208
208
  ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
209
209
  ccxt/abstract/zonda.py,sha256=aSfewvRojzmuymX6QbOnDR8v9VFqWTULMHX9Y7kKD1M,5820
210
- ccxt/async_support/__init__.py,sha256=Jig1aFrMJIcGRtC3J0VaLV_sWHfaqbzBpnz1y9zWlOQ,15408
210
+ ccxt/async_support/__init__.py,sha256=lZZYaieoxFG9KuMVHlE2Y0JmtBOBEJpQLnXf3s8WGOM,15408
211
211
  ccxt/async_support/ace.py,sha256=kbkibefA6HaHJSNoL_MPmbPUn7n2wyruxBOR7BXmUmQ,41644
212
212
  ccxt/async_support/alpaca.py,sha256=Nsaff9RczBhiNF19RlqI6wggvEibV_2ICgB8H5Qiuck,47120
213
213
  ccxt/async_support/ascendex.py,sha256=wlR3Mc8Mg7dIuzWZ59AWxAVPh0sVKddH-SFvdbq3ECc,152172
214
214
  ccxt/async_support/bequant.py,sha256=1hTwHovo1bW1XTIc8ZKjvJ-Xg6LfmpGdzT7TepykaVM,1188
215
215
  ccxt/async_support/bigone.py,sha256=_B8qO9qQWVMSd5c-CeBmYtm_IsrkweAZPTLUf7hiQaI,92639
216
- ccxt/async_support/binance.py,sha256=X35VfeDApdRkWmE0qt6zdeHq5mh0lIMilb9KM_UmBJk,613653
216
+ ccxt/async_support/binance.py,sha256=02ju9xG_sINaiThpnffiRdYhlys62DMM4YhxmKJKwsw,613956
217
217
  ccxt/async_support/binancecoinm.py,sha256=IY3RLZptQA2nmZaUYRGfTa5ZY4VMWBpFYfwHc8zTHw0,1683
218
218
  ccxt/async_support/binanceus.py,sha256=c-K3Tk7LaRJjmYdCx8vBOqsx01uXrtvt0PC2ekBiD0g,9177
219
219
  ccxt/async_support/binanceusdm.py,sha256=-1r4A4tmV2pCiLGO80hzq7MIIj4MTzOD7buZGv6JauA,2518
@@ -280,7 +280,7 @@ ccxt/async_support/independentreserve.py,sha256=02gCggRgFSmIdJyG5vO-R2JXNbB3u6U1
280
280
  ccxt/async_support/indodax.py,sha256=4ebi88kkmmJdLH1nvwds5EXNVNJV78U4CMFRSQ26ie0,52087
281
281
  ccxt/async_support/kraken.py,sha256=-9YRs427hqLBqrzUZytoLmmkIF7URAqXpSetnXGhAUg,124762
282
282
  ccxt/async_support/krakenfutures.py,sha256=7kXGYak9jf74JvgjE5WxNYiN3_-LdSR7MRBE14VtAHw,116143
283
- ccxt/async_support/kucoin.py,sha256=Qxz-vb9UBDT4WFq0fSkxwuRBNVCkqvp0qj02xcQWDt4,216132
283
+ ccxt/async_support/kucoin.py,sha256=t20xKUkmEnKPRVJ3awCdvYDHK0Vx6OW1vUAun9kABNY,218685
284
284
  ccxt/async_support/kucoinfutures.py,sha256=wMiqQhM6OAYsekbG2srW5VD4cCo2GekQxaX3PCc1Htk,119121
285
285
  ccxt/async_support/kuna.py,sha256=6X17wtrcGt6NZL9ttZBfw1PWqaIvRv2r_SRmcfBVB_k,96396
286
286
  ccxt/async_support/latoken.py,sha256=GqTk_f1xJJHXnAfSOA0J7rS2hDrIJzajTQZe1gRvtCU,79256
@@ -297,7 +297,7 @@ ccxt/async_support/okx.py,sha256=aq3n-DXV-242kHCLcEnAn3w8i-YGr--HdBU2TPV9nPI,363
297
297
  ccxt/async_support/onetrading.py,sha256=i-h-aTHva9IWTOIA1Sryg-21H0FXrHJKqe51vPuYoVk,88409
298
298
  ccxt/async_support/p2b.py,sha256=Y3mBeLU4XdmQfeeh-QVsZ4NcdYSI4xEMBRBs8S2RiZU,54316
299
299
  ccxt/async_support/paymium.py,sha256=3P1J9OcDOqQKG5fUs6Xte9Xu8NB5lWu-OD-AHHGZbkM,24391
300
- ccxt/async_support/phemex.py,sha256=Sy8EDSFulp0s8CLYF6OQfAQqY7oUz4-aRW1JI3hLaSc,219437
300
+ ccxt/async_support/phemex.py,sha256=2O_uWRN0X4cmc0pymYyO6CfprhF3e1cKK4ZsZR7lJAA,219618
301
301
  ccxt/async_support/poloniex.py,sha256=2w6mGXvypjJeM_Tpwg3nKdkPEdW4-ANvhUXM1-Gdf9U,102496
302
302
  ccxt/async_support/poloniexfutures.py,sha256=wazNpgGoPaYxIQOR_3iCmuo7kd51_6TaLPSodn1yNKU,78194
303
303
  ccxt/async_support/probit.py,sha256=WPa-iBe9AHFAqURTZrooIVeeKfYWqBde9ouJxMrOoAk,76600
@@ -307,13 +307,13 @@ ccxt/async_support/tradeogre.py,sha256=xnAF6YPdGlkHmIuLRO64NjCQCPMgDBk_4ckZsArgp
307
307
  ccxt/async_support/upbit.py,sha256=dCx6mmPIAsgYMzsyMbrJnaIt90JiSdUl5ir1pqyf8Zg,82082
308
308
  ccxt/async_support/wavesexchange.py,sha256=QOHfIEzwYseB2KZA9Qdc9IFghEXSBPGt1G5fb768fkg,113950
309
309
  ccxt/async_support/wazirx.py,sha256=UIppm29X9f2lvRn8aJfd9V_XqaNc0k13_LuXBOu_bfs,51493
310
- ccxt/async_support/whitebit.py,sha256=rM56BavM4bXYxw4cgy1hPolSL1vk393iojlothqxveU,101482
310
+ ccxt/async_support/whitebit.py,sha256=pkaQiCd6_OsbsmIV-uz0k0Rqr5XsnbHvD-FOpDRCGYI,107026
311
311
  ccxt/async_support/woo.py,sha256=5UTnb8OUXOHT6n02WUl49WaKR6GfMuFHlymHgmIMb3w,138273
312
312
  ccxt/async_support/yobit.py,sha256=EgBPquMnD4GU32jnWp1FXUxlMyC1nYPtRzJCZUG_HMY,53350
313
313
  ccxt/async_support/zaif.py,sha256=PaHcaNijKkhocrw6DZoSBNUjBOLNlkUYtsJvPAqkx68,28134
314
314
  ccxt/async_support/zonda.py,sha256=89EXub_DW_p4Rpza9iiW-hAaj3ucKbNdZyV2ETQ3ESY,80866
315
315
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
316
- ccxt/async_support/base/exchange.py,sha256=xicQ0lMK_Sif1RTnK6FHLE4dfiejrueuNqq0Aq6mPvo,91722
316
+ ccxt/async_support/base/exchange.py,sha256=M8u-KvR1xtyqyr6YSaaLURs7Rdlu11z0Uq3K7Eq9AXw,105447
317
317
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
318
318
  ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
319
319
  ccxt/async_support/base/ws/aiohttp_client.py,sha256=Ed1765emEde2Hj8Ys6f5EjS54ZI1wQ0qIhd04eB7yhU,5751
@@ -327,14 +327,14 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=Pxrq22nCODckJ6G1OXkYEmUunIu
327
327
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
328
328
  ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
329
329
  ccxt/base/errors.py,sha256=u_zxABGVPU_K5oLEEZQWOI0_F5Q-SAUq1g1q6AFh7IM,4107
330
- ccxt/base/exchange.py,sha256=uzrE_QKaqL1L872EXB-Afgb4Evx1ASoiiCjVVhAkFMA,257201
330
+ ccxt/base/exchange.py,sha256=owtewkvnbli4PTHWee-gDDnfA0eonnab9AZAm9IGOYQ,273021
331
331
  ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
332
332
  ccxt/base/types.py,sha256=ZDDuKtyi-6j98YdcFSa8SS1OfwuSer_PJp1QXTsaMb0,7992
333
- ccxt/pro/__init__.py,sha256=AlmSIwsHDCBHb0rkhEZYTspbNckGrZQw2v6y0BCt9vA,6998
333
+ ccxt/pro/__init__.py,sha256=klWchZiCMgD7jlSsOKW-N_cg2xSjxY_VzFFGPO0U2L8,6998
334
334
  ccxt/pro/alpaca.py,sha256=7ePyWli0949ti5UheIn553xmnFpedrNc2W5CKauSZio,27167
335
335
  ccxt/pro/ascendex.py,sha256=fCM3EujSfJvtvffqI56UAstTtwjXFIocwukm15cF8rE,35432
336
336
  ccxt/pro/bequant.py,sha256=5zbsP8BHQTUZ8ZNL6uaACxDbUClgkOV4SYfXT_LfQVg,1351
337
- ccxt/pro/binance.py,sha256=tw7tPX290U2L_mpzlTtjCzoFXJn47glbns5JCzgG0JM,136683
337
+ ccxt/pro/binance.py,sha256=--6tQbf691v6GlA8V-c95i50N85GVTM4G8KmKT1p-tY,152488
338
338
  ccxt/pro/binancecoinm.py,sha256=s_evAyeT23VqscMRuSjrCK2CSaNsP-oc8A8noSuaLwQ,976
339
339
  ccxt/pro/binanceus.py,sha256=mpvmzc7kK3cGShM5EOvadOvwlj1xWsWzX9fIapuq2eQ,2321
340
340
  ccxt/pro/binanceusdm.py,sha256=S0eT662O2ReplsihWk42nhJWqw1XsODpeDQa9eFVVt8,1357
@@ -353,7 +353,7 @@ ccxt/pro/bitstamp.py,sha256=nlqEaAMHpFI-FbQBXnvBee6DW0LcZRprJ8Sp8bIzsSs,20886
353
353
  ccxt/pro/bitvavo.py,sha256=5xzpVRMcI2z0r41eoN-NORr5-qQYBao_bMsH8all9Q0,56143
354
354
  ccxt/pro/blockchaincom.py,sha256=Uv1ijvxvFGrqFPH6iifCk5AgQYTDsXUa5n0ktpusVjM,29560
355
355
  ccxt/pro/bybit.py,sha256=INf7Qfo1CRR5m6yv9w6YNirE0hFOED6J1ztV9kkQ53M,75022
356
- ccxt/pro/cex.py,sha256=sxpyOCappmjLVOGa4CxYh1tcswHU23xz4FrTlJsjirk,58370
356
+ ccxt/pro/cex.py,sha256=psU0k-icE931Z_wpkr16IdSZ2iDUwLnqJz3KUmQ5Xls,58380
357
357
  ccxt/pro/coinbase.py,sha256=icUrGgWl5IJ7C4-XRnaIXbSRs1dgIdktiDEmSG4-iUs,25652
358
358
  ccxt/pro/coinbaseinternational.py,sha256=9Pbe6je_6nqA7SviyzmcR_4CscKdQzBYNLECOYJ4BoU,25428
359
359
  ccxt/pro/coinbasepro.py,sha256=94ZXmg-Ez5tSiUYP98nu-gWvuXb-Dk4WHMVsXOR8AK0,38945
@@ -379,7 +379,7 @@ ccxt/pro/kraken.py,sha256=YCC_Qtq-C3Ds-reEkkF2qpEh_XY1zUV3SLVzEGKkko8,60658
379
379
  ccxt/pro/krakenfutures.py,sha256=QTeLsAXmM3CxLbDI6ktESj8LYQYhJISsB95Za1nFzh8,63917
380
380
  ccxt/pro/kucoin.py,sha256=wxUoyXjTV0iU5X4C2EdWRFFTzljICccpRJq4b9MWmmg,50705
381
381
  ccxt/pro/kucoinfutures.py,sha256=sjhdtLP8WMisETvXnl6TP1xVx7TK5iP0x0R4LE7M7gI,46006
382
- ccxt/pro/lbank.py,sha256=KBeJf2fucVkXZ6wKhfkBLw3RJewrxrj7cPa8XPxxV7U,35100
382
+ ccxt/pro/lbank.py,sha256=QnxR5n96itlssIk9_4Qv5kNeVgEsKOFua5UODFWnUes,35105
383
383
  ccxt/pro/luno.py,sha256=2Y-8IQrrmwX8Y1lLWVDtrFjZD3t3qtMZJQ_JjNwj65s,12348
384
384
  ccxt/pro/mexc.py,sha256=Sgvl5dhKz8LxcQkdnbIWwiKI3zmjZu2o8ZG2fO6Gr2U,42551
385
385
  ccxt/pro/ndax.py,sha256=Yrdy4UxjrDwO7gNMmSy09Wj6kHnRx1n0DTWmfirMEj8,22643
@@ -394,7 +394,7 @@ ccxt/pro/probit.py,sha256=RLTnROQUmX31XQ3ymIZkiDkop3eiSVK70Yw81yDcde4,22822
394
394
  ccxt/pro/upbit.py,sha256=CSqwaNCxECo9FI7aq_7ege0c8IjWEmsoPZL06Kw9KDo,9654
395
395
  ccxt/pro/wazirx.py,sha256=icMUhtixMs5UvVOtqJLSJYMJ9hdNixipmT8bGs6Im7s,30043
396
396
  ccxt/pro/whitebit.py,sha256=7WNCZBD6ZY_bRU_BXBe-ei2D7NfDHwyoZtOVbfgcxYQ,35021
397
- ccxt/pro/woo.py,sha256=6nKsj9Szh7ZluYB143qMJZZRQdbiRKdW8Zrix3k__Kk,37022
397
+ ccxt/pro/woo.py,sha256=zfaDRY-2WcR6DjidEFcY5loJ09qlvZjzTx71YILAKA8,36988
398
398
  ccxt/static_dependencies/__init__.py,sha256=GpOAh5lJ5Kyk1K1lWf9DzDZeZ-prHXXK38dVpW5GPfc,84
399
399
  ccxt/static_dependencies/ecdsa/__init__.py,sha256=Xaj0G79BLtBt2YZcOOMV8qOlQZ7fIJznNiHhiEEZfQA,594
400
400
  ccxt/static_dependencies/ecdsa/_version.py,sha256=eMIr0XQiX8_th_x4iAd0JFcYKLowY9dYz33-vKVFIPI,18461
@@ -493,8 +493,8 @@ ccxt/static_dependencies/toolz/curried/__init__.py,sha256=iOuFY4c1kixe_h8lxuWIW5
493
493
  ccxt/static_dependencies/toolz/curried/exceptions.py,sha256=gKFOHDIayAWnX2uC8Z2KrUwpP-UpoqI5Tx1a859QdVY,344
494
494
  ccxt/static_dependencies/toolz/curried/operator.py,sha256=ML92mknkAwzBl2NCm-4werSUmJEtSHNY9NSzhseNM9s,525
495
495
  ccxt/test/__init__.py,sha256=GKPbEcj0Rrz5HG-GUm-iY1IHhDYmlvcBXZAGk6-m2CI,141
496
- ccxt/test/test_async.py,sha256=OQ8PUmnIoizgCnq2qRitcM7HmWQRd3YzDfuwL2RHhIA,78570
497
- ccxt/test/test_sync.py,sha256=oFegh-RygJtlJRQ5GL0mA6t297hBY22qfJi7l3vRYTg,77551
496
+ ccxt/test/test_async.py,sha256=34iKOw7F0shFFMDpoWP_kyW352K0TxDIzF9jcpvNHxo,78607
497
+ ccxt/test/test_sync.py,sha256=IXnONonFfHJ96IhGjCHraUI0QTX7zMQXYAefl2gf47g,77588
498
498
  ccxt/test/base/__init__.py,sha256=LvE9DEw5mNiyFrE-XnfzFFuSOvZOyi7ec__PF7lpnYs,1889
499
499
  ccxt/test/base/test_account.py,sha256=lxwZXsY8qZgomBoEiomUmWcseSp--orJx-xmm3E1vYs,978
500
500
  ccxt/test/base/test_balance.py,sha256=W-IcVRiJNLtdKEWEEhmhWjtFRuHFtoywNiGQNtYSuc0,2931
@@ -529,7 +529,7 @@ ccxt/test/base/test_ticker.py,sha256=cMTIMb1oySNORUCmqI5ZzMswlEyCF6gJMah3vfvo8wQ
529
529
  ccxt/test/base/test_trade.py,sha256=PMtmB8V38dpaP-eb8h488xYMlR6D69yCOhsA1RuWrUA,2336
530
530
  ccxt/test/base/test_trading_fee.py,sha256=2aDCNJtqBkTC_AieO0l1HYGq5hz5qkWlkWb9Nv_fcwk,1066
531
531
  ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
532
- ccxt-4.3.3.dist-info/METADATA,sha256=Nyw-87Y2XJXT1pteq75HNaaGsqr0W9IyyoGwcgnrNhg,111189
533
- ccxt-4.3.3.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
534
- ccxt-4.3.3.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
535
- ccxt-4.3.3.dist-info/RECORD,,
532
+ ccxt-4.3.5.dist-info/METADATA,sha256=yxLfxbXp8iB1yTGtXQ2SoOk0yMTaPm7OJRyQ4QtfQsY,111189
533
+ ccxt-4.3.5.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
534
+ ccxt-4.3.5.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
535
+ ccxt-4.3.5.dist-info/RECORD,,
File without changes