ccxt-ir 4.9.15__py2.py3-none-any.whl → 4.9.16__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.9.15'
25
+ __version__ = '4.9.16'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
ccxt/abantether.py CHANGED
@@ -185,8 +185,8 @@ class abantether(Exchange, ImplicitAPI):
185
185
  'baseId': baseId,
186
186
  'quoteId': quoteId,
187
187
  'settleId': None,
188
- 'type': 'spot',
189
- 'spot': True,
188
+ 'type': 'otc',
189
+ 'spot': False,
190
190
  'margin': False,
191
191
  'swap': False,
192
192
  'future': False,
ccxt/abstract/toobit.py CHANGED
@@ -4,3 +4,4 @@ from ccxt.base.types import Entry
4
4
  class ImplicitAPI:
5
5
  public_get_quote_v1_ticker_24hr = publicGetQuoteV1Ticker24hr = Entry('quote/v1/ticker/24hr', 'public', 'GET', {'cost': 1})
6
6
  public_get_quote_v1_klines = publicGetQuoteV1Klines = Entry('quote/v1/klines', 'public', 'GET', {'cost': 1})
7
+ public_get_api_v1_exchangeinfo = publicGetApiV1ExchangeInfo = Entry('/api/v1/exchangeInfo', 'public', 'GET', {'cost': 1})
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.9.15'
7
+ __version__ = '4.9.16'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -185,8 +185,8 @@ class abantether(Exchange, ImplicitAPI):
185
185
  'baseId': baseId,
186
186
  'quoteId': quoteId,
187
187
  'settleId': None,
188
- 'type': 'spot',
189
- 'spot': True,
188
+ 'type': 'otc',
189
+ 'spot': False,
190
190
  'margin': False,
191
191
  'swap': False,
192
192
  'future': False,
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.9.15'
5
+ __version__ = '4.9.16'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -282,5 +282,8 @@ class hamtapay(Exchange, ImplicitAPI):
282
282
 
283
283
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
284
284
  url = self.urls['api']['public'] + '/' + path
285
- headers = {'Content-Type': 'application/json'}
285
+ headers = {
286
+ 'Content-Type': 'application/json',
287
+ 'Origin': 'https://hamtapay.net',
288
+ }
286
289
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
@@ -22,7 +22,7 @@ class sarmayex(Exchange, ImplicitAPI):
22
22
  'pro': False,
23
23
  'has': {
24
24
  'CORS': None,
25
- 'spot': True,
25
+ 'spot': False,
26
26
  'margin': False,
27
27
  'swap': False,
28
28
  'future': False,
@@ -78,6 +78,7 @@ class sarmayex(Exchange, ImplicitAPI):
78
78
  'fetchTradingFee': False,
79
79
  'fetchTradingFees': False,
80
80
  'fetchWithdrawals': False,
81
+ 'otc': True,
81
82
  'setLeverage': False,
82
83
  'setMarginMode': False,
83
84
  'transfer': False,
@@ -193,8 +194,8 @@ class sarmayex(Exchange, ImplicitAPI):
193
194
  'baseId': baseId,
194
195
  'quoteId': quoteId,
195
196
  'settleId': None,
196
- 'type': 'spot',
197
- 'spot': True,
197
+ 'type': 'otc',
198
+ 'spot': False,
198
199
  'margin': False,
199
200
  'swap': False,
200
201
  'future': False,
@@ -113,6 +113,7 @@ class toobit(Exchange, ImplicitAPI):
113
113
  'get': {
114
114
  'quote/v1/ticker/24hr': 1,
115
115
  'quote/v1/klines': 1,
116
+ '/api/v1/exchangeInfo': 1,
116
117
  },
117
118
  },
118
119
  },
@@ -129,48 +130,98 @@ class toobit(Exchange, ImplicitAPI):
129
130
  async def fetch_markets(self, params={}) -> List[Market]:
130
131
  """
131
132
  retrieves data on all markets for toobit
132
- https://apidocs.toobit.io/#tickers
133
+ https://api.toobit.com/api/v1/exchangeInfo
133
134
  :param dict [params]: extra parameters specific to the exchange API endpoint
134
135
  :returns dict[]: an array of objects representing market data
135
136
  """
136
- response = await self.publicGetQuoteV1Ticker24hr()
137
+ response = await self.publicGetApiV1ExchangeInfo()
138
+ symbols = self.safe_value(response, 'symbols', [])
137
139
  result = []
138
- for i in range(0, len(response)):
139
- volume = self.safe_float(response[i], 'v')
140
- symbol = self.safe_value(response[i], 's')
141
- if volume == 0 or symbol == 'TESTA1S3TESTX8Z9':
140
+ for i in range(0, len(symbols)):
141
+ symbolData = symbols[i]
142
+ status = self.safe_value(symbolData, 'status')
143
+ symbol = self.safe_value(symbolData, 'symbol')
144
+ if status != 'TRADING' or symbol == 'TESTA1S3TESTX8Z9':
142
145
  continue
143
- market = self.parse_market(response[i])
146
+ market = self.parse_market(symbolData)
144
147
  result.append(market)
145
148
  return result
146
149
 
147
150
  def parse_market(self, market) -> Market:
148
151
  # {
149
- # t: 1757164008834,
150
- # s: "BTCUSDT",
151
- # c: "110895.06",
152
- # h: "113310.01",
153
- # l: "110219.01",
154
- # o: "112951.99",
155
- # v: "3893.406649",
156
- # qv: "433374169.27969515",
157
- # pc: "-2056.93",
158
- # pcp: "-0.0182"
159
- # }
160
- symbol = self.safe_value(market, 's')
161
- baseId = symbol
162
- quoteId = None
163
- if symbol.endswith('USDT'):
164
- baseId = symbol[0:-4]
165
- quoteId = 'USDT'
166
- elif symbol.endswith('USDC'):
167
- baseId = symbol[0:-4]
168
- quoteId = 'USDC'
152
+ # "filters": [
153
+ # {
154
+ # "minPrice": "0.01",
155
+ # "maxPrice": "10000000.00000000",
156
+ # "tickSize": "0.01",
157
+ # "filterType": "PRICE_FILTER"
158
+ # },
159
+ # {
160
+ # "minQty": "0.0001",
161
+ # "maxQty": "4000",
162
+ # "stepSize": "0.0001",
163
+ # "filterType": "LOT_SIZE"
164
+ # },
165
+ # {
166
+ # "minNotional": "5",
167
+ # "filterType": "MIN_NOTIONAL"
168
+ # }
169
+ # ],
170
+ # "exchangeId": "301",
171
+ # "symbol": "ETHUSDT",
172
+ # "symbolName": "ETHUSDT",
173
+ # "status": "TRADING",
174
+ # "baseAsset": "ETH",
175
+ # "baseAssetName": "ETH",
176
+ # "baseAssetPrecision": "0.0001",
177
+ # "quoteAsset": "USDT",
178
+ # "quoteAssetName": "USDT",
179
+ # "quotePrecision": "0.01",
180
+ # "icebergAllowed": False,
181
+ # "isAggregate": False,
182
+ # "allowMargin": True
183
+ # }
184
+ symbol = self.safe_value(market, 'symbol')
185
+ baseAsset = self.safe_value(market, 'baseAsset')
186
+ quoteAsset = self.safe_value(market, 'quoteAsset')
187
+ baseAssetPrecision = self.safe_value(market, 'baseAssetPrecision')
188
+ quotePrecision = self.safe_value(market, 'quotePrecision')
189
+ allowMargin = self.safe_value(market, 'allowMargin', False)
190
+ filters = self.safe_value(market, 'filters', [])
191
+ # Parse filters to extract limits and precision
192
+ minPrice = None
193
+ maxPrice = None
194
+ tickSize = None
195
+ minQty = None
196
+ maxQty = None
197
+ stepSize = None
198
+ minNotional = None
199
+ minAmount = None
200
+ maxAmount = None
201
+ for i in range(0, len(filters)):
202
+ filter = filters[i]
203
+ filterType = self.safe_value(filter, 'filterType')
204
+ if filterType == 'PRICE_FILTER':
205
+ minPrice = self.safe_number(filter, 'minPrice')
206
+ maxPrice = self.safe_number(filter, 'maxPrice')
207
+ tickSize = self.safe_number(filter, 'tickSize')
208
+ elif filterType == 'LOT_SIZE':
209
+ minQty = self.safe_number(filter, 'minQty')
210
+ maxQty = self.safe_number(filter, 'maxQty')
211
+ stepSize = self.safe_number(filter, 'stepSize')
212
+ elif filterType == 'MIN_NOTIONAL':
213
+ minNotional = self.safe_number(filter, 'minNotional')
214
+ elif filterType == 'TRADE_AMOUNT':
215
+ minAmount = self.safe_number(filter, 'minAmount')
216
+ maxAmount = self.safe_number(filter, 'maxAmount')
169
217
  id = symbol
170
- base = self.safe_currency_code(baseId)
171
- quote = self.safe_currency_code(quoteId)
172
- baseId = baseId.lower()
173
- quoteId = quoteId.lower()
218
+ base = self.safe_currency_code(baseAsset)
219
+ quote = self.safe_currency_code(quoteAsset)
220
+ baseId = baseAsset.lower()
221
+ quoteId = quoteAsset.lower()
222
+ # Calculate precision from step sizes and precision strings
223
+ amountPrecision = str(self.precision_from_string(stepSize)) if stepSize else self.precision_from_string(baseAssetPrecision)
224
+ pricePrecision = str(self.precision_from_string(tickSize)) if tickSize else self.precision_from_string(quotePrecision)
174
225
  return {
175
226
  'id': id,
176
227
  'symbol': base + '/' + quote,
@@ -182,7 +233,7 @@ class toobit(Exchange, ImplicitAPI):
182
233
  'settleId': None,
183
234
  'type': 'spot',
184
235
  'spot': True,
185
- 'margin': False,
236
+ 'margin': allowMargin,
186
237
  'swap': False,
187
238
  'future': False,
188
239
  'option': False,
@@ -196,8 +247,8 @@ class toobit(Exchange, ImplicitAPI):
196
247
  'strike': None,
197
248
  'optionType': None,
198
249
  'precision': {
199
- 'amount': None,
200
- 'price': None,
250
+ 'amount': amountPrecision,
251
+ 'price': pricePrecision,
201
252
  },
202
253
  'limits': {
203
254
  'leverage': {
@@ -205,16 +256,16 @@ class toobit(Exchange, ImplicitAPI):
205
256
  'max': None,
206
257
  },
207
258
  'amount': {
208
- 'min': None,
209
- 'max': None,
259
+ 'min': minQty,
260
+ 'max': maxQty,
210
261
  },
211
262
  'price': {
212
- 'min': None,
213
- 'max': None,
263
+ 'min': minPrice,
264
+ 'max': maxPrice,
214
265
  },
215
266
  'cost': {
216
- 'min': None,
217
- 'max': None,
267
+ 'min': minNotional or minAmount,
268
+ 'max': maxAmount,
218
269
  },
219
270
  },
220
271
  'created': None,
@@ -224,7 +275,7 @@ class toobit(Exchange, ImplicitAPI):
224
275
  async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
225
276
  """
226
277
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
227
- https://apidocs.toobit.io/#tickers
278
+ https://toobit-docs.github.io/apidocs/spot/v1/en/#tickers
228
279
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
229
280
  :param dict [params]: extra parameters specific to the exchange API endpoint
230
281
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -246,7 +297,7 @@ class toobit(Exchange, ImplicitAPI):
246
297
  async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
247
298
  """
248
299
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
249
- https://apidocs.toobit.io/#ticker
300
+ https://toobit-docs.github.io/apidocs/spot/v1/en/#ticker
250
301
  :param str symbol: unified symbol of the market to fetch the ticker for
251
302
  :param dict [params]: extra parameters specific to the exchange API endpoint
252
303
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -315,7 +366,7 @@ class toobit(Exchange, ImplicitAPI):
315
366
  async def fetch_ohlcv(self, symbol: str, timeframe='1h', since: Int = None, limit: Int = None, params={}) -> List[list]:
316
367
  """
317
368
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
318
- https://apidocs.toobit.io/#chart
369
+ https://toobit-docs.github.io/apidocs/spot/v1/en/#chart
319
370
  :param str symbol: unified symbol of the market to fetch OHLCV data for
320
371
  :param str timeframe: the length of time each candle represents
321
372
  :param int [since]: timestamp in ms of the earliest candle to fetch
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.9.15'
7
+ __version__ = '4.9.16'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
ccxt/hamtapay.py CHANGED
@@ -282,5 +282,8 @@ class hamtapay(Exchange, ImplicitAPI):
282
282
 
283
283
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
284
284
  url = self.urls['api']['public'] + '/' + path
285
- headers = {'Content-Type': 'application/json'}
285
+ headers = {
286
+ 'Content-Type': 'application/json',
287
+ 'Origin': 'https://hamtapay.net',
288
+ }
286
289
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.9.15'
7
+ __version__ = '4.9.16'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
ccxt/sarmayex.py CHANGED
@@ -22,7 +22,7 @@ class sarmayex(Exchange, ImplicitAPI):
22
22
  'pro': False,
23
23
  'has': {
24
24
  'CORS': None,
25
- 'spot': True,
25
+ 'spot': False,
26
26
  'margin': False,
27
27
  'swap': False,
28
28
  'future': False,
@@ -78,6 +78,7 @@ class sarmayex(Exchange, ImplicitAPI):
78
78
  'fetchTradingFee': False,
79
79
  'fetchTradingFees': False,
80
80
  'fetchWithdrawals': False,
81
+ 'otc': True,
81
82
  'setLeverage': False,
82
83
  'setMarginMode': False,
83
84
  'transfer': False,
@@ -193,8 +194,8 @@ class sarmayex(Exchange, ImplicitAPI):
193
194
  'baseId': baseId,
194
195
  'quoteId': quoteId,
195
196
  'settleId': None,
196
- 'type': 'spot',
197
- 'spot': True,
197
+ 'type': 'otc',
198
+ 'spot': False,
198
199
  'margin': False,
199
200
  'swap': False,
200
201
  'future': False,
ccxt/toobit.py CHANGED
@@ -113,6 +113,7 @@ class toobit(Exchange, ImplicitAPI):
113
113
  'get': {
114
114
  'quote/v1/ticker/24hr': 1,
115
115
  'quote/v1/klines': 1,
116
+ '/api/v1/exchangeInfo': 1,
116
117
  },
117
118
  },
118
119
  },
@@ -129,48 +130,98 @@ class toobit(Exchange, ImplicitAPI):
129
130
  def fetch_markets(self, params={}) -> List[Market]:
130
131
  """
131
132
  retrieves data on all markets for toobit
132
- https://apidocs.toobit.io/#tickers
133
+ https://api.toobit.com/api/v1/exchangeInfo
133
134
  :param dict [params]: extra parameters specific to the exchange API endpoint
134
135
  :returns dict[]: an array of objects representing market data
135
136
  """
136
- response = self.publicGetQuoteV1Ticker24hr()
137
+ response = self.publicGetApiV1ExchangeInfo()
138
+ symbols = self.safe_value(response, 'symbols', [])
137
139
  result = []
138
- for i in range(0, len(response)):
139
- volume = self.safe_float(response[i], 'v')
140
- symbol = self.safe_value(response[i], 's')
141
- if volume == 0 or symbol == 'TESTA1S3TESTX8Z9':
140
+ for i in range(0, len(symbols)):
141
+ symbolData = symbols[i]
142
+ status = self.safe_value(symbolData, 'status')
143
+ symbol = self.safe_value(symbolData, 'symbol')
144
+ if status != 'TRADING' or symbol == 'TESTA1S3TESTX8Z9':
142
145
  continue
143
- market = self.parse_market(response[i])
146
+ market = self.parse_market(symbolData)
144
147
  result.append(market)
145
148
  return result
146
149
 
147
150
  def parse_market(self, market) -> Market:
148
151
  # {
149
- # t: 1757164008834,
150
- # s: "BTCUSDT",
151
- # c: "110895.06",
152
- # h: "113310.01",
153
- # l: "110219.01",
154
- # o: "112951.99",
155
- # v: "3893.406649",
156
- # qv: "433374169.27969515",
157
- # pc: "-2056.93",
158
- # pcp: "-0.0182"
159
- # }
160
- symbol = self.safe_value(market, 's')
161
- baseId = symbol
162
- quoteId = None
163
- if symbol.endswith('USDT'):
164
- baseId = symbol[0:-4]
165
- quoteId = 'USDT'
166
- elif symbol.endswith('USDC'):
167
- baseId = symbol[0:-4]
168
- quoteId = 'USDC'
152
+ # "filters": [
153
+ # {
154
+ # "minPrice": "0.01",
155
+ # "maxPrice": "10000000.00000000",
156
+ # "tickSize": "0.01",
157
+ # "filterType": "PRICE_FILTER"
158
+ # },
159
+ # {
160
+ # "minQty": "0.0001",
161
+ # "maxQty": "4000",
162
+ # "stepSize": "0.0001",
163
+ # "filterType": "LOT_SIZE"
164
+ # },
165
+ # {
166
+ # "minNotional": "5",
167
+ # "filterType": "MIN_NOTIONAL"
168
+ # }
169
+ # ],
170
+ # "exchangeId": "301",
171
+ # "symbol": "ETHUSDT",
172
+ # "symbolName": "ETHUSDT",
173
+ # "status": "TRADING",
174
+ # "baseAsset": "ETH",
175
+ # "baseAssetName": "ETH",
176
+ # "baseAssetPrecision": "0.0001",
177
+ # "quoteAsset": "USDT",
178
+ # "quoteAssetName": "USDT",
179
+ # "quotePrecision": "0.01",
180
+ # "icebergAllowed": False,
181
+ # "isAggregate": False,
182
+ # "allowMargin": True
183
+ # }
184
+ symbol = self.safe_value(market, 'symbol')
185
+ baseAsset = self.safe_value(market, 'baseAsset')
186
+ quoteAsset = self.safe_value(market, 'quoteAsset')
187
+ baseAssetPrecision = self.safe_value(market, 'baseAssetPrecision')
188
+ quotePrecision = self.safe_value(market, 'quotePrecision')
189
+ allowMargin = self.safe_value(market, 'allowMargin', False)
190
+ filters = self.safe_value(market, 'filters', [])
191
+ # Parse filters to extract limits and precision
192
+ minPrice = None
193
+ maxPrice = None
194
+ tickSize = None
195
+ minQty = None
196
+ maxQty = None
197
+ stepSize = None
198
+ minNotional = None
199
+ minAmount = None
200
+ maxAmount = None
201
+ for i in range(0, len(filters)):
202
+ filter = filters[i]
203
+ filterType = self.safe_value(filter, 'filterType')
204
+ if filterType == 'PRICE_FILTER':
205
+ minPrice = self.safe_number(filter, 'minPrice')
206
+ maxPrice = self.safe_number(filter, 'maxPrice')
207
+ tickSize = self.safe_number(filter, 'tickSize')
208
+ elif filterType == 'LOT_SIZE':
209
+ minQty = self.safe_number(filter, 'minQty')
210
+ maxQty = self.safe_number(filter, 'maxQty')
211
+ stepSize = self.safe_number(filter, 'stepSize')
212
+ elif filterType == 'MIN_NOTIONAL':
213
+ minNotional = self.safe_number(filter, 'minNotional')
214
+ elif filterType == 'TRADE_AMOUNT':
215
+ minAmount = self.safe_number(filter, 'minAmount')
216
+ maxAmount = self.safe_number(filter, 'maxAmount')
169
217
  id = symbol
170
- base = self.safe_currency_code(baseId)
171
- quote = self.safe_currency_code(quoteId)
172
- baseId = baseId.lower()
173
- quoteId = quoteId.lower()
218
+ base = self.safe_currency_code(baseAsset)
219
+ quote = self.safe_currency_code(quoteAsset)
220
+ baseId = baseAsset.lower()
221
+ quoteId = quoteAsset.lower()
222
+ # Calculate precision from step sizes and precision strings
223
+ amountPrecision = str(self.precision_from_string(stepSize)) if stepSize else self.precision_from_string(baseAssetPrecision)
224
+ pricePrecision = str(self.precision_from_string(tickSize)) if tickSize else self.precision_from_string(quotePrecision)
174
225
  return {
175
226
  'id': id,
176
227
  'symbol': base + '/' + quote,
@@ -182,7 +233,7 @@ class toobit(Exchange, ImplicitAPI):
182
233
  'settleId': None,
183
234
  'type': 'spot',
184
235
  'spot': True,
185
- 'margin': False,
236
+ 'margin': allowMargin,
186
237
  'swap': False,
187
238
  'future': False,
188
239
  'option': False,
@@ -196,8 +247,8 @@ class toobit(Exchange, ImplicitAPI):
196
247
  'strike': None,
197
248
  'optionType': None,
198
249
  'precision': {
199
- 'amount': None,
200
- 'price': None,
250
+ 'amount': amountPrecision,
251
+ 'price': pricePrecision,
201
252
  },
202
253
  'limits': {
203
254
  'leverage': {
@@ -205,16 +256,16 @@ class toobit(Exchange, ImplicitAPI):
205
256
  'max': None,
206
257
  },
207
258
  'amount': {
208
- 'min': None,
209
- 'max': None,
259
+ 'min': minQty,
260
+ 'max': maxQty,
210
261
  },
211
262
  'price': {
212
- 'min': None,
213
- 'max': None,
263
+ 'min': minPrice,
264
+ 'max': maxPrice,
214
265
  },
215
266
  'cost': {
216
- 'min': None,
217
- 'max': None,
267
+ 'min': minNotional or minAmount,
268
+ 'max': maxAmount,
218
269
  },
219
270
  },
220
271
  'created': None,
@@ -224,7 +275,7 @@ class toobit(Exchange, ImplicitAPI):
224
275
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
225
276
  """
226
277
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
227
- https://apidocs.toobit.io/#tickers
278
+ https://toobit-docs.github.io/apidocs/spot/v1/en/#tickers
228
279
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
229
280
  :param dict [params]: extra parameters specific to the exchange API endpoint
230
281
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -246,7 +297,7 @@ class toobit(Exchange, ImplicitAPI):
246
297
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
247
298
  """
248
299
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
249
- https://apidocs.toobit.io/#ticker
300
+ https://toobit-docs.github.io/apidocs/spot/v1/en/#ticker
250
301
  :param str symbol: unified symbol of the market to fetch the ticker for
251
302
  :param dict [params]: extra parameters specific to the exchange API endpoint
252
303
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -315,7 +366,7 @@ class toobit(Exchange, ImplicitAPI):
315
366
  def fetch_ohlcv(self, symbol: str, timeframe='1h', since: Int = None, limit: Int = None, params={}) -> List[list]:
316
367
  """
317
368
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
318
- https://apidocs.toobit.io/#chart
369
+ https://toobit-docs.github.io/apidocs/spot/v1/en/#chart
319
370
  :param str symbol: unified symbol of the market to fetch OHLCV data for
320
371
  :param str timeframe: the length of time each candle represents
321
372
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ccxt-ir
3
- Version: 4.9.15
3
+ Version: 4.9.16
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
@@ -304,13 +304,13 @@ console.log(version, Object.keys(exchanges));
304
304
 
305
305
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
306
306
 
307
- - jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.9.15/dist/ccxt.browser.min.js
308
- - unpkg: https://unpkg.com/ccxt@4.9.15/dist/ccxt.browser.min.js
307
+ - jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.9.16/dist/ccxt.browser.min.js
308
+ - unpkg: https://unpkg.com/ccxt@4.9.16/dist/ccxt.browser.min.js
309
309
 
310
310
  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.
311
311
 
312
312
  ```HTML
313
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.9.15/dist/ccxt.browser.min.js"></script>
313
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.9.16/dist/ccxt.browser.min.js"></script>
314
314
  console.log (ccxt.exchanges) // print all available exchanges
315
315
  ```
316
316
 
@@ -1,5 +1,5 @@
1
- ccxt/__init__.py,sha256=bGpuCwRBhSalnqhpahecE6Xb-D0AFfd1mt1IvQwnxoM,20197
2
- ccxt/abantether.py,sha256=Ds5AIDyJtOwcsKHY6LBXJsFL2tR7d_5k64HHzpaBeGI,12879
1
+ ccxt/__init__.py,sha256=cxwn7SMtiULIh1XqJ2_tvAH6YOViuG_BiCNOasLLKA8,20197
2
+ ccxt/abantether.py,sha256=PSz8vQq3Il76_K8kmw43MzFH_JDsqF9Spg2IxPoeGXE,12879
3
3
  ccxt/afratether.py,sha256=5PX0U1GQ3ylOQuQ8Mm9yIsF5J3aqfTZcp6iV87I8E_0,12245
4
4
  ccxt/alpaca.py,sha256=oO0YJHxo5_1iYyGVRMbxfGyPahqzuMlE7LZ3TMYgPGo,80694
5
5
  ccxt/apex.py,sha256=TuOp4vnCczdRG__9thnb3RIidoVeUDZbOSGbusjJG78,82740
@@ -76,7 +76,7 @@ ccxt/foxbit.py,sha256=ixfTx1r8cTojMIPMPkJYKrPwwq6RnW8zAP1Y5LZxfKw,85198
76
76
  ccxt/gate.py,sha256=AePkMpd4rKP4GoxClgM4qJ6fCrszgTzwrl_ZmJw6Yig,353292
77
77
  ccxt/gateio.py,sha256=7KbnH56kBK0tb_CN-wT10jaF5DfTrnHarhu27eknsLI,484
78
78
  ccxt/gemini.py,sha256=Tz6iwN1-MM7tyoikqOdOfycx0QpKzf_OVbbtBJf5qks,83632
79
- ccxt/hamtapay.py,sha256=A4YRo84MonivZ7MUlMdGGXnPH9S3f1m5Io1-ANhgRGo,11051
79
+ ccxt/hamtapay.py,sha256=7h4FCjygyBcP9qFwTNYbgfPknIzy3Tsl18mTJewEfTI,11120
80
80
  ccxt/hashkey.py,sha256=_UWPVcZ7ogSIc2e9hoJSIDxjVpPyG1-ITtW_1GUAgK4,193017
81
81
  ccxt/hibachi.py,sha256=4yOuKncE9fKenemc0fZ0QhY1NWQi0uX4IOY8KTvXqUA,85804
82
82
  ccxt/hitbtc.py,sha256=6d71BjWGR-ye1qZ0xvbQo3tYZKVy8hJ3cinOvze9upE,159666
@@ -122,14 +122,14 @@ ccxt/poloniex.py,sha256=Ukb2tZq57T44McUdD3-J3J_uLHTTEyBaLV1o3kmU4Rw,155050
122
122
  ccxt/pooleno.py,sha256=vZP1P6bxeJrvecUcBlZaYa4Fz1SiFMy6ixstjeFk_Qc,12465
123
123
  ccxt/probit.py,sha256=Lsfz21itILHEURhx_7qs9oQcjQNOXn-JFIfIUiOBJNo,79205
124
124
  ccxt/ramzinex.py,sha256=Si0Nuhfy7fo7t3Gi9y7uVFSt_FM5nS3Uo2j2vf6gxEw,19486
125
- ccxt/sarmayex.py,sha256=jTbQOwdZYlxgHKDoFRoKTngtm1asFaEihnUx7n1Q2pw,13404
125
+ ccxt/sarmayex.py,sha256=NI1j4t_kvIeGcT6CPiKEWWG1q-s3LojqGJ87uOHAgjc,13434
126
126
  ccxt/sarrafex.py,sha256=D1fo5tCmowlDb8CtsCoHrVkmf_WjhYp-6q-pcVkDFBg,19125
127
127
  ccxt/tabdeal.py,sha256=OWR4aV5Ek3cgIk3zjXy1l04hdbLxJZxd-3icm6prAvA,14358
128
128
  ccxt/tehran_exchange.py,sha256=02LkTk0aJYTv-vMKgl9CCn9dzhIEUNEiKBv-XQyYQlI,12514
129
129
  ccxt/tetherland.py,sha256=lqV2-p2c3bBj98wx8uOuig1HIvfC3YPnjY68EVFeMuA,13915
130
130
  ccxt/timex.py,sha256=MiLB4GyIpEOHweaQuzIrBJyuevw3jsVvitsaK7iQ6RE,76698
131
131
  ccxt/tokocrypto.py,sha256=-q95F-FvV-dgatuZzfJNnojtNxuyyyzmTpHLyOpu8Vw,126328
132
- ccxt/toobit.py,sha256=hFs4roZGL7KfxtFNfcHgkrZVBli7llmm_ksseK1p9ds,13737
132
+ ccxt/toobit.py,sha256=EaO6TfqpUEfpO96j6_rmdlE7urbYstoCv5ONfS0jcqo,16781
133
133
  ccxt/tradeogre.py,sha256=Q8CSHf8QGzb37jMFhaBmc_IZ1zga0eRXFVbjhmJnyFY,33712
134
134
  ccxt/twox.py,sha256=V5D0-q2CBKXBziiY09q4LB4OtCjbC7thOCXTn0V6ky0,12908
135
135
  ccxt/ubitex.py,sha256=Z9ThriWhEmlZwBgb7WmtIFUC_EfTa17GTyj_0SNumZA,16466
@@ -275,7 +275,7 @@ ccxt/abstract/tehran_exchange.py,sha256=J189abh3OO9j86o6Rd3iXuwwCOP4LJ2CJjnrSN1m
275
275
  ccxt/abstract/tetherland.py,sha256=oeq5VUYhHg8h9IaD7bDQlTCgZfHY80WAYnO-F-esl18,174
276
276
  ccxt/abstract/timex.py,sha256=9b0CDsyjm8XrYZmhUMB1dTHUmyE9YrsZTCZrz1UTt6E,5875
277
277
  ccxt/abstract/tokocrypto.py,sha256=OF5UW4ch_Lf3-avOPgd4AD4CVrOUDUfUpSMCmxhNHlk,4094
278
- ccxt/abstract/toobit.py,sha256=7Qeqn5TJ8GKY5Jug5ynKwktqhBSZYhc07Ht6qJcPU4Q,295
278
+ ccxt/abstract/toobit.py,sha256=vjq_QqR_xs9ZEnZdaxchsbBwKw5nz4_OG2JCQwSuuEs,421
279
279
  ccxt/abstract/tradeogre.py,sha256=bDouHP2c50F6Ins5EU2-3Jw10PsIG2KK3bcKv8y7678,1676
280
280
  ccxt/abstract/twox.py,sha256=RHI1yDeSsDxNgV3YX82DZCg1p36V-6fDOcmTXaMZK6w,166
281
281
  ccxt/abstract/ubitex.py,sha256=3bN3gGo86vcA1MPvlJTOcSkf8Ql-q0gbvXJCqhB_a-Q,416
@@ -290,8 +290,8 @@ ccxt/abstract/xt.py,sha256=n3eX1cItL_J0j8prOViV-C_tRwIFv_GO8JTvZZw8jv8,27837
290
290
  ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
291
291
  ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
292
292
  ccxt/abstract/zonda.py,sha256=X-hCW0SdX3YKZWixDyW-O2211M58Rno8kKJ6quY7rw4,7183
293
- ccxt/async_support/__init__.py,sha256=t500HQFFT5ozK5mP4LciIrQX3XcQ9oFu7hOR47Cysh4,20370
294
- ccxt/async_support/abantether.py,sha256=588gCktw-6cxm6nyp4_KvlCJb9_TphurxpxsK2MVlKs,12935
293
+ ccxt/async_support/__init__.py,sha256=o--317DgSD0OdChhj9YvpOFyHb1pQ0NBxLR5Hua0YRY,20370
294
+ ccxt/async_support/abantether.py,sha256=aNxARnFPboX8VyBLysADfJlW8d8d1CptPyf7NasyRl8,12935
295
295
  ccxt/async_support/afratether.py,sha256=fhVGoxrIbXXser4tIsCBgfVIivLnq7hpZBvzR84WgBs,12313
296
296
  ccxt/async_support/alpaca.py,sha256=oFpSnAjX-faRgTN4d5rwHa08WRaCkwiAbHGZ7JBe6Ww,81140
297
297
  ccxt/async_support/apex.py,sha256=ouj8uyC4f8Ar3IowHxbrPTBp-g2ctheo5ir_YLsg-Gg,83228
@@ -368,7 +368,7 @@ ccxt/async_support/foxbit.py,sha256=Mnb-we3Gy-iflG7driSnD3A4CL9ytVanDvXoX1h6Lgg,
368
368
  ccxt/async_support/gate.py,sha256=t5iTFzkJVS14V9Prgoqi6achMXMlKKLZ7TQwP2zphxw,355257
369
369
  ccxt/async_support/gateio.py,sha256=Sy9taiR0_0k4oh5GHjTjpwuCzskKiCCEQljuz7OxDVs,498
370
370
  ccxt/async_support/gemini.py,sha256=t5is53SzmwonojZ6szxaPaGt-3ShwE6wh6nA0lB7L7M,84156
371
- ccxt/async_support/hamtapay.py,sha256=c_s8NpSVxI8UAUHpeTQCpF9Faq-DQqnpA3s3nXob_k0,11107
371
+ ccxt/async_support/hamtapay.py,sha256=Xdkhn0s_Q5ILW1FR-f55fruzSL6M0ftO6xXFK-akYv4,11176
372
372
  ccxt/async_support/hashkey.py,sha256=MIp7RB82pOCLxVCH23VTh9ve__prU-EbdbrRYJ98xhI,193859
373
373
  ccxt/async_support/hibachi.py,sha256=bePZjCNOkXjd7sSUIMGQd5FVl-EtWtlYwlruW46G81A,86311
374
374
  ccxt/async_support/hitbtc.py,sha256=QpnR5OiablBy8tdb-XK1irLYBUX3gGtRiJKoV8Lldwc,160730
@@ -414,14 +414,14 @@ ccxt/async_support/poloniex.py,sha256=uniLoCvC3e37u6mLp-20H2awAGu5XsTHVc-LHkcbX1
414
414
  ccxt/async_support/pooleno.py,sha256=h2f7wgCocqg-xbn9HVSnF9V_uK7kp8S4mRB7IWQZKpg,12521
415
415
  ccxt/async_support/probit.py,sha256=uQOGglJZ1MWcmGwBWv3VJRluUB5HWkl80brpyElBoQc,79597
416
416
  ccxt/async_support/ramzinex.py,sha256=Abs2Uj31vh4KnAXxuRsTcj2Bjrs0MExZ4dC4PCTuX4Y,19584
417
- ccxt/async_support/sarmayex.py,sha256=WqQjSTKi9EAoaOilJEEA0BMtqoEKOzk9XoAijdD1i-E,13460
417
+ ccxt/async_support/sarmayex.py,sha256=-F5g-kSZNM9PWLRpbD5Epce2oKed3kdztswS0TVmhHE,13490
418
418
  ccxt/async_support/sarrafex.py,sha256=ZJBxRfWZ0vMgBPeneEyxlNVxXHLzeGICwxT3lAVhH-M,19223
419
419
  ccxt/async_support/tabdeal.py,sha256=_kDTQeB8pQSZKYOiBc0IoZBuIsOkwvhhhTNN8m4A0G8,14450
420
420
  ccxt/async_support/tehran_exchange.py,sha256=-z8FCrUUqJSHjuJ2RUD9U4gKNKIunqzjia9i9ZIn7xU,12576
421
421
  ccxt/async_support/tetherland.py,sha256=qjrg3bVakqBPs-2-u9fr2gPTN--JbXbw5gJ0_jWF6O0,13971
422
422
  ccxt/async_support/timex.py,sha256=SMMswaincdUzCI8waSpCnCEMPG5zEWe6UtcE4KteJaI,77060
423
423
  ccxt/async_support/tokocrypto.py,sha256=noI2aWGN2rH71WDomTl2GeysjsNbuMbLNHKMTNvJYOs,126690
424
- ccxt/async_support/toobit.py,sha256=hDiHHwk_7zV0yH70zuzVnQb11fPVpafBuurU5ir5aO4,13817
424
+ ccxt/async_support/toobit.py,sha256=dVOuG1_TeqlGzfUQo_p5Md4aGxb3hn1kFn_k8cF5VoQ,16861
425
425
  ccxt/async_support/tradeogre.py,sha256=gTmxvLXyRX8Ye8OTIrpKLso9QltZ4ZOrwxHklHrvhv8,33954
426
426
  ccxt/async_support/twox.py,sha256=wRT6KTNQBSEpeiJnc5anCWGbtyDkla6A0RyyRS_xSMo,12964
427
427
  ccxt/async_support/ubitex.py,sha256=lpLvSKKOftf7FjGRfIcJkY1sCWprmJQB-SvEvJIv_FY,16564
@@ -437,7 +437,7 @@ ccxt/async_support/yobit.py,sha256=FBI7ajvxprTYUqX8zosd7-LntDft8vIEjRTHng5ry8Y,5
437
437
  ccxt/async_support/zaif.py,sha256=mh0PETLMTJV509zhT7jukddg6S7YhvwhCT7zqxC6YLA,31364
438
438
  ccxt/async_support/zonda.py,sha256=7hmHotE5JBd8034d1ZbX3oIeWIpQFrQb8aK-dP3Btx0,85327
439
439
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
440
- ccxt/async_support/base/exchange.py,sha256=Jj14GCgAB3Nrp3E4bqGRRIur9CTPNw_PLyEM_uKhVfw,121269
440
+ ccxt/async_support/base/exchange.py,sha256=-BHRmbqeITFeqGQB2b6tVWdw3RDJaLSMgYyy6XKBHtc,121269
441
441
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
442
442
  ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
443
443
  ccxt/async_support/base/ws/cache.py,sha256=xf2VOtfUwloxSlIQ39M1RGZHWQzyS9IGhB5NX6cDcAc,8370
@@ -449,10 +449,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GhnGUt78pJ-AYL_Dq9produGjmB
449
449
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
450
450
  ccxt/base/decimal_to_precision.py,sha256=3XI30u9YudHbTA438397u5rkdlXa3atxwZEfUus3C4k,6803
451
451
  ccxt/base/errors.py,sha256=OGhWNvNtRlJOzFx-n1x3ZjTnaPpfWH0Vc0xACS-MeDw,5012
452
- ccxt/base/exchange.py,sha256=fLo_vJtpKkfmf6PI5wxlqZ8sacsWstTl_fvL7V74Ar8,334338
452
+ ccxt/base/exchange.py,sha256=DHSSQR6DozHRv6kPel317fzhzxECn2_dTx1yuv448Rg,334338
453
453
  ccxt/base/precise.py,sha256=koce64Yrp6vFbGijJtUt-QQ6XhJgeGTCksZ871FPp_A,8886
454
454
  ccxt/base/types.py,sha256=Gvbogh9i7pPH7Z18xesYeDPribqqwq8uKpOv-YODFBs,11505
455
- ccxt/pro/__init__.py,sha256=qRU34cfGk8pvHQTj5TjDWWSXRvfDUNtTmXPvphVkuQU,11464
455
+ ccxt/pro/__init__.py,sha256=MrUOBrbWcEhDPElImx8QzD5MP_WWlkJJfltY784yovA,11464
456
456
  ccxt/pro/alpaca.py,sha256=REAEZxdv2pY8xjxBGCBca3nPKpIdleVqr-IVpuVmADg,27637
457
457
  ccxt/pro/apex.py,sha256=FLBaLN2FESIh9gqHPVwf0IkkIHpxGHHUcFwgBGBEkrA,42018
458
458
  ccxt/pro/ascendex.py,sha256=P0DnIMIA-BIGxyoEQBLGtjH-whRhkPbhe8gU2s5V238,37526
@@ -775,8 +775,8 @@ ccxt/test/tests_async.py,sha256=D5ZDYYW635E2LFEhJt7HfIjbFVCQl3WSBEFnR-QEQzM,9549
775
775
  ccxt/test/tests_helpers.py,sha256=egM69A2ZFYeVF5hwC1Qt-c5DOeClY5bv4jowmceeFV8,9736
776
776
  ccxt/test/tests_init.py,sha256=qM0-Gb0h0p6CANWTkyYZI7wl-iYOcrPur7aj_OKh7m0,1212
777
777
  ccxt/test/tests_sync.py,sha256=Rr72cGmoKqbUIIEJJAGh2_QhBc4rIZlBxVtGCQVd4BE,94440
778
- ccxt_ir-4.9.15.dist-info/licenses/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
779
- ccxt_ir-4.9.15.dist-info/METADATA,sha256=nEssrCMpFsmIWJsZZ7Kz3ekD_7Cxe2VdOv5LnkMAsok,138934
780
- ccxt_ir-4.9.15.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
781
- ccxt_ir-4.9.15.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
782
- ccxt_ir-4.9.15.dist-info/RECORD,,
778
+ ccxt_ir-4.9.16.dist-info/licenses/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
779
+ ccxt_ir-4.9.16.dist-info/METADATA,sha256=A5zRlWvmgELVqeJzjKyaTcPRWVn1_zC_GkJRrsIIRns,138934
780
+ ccxt_ir-4.9.16.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
781
+ ccxt_ir-4.9.16.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
782
+ ccxt_ir-4.9.16.dist-info/RECORD,,