ccxt 4.2.81__py2.py3-none-any.whl → 4.2.82__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__ = '4.2.81'
25
+ __version__ = '4.2.82'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.2.81'
7
+ __version__ = '4.2.82'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.2.81'
5
+ __version__ = '4.2.82'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -422,7 +422,7 @@ class bitrue(Exchange, ImplicitAPI):
422
422
  '-1022': AuthenticationError, # {"code":-1022,"msg":"Signature for self request is not valid."}
423
423
  '-1100': BadRequest, # createOrder(symbol, 1, asdf) -> 'Illegal characters found in parameter 'price'
424
424
  '-1101': BadRequest, # Too many parameters; expected %s and received %s.
425
- '-1102': BadRequest, # Param %s or %s must be sent, but both were empty
425
+ '-1102': BadRequest, # Param %s or %s must be sent, but both were empty # {"code":-1102,"msg":"timestamp IllegalArgumentException.","data":null}
426
426
  '-1103': BadRequest, # An unknown parameter was sent.
427
427
  '-1104': BadRequest, # Not all sent parameters were read, read 8 parameters but was sent 9
428
428
  '-1105': BadRequest, # Parameter %s was empty.
@@ -6,7 +6,7 @@
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.delta import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, Greeks, Int, Leverage, MarginMode, Market, MarketInterface, Num, Order, OrderBook, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade
9
+ from ccxt.base.types import Balances, Currency, Greeks, Int, Leverage, MarginMode, Market, MarketInterface, Num, Option, Order, OrderBook, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import ArgumentsRequired
@@ -71,6 +71,8 @@ class delta(Exchange, ImplicitAPI):
71
71
  'fetchOHLCV': True,
72
72
  'fetchOpenInterest': True,
73
73
  'fetchOpenOrders': True,
74
+ 'fetchOption': True,
75
+ 'fetchOptionChain': False,
74
76
  'fetchOrderBook': True,
75
77
  'fetchPosition': True,
76
78
  'fetchPositionMode': False,
@@ -3192,6 +3194,149 @@ class delta(Exchange, ImplicitAPI):
3192
3194
  'marginMode': self.safe_string(marginMode, 'margin_mode'),
3193
3195
  }
3194
3196
 
3197
+ async def fetch_option(self, symbol: str, params={}) -> Option:
3198
+ """
3199
+ fetches option data that is commonly found in an option chain
3200
+ :see: https://docs.delta.exchange/#get-ticker-for-a-product-by-symbol
3201
+ :param str symbol: unified market symbol
3202
+ :param dict [params]: extra parameters specific to the exchange API endpoint
3203
+ :returns dict: an `option chain structure <https://docs.ccxt.com/#/?id=option-chain-structure>`
3204
+ """
3205
+ await self.load_markets()
3206
+ market = self.market(symbol)
3207
+ request = {
3208
+ 'symbol': market['id'],
3209
+ }
3210
+ response = await self.publicGetTickersSymbol(self.extend(request, params))
3211
+ #
3212
+ # {
3213
+ # "result": {
3214
+ # "close": 6793.0,
3215
+ # "contract_type": "call_options",
3216
+ # "greeks": {
3217
+ # "delta": "0.94739174",
3218
+ # "gamma": "0.00002206",
3219
+ # "rho": "11.00890725",
3220
+ # "spot": "36839.58124652",
3221
+ # "theta": "-18.18365310",
3222
+ # "vega": "7.85209698"
3223
+ # },
3224
+ # "high": 7556.0,
3225
+ # "low": 6793.0,
3226
+ # "mark_price": "6955.70698909",
3227
+ # "mark_vol": "0.66916863",
3228
+ # "oi": "1.8980",
3229
+ # "oi_change_usd_6h": "110.4600",
3230
+ # "oi_contracts": "1898",
3231
+ # "oi_value": "1.8980",
3232
+ # "oi_value_symbol": "BTC",
3233
+ # "oi_value_usd": "69940.7319",
3234
+ # "open": 7.2e3,
3235
+ # "price_band": {
3236
+ # "lower_limit": "5533.89814767",
3237
+ # "upper_limit": "11691.37688371"
3238
+ # },
3239
+ # "product_id": 129508,
3240
+ # "quotes": {
3241
+ # "ask_iv": "0.90180438",
3242
+ # "ask_size": "1898",
3243
+ # "best_ask": "7210",
3244
+ # "best_bid": "6913",
3245
+ # "bid_iv": "0.60881706",
3246
+ # "bid_size": "3163",
3247
+ # "impact_mid_price": null,
3248
+ # "mark_iv": "0.66973549"
3249
+ # },
3250
+ # "size": 5,
3251
+ # "spot_price": "36839.58153868",
3252
+ # "strike_price": "30000",
3253
+ # "symbol": "C-BTC-30000-241123",
3254
+ # "timestamp": 1699584998504530,
3255
+ # "turnover": 184.41206804,
3256
+ # "turnover_symbol": "USDT",
3257
+ # "turnover_usd": 184.41206804,
3258
+ # "volume": 0.005
3259
+ # },
3260
+ # "success": True
3261
+ # }
3262
+ #
3263
+ result = self.safe_dict(response, 'result', {})
3264
+ return self.parse_option(result, None, market)
3265
+
3266
+ def parse_option(self, chain, currency: Currency = None, market: Market = None):
3267
+ #
3268
+ # {
3269
+ # "close": 6793.0,
3270
+ # "contract_type": "call_options",
3271
+ # "greeks": {
3272
+ # "delta": "0.94739174",
3273
+ # "gamma": "0.00002206",
3274
+ # "rho": "11.00890725",
3275
+ # "spot": "36839.58124652",
3276
+ # "theta": "-18.18365310",
3277
+ # "vega": "7.85209698"
3278
+ # },
3279
+ # "high": 7556.0,
3280
+ # "low": 6793.0,
3281
+ # "mark_price": "6955.70698909",
3282
+ # "mark_vol": "0.66916863",
3283
+ # "oi": "1.8980",
3284
+ # "oi_change_usd_6h": "110.4600",
3285
+ # "oi_contracts": "1898",
3286
+ # "oi_value": "1.8980",
3287
+ # "oi_value_symbol": "BTC",
3288
+ # "oi_value_usd": "69940.7319",
3289
+ # "open": 7.2e3,
3290
+ # "price_band": {
3291
+ # "lower_limit": "5533.89814767",
3292
+ # "upper_limit": "11691.37688371"
3293
+ # },
3294
+ # "product_id": 129508,
3295
+ # "quotes": {
3296
+ # "ask_iv": "0.90180438",
3297
+ # "ask_size": "1898",
3298
+ # "best_ask": "7210",
3299
+ # "best_bid": "6913",
3300
+ # "bid_iv": "0.60881706",
3301
+ # "bid_size": "3163",
3302
+ # "impact_mid_price": null,
3303
+ # "mark_iv": "0.66973549"
3304
+ # },
3305
+ # "size": 5,
3306
+ # "spot_price": "36839.58153868",
3307
+ # "strike_price": "30000",
3308
+ # "symbol": "C-BTC-30000-241123",
3309
+ # "timestamp": 1699584998504530,
3310
+ # "turnover": 184.41206804,
3311
+ # "turnover_symbol": "USDT",
3312
+ # "turnover_usd": 184.41206804,
3313
+ # "volume": 0.005
3314
+ # }
3315
+ #
3316
+ marketId = self.safe_string(chain, 'symbol')
3317
+ market = self.safe_market(marketId, market)
3318
+ quotes = self.safe_dict(chain, 'quotes', {})
3319
+ timestamp = self.safe_integer_product(chain, 'timestamp', 0.001)
3320
+ return {
3321
+ 'info': chain,
3322
+ 'currency': None,
3323
+ 'symbol': market['symbol'],
3324
+ 'timestamp': timestamp,
3325
+ 'datetime': self.iso8601(timestamp),
3326
+ 'impliedVolatility': self.safe_number(quotes, 'mark_iv'),
3327
+ 'openInterest': self.safe_number(chain, 'oi'),
3328
+ 'bidPrice': self.safe_number(quotes, 'best_bid'),
3329
+ 'askPrice': self.safe_number(quotes, 'best_ask'),
3330
+ 'midPrice': self.safe_number(quotes, 'impact_mid_price'),
3331
+ 'markPrice': self.safe_number(chain, 'mark_price'),
3332
+ 'lastPrice': None,
3333
+ 'underlyingPrice': self.safe_number(chain, 'spot_price'),
3334
+ 'change': None,
3335
+ 'percentage': None,
3336
+ 'baseVolume': self.safe_number(chain, 'volume'),
3337
+ 'quoteVolume': None,
3338
+ }
3339
+
3195
3340
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
3196
3341
  requestPath = '/' + self.version + '/' + self.implode_params(path, params)
3197
3342
  url = self.urls['api'][api] + requestPath
@@ -3403,7 +3403,7 @@ class deribit(Exchange, ImplicitAPI):
3403
3403
  timestamp = self.safe_integer(chain, 'timestamp')
3404
3404
  return {
3405
3405
  'info': chain,
3406
- 'currency': code['code'],
3406
+ 'currency': code,
3407
3407
  'symbol': market['symbol'],
3408
3408
  'timestamp': timestamp,
3409
3409
  'datetime': self.iso8601(timestamp),
@@ -50,7 +50,7 @@ class hyperliquid(Exchange, ImplicitAPI):
50
50
  'createMarketSellOrderWithCost': False,
51
51
  'createOrder': True,
52
52
  'createOrders': True,
53
- 'createReduceOnlyOrder': False,
53
+ 'createReduceOnlyOrder': True,
54
54
  'editOrder': True,
55
55
  'fetchAccounts': False,
56
56
  'fetchBalance': True,
@@ -851,7 +851,7 @@ class hyperliquid(Exchange, ImplicitAPI):
851
851
  orderType['limit'] = {
852
852
  'tif': timeInForce,
853
853
  }
854
- orderParams = self.omit(orderParams, ['clientOrderId', 'slippage', 'triggerPrice', 'stopPrice', 'stopLossPrice', 'takeProfitPrice', 'timeInForce', 'client_id'])
854
+ orderParams = self.omit(orderParams, ['clientOrderId', 'slippage', 'triggerPrice', 'stopPrice', 'stopLossPrice', 'takeProfitPrice', 'timeInForce', 'client_id', 'reduceOnly', 'postOnly'])
855
855
  orderObj = {
856
856
  'a': self.parse_to_int(market['baseId']),
857
857
  'b': isBuy,
@@ -1920,9 +1920,9 @@ class hyperliquid(Exchange, ImplicitAPI):
1920
1920
  userAux, params = self.handle_option_and_params(params, methodName, 'user')
1921
1921
  user = userAux
1922
1922
  user, params = self.handle_option_and_params(params, methodName, 'address', userAux)
1923
- if user is not None:
1923
+ if (user is not None) and (user != ''):
1924
1924
  return [user, params]
1925
- if self.walletAddress is not None:
1925
+ if (self.walletAddress is not None) and (self.walletAddress != ''):
1926
1926
  return [self.walletAddress, params]
1927
1927
  raise ArgumentsRequired(self.id + ' ' + methodName + '() requires a user parameter inside \'params\' or the wallet address set')
1928
1928
 
ccxt/async_support/okx.py CHANGED
@@ -7,7 +7,7 @@ from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.okx import ImplicitAPI
8
8
  import asyncio
9
9
  import hashlib
10
- from ccxt.base.types import Account, Balances, Currency, Greeks, Int, Leverage, Market, MarketInterface, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
10
+ from ccxt.base.types import Account, Balances, Currency, Greeks, Int, Leverage, Market, MarketInterface, Num, Option, OptionChain, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
11
11
  from typing import List
12
12
  from ccxt.base.errors import ExchangeError
13
13
  from ccxt.base.errors import PermissionDenied
@@ -117,6 +117,8 @@ class okx(Exchange, ImplicitAPI):
117
117
  'fetchOpenInterestHistory': True,
118
118
  'fetchOpenOrder': None,
119
119
  'fetchOpenOrders': True,
120
+ 'fetchOption': True,
121
+ 'fetchOptionChain': True,
120
122
  'fetchOrder': True,
121
123
  'fetchOrderBook': True,
122
124
  'fetchOrderBooks': False,
@@ -6910,6 +6912,139 @@ class okx(Exchange, ImplicitAPI):
6910
6912
  order = self.safe_value(data, 0)
6911
6913
  return self.parse_order(order, market)
6912
6914
 
6915
+ async def fetch_option(self, symbol: str, params={}) -> Option:
6916
+ """
6917
+ fetches option data that is commonly found in an option chain
6918
+ :see: https://www.okx.com/docs-v5/en/#order-book-trading-market-data-get-ticker
6919
+ :param str symbol: unified market symbol
6920
+ :param dict [params]: extra parameters specific to the exchange API endpoint
6921
+ :returns dict: an `option chain structure <https://docs.ccxt.com/#/?id=option-chain-structure>`
6922
+ """
6923
+ await self.load_markets()
6924
+ market = self.market(symbol)
6925
+ request = {
6926
+ 'instId': market['id'],
6927
+ }
6928
+ response = await self.publicGetMarketTicker(self.extend(request, params))
6929
+ #
6930
+ # {
6931
+ # "code": "0",
6932
+ # "msg": "",
6933
+ # "data": [
6934
+ # {
6935
+ # "instType": "OPTION",
6936
+ # "instId": "BTC-USD-241227-60000-P",
6937
+ # "last": "",
6938
+ # "lastSz": "0",
6939
+ # "askPx": "",
6940
+ # "askSz": "0",
6941
+ # "bidPx": "",
6942
+ # "bidSz": "0",
6943
+ # "open24h": "",
6944
+ # "high24h": "",
6945
+ # "low24h": "",
6946
+ # "volCcy24h": "0",
6947
+ # "vol24h": "0",
6948
+ # "ts": "1711176035035",
6949
+ # "sodUtc0": "",
6950
+ # "sodUtc8": ""
6951
+ # }
6952
+ # ]
6953
+ # }
6954
+ #
6955
+ result = self.safe_list(response, 'data', [])
6956
+ chain = self.safe_dict(result, 0, {})
6957
+ return self.parse_option(chain, None, market)
6958
+
6959
+ async def fetch_option_chain(self, code: str, params={}) -> OptionChain:
6960
+ """
6961
+ fetches data for an underlying asset that is commonly found in an option chain
6962
+ :see: https://www.okx.com/docs-v5/en/#order-book-trading-market-data-get-tickers
6963
+ :param str currency: base currency to fetch an option chain for
6964
+ :param dict [params]: extra parameters specific to the exchange API endpoint
6965
+ :param str [params.uly]: the underlying asset, can be obtained from fetchUnderlyingAssets()
6966
+ :returns dict: a list of `option chain structures <https://docs.ccxt.com/#/?id=option-chain-structure>`
6967
+ """
6968
+ await self.load_markets()
6969
+ currency = self.currency(code)
6970
+ request = {
6971
+ 'uly': currency['code'] + '-USD',
6972
+ 'instType': 'OPTION',
6973
+ }
6974
+ response = await self.publicGetMarketTickers(self.extend(request, params))
6975
+ #
6976
+ # {
6977
+ # "code": "0",
6978
+ # "msg": "",
6979
+ # "data": [
6980
+ # {
6981
+ # "instType": "OPTION",
6982
+ # "instId": "BTC-USD-240323-52000-C",
6983
+ # "last": "",
6984
+ # "lastSz": "0",
6985
+ # "askPx": "",
6986
+ # "askSz": "0",
6987
+ # "bidPx": "",
6988
+ # "bidSz": "0",
6989
+ # "open24h": "",
6990
+ # "high24h": "",
6991
+ # "low24h": "",
6992
+ # "volCcy24h": "0",
6993
+ # "vol24h": "0",
6994
+ # "ts": "1711176207008",
6995
+ # "sodUtc0": "",
6996
+ # "sodUtc8": ""
6997
+ # },
6998
+ # ]
6999
+ # }
7000
+ #
7001
+ result = self.safe_list(response, 'data', [])
7002
+ return self.parse_option_chain(result, None, 'instId')
7003
+
7004
+ def parse_option(self, chain, currency: Currency = None, market: Market = None):
7005
+ #
7006
+ # {
7007
+ # "instType": "OPTION",
7008
+ # "instId": "BTC-USD-241227-60000-P",
7009
+ # "last": "",
7010
+ # "lastSz": "0",
7011
+ # "askPx": "",
7012
+ # "askSz": "0",
7013
+ # "bidPx": "",
7014
+ # "bidSz": "0",
7015
+ # "open24h": "",
7016
+ # "high24h": "",
7017
+ # "low24h": "",
7018
+ # "volCcy24h": "0",
7019
+ # "vol24h": "0",
7020
+ # "ts": "1711176035035",
7021
+ # "sodUtc0": "",
7022
+ # "sodUtc8": ""
7023
+ # }
7024
+ #
7025
+ marketId = self.safe_string(chain, 'instId')
7026
+ market = self.safe_market(marketId, market)
7027
+ timestamp = self.safe_integer(chain, 'ts')
7028
+ return {
7029
+ 'info': chain,
7030
+ 'currency': None,
7031
+ 'symbol': market['symbol'],
7032
+ 'timestamp': timestamp,
7033
+ 'datetime': self.iso8601(timestamp),
7034
+ 'impliedVolatility': None,
7035
+ 'openInterest': None,
7036
+ 'bidPrice': self.safe_number(chain, 'bidPx'),
7037
+ 'askPrice': self.safe_number(chain, 'askPx'),
7038
+ 'midPrice': None,
7039
+ 'markPrice': None,
7040
+ 'lastPrice': self.safe_number(chain, 'last'),
7041
+ 'underlyingPrice': None,
7042
+ 'change': None,
7043
+ 'percentage': None,
7044
+ 'baseVolume': self.safe_number(chain, 'volCcy24h'),
7045
+ 'quoteVolume': None,
7046
+ }
7047
+
6913
7048
  def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
6914
7049
  if not response:
6915
7050
  return None # fallback to default error handler
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.2.81'
7
+ __version__ = '4.2.82'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
ccxt/bitrue.py CHANGED
@@ -421,7 +421,7 @@ class bitrue(Exchange, ImplicitAPI):
421
421
  '-1022': AuthenticationError, # {"code":-1022,"msg":"Signature for self request is not valid."}
422
422
  '-1100': BadRequest, # createOrder(symbol, 1, asdf) -> 'Illegal characters found in parameter 'price'
423
423
  '-1101': BadRequest, # Too many parameters; expected %s and received %s.
424
- '-1102': BadRequest, # Param %s or %s must be sent, but both were empty
424
+ '-1102': BadRequest, # Param %s or %s must be sent, but both were empty # {"code":-1102,"msg":"timestamp IllegalArgumentException.","data":null}
425
425
  '-1103': BadRequest, # An unknown parameter was sent.
426
426
  '-1104': BadRequest, # Not all sent parameters were read, read 8 parameters but was sent 9
427
427
  '-1105': BadRequest, # Parameter %s was empty.
ccxt/delta.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.delta import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, Greeks, Int, Leverage, MarginMode, Market, MarketInterface, Num, Order, OrderBook, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade
9
+ from ccxt.base.types import Balances, Currency, Greeks, Int, Leverage, MarginMode, Market, MarketInterface, Num, Option, Order, OrderBook, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import ArgumentsRequired
@@ -71,6 +71,8 @@ class delta(Exchange, ImplicitAPI):
71
71
  'fetchOHLCV': True,
72
72
  'fetchOpenInterest': True,
73
73
  'fetchOpenOrders': True,
74
+ 'fetchOption': True,
75
+ 'fetchOptionChain': False,
74
76
  'fetchOrderBook': True,
75
77
  'fetchPosition': True,
76
78
  'fetchPositionMode': False,
@@ -3192,6 +3194,149 @@ class delta(Exchange, ImplicitAPI):
3192
3194
  'marginMode': self.safe_string(marginMode, 'margin_mode'),
3193
3195
  }
3194
3196
 
3197
+ def fetch_option(self, symbol: str, params={}) -> Option:
3198
+ """
3199
+ fetches option data that is commonly found in an option chain
3200
+ :see: https://docs.delta.exchange/#get-ticker-for-a-product-by-symbol
3201
+ :param str symbol: unified market symbol
3202
+ :param dict [params]: extra parameters specific to the exchange API endpoint
3203
+ :returns dict: an `option chain structure <https://docs.ccxt.com/#/?id=option-chain-structure>`
3204
+ """
3205
+ self.load_markets()
3206
+ market = self.market(symbol)
3207
+ request = {
3208
+ 'symbol': market['id'],
3209
+ }
3210
+ response = self.publicGetTickersSymbol(self.extend(request, params))
3211
+ #
3212
+ # {
3213
+ # "result": {
3214
+ # "close": 6793.0,
3215
+ # "contract_type": "call_options",
3216
+ # "greeks": {
3217
+ # "delta": "0.94739174",
3218
+ # "gamma": "0.00002206",
3219
+ # "rho": "11.00890725",
3220
+ # "spot": "36839.58124652",
3221
+ # "theta": "-18.18365310",
3222
+ # "vega": "7.85209698"
3223
+ # },
3224
+ # "high": 7556.0,
3225
+ # "low": 6793.0,
3226
+ # "mark_price": "6955.70698909",
3227
+ # "mark_vol": "0.66916863",
3228
+ # "oi": "1.8980",
3229
+ # "oi_change_usd_6h": "110.4600",
3230
+ # "oi_contracts": "1898",
3231
+ # "oi_value": "1.8980",
3232
+ # "oi_value_symbol": "BTC",
3233
+ # "oi_value_usd": "69940.7319",
3234
+ # "open": 7.2e3,
3235
+ # "price_band": {
3236
+ # "lower_limit": "5533.89814767",
3237
+ # "upper_limit": "11691.37688371"
3238
+ # },
3239
+ # "product_id": 129508,
3240
+ # "quotes": {
3241
+ # "ask_iv": "0.90180438",
3242
+ # "ask_size": "1898",
3243
+ # "best_ask": "7210",
3244
+ # "best_bid": "6913",
3245
+ # "bid_iv": "0.60881706",
3246
+ # "bid_size": "3163",
3247
+ # "impact_mid_price": null,
3248
+ # "mark_iv": "0.66973549"
3249
+ # },
3250
+ # "size": 5,
3251
+ # "spot_price": "36839.58153868",
3252
+ # "strike_price": "30000",
3253
+ # "symbol": "C-BTC-30000-241123",
3254
+ # "timestamp": 1699584998504530,
3255
+ # "turnover": 184.41206804,
3256
+ # "turnover_symbol": "USDT",
3257
+ # "turnover_usd": 184.41206804,
3258
+ # "volume": 0.005
3259
+ # },
3260
+ # "success": True
3261
+ # }
3262
+ #
3263
+ result = self.safe_dict(response, 'result', {})
3264
+ return self.parse_option(result, None, market)
3265
+
3266
+ def parse_option(self, chain, currency: Currency = None, market: Market = None):
3267
+ #
3268
+ # {
3269
+ # "close": 6793.0,
3270
+ # "contract_type": "call_options",
3271
+ # "greeks": {
3272
+ # "delta": "0.94739174",
3273
+ # "gamma": "0.00002206",
3274
+ # "rho": "11.00890725",
3275
+ # "spot": "36839.58124652",
3276
+ # "theta": "-18.18365310",
3277
+ # "vega": "7.85209698"
3278
+ # },
3279
+ # "high": 7556.0,
3280
+ # "low": 6793.0,
3281
+ # "mark_price": "6955.70698909",
3282
+ # "mark_vol": "0.66916863",
3283
+ # "oi": "1.8980",
3284
+ # "oi_change_usd_6h": "110.4600",
3285
+ # "oi_contracts": "1898",
3286
+ # "oi_value": "1.8980",
3287
+ # "oi_value_symbol": "BTC",
3288
+ # "oi_value_usd": "69940.7319",
3289
+ # "open": 7.2e3,
3290
+ # "price_band": {
3291
+ # "lower_limit": "5533.89814767",
3292
+ # "upper_limit": "11691.37688371"
3293
+ # },
3294
+ # "product_id": 129508,
3295
+ # "quotes": {
3296
+ # "ask_iv": "0.90180438",
3297
+ # "ask_size": "1898",
3298
+ # "best_ask": "7210",
3299
+ # "best_bid": "6913",
3300
+ # "bid_iv": "0.60881706",
3301
+ # "bid_size": "3163",
3302
+ # "impact_mid_price": null,
3303
+ # "mark_iv": "0.66973549"
3304
+ # },
3305
+ # "size": 5,
3306
+ # "spot_price": "36839.58153868",
3307
+ # "strike_price": "30000",
3308
+ # "symbol": "C-BTC-30000-241123",
3309
+ # "timestamp": 1699584998504530,
3310
+ # "turnover": 184.41206804,
3311
+ # "turnover_symbol": "USDT",
3312
+ # "turnover_usd": 184.41206804,
3313
+ # "volume": 0.005
3314
+ # }
3315
+ #
3316
+ marketId = self.safe_string(chain, 'symbol')
3317
+ market = self.safe_market(marketId, market)
3318
+ quotes = self.safe_dict(chain, 'quotes', {})
3319
+ timestamp = self.safe_integer_product(chain, 'timestamp', 0.001)
3320
+ return {
3321
+ 'info': chain,
3322
+ 'currency': None,
3323
+ 'symbol': market['symbol'],
3324
+ 'timestamp': timestamp,
3325
+ 'datetime': self.iso8601(timestamp),
3326
+ 'impliedVolatility': self.safe_number(quotes, 'mark_iv'),
3327
+ 'openInterest': self.safe_number(chain, 'oi'),
3328
+ 'bidPrice': self.safe_number(quotes, 'best_bid'),
3329
+ 'askPrice': self.safe_number(quotes, 'best_ask'),
3330
+ 'midPrice': self.safe_number(quotes, 'impact_mid_price'),
3331
+ 'markPrice': self.safe_number(chain, 'mark_price'),
3332
+ 'lastPrice': None,
3333
+ 'underlyingPrice': self.safe_number(chain, 'spot_price'),
3334
+ 'change': None,
3335
+ 'percentage': None,
3336
+ 'baseVolume': self.safe_number(chain, 'volume'),
3337
+ 'quoteVolume': None,
3338
+ }
3339
+
3195
3340
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
3196
3341
  requestPath = '/' + self.version + '/' + self.implode_params(path, params)
3197
3342
  url = self.urls['api'][api] + requestPath
ccxt/deribit.py CHANGED
@@ -3403,7 +3403,7 @@ class deribit(Exchange, ImplicitAPI):
3403
3403
  timestamp = self.safe_integer(chain, 'timestamp')
3404
3404
  return {
3405
3405
  'info': chain,
3406
- 'currency': code['code'],
3406
+ 'currency': code,
3407
3407
  'symbol': market['symbol'],
3408
3408
  'timestamp': timestamp,
3409
3409
  'datetime': self.iso8601(timestamp),
ccxt/hyperliquid.py CHANGED
@@ -50,7 +50,7 @@ class hyperliquid(Exchange, ImplicitAPI):
50
50
  'createMarketSellOrderWithCost': False,
51
51
  'createOrder': True,
52
52
  'createOrders': True,
53
- 'createReduceOnlyOrder': False,
53
+ 'createReduceOnlyOrder': True,
54
54
  'editOrder': True,
55
55
  'fetchAccounts': False,
56
56
  'fetchBalance': True,
@@ -851,7 +851,7 @@ class hyperliquid(Exchange, ImplicitAPI):
851
851
  orderType['limit'] = {
852
852
  'tif': timeInForce,
853
853
  }
854
- orderParams = self.omit(orderParams, ['clientOrderId', 'slippage', 'triggerPrice', 'stopPrice', 'stopLossPrice', 'takeProfitPrice', 'timeInForce', 'client_id'])
854
+ orderParams = self.omit(orderParams, ['clientOrderId', 'slippage', 'triggerPrice', 'stopPrice', 'stopLossPrice', 'takeProfitPrice', 'timeInForce', 'client_id', 'reduceOnly', 'postOnly'])
855
855
  orderObj = {
856
856
  'a': self.parse_to_int(market['baseId']),
857
857
  'b': isBuy,
@@ -1920,9 +1920,9 @@ class hyperliquid(Exchange, ImplicitAPI):
1920
1920
  userAux, params = self.handle_option_and_params(params, methodName, 'user')
1921
1921
  user = userAux
1922
1922
  user, params = self.handle_option_and_params(params, methodName, 'address', userAux)
1923
- if user is not None:
1923
+ if (user is not None) and (user != ''):
1924
1924
  return [user, params]
1925
- if self.walletAddress is not None:
1925
+ if (self.walletAddress is not None) and (self.walletAddress != ''):
1926
1926
  return [self.walletAddress, params]
1927
1927
  raise ArgumentsRequired(self.id + ' ' + methodName + '() requires a user parameter inside \'params\' or the wallet address set')
1928
1928
 
ccxt/okx.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.okx import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Account, Balances, Currency, Greeks, Int, Leverage, Market, MarketInterface, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
9
+ from ccxt.base.types import Account, Balances, Currency, Greeks, Int, Leverage, Market, MarketInterface, Num, Option, OptionChain, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import PermissionDenied
@@ -116,6 +116,8 @@ class okx(Exchange, ImplicitAPI):
116
116
  'fetchOpenInterestHistory': True,
117
117
  'fetchOpenOrder': None,
118
118
  'fetchOpenOrders': True,
119
+ 'fetchOption': True,
120
+ 'fetchOptionChain': True,
119
121
  'fetchOrder': True,
120
122
  'fetchOrderBook': True,
121
123
  'fetchOrderBooks': False,
@@ -6909,6 +6911,139 @@ class okx(Exchange, ImplicitAPI):
6909
6911
  order = self.safe_value(data, 0)
6910
6912
  return self.parse_order(order, market)
6911
6913
 
6914
+ def fetch_option(self, symbol: str, params={}) -> Option:
6915
+ """
6916
+ fetches option data that is commonly found in an option chain
6917
+ :see: https://www.okx.com/docs-v5/en/#order-book-trading-market-data-get-ticker
6918
+ :param str symbol: unified market symbol
6919
+ :param dict [params]: extra parameters specific to the exchange API endpoint
6920
+ :returns dict: an `option chain structure <https://docs.ccxt.com/#/?id=option-chain-structure>`
6921
+ """
6922
+ self.load_markets()
6923
+ market = self.market(symbol)
6924
+ request = {
6925
+ 'instId': market['id'],
6926
+ }
6927
+ response = self.publicGetMarketTicker(self.extend(request, params))
6928
+ #
6929
+ # {
6930
+ # "code": "0",
6931
+ # "msg": "",
6932
+ # "data": [
6933
+ # {
6934
+ # "instType": "OPTION",
6935
+ # "instId": "BTC-USD-241227-60000-P",
6936
+ # "last": "",
6937
+ # "lastSz": "0",
6938
+ # "askPx": "",
6939
+ # "askSz": "0",
6940
+ # "bidPx": "",
6941
+ # "bidSz": "0",
6942
+ # "open24h": "",
6943
+ # "high24h": "",
6944
+ # "low24h": "",
6945
+ # "volCcy24h": "0",
6946
+ # "vol24h": "0",
6947
+ # "ts": "1711176035035",
6948
+ # "sodUtc0": "",
6949
+ # "sodUtc8": ""
6950
+ # }
6951
+ # ]
6952
+ # }
6953
+ #
6954
+ result = self.safe_list(response, 'data', [])
6955
+ chain = self.safe_dict(result, 0, {})
6956
+ return self.parse_option(chain, None, market)
6957
+
6958
+ def fetch_option_chain(self, code: str, params={}) -> OptionChain:
6959
+ """
6960
+ fetches data for an underlying asset that is commonly found in an option chain
6961
+ :see: https://www.okx.com/docs-v5/en/#order-book-trading-market-data-get-tickers
6962
+ :param str currency: base currency to fetch an option chain for
6963
+ :param dict [params]: extra parameters specific to the exchange API endpoint
6964
+ :param str [params.uly]: the underlying asset, can be obtained from fetchUnderlyingAssets()
6965
+ :returns dict: a list of `option chain structures <https://docs.ccxt.com/#/?id=option-chain-structure>`
6966
+ """
6967
+ self.load_markets()
6968
+ currency = self.currency(code)
6969
+ request = {
6970
+ 'uly': currency['code'] + '-USD',
6971
+ 'instType': 'OPTION',
6972
+ }
6973
+ response = self.publicGetMarketTickers(self.extend(request, params))
6974
+ #
6975
+ # {
6976
+ # "code": "0",
6977
+ # "msg": "",
6978
+ # "data": [
6979
+ # {
6980
+ # "instType": "OPTION",
6981
+ # "instId": "BTC-USD-240323-52000-C",
6982
+ # "last": "",
6983
+ # "lastSz": "0",
6984
+ # "askPx": "",
6985
+ # "askSz": "0",
6986
+ # "bidPx": "",
6987
+ # "bidSz": "0",
6988
+ # "open24h": "",
6989
+ # "high24h": "",
6990
+ # "low24h": "",
6991
+ # "volCcy24h": "0",
6992
+ # "vol24h": "0",
6993
+ # "ts": "1711176207008",
6994
+ # "sodUtc0": "",
6995
+ # "sodUtc8": ""
6996
+ # },
6997
+ # ]
6998
+ # }
6999
+ #
7000
+ result = self.safe_list(response, 'data', [])
7001
+ return self.parse_option_chain(result, None, 'instId')
7002
+
7003
+ def parse_option(self, chain, currency: Currency = None, market: Market = None):
7004
+ #
7005
+ # {
7006
+ # "instType": "OPTION",
7007
+ # "instId": "BTC-USD-241227-60000-P",
7008
+ # "last": "",
7009
+ # "lastSz": "0",
7010
+ # "askPx": "",
7011
+ # "askSz": "0",
7012
+ # "bidPx": "",
7013
+ # "bidSz": "0",
7014
+ # "open24h": "",
7015
+ # "high24h": "",
7016
+ # "low24h": "",
7017
+ # "volCcy24h": "0",
7018
+ # "vol24h": "0",
7019
+ # "ts": "1711176035035",
7020
+ # "sodUtc0": "",
7021
+ # "sodUtc8": ""
7022
+ # }
7023
+ #
7024
+ marketId = self.safe_string(chain, 'instId')
7025
+ market = self.safe_market(marketId, market)
7026
+ timestamp = self.safe_integer(chain, 'ts')
7027
+ return {
7028
+ 'info': chain,
7029
+ 'currency': None,
7030
+ 'symbol': market['symbol'],
7031
+ 'timestamp': timestamp,
7032
+ 'datetime': self.iso8601(timestamp),
7033
+ 'impliedVolatility': None,
7034
+ 'openInterest': None,
7035
+ 'bidPrice': self.safe_number(chain, 'bidPx'),
7036
+ 'askPrice': self.safe_number(chain, 'askPx'),
7037
+ 'midPrice': None,
7038
+ 'markPrice': None,
7039
+ 'lastPrice': self.safe_number(chain, 'last'),
7040
+ 'underlyingPrice': None,
7041
+ 'change': None,
7042
+ 'percentage': None,
7043
+ 'baseVolume': self.safe_number(chain, 'volCcy24h'),
7044
+ 'quoteVolume': None,
7045
+ }
7046
+
6912
7047
  def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
6913
7048
  if not response:
6914
7049
  return None # fallback to default error handler
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.2.81'
7
+ __version__ = '4.2.82'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.2.81
3
+ Version: 4.2.82
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.2.81/dist/ccxt.browser.js
266
- * unpkg: https://unpkg.com/ccxt@4.2.81/dist/ccxt.browser.js
265
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.82/dist/ccxt.browser.js
266
+ * unpkg: https://unpkg.com/ccxt@4.2.82/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.2.81/dist/ccxt.browser.js"></script>
271
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.82/dist/ccxt.browser.js"></script>
272
272
  ```
273
273
 
274
274
  Creates a global `ccxt` object:
@@ -1,4 +1,4 @@
1
- ccxt/__init__.py,sha256=vtDVaVFHBj3vbCHy7CTmndgVtWhnlKHGMSfD3RZJJHY,15656
1
+ ccxt/__init__.py,sha256=AaH0NOSi-95K3k3M8lUwKpNw_0CE-teOK2wICcOuK4M,15656
2
2
  ccxt/ace.py,sha256=nK9SbduDWoKzecwoSK9VYwReNMscvJ_JWo5IZvFbcQo,41409
3
3
  ccxt/alpaca.py,sha256=dCp9cDDKAqaaOroIPfv3sMBsMcUM7TsSKNSYZ3LLTQg,46892
4
4
  ccxt/ascendex.py,sha256=Ma2iM3L3kyXf6d_iqushKWfN1BtunXcrDe-_BENaw5U,150809
@@ -23,7 +23,7 @@ ccxt/bitmart.py,sha256=vmtmyFhepEnk7Qse_lJHz2IUCrjZTHHuxt0FsDQU9s0,198947
23
23
  ccxt/bitmex.py,sha256=JQGOMKArh1AFbns8uvPgxrCdlvtFCB8hXSeKEwQ9vB0,125311
24
24
  ccxt/bitopro.py,sha256=HOLhSS50ITBr0UIWeON3KCt6i2QZ0M-zDhNj8B7MMHU,68081
25
25
  ccxt/bitpanda.py,sha256=aiwPkx9lKbVzt4ggoYdq_mIbMGtg5ZtGl2yRHO5xyz8,471
26
- ccxt/bitrue.py,sha256=F9PUD-Bp1HD_VG2BCX0tRp96lNch3hg3Gy8iuUmU3eU,135824
26
+ ccxt/bitrue.py,sha256=mxfU7bm1covUbkjLs2wgI4KT_Aqv-5T2QRuE7suoHW4,135898
27
27
  ccxt/bitso.py,sha256=J_pd9byYxQAAKEpFVQYFbswMUeWKvvfj-7Y6UjOZk_0,70690
28
28
  ccxt/bitstamp.py,sha256=69oVQdm3vR9KjJAcxntQ24u4HFrWIHphEjOWLovJmdQ,91526
29
29
  ccxt/bitteam.py,sha256=7p-66IqLY-SVNAD_SWVx2DKfQrqsusB-mcumpT2qK0c,101797
@@ -50,8 +50,8 @@ ccxt/coinsph.py,sha256=JHgkCYzNGRRc_s398dxbz_60QqeRx_7_-Xb3Anqkq3o,90258
50
50
  ccxt/coinspot.py,sha256=8aCFFIp8jB5NDVQLwbZdS5BxW4ML3TqTFaLqQKikkl0,23465
51
51
  ccxt/cryptocom.py,sha256=cEqvh5Z19n1f-bAhfIdcB8-aFf2cepPpgcB5sgLMHnc,128088
52
52
  ccxt/currencycom.py,sha256=sk1-z8ZYEpastKUoi-iGuK_Z8HNhrafU-2QmKFZyQGk,86679
53
- ccxt/delta.py,sha256=E_wCRMh_rYURHG20xCHp88LrZQJlSgTYjSs13n0nzdU,144318
54
- ccxt/deribit.py,sha256=5LjRVie7LjnbLIsSyYMK3qJ39aM11gkZchmdKbrImtI,160080
53
+ ccxt/delta.py,sha256=qAm-RBzG6vVhD8Cf3vKT80NlOb-JmwPbg3yLiXDLwPQ,150455
54
+ ccxt/deribit.py,sha256=CXwvLJ208USYgTKQzfnJBXkhK5vVuvsNb1CFzNG4iDg,160072
55
55
  ccxt/digifinex.py,sha256=v5Kk702BABJj-ilooFZBSWYPW_IYLXnF1dy-ODzbQGs,169358
56
56
  ccxt/exmo.py,sha256=ln3Sd9brSMAIxtAqMOyD-Rq5h4TPeYAMAlNpXTAijvE,114222
57
57
  ccxt/flowbtc.py,sha256=YPvm6tbsHJJUQBspFcHuVPQfVmiWzwnVvfzRqBdQX6U,1169
@@ -65,7 +65,7 @@ ccxt/hollaex.py,sha256=biaF8aAMAqQQU2MHySgfipZHYvyq5Qhjd7JlSyETtPI,75830
65
65
  ccxt/htx.py,sha256=K6qHgIxPBqfEKTzE-U6_ZLKu6Rmi8NHU5xjbjTyvPHQ,418804
66
66
  ccxt/huobi.py,sha256=4vaG7IRN7fyjaJ_ac6S-njlHOfSEN5de7aq0noznxYw,438
67
67
  ccxt/huobijp.py,sha256=0AcNDNAnWf-t9yFIE2FTVHm0xaBoBzX4gGO5dSJaElk,87907
68
- ccxt/hyperliquid.py,sha256=JS7RXpyhal00BR5cQG0kzkyZ0ZTWhoHCRyRspUTyKU4,83029
68
+ ccxt/hyperliquid.py,sha256=iTCiFgz8VVqtoL3FpYAjdJP9Ae2lAVnd1MJXRaPg33A,83106
69
69
  ccxt/idex.py,sha256=gpkfFnVxZUnYGaT--peh4IF1iB-HkoxknA6rJMq_3kk,72706
70
70
  ccxt/independentreserve.py,sha256=m8UP6mnYrl48623Y_tC6F0lZRx2rwTFmb-JZplnfzvA,31982
71
71
  ccxt/indodax.py,sha256=Su32yUkKr3OZlRYK3NcITfMipvErSjvSBgzO2Ljobdw,51765
@@ -84,7 +84,7 @@ ccxt/ndax.py,sha256=iHuUDxE3FBgfhwaDhCQ1X7QMQjXDl91YF2MFDxUz9dk,108327
84
84
  ccxt/novadax.py,sha256=bxCFcrWsntHJKmuODno4FzGVP_85joYW5Y9QEKsfFvM,64098
85
85
  ccxt/oceanex.py,sha256=G_7y2JVDAIKa8fMebx55Qq4EIYkmhWY3SoGy_pmgSd4,37811
86
86
  ccxt/okcoin.py,sha256=wmV93bnhpzJEOrOVpP92VCBZ_OulWrqJj7423pa_CHY,151013
87
- ccxt/okx.py,sha256=42wKyo-sGYoje3jOQCKXwtyL3ir4HMz3P8YLmxL64iw,337640
87
+ ccxt/okx.py,sha256=wR5WF1KSlMEOUaOw9GU8xxY8WBNcW-PJuTPBt6gPgcY,342942
88
88
  ccxt/onetrading.py,sha256=WQfDptspbWO-GXenGyJaJ8OWUWymlvKKyCXHYmCVhZ4,87891
89
89
  ccxt/p2b.py,sha256=l9zO6BqQdu_he6-TJl9zAO3HQJp_q3c6sr-eMO8Awm0,54065
90
90
  ccxt/paymium.py,sha256=2mBwmyT93k-dXBEKEix48G8PsA2IEN_5yScEM985Z10,24203
@@ -207,7 +207,7 @@ 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=F0syLNn4FSuVlTEbaqKsSDu9TNayXeMcedLQPSmkWpU,15409
210
+ ccxt/async_support/__init__.py,sha256=bS68QDLi5TCHiMreqViqhZIxLCfPSRDnyTVkNQFbL1Q,15409
211
211
  ccxt/async_support/ace.py,sha256=MGP2VoA2plRgcW8ZBBXAAUg0NSOXlWtwbzYr00DFMaI,41633
212
212
  ccxt/async_support/alpaca.py,sha256=-vgtpCEqQWs-k7tA0PObflNKa7pM1HqQYYOMnCS9r24,47104
213
213
  ccxt/async_support/ascendex.py,sha256=K_mqPMdT9Q1oS8CRtoVYjlN4rbp86glU4sPQGFi4W6U,151597
@@ -232,7 +232,7 @@ ccxt/async_support/bitmart.py,sha256=0_5IdMW8FyJV86h5XcJi70-ByLnI_oJL71MOznxCwcA
232
232
  ccxt/async_support/bitmex.py,sha256=NzN7OQdaHOm2pO6omyJfTzQQwjjJ9MCa1YWWp1n5Bqo,125871
233
233
  ccxt/async_support/bitopro.py,sha256=rITEIfcRAsTq7myJ7Nm-4hY26q6dyvtHXP56cZ2MD7M,68485
234
234
  ccxt/async_support/bitpanda.py,sha256=2k3URBWrpnh2xHa7JiYenI7_4MW5UeOPGzetlmRkR4U,485
235
- ccxt/async_support/bitrue.py,sha256=WZFRGIhf-Bmm0uteDDw-G9LJr6sUVbAIr-_vAvPnuOg,136482
235
+ ccxt/async_support/bitrue.py,sha256=jsC1neKiNCjYKuYEv1WlYJM0lDe_qfQ6U2-EzEtMXPw,136556
236
236
  ccxt/async_support/bitso.py,sha256=MdGEPa3N4Wuqx1_BZm9MWjyRi4CzDSGyoW41h1fLDqs,71076
237
237
  ccxt/async_support/bitstamp.py,sha256=IDGAsbqo9CTL-hw9W5aBU91njk9F3XuJ5RpRCckLGC0,92026
238
238
  ccxt/async_support/bitteam.py,sha256=Qiwoy3vH_ijxyGB5r4ssicm-nwzg3Yzbh_lgwIKeRSI,102129
@@ -259,8 +259,8 @@ ccxt/async_support/coinsph.py,sha256=jy6-3kWA0-KS8744QKa62ySyx8_4szOLsxo_F_ahXNA
259
259
  ccxt/async_support/coinspot.py,sha256=E0cj4OPK9nV43UzMIs88Y_bXtEzW49oeFP50Mj7wyrY,23617
260
260
  ccxt/async_support/cryptocom.py,sha256=kgC23ELiN77g0f1n3nuMEqhFYeOpz9K8RgHUZkXG8LI,128642
261
261
  ccxt/async_support/currencycom.py,sha256=DtKDSNV96umQDTf0Mixlls6Gq0LIifZFpCpu9EHPBUg,87101
262
- ccxt/async_support/delta.py,sha256=MVqiamG138Bk3D7C_7OLlOl4BzeBF8IeKH3HbyT7IyY,144908
263
- ccxt/async_support/deribit.py,sha256=heKhRntrSJypWb3XJ-ieeVe-oVwmzcXB5kgogROgGNQ,160844
262
+ ccxt/async_support/delta.py,sha256=Loc4ZB82SOfEyTEMN9SQMryKPYv00icQrWlIeo-PS_U,151063
263
+ ccxt/async_support/deribit.py,sha256=c1PAq3gvGzspnS9aOvL3QWn4HIi3OBH-wV0E1X6Kx6A,160836
264
264
  ccxt/async_support/digifinex.py,sha256=1NWewU2Uzm3ILr2kSlPvpfo0xIcQYE-sOx7YTlqhxL0,170328
265
265
  ccxt/async_support/exmo.py,sha256=fOIqQBiFW6U9hoct1K-vTZZ2vVi37SPcQ3Z5_WJxk6Q,114854
266
266
  ccxt/async_support/flowbtc.py,sha256=bCnvtcNnPxxaxqVjI1GGXKhIpz_1r4GIFWqqPokvCR0,1183
@@ -274,7 +274,7 @@ ccxt/async_support/hollaex.py,sha256=LZ41Smk-7_s9XCOhTc0n4oG03ZeInCw-N_vEwLcETfA
274
274
  ccxt/async_support/htx.py,sha256=r5QKMwj6jJj9c1qs4fME3Jk22Uu7ZSd0UbxRLfaV6Vw,421142
275
275
  ccxt/async_support/huobi.py,sha256=fup0j6wQ1khAtfbb1H4CSyJAOzhxuoHMmrM6sgTuhr8,452
276
276
  ccxt/async_support/huobijp.py,sha256=HkXnX91fcHVQAfSknYmfgasEhVkwS0tcbMHCjXFD0e4,88407
277
- ccxt/async_support/hyperliquid.py,sha256=gouETtgBBxxZ3iKU6DmoZjREAoVzD7KwsmN9R8nxefM,83451
277
+ ccxt/async_support/hyperliquid.py,sha256=whZDHXz1vB37PtxxKzIf2OLCPizdzUVexpMph8Z8lDQ,83528
278
278
  ccxt/async_support/idex.py,sha256=4CNRYJX12rpfoqlHE2Nvm2ZL56P7F2cWdZ6KHiA1zlQ,73182
279
279
  ccxt/async_support/independentreserve.py,sha256=fEkWmaw4LZx3n0MtqHLJpgmWosfL3FiKd3dN5_ZzxTI,32242
280
280
  ccxt/async_support/indodax.py,sha256=_eQVgwmPSfIvpPOW-1P_inVvOWK1g4rTXVPuqHr_YUE,52073
@@ -293,7 +293,7 @@ ccxt/async_support/ndax.py,sha256=9hzPCmwrYVJqtUe6oFrGz9dYe8oRyp1F_7O4QunmYZQ,10
293
293
  ccxt/async_support/novadax.py,sha256=bYUoEjRpvRCzFH25NNircGl36qB8eN2cwxc5qMtxJMs,64466
294
294
  ccxt/async_support/oceanex.py,sha256=LsNS6IIUDJd_KnxmUT5Ub8RLwDQhFqkfyuDr8uV65A8,38131
295
295
  ccxt/async_support/okcoin.py,sha256=z3t4nyfNxtyLY-l_hCqy0oLIsuxIqIBQKOLNjfnhA5I,151537
296
- ccxt/async_support/okx.py,sha256=FGIhSS3DRpd3MJHkPDB5-ppH--fimv9aKPBo7kSAqGY,339005
296
+ ccxt/async_support/okx.py,sha256=Wp6E39j2O5t0i8VabE7x3pAGVyt8r3UvMyfhZjbf6YE,344343
297
297
  ccxt/async_support/onetrading.py,sha256=zi0oFJLn0y4O0nxls-A1hLLokJ3C9Wnvarm3iCxPKhg,88343
298
298
  ccxt/async_support/p2b.py,sha256=F8BN8aVQGRTAfQMqAMdO9kpbHG8XB1ki8PbHkpMYtL8,54307
299
299
  ccxt/async_support/paymium.py,sha256=3P1J9OcDOqQKG5fUs6Xte9Xu8NB5lWu-OD-AHHGZbkM,24391
@@ -313,7 +313,7 @@ ccxt/async_support/yobit.py,sha256=ZyQx9X9CE7cn5d3XB0sdieQyrgNLlFDe6LoVP8ckmzg,5
313
313
  ccxt/async_support/zaif.py,sha256=bbY7Sjnc8LsOcqwhipxx2AVOWBz-N7jjiftmksTOtTM,28119
314
314
  ccxt/async_support/zonda.py,sha256=5msJR5KAMz4MiUBJ_4QvQ8uRQWAYj5uf9AdsDyyRgtE,80766
315
315
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
316
- ccxt/async_support/base/exchange.py,sha256=O82yhgki2lWSiq18je8LHP3qk-Y7HgjG7_es6GcvvkU,91714
316
+ ccxt/async_support/base/exchange.py,sha256=LwwM4m4pM0pl02fPkg_cLt5Aj2hMsVOKj0c0nNWExcw,91714
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,10 +327,10 @@ 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=JBn3zTrtru7tLgyEi6MzKAUwiZe0fltQLYoJcsdP-AA,4099
330
- ccxt/base/exchange.py,sha256=FxQhEuiqMtMLNBffesTSOZwwZgebzUUBRKdh6lphwzU,249730
330
+ ccxt/base/exchange.py,sha256=cfEHPpwS6O6NgjL0FJ937_kkQiMZl-hopU-D1_ORLeo,249730
331
331
  ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
332
332
  ccxt/base/types.py,sha256=6J3Dzo0NBbn-5tCRQpfeRkLDzH1loScrDjP7xRDz6gI,6842
333
- ccxt/pro/__init__.py,sha256=MsiG8mPJ8Oe-vjCsGalUKSC0bhSy4nlScbqPlwsgkzM,6897
333
+ ccxt/pro/__init__.py,sha256=MGgJexFKquU1W4nCjX_uW8XcSVo-4JFWi_6hKCuAudE,6897
334
334
  ccxt/pro/alpaca.py,sha256=7ePyWli0949ti5UheIn553xmnFpedrNc2W5CKauSZio,27167
335
335
  ccxt/pro/ascendex.py,sha256=0RlrxSqh4-lW99T-Y8AxrU612Cpy03u2loVMeRUPXlg,35432
336
336
  ccxt/pro/bequant.py,sha256=5zbsP8BHQTUZ8ZNL6uaACxDbUClgkOV4SYfXT_LfQVg,1351
@@ -528,7 +528,7 @@ ccxt/test/base/test_ticker.py,sha256=cMTIMb1oySNORUCmqI5ZzMswlEyCF6gJMah3vfvo8wQ
528
528
  ccxt/test/base/test_trade.py,sha256=PMtmB8V38dpaP-eb8h488xYMlR6D69yCOhsA1RuWrUA,2336
529
529
  ccxt/test/base/test_trading_fee.py,sha256=2aDCNJtqBkTC_AieO0l1HYGq5hz5qkWlkWb9Nv_fcwk,1066
530
530
  ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
531
- ccxt-4.2.81.dist-info/METADATA,sha256=ul5IcLX2Cxbg2knc6T0WVEHcqSKcr-iiXbAN682-0qw,110489
532
- ccxt-4.2.81.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
533
- ccxt-4.2.81.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
534
- ccxt-4.2.81.dist-info/RECORD,,
531
+ ccxt-4.2.82.dist-info/METADATA,sha256=I5Rs8IyVg6jwb417bOQ_YjeZe5VHoXuaQnTDkMg01p0,110489
532
+ ccxt-4.2.82.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
533
+ ccxt-4.2.82.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
534
+ ccxt-4.2.82.dist-info/RECORD,,
File without changes