ccxt-ir 4.6.1__py2.py3-none-any.whl → 4.7.0__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 +3 -1
- ccxt/abstract/toobit.py +6 -0
- ccxt/async_support/__init__.py +3 -1
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/bit24.py +1 -3
- ccxt/async_support/exir.py +0 -1
- ccxt/async_support/toobit.py +367 -0
- ccxt/base/exchange.py +1 -1
- ccxt/bit24.py +1 -3
- ccxt/exir.py +0 -1
- ccxt/pro/__init__.py +1 -1
- ccxt/toobit.py +367 -0
- {ccxt_ir-4.6.1.dist-info → ccxt_ir-4.7.0.dist-info}/METADATA +14 -5
- {ccxt_ir-4.6.1.dist-info → ccxt_ir-4.7.0.dist-info}/RECORD +17 -14
- {ccxt_ir-4.6.1.dist-info → ccxt_ir-4.7.0.dist-info}/WHEEL +0 -0
- {ccxt_ir-4.6.1.dist-info → ccxt_ir-4.7.0.dist-info}/licenses/LICENSE.txt +0 -0
- {ccxt_ir-4.6.1.dist-info → ccxt_ir-4.7.0.dist-info}/top_level.txt +0 -0
ccxt/__init__.py
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
# ----------------------------------------------------------------------------
|
|
24
24
|
|
|
25
|
-
__version__ = '4.
|
|
25
|
+
__version__ = '4.7.0'
|
|
26
26
|
|
|
27
27
|
# ----------------------------------------------------------------------------
|
|
28
28
|
|
|
@@ -203,6 +203,7 @@ from ccxt.tabdeal import tabdeal # noqa: F4
|
|
|
203
203
|
from ccxt.tetherland import tetherland # noqa: F401
|
|
204
204
|
from ccxt.timex import timex # noqa: F401
|
|
205
205
|
from ccxt.tokocrypto import tokocrypto # noqa: F401
|
|
206
|
+
from ccxt.toobit import toobit # noqa: F401
|
|
206
207
|
from ccxt.tradeogre import tradeogre # noqa: F401
|
|
207
208
|
from ccxt.twox import twox # noqa: F401
|
|
208
209
|
from ccxt.ubitex import ubitex # noqa: F401
|
|
@@ -338,6 +339,7 @@ exchanges = [
|
|
|
338
339
|
'tetherland',
|
|
339
340
|
'timex',
|
|
340
341
|
'tokocrypto',
|
|
342
|
+
'toobit',
|
|
341
343
|
'tradeogre',
|
|
342
344
|
'twox',
|
|
343
345
|
'ubitex',
|
ccxt/abstract/toobit.py
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
from ccxt.base.types import Entry
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class ImplicitAPI:
|
|
5
|
+
public_get_quote_v1_ticker_24hr = publicGetQuoteV1Ticker24hr = Entry('quote/v1/ticker/24hr', 'public', 'GET', {'cost': 1})
|
|
6
|
+
public_get_quote_v1_klines = publicGetQuoteV1Klines = Entry('quote/v1/klines', 'public', 'GET', {'cost': 1})
|
ccxt/async_support/__init__.py
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# -----------------------------------------------------------------------------
|
|
6
6
|
|
|
7
|
-
__version__ = '4.
|
|
7
|
+
__version__ = '4.7.0'
|
|
8
8
|
|
|
9
9
|
# -----------------------------------------------------------------------------
|
|
10
10
|
|
|
@@ -183,6 +183,7 @@ from ccxt.async_support.tabdeal import tabdeal
|
|
|
183
183
|
from ccxt.async_support.tetherland import tetherland # noqa: F401
|
|
184
184
|
from ccxt.async_support.timex import timex # noqa: F401
|
|
185
185
|
from ccxt.async_support.tokocrypto import tokocrypto # noqa: F401
|
|
186
|
+
from ccxt.async_support.toobit import toobit # noqa: F401
|
|
186
187
|
from ccxt.async_support.tradeogre import tradeogre # noqa: F401
|
|
187
188
|
from ccxt.async_support.twox import twox # noqa: F401
|
|
188
189
|
from ccxt.async_support.ubitex import ubitex # noqa: F401
|
|
@@ -318,6 +319,7 @@ exchanges = [
|
|
|
318
319
|
'tetherland',
|
|
319
320
|
'timex',
|
|
320
321
|
'tokocrypto',
|
|
322
|
+
'toobit',
|
|
321
323
|
'tradeogre',
|
|
322
324
|
'twox',
|
|
323
325
|
'ubitex',
|
ccxt/async_support/bit24.py
CHANGED
|
@@ -367,8 +367,6 @@ class bit24(Exchange, ImplicitAPI):
|
|
|
367
367
|
def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
|
|
368
368
|
query = self.omit(params, self.extract_params(path))
|
|
369
369
|
url = self.urls['api'][api] + '/' + self.implode_params(path, params)
|
|
370
|
-
|
|
371
|
-
queryString = self.urlencode(query)
|
|
372
|
-
url += '?' + queryString
|
|
370
|
+
url = url + '?' + self.urlencode(query)
|
|
373
371
|
headers = {'Content-Type': 'application/json'}
|
|
374
372
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
ccxt/async_support/exir.py
CHANGED
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
# PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
|
|
4
|
+
# https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
|
5
|
+
|
|
6
|
+
from ccxt.async_support.base.exchange import Exchange
|
|
7
|
+
from ccxt.abstract.toobit import ImplicitAPI
|
|
8
|
+
from ccxt.base.types import Any, Int, Market, Strings, Ticker, Tickers
|
|
9
|
+
from typing import List
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class toobit(Exchange, ImplicitAPI):
|
|
13
|
+
|
|
14
|
+
def describe(self) -> Any:
|
|
15
|
+
return self.deep_extend(super(toobit, self).describe(), {
|
|
16
|
+
'id': 'toobit',
|
|
17
|
+
'name': 'Toobit',
|
|
18
|
+
'countries': ['KY'], # Cayman Islands
|
|
19
|
+
'rateLimit': 1000,
|
|
20
|
+
'version': '1',
|
|
21
|
+
'certified': False,
|
|
22
|
+
'pro': False,
|
|
23
|
+
'has': {
|
|
24
|
+
'CORS': None,
|
|
25
|
+
'spot': True,
|
|
26
|
+
'margin': False,
|
|
27
|
+
'swap': True,
|
|
28
|
+
'future': False,
|
|
29
|
+
'option': False,
|
|
30
|
+
'addMargin': False,
|
|
31
|
+
'cancelAllOrders': False,
|
|
32
|
+
'cancelOrder': False,
|
|
33
|
+
'cancelOrders': False,
|
|
34
|
+
'createDepositAddress': False,
|
|
35
|
+
'createOrder': False,
|
|
36
|
+
'createStopLimitOrder': False,
|
|
37
|
+
'createStopMarketOrder': False,
|
|
38
|
+
'createStopOrder': False,
|
|
39
|
+
'editOrder': False,
|
|
40
|
+
'fetchBalance': False,
|
|
41
|
+
'fetchBorrowInterest': False,
|
|
42
|
+
'fetchBorrowRateHistories': False,
|
|
43
|
+
'fetchBorrowRateHistory': False,
|
|
44
|
+
'fetchClosedOrders': False,
|
|
45
|
+
'fetchCrossBorrowRate': False,
|
|
46
|
+
'fetchCrossBorrowRates': False,
|
|
47
|
+
'fetchCurrencies': False,
|
|
48
|
+
'fetchDepositAddress': False,
|
|
49
|
+
'fetchDeposits': False,
|
|
50
|
+
'fetchFundingHistory': False,
|
|
51
|
+
'fetchFundingRate': False,
|
|
52
|
+
'fetchFundingRateHistory': False,
|
|
53
|
+
'fetchFundingRates': False,
|
|
54
|
+
'fetchIndexOHLCV': False,
|
|
55
|
+
'fetchIsolatedBorrowRate': False,
|
|
56
|
+
'fetchIsolatedBorrowRates': False,
|
|
57
|
+
'fetchL2OrderBook': False,
|
|
58
|
+
'fetchLedger': False,
|
|
59
|
+
'fetchLedgerEntry': False,
|
|
60
|
+
'fetchLeverageTiers': False,
|
|
61
|
+
'fetchMarkets': True,
|
|
62
|
+
'fetchMarkOHLCV': False,
|
|
63
|
+
'fetchMyTrades': False,
|
|
64
|
+
'fetchOHLCV': True,
|
|
65
|
+
'fetchOpenInterestHistory': False,
|
|
66
|
+
'fetchOpenOrders': False,
|
|
67
|
+
'fetchOrder': False,
|
|
68
|
+
'fetchOrderBook': True,
|
|
69
|
+
'fetchOrders': False,
|
|
70
|
+
'fetchOrderTrades': 'emulated',
|
|
71
|
+
'fetchPositions': False,
|
|
72
|
+
'fetchPremiumIndexOHLCV': False,
|
|
73
|
+
'fetchTicker': True,
|
|
74
|
+
'fetchTickers': True,
|
|
75
|
+
'fetchTime': False,
|
|
76
|
+
'fetchTrades': False,
|
|
77
|
+
'fetchTradingFee': False,
|
|
78
|
+
'fetchTradingFees': False,
|
|
79
|
+
'fetchWithdrawals': False,
|
|
80
|
+
'setLeverage': False,
|
|
81
|
+
'setMarginMode': False,
|
|
82
|
+
'transfer': False,
|
|
83
|
+
'withdraw': False,
|
|
84
|
+
},
|
|
85
|
+
'comment': 'This comment is optional',
|
|
86
|
+
'urls': {
|
|
87
|
+
'logo': 'https://toobit-docs.github.io/apidocs/spot/v1/en/images/logo.svg',
|
|
88
|
+
'api': {
|
|
89
|
+
'public': 'https://api.toobit.com',
|
|
90
|
+
},
|
|
91
|
+
'www': 'https://www.toobit.com/',
|
|
92
|
+
'doc': [
|
|
93
|
+
'https://toobit-docs.github.io/apidocs/spot/v1/en/#change-log',
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
'timeframes': {
|
|
97
|
+
'1m': '1m',
|
|
98
|
+
'3m': '3m',
|
|
99
|
+
'5m': '5m',
|
|
100
|
+
'15m': '15m',
|
|
101
|
+
'30m': '30m',
|
|
102
|
+
'1h': '1h',
|
|
103
|
+
'2h': '2h',
|
|
104
|
+
'4h': '4h',
|
|
105
|
+
'6h': '6h',
|
|
106
|
+
'12h': '12h',
|
|
107
|
+
'1d': '1d',
|
|
108
|
+
'1w': '1w',
|
|
109
|
+
'1M': '1M',
|
|
110
|
+
},
|
|
111
|
+
'api': {
|
|
112
|
+
'public': {
|
|
113
|
+
'get': {
|
|
114
|
+
'quote/v1/ticker/24hr': 1,
|
|
115
|
+
'quote/v1/klines': 1,
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
'fees': {
|
|
120
|
+
'trading': {
|
|
121
|
+
'tierBased': False,
|
|
122
|
+
'percentage': True,
|
|
123
|
+
'maker': self.parse_number('0.001'),
|
|
124
|
+
'taker': self.parse_number('0.001'),
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
async def fetch_markets(self, params={}) -> List[Market]:
|
|
130
|
+
"""
|
|
131
|
+
retrieves data on all markets for toobit
|
|
132
|
+
https://apidocs.toobit.io/#tickers
|
|
133
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
134
|
+
:returns dict[]: an array of objects representing market data
|
|
135
|
+
"""
|
|
136
|
+
response = await self.publicGetQuoteV1Ticker24hr()
|
|
137
|
+
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':
|
|
142
|
+
continue
|
|
143
|
+
market = self.parse_market(response[i])
|
|
144
|
+
result.append(market)
|
|
145
|
+
return result
|
|
146
|
+
|
|
147
|
+
def parse_market(self, market) -> Market:
|
|
148
|
+
# {
|
|
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'
|
|
169
|
+
id = symbol
|
|
170
|
+
base = self.safe_currency_code(baseId)
|
|
171
|
+
quote = self.safe_currency_code(quoteId)
|
|
172
|
+
baseId = baseId.lower()
|
|
173
|
+
quoteId = quoteId.lower()
|
|
174
|
+
return {
|
|
175
|
+
'id': id,
|
|
176
|
+
'symbol': base + '/' + quote,
|
|
177
|
+
'base': base,
|
|
178
|
+
'quote': quote,
|
|
179
|
+
'settle': None,
|
|
180
|
+
'baseId': baseId,
|
|
181
|
+
'quoteId': quoteId,
|
|
182
|
+
'settleId': None,
|
|
183
|
+
'type': 'spot',
|
|
184
|
+
'spot': True,
|
|
185
|
+
'margin': False,
|
|
186
|
+
'swap': False,
|
|
187
|
+
'future': False,
|
|
188
|
+
'option': False,
|
|
189
|
+
'active': True,
|
|
190
|
+
'contract': False,
|
|
191
|
+
'linear': None,
|
|
192
|
+
'inverse': None,
|
|
193
|
+
'contractSize': None,
|
|
194
|
+
'expiry': None,
|
|
195
|
+
'expiryDatetime': None,
|
|
196
|
+
'strike': None,
|
|
197
|
+
'optionType': None,
|
|
198
|
+
'precision': {
|
|
199
|
+
'amount': None,
|
|
200
|
+
'price': None,
|
|
201
|
+
},
|
|
202
|
+
'limits': {
|
|
203
|
+
'leverage': {
|
|
204
|
+
'min': None,
|
|
205
|
+
'max': None,
|
|
206
|
+
},
|
|
207
|
+
'amount': {
|
|
208
|
+
'min': None,
|
|
209
|
+
'max': None,
|
|
210
|
+
},
|
|
211
|
+
'price': {
|
|
212
|
+
'min': None,
|
|
213
|
+
'max': None,
|
|
214
|
+
},
|
|
215
|
+
'cost': {
|
|
216
|
+
'min': None,
|
|
217
|
+
'max': None,
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
'created': None,
|
|
221
|
+
'info': market,
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
|
225
|
+
"""
|
|
226
|
+
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
227
|
+
https://apidocs.toobit.io/#tickers
|
|
228
|
+
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
229
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
230
|
+
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
231
|
+
"""
|
|
232
|
+
await self.load_markets()
|
|
233
|
+
if symbols is not None:
|
|
234
|
+
symbols = self.market_symbols(symbols)
|
|
235
|
+
response = await self.publicGetQuoteV1Ticker24hr()
|
|
236
|
+
result = {}
|
|
237
|
+
for i in range(0, len(response)):
|
|
238
|
+
volume = self.safe_float(response[i], 'v')
|
|
239
|
+
if volume == 0:
|
|
240
|
+
continue
|
|
241
|
+
ticker = self.parse_ticker(response[i])
|
|
242
|
+
symbol = ticker['symbol']
|
|
243
|
+
result[symbol] = ticker
|
|
244
|
+
return self.filter_by_array_tickers(result, 'symbol', symbols)
|
|
245
|
+
|
|
246
|
+
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
247
|
+
"""
|
|
248
|
+
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
|
|
250
|
+
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
251
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
252
|
+
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
253
|
+
"""
|
|
254
|
+
await self.load_markets()
|
|
255
|
+
market = self.market(symbol)
|
|
256
|
+
request = {
|
|
257
|
+
'symbol': market['id'],
|
|
258
|
+
}
|
|
259
|
+
response = await self.publicGetQuoteV1Ticker24hr(request)
|
|
260
|
+
ticker = self.parse_ticker(response[0])
|
|
261
|
+
return ticker
|
|
262
|
+
|
|
263
|
+
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
|
264
|
+
# {
|
|
265
|
+
# t: 1757164008834,
|
|
266
|
+
# s: "BTCUSDT",
|
|
267
|
+
# c: "110895.06",
|
|
268
|
+
# h: "113310.01",
|
|
269
|
+
# l: "110219.01",
|
|
270
|
+
# o: "112951.99",
|
|
271
|
+
# v: "3893.406649",
|
|
272
|
+
# qv: "433374169.27969515",
|
|
273
|
+
# pc: "-2056.93",
|
|
274
|
+
# pcp: "-0.0182"
|
|
275
|
+
# }
|
|
276
|
+
marketType = 'spot'
|
|
277
|
+
symbol = self.safe_value(ticker, 's')
|
|
278
|
+
marketId = symbol
|
|
279
|
+
symbol = self.safe_symbol(marketId, market, None, marketType)
|
|
280
|
+
high = self.safe_float(ticker, 'h')
|
|
281
|
+
low = self.safe_float(ticker, 'l')
|
|
282
|
+
open = self.safe_float(ticker, 'o')
|
|
283
|
+
close = self.safe_float(ticker, 'c')
|
|
284
|
+
last = self.safe_float(ticker, 'c')
|
|
285
|
+
change = self.safe_float(ticker, 'pcp')
|
|
286
|
+
priceChange = self.safe_float(ticker, 'pc')
|
|
287
|
+
baseVolume = self.safe_float(ticker, 'v')
|
|
288
|
+
quoteVolume = self.safe_float(ticker, 'qv')
|
|
289
|
+
datetime = self.safe_string(ticker, 't')
|
|
290
|
+
bid = self.safe_float(ticker, 'b', 0)
|
|
291
|
+
ask = self.safe_float(ticker, 'a', 0)
|
|
292
|
+
return self.safe_ticker({
|
|
293
|
+
'symbol': symbol,
|
|
294
|
+
'timestamp': datetime,
|
|
295
|
+
'datetime': self.parse8601(datetime),
|
|
296
|
+
'high': high,
|
|
297
|
+
'low': low,
|
|
298
|
+
'bid': bid,
|
|
299
|
+
'bidVolume': None,
|
|
300
|
+
'ask': ask,
|
|
301
|
+
'askVolume': None,
|
|
302
|
+
'vwap': None,
|
|
303
|
+
'open': open,
|
|
304
|
+
'close': close,
|
|
305
|
+
'last': last,
|
|
306
|
+
'previousClose': None,
|
|
307
|
+
'change': priceChange,
|
|
308
|
+
'percentage': change,
|
|
309
|
+
'average': None,
|
|
310
|
+
'baseVolume': baseVolume,
|
|
311
|
+
'quoteVolume': quoteVolume,
|
|
312
|
+
'info': ticker,
|
|
313
|
+
}, market)
|
|
314
|
+
|
|
315
|
+
async def fetch_ohlcv(self, symbol: str, timeframe='1h', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
316
|
+
"""
|
|
317
|
+
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
318
|
+
https://apidocs.toobit.io/#chart
|
|
319
|
+
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
320
|
+
:param str timeframe: the length of time each candle represents
|
|
321
|
+
:param int [since]: timestamp in ms of the earliest candle to fetch
|
|
322
|
+
:param int [limit]: the maximum amount of candles to fetch
|
|
323
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
324
|
+
:returns int[][]: A list of candles ordered, open, high, low, close, volume
|
|
325
|
+
"""
|
|
326
|
+
await self.load_markets()
|
|
327
|
+
market = self.market(symbol)
|
|
328
|
+
endTime = Date.now()
|
|
329
|
+
request = {
|
|
330
|
+
'symbol': market['id'],
|
|
331
|
+
'from': (endTime - (24 * 60 * 60 * 1000)),
|
|
332
|
+
'to': endTime,
|
|
333
|
+
'interval': self.safe_string(self.timeframes, timeframe, timeframe),
|
|
334
|
+
}
|
|
335
|
+
if since is not None:
|
|
336
|
+
request['from'] = since
|
|
337
|
+
if timeframe is not None:
|
|
338
|
+
request['interval'] = self.safe_string(self.timeframes, timeframe, timeframe)
|
|
339
|
+
response = await self.publicGetQuoteV1Klines(request)
|
|
340
|
+
ohlcvs = []
|
|
341
|
+
for i in range(0, len(response)):
|
|
342
|
+
candle = response[i]
|
|
343
|
+
ts = self.safe_timestamp(candle, 0)
|
|
344
|
+
open = self.safe_float(candle, 1)
|
|
345
|
+
high = self.safe_float(candle, 2)
|
|
346
|
+
low = self.safe_float(candle, 3)
|
|
347
|
+
close = self.safe_float(candle, 4)
|
|
348
|
+
volume = self.safe_float(candle, 5)
|
|
349
|
+
ohlcvs.append([
|
|
350
|
+
ts,
|
|
351
|
+
open,
|
|
352
|
+
high,
|
|
353
|
+
low,
|
|
354
|
+
close,
|
|
355
|
+
volume,
|
|
356
|
+
])
|
|
357
|
+
return self.parse_ohlcvs(ohlcvs, market, timeframe, since, limit)
|
|
358
|
+
|
|
359
|
+
def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
|
|
360
|
+
query = self.omit(params, self.extract_params(path))
|
|
361
|
+
url = self.urls['api']['public'] + '/' + path
|
|
362
|
+
if path == 'quote/v1/ticker/24hr':
|
|
363
|
+
url = url + '?' + self.urlencode(query)
|
|
364
|
+
if path == 'quote/v1/klines':
|
|
365
|
+
url = url + '?' + self.urlencode(query)
|
|
366
|
+
headers = {'Content-Type': 'application/json'}
|
|
367
|
+
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
ccxt/base/exchange.py
CHANGED
ccxt/bit24.py
CHANGED
|
@@ -367,8 +367,6 @@ class bit24(Exchange, ImplicitAPI):
|
|
|
367
367
|
def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
|
|
368
368
|
query = self.omit(params, self.extract_params(path))
|
|
369
369
|
url = self.urls['api'][api] + '/' + self.implode_params(path, params)
|
|
370
|
-
|
|
371
|
-
queryString = self.urlencode(query)
|
|
372
|
-
url += '?' + queryString
|
|
370
|
+
url = url + '?' + self.urlencode(query)
|
|
373
371
|
headers = {'Content-Type': 'application/json'}
|
|
374
372
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
ccxt/exir.py
CHANGED
ccxt/pro/__init__.py
CHANGED
ccxt/toobit.py
ADDED
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
# PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
|
|
4
|
+
# https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
|
5
|
+
|
|
6
|
+
from ccxt.base.exchange import Exchange
|
|
7
|
+
from ccxt.abstract.toobit import ImplicitAPI
|
|
8
|
+
from ccxt.base.types import Any, Int, Market, Strings, Ticker, Tickers
|
|
9
|
+
from typing import List
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class toobit(Exchange, ImplicitAPI):
|
|
13
|
+
|
|
14
|
+
def describe(self) -> Any:
|
|
15
|
+
return self.deep_extend(super(toobit, self).describe(), {
|
|
16
|
+
'id': 'toobit',
|
|
17
|
+
'name': 'Toobit',
|
|
18
|
+
'countries': ['KY'], # Cayman Islands
|
|
19
|
+
'rateLimit': 1000,
|
|
20
|
+
'version': '1',
|
|
21
|
+
'certified': False,
|
|
22
|
+
'pro': False,
|
|
23
|
+
'has': {
|
|
24
|
+
'CORS': None,
|
|
25
|
+
'spot': True,
|
|
26
|
+
'margin': False,
|
|
27
|
+
'swap': True,
|
|
28
|
+
'future': False,
|
|
29
|
+
'option': False,
|
|
30
|
+
'addMargin': False,
|
|
31
|
+
'cancelAllOrders': False,
|
|
32
|
+
'cancelOrder': False,
|
|
33
|
+
'cancelOrders': False,
|
|
34
|
+
'createDepositAddress': False,
|
|
35
|
+
'createOrder': False,
|
|
36
|
+
'createStopLimitOrder': False,
|
|
37
|
+
'createStopMarketOrder': False,
|
|
38
|
+
'createStopOrder': False,
|
|
39
|
+
'editOrder': False,
|
|
40
|
+
'fetchBalance': False,
|
|
41
|
+
'fetchBorrowInterest': False,
|
|
42
|
+
'fetchBorrowRateHistories': False,
|
|
43
|
+
'fetchBorrowRateHistory': False,
|
|
44
|
+
'fetchClosedOrders': False,
|
|
45
|
+
'fetchCrossBorrowRate': False,
|
|
46
|
+
'fetchCrossBorrowRates': False,
|
|
47
|
+
'fetchCurrencies': False,
|
|
48
|
+
'fetchDepositAddress': False,
|
|
49
|
+
'fetchDeposits': False,
|
|
50
|
+
'fetchFundingHistory': False,
|
|
51
|
+
'fetchFundingRate': False,
|
|
52
|
+
'fetchFundingRateHistory': False,
|
|
53
|
+
'fetchFundingRates': False,
|
|
54
|
+
'fetchIndexOHLCV': False,
|
|
55
|
+
'fetchIsolatedBorrowRate': False,
|
|
56
|
+
'fetchIsolatedBorrowRates': False,
|
|
57
|
+
'fetchL2OrderBook': False,
|
|
58
|
+
'fetchLedger': False,
|
|
59
|
+
'fetchLedgerEntry': False,
|
|
60
|
+
'fetchLeverageTiers': False,
|
|
61
|
+
'fetchMarkets': True,
|
|
62
|
+
'fetchMarkOHLCV': False,
|
|
63
|
+
'fetchMyTrades': False,
|
|
64
|
+
'fetchOHLCV': True,
|
|
65
|
+
'fetchOpenInterestHistory': False,
|
|
66
|
+
'fetchOpenOrders': False,
|
|
67
|
+
'fetchOrder': False,
|
|
68
|
+
'fetchOrderBook': True,
|
|
69
|
+
'fetchOrders': False,
|
|
70
|
+
'fetchOrderTrades': 'emulated',
|
|
71
|
+
'fetchPositions': False,
|
|
72
|
+
'fetchPremiumIndexOHLCV': False,
|
|
73
|
+
'fetchTicker': True,
|
|
74
|
+
'fetchTickers': True,
|
|
75
|
+
'fetchTime': False,
|
|
76
|
+
'fetchTrades': False,
|
|
77
|
+
'fetchTradingFee': False,
|
|
78
|
+
'fetchTradingFees': False,
|
|
79
|
+
'fetchWithdrawals': False,
|
|
80
|
+
'setLeverage': False,
|
|
81
|
+
'setMarginMode': False,
|
|
82
|
+
'transfer': False,
|
|
83
|
+
'withdraw': False,
|
|
84
|
+
},
|
|
85
|
+
'comment': 'This comment is optional',
|
|
86
|
+
'urls': {
|
|
87
|
+
'logo': 'https://toobit-docs.github.io/apidocs/spot/v1/en/images/logo.svg',
|
|
88
|
+
'api': {
|
|
89
|
+
'public': 'https://api.toobit.com',
|
|
90
|
+
},
|
|
91
|
+
'www': 'https://www.toobit.com/',
|
|
92
|
+
'doc': [
|
|
93
|
+
'https://toobit-docs.github.io/apidocs/spot/v1/en/#change-log',
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
'timeframes': {
|
|
97
|
+
'1m': '1m',
|
|
98
|
+
'3m': '3m',
|
|
99
|
+
'5m': '5m',
|
|
100
|
+
'15m': '15m',
|
|
101
|
+
'30m': '30m',
|
|
102
|
+
'1h': '1h',
|
|
103
|
+
'2h': '2h',
|
|
104
|
+
'4h': '4h',
|
|
105
|
+
'6h': '6h',
|
|
106
|
+
'12h': '12h',
|
|
107
|
+
'1d': '1d',
|
|
108
|
+
'1w': '1w',
|
|
109
|
+
'1M': '1M',
|
|
110
|
+
},
|
|
111
|
+
'api': {
|
|
112
|
+
'public': {
|
|
113
|
+
'get': {
|
|
114
|
+
'quote/v1/ticker/24hr': 1,
|
|
115
|
+
'quote/v1/klines': 1,
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
'fees': {
|
|
120
|
+
'trading': {
|
|
121
|
+
'tierBased': False,
|
|
122
|
+
'percentage': True,
|
|
123
|
+
'maker': self.parse_number('0.001'),
|
|
124
|
+
'taker': self.parse_number('0.001'),
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
def fetch_markets(self, params={}) -> List[Market]:
|
|
130
|
+
"""
|
|
131
|
+
retrieves data on all markets for toobit
|
|
132
|
+
https://apidocs.toobit.io/#tickers
|
|
133
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
134
|
+
:returns dict[]: an array of objects representing market data
|
|
135
|
+
"""
|
|
136
|
+
response = self.publicGetQuoteV1Ticker24hr()
|
|
137
|
+
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':
|
|
142
|
+
continue
|
|
143
|
+
market = self.parse_market(response[i])
|
|
144
|
+
result.append(market)
|
|
145
|
+
return result
|
|
146
|
+
|
|
147
|
+
def parse_market(self, market) -> Market:
|
|
148
|
+
# {
|
|
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'
|
|
169
|
+
id = symbol
|
|
170
|
+
base = self.safe_currency_code(baseId)
|
|
171
|
+
quote = self.safe_currency_code(quoteId)
|
|
172
|
+
baseId = baseId.lower()
|
|
173
|
+
quoteId = quoteId.lower()
|
|
174
|
+
return {
|
|
175
|
+
'id': id,
|
|
176
|
+
'symbol': base + '/' + quote,
|
|
177
|
+
'base': base,
|
|
178
|
+
'quote': quote,
|
|
179
|
+
'settle': None,
|
|
180
|
+
'baseId': baseId,
|
|
181
|
+
'quoteId': quoteId,
|
|
182
|
+
'settleId': None,
|
|
183
|
+
'type': 'spot',
|
|
184
|
+
'spot': True,
|
|
185
|
+
'margin': False,
|
|
186
|
+
'swap': False,
|
|
187
|
+
'future': False,
|
|
188
|
+
'option': False,
|
|
189
|
+
'active': True,
|
|
190
|
+
'contract': False,
|
|
191
|
+
'linear': None,
|
|
192
|
+
'inverse': None,
|
|
193
|
+
'contractSize': None,
|
|
194
|
+
'expiry': None,
|
|
195
|
+
'expiryDatetime': None,
|
|
196
|
+
'strike': None,
|
|
197
|
+
'optionType': None,
|
|
198
|
+
'precision': {
|
|
199
|
+
'amount': None,
|
|
200
|
+
'price': None,
|
|
201
|
+
},
|
|
202
|
+
'limits': {
|
|
203
|
+
'leverage': {
|
|
204
|
+
'min': None,
|
|
205
|
+
'max': None,
|
|
206
|
+
},
|
|
207
|
+
'amount': {
|
|
208
|
+
'min': None,
|
|
209
|
+
'max': None,
|
|
210
|
+
},
|
|
211
|
+
'price': {
|
|
212
|
+
'min': None,
|
|
213
|
+
'max': None,
|
|
214
|
+
},
|
|
215
|
+
'cost': {
|
|
216
|
+
'min': None,
|
|
217
|
+
'max': None,
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
'created': None,
|
|
221
|
+
'info': market,
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
|
225
|
+
"""
|
|
226
|
+
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
227
|
+
https://apidocs.toobit.io/#tickers
|
|
228
|
+
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
229
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
230
|
+
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
231
|
+
"""
|
|
232
|
+
self.load_markets()
|
|
233
|
+
if symbols is not None:
|
|
234
|
+
symbols = self.market_symbols(symbols)
|
|
235
|
+
response = self.publicGetQuoteV1Ticker24hr()
|
|
236
|
+
result = {}
|
|
237
|
+
for i in range(0, len(response)):
|
|
238
|
+
volume = self.safe_float(response[i], 'v')
|
|
239
|
+
if volume == 0:
|
|
240
|
+
continue
|
|
241
|
+
ticker = self.parse_ticker(response[i])
|
|
242
|
+
symbol = ticker['symbol']
|
|
243
|
+
result[symbol] = ticker
|
|
244
|
+
return self.filter_by_array_tickers(result, 'symbol', symbols)
|
|
245
|
+
|
|
246
|
+
def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
247
|
+
"""
|
|
248
|
+
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
|
|
250
|
+
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
251
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
252
|
+
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
253
|
+
"""
|
|
254
|
+
self.load_markets()
|
|
255
|
+
market = self.market(symbol)
|
|
256
|
+
request = {
|
|
257
|
+
'symbol': market['id'],
|
|
258
|
+
}
|
|
259
|
+
response = self.publicGetQuoteV1Ticker24hr(request)
|
|
260
|
+
ticker = self.parse_ticker(response[0])
|
|
261
|
+
return ticker
|
|
262
|
+
|
|
263
|
+
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
|
264
|
+
# {
|
|
265
|
+
# t: 1757164008834,
|
|
266
|
+
# s: "BTCUSDT",
|
|
267
|
+
# c: "110895.06",
|
|
268
|
+
# h: "113310.01",
|
|
269
|
+
# l: "110219.01",
|
|
270
|
+
# o: "112951.99",
|
|
271
|
+
# v: "3893.406649",
|
|
272
|
+
# qv: "433374169.27969515",
|
|
273
|
+
# pc: "-2056.93",
|
|
274
|
+
# pcp: "-0.0182"
|
|
275
|
+
# }
|
|
276
|
+
marketType = 'spot'
|
|
277
|
+
symbol = self.safe_value(ticker, 's')
|
|
278
|
+
marketId = symbol
|
|
279
|
+
symbol = self.safe_symbol(marketId, market, None, marketType)
|
|
280
|
+
high = self.safe_float(ticker, 'h')
|
|
281
|
+
low = self.safe_float(ticker, 'l')
|
|
282
|
+
open = self.safe_float(ticker, 'o')
|
|
283
|
+
close = self.safe_float(ticker, 'c')
|
|
284
|
+
last = self.safe_float(ticker, 'c')
|
|
285
|
+
change = self.safe_float(ticker, 'pcp')
|
|
286
|
+
priceChange = self.safe_float(ticker, 'pc')
|
|
287
|
+
baseVolume = self.safe_float(ticker, 'v')
|
|
288
|
+
quoteVolume = self.safe_float(ticker, 'qv')
|
|
289
|
+
datetime = self.safe_string(ticker, 't')
|
|
290
|
+
bid = self.safe_float(ticker, 'b', 0)
|
|
291
|
+
ask = self.safe_float(ticker, 'a', 0)
|
|
292
|
+
return self.safe_ticker({
|
|
293
|
+
'symbol': symbol,
|
|
294
|
+
'timestamp': datetime,
|
|
295
|
+
'datetime': self.parse8601(datetime),
|
|
296
|
+
'high': high,
|
|
297
|
+
'low': low,
|
|
298
|
+
'bid': bid,
|
|
299
|
+
'bidVolume': None,
|
|
300
|
+
'ask': ask,
|
|
301
|
+
'askVolume': None,
|
|
302
|
+
'vwap': None,
|
|
303
|
+
'open': open,
|
|
304
|
+
'close': close,
|
|
305
|
+
'last': last,
|
|
306
|
+
'previousClose': None,
|
|
307
|
+
'change': priceChange,
|
|
308
|
+
'percentage': change,
|
|
309
|
+
'average': None,
|
|
310
|
+
'baseVolume': baseVolume,
|
|
311
|
+
'quoteVolume': quoteVolume,
|
|
312
|
+
'info': ticker,
|
|
313
|
+
}, market)
|
|
314
|
+
|
|
315
|
+
def fetch_ohlcv(self, symbol: str, timeframe='1h', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
316
|
+
"""
|
|
317
|
+
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
318
|
+
https://apidocs.toobit.io/#chart
|
|
319
|
+
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
320
|
+
:param str timeframe: the length of time each candle represents
|
|
321
|
+
:param int [since]: timestamp in ms of the earliest candle to fetch
|
|
322
|
+
:param int [limit]: the maximum amount of candles to fetch
|
|
323
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
324
|
+
:returns int[][]: A list of candles ordered, open, high, low, close, volume
|
|
325
|
+
"""
|
|
326
|
+
self.load_markets()
|
|
327
|
+
market = self.market(symbol)
|
|
328
|
+
endTime = Date.now()
|
|
329
|
+
request = {
|
|
330
|
+
'symbol': market['id'],
|
|
331
|
+
'from': (endTime - (24 * 60 * 60 * 1000)),
|
|
332
|
+
'to': endTime,
|
|
333
|
+
'interval': self.safe_string(self.timeframes, timeframe, timeframe),
|
|
334
|
+
}
|
|
335
|
+
if since is not None:
|
|
336
|
+
request['from'] = since
|
|
337
|
+
if timeframe is not None:
|
|
338
|
+
request['interval'] = self.safe_string(self.timeframes, timeframe, timeframe)
|
|
339
|
+
response = self.publicGetQuoteV1Klines(request)
|
|
340
|
+
ohlcvs = []
|
|
341
|
+
for i in range(0, len(response)):
|
|
342
|
+
candle = response[i]
|
|
343
|
+
ts = self.safe_timestamp(candle, 0)
|
|
344
|
+
open = self.safe_float(candle, 1)
|
|
345
|
+
high = self.safe_float(candle, 2)
|
|
346
|
+
low = self.safe_float(candle, 3)
|
|
347
|
+
close = self.safe_float(candle, 4)
|
|
348
|
+
volume = self.safe_float(candle, 5)
|
|
349
|
+
ohlcvs.append([
|
|
350
|
+
ts,
|
|
351
|
+
open,
|
|
352
|
+
high,
|
|
353
|
+
low,
|
|
354
|
+
close,
|
|
355
|
+
volume,
|
|
356
|
+
])
|
|
357
|
+
return self.parse_ohlcvs(ohlcvs, market, timeframe, since, limit)
|
|
358
|
+
|
|
359
|
+
def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
|
|
360
|
+
query = self.omit(params, self.extract_params(path))
|
|
361
|
+
url = self.urls['api']['public'] + '/' + path
|
|
362
|
+
if path == 'quote/v1/ticker/24hr':
|
|
363
|
+
url = url + '?' + self.urlencode(query)
|
|
364
|
+
if path == 'quote/v1/klines':
|
|
365
|
+
url = url + '?' + self.urlencode(query)
|
|
366
|
+
headers = {'Content-Type': 'application/json'}
|
|
367
|
+
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ccxt-ir
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.7.0
|
|
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
|
|
@@ -62,7 +62,7 @@ Dynamic: summary
|
|
|
62
62
|
|
|
63
63
|
# CCXT – CryptoCurrency eXchange Trading Library
|
|
64
64
|
|
|
65
|
-
[](https://www.npmjs.com/package/ccxt) [](https://npmjs.com/package/ccxt) [](https://pypi.python.org/pypi/ccxt) [](https://www.nuget.org/packages/ccxt) [](https://godoc.org/github.com/ccxt/ccxt/go/v4) [](https://discord.gg/ccxt) [](https://www.npmjs.com/package/ccxt) [](https://npmjs.com/package/ccxt) [](https://pypi.python.org/pypi/ccxt) [](https://www.nuget.org/packages/ccxt) [](https://godoc.org/github.com/ccxt/ccxt/go/v4) [](https://discord.gg/ccxt) [](https://github.com/ccxt/ccxt/wiki/Exchange-Markets) [](https://x.com/ccxt_official)
|
|
66
66
|
|
|
67
67
|
A `JavaScript` / `Python` / `PHP` / `C#` / `Go` library for cryptocurrency trading and e-commerce with support for many bitcoin/ether/altcoin exchange markets and merchant APIs.
|
|
68
68
|
|
|
@@ -304,13 +304,22 @@ 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
|
-
|
|
308
|
-
*
|
|
307
|
+
<<<<<<< HEAD
|
|
308
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.7.0/dist/ccxt.browser.min.js
|
|
309
|
+
* unpkg: https://unpkg.com/ccxt@4.7.0/dist/ccxt.browser.min.js
|
|
310
|
+
=======
|
|
311
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.7.0/dist/ccxt.browser.min.js
|
|
312
|
+
* unpkg: https://unpkg.com/ccxt@4.7.0/dist/ccxt.browser.min.js
|
|
313
|
+
>>>>>>> master
|
|
309
314
|
|
|
310
315
|
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
316
|
|
|
312
317
|
```HTML
|
|
313
|
-
|
|
318
|
+
<<<<<<< HEAD
|
|
319
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.7.0/dist/ccxt.browser.min.js"></script>
|
|
320
|
+
=======
|
|
321
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.7.0/dist/ccxt.browser.min.js"></script>
|
|
322
|
+
>>>>>>> master
|
|
314
323
|
console.log (ccxt.exchanges) // print all available exchanges
|
|
315
324
|
```
|
|
316
325
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
ccxt/__init__.py,sha256=
|
|
1
|
+
ccxt/__init__.py,sha256=yVtxyPSvSaS0SlouXjUX5fs5vK0407bX6UMZlP9UOmA,19115
|
|
2
2
|
ccxt/abantether.py,sha256=like8inDYyPpE3d3_93KulDhwmYwdOqZxRvoTC1-Nd0,12008
|
|
3
3
|
ccxt/afratether.py,sha256=NeSpFf0zWIM5ejGgn5G9hz1-sefAv_ae7j9241WcdDk,10801
|
|
4
4
|
ccxt/alpaca.py,sha256=oO0YJHxo5_1iYyGVRMbxfGyPahqzuMlE7LZ3TMYgPGo,80694
|
|
@@ -13,7 +13,7 @@ ccxt/binancecoinm.py,sha256=MCMEAmIk1WTxrda8ZuCLdMRokKTIcZioc5kC8KiWzoE,1817
|
|
|
13
13
|
ccxt/binanceus.py,sha256=oI9FAJrJmapOdqf3mnXUULBq8tGK-VfJ2GnDYqIwXsw,9550
|
|
14
14
|
ccxt/binanceusdm.py,sha256=YcuFO1VXQy7ELcN9e7tlJFKby2mOZVBqvmp924clu8U,2701
|
|
15
15
|
ccxt/bingx.py,sha256=9DYikizv3bqTIVUBtNy8uOZ55mpD_Ko2pYGYTH7qAas,278454
|
|
16
|
-
ccxt/bit24.py,sha256=
|
|
16
|
+
ccxt/bit24.py,sha256=xl0kxCw1otDuMKfm6pPbHYCz_liSf1GpQaZqfXzW-wg,13769
|
|
17
17
|
ccxt/bit2c.py,sha256=Yyxj7tK5kRxRJPIvsQwboWi6HwPfUOAMDr1uTrEfhyQ,41190
|
|
18
18
|
ccxt/bitbank.py,sha256=K1rsciFMTmfEjDdab97E9IIxfIcMSHoa9YGIepqj2pY,47781
|
|
19
19
|
ccxt/bitbns.py,sha256=5GqPAa7MEbUA2BcDzlus-GGW2rjUliqeWTg4P5gm0us,50931
|
|
@@ -63,7 +63,7 @@ ccxt/digifinex.py,sha256=qmYcsm1XTAltKQeywgR0xnnbVVdTVg5Dyu9QHbFiG1I,174815
|
|
|
63
63
|
ccxt/ellipx.py,sha256=fith62iZEIpyx0drFdQfLFxADGsum6M-NJAFrYU8b54,85916
|
|
64
64
|
ccxt/eterex.py,sha256=rbKwogBAVBZh7owkNkaY5xur6Y4foab940ezbpFE6uA,10665
|
|
65
65
|
ccxt/excoino.py,sha256=UzRwsJnYDSq6RqbWLme0WkRdmlWDOBDWYrRpa6YyUs8,15836
|
|
66
|
-
ccxt/exir.py,sha256=
|
|
66
|
+
ccxt/exir.py,sha256=NIp5EDp0g7Hix_gUwzpM1yW67tQ0KR2dDPdp_j1A0No,14758
|
|
67
67
|
ccxt/exmo.py,sha256=rnpx2B__KkLF1TCWj_XDEsVnNbtOgJvmF6Kg1AOAS3Q,121802
|
|
68
68
|
ccxt/exnovin.py,sha256=JVPKmxEHOLmGj2eeCpkKYLPLERHwu3jRbUT1PcAchMo,13035
|
|
69
69
|
ccxt/farhadexchange.py,sha256=Gn6Q_3lb0KjpUGTFHuRtrrYEJOVG78N6JQmBsF6LYbo,9883
|
|
@@ -118,6 +118,7 @@ ccxt/tabdeal.py,sha256=OWR4aV5Ek3cgIk3zjXy1l04hdbLxJZxd-3icm6prAvA,14358
|
|
|
118
118
|
ccxt/tetherland.py,sha256=W5RTlW37Kgt6rhgWT4x3Gdn_PIRDjuOhhI9k5HVmTvo,13884
|
|
119
119
|
ccxt/timex.py,sha256=MiLB4GyIpEOHweaQuzIrBJyuevw3jsVvitsaK7iQ6RE,76698
|
|
120
120
|
ccxt/tokocrypto.py,sha256=-q95F-FvV-dgatuZzfJNnojtNxuyyyzmTpHLyOpu8Vw,126328
|
|
121
|
+
ccxt/toobit.py,sha256=hFs4roZGL7KfxtFNfcHgkrZVBli7llmm_ksseK1p9ds,13737
|
|
121
122
|
ccxt/tradeogre.py,sha256=Q8CSHf8QGzb37jMFhaBmc_IZ1zga0eRXFVbjhmJnyFY,33712
|
|
122
123
|
ccxt/twox.py,sha256=V1PDZqRWEyV5wuclQHtfvhlJzSF7pyHns9q2JRoJaBM,12064
|
|
123
124
|
ccxt/ubitex.py,sha256=Z9ThriWhEmlZwBgb7WmtIFUC_EfTa17GTyj_0SNumZA,16466
|
|
@@ -252,6 +253,7 @@ ccxt/abstract/tabdeal.py,sha256=9wPBn90yiZrWpS9lWHAbE-mvOj4rdn_0ImYwPaRN5js,418
|
|
|
252
253
|
ccxt/abstract/tetherland.py,sha256=oeq5VUYhHg8h9IaD7bDQlTCgZfHY80WAYnO-F-esl18,174
|
|
253
254
|
ccxt/abstract/timex.py,sha256=9b0CDsyjm8XrYZmhUMB1dTHUmyE9YrsZTCZrz1UTt6E,5875
|
|
254
255
|
ccxt/abstract/tokocrypto.py,sha256=OF5UW4ch_Lf3-avOPgd4AD4CVrOUDUfUpSMCmxhNHlk,4094
|
|
256
|
+
ccxt/abstract/toobit.py,sha256=7Qeqn5TJ8GKY5Jug5ynKwktqhBSZYhc07Ht6qJcPU4Q,295
|
|
255
257
|
ccxt/abstract/tradeogre.py,sha256=bDouHP2c50F6Ins5EU2-3Jw10PsIG2KK3bcKv8y7678,1676
|
|
256
258
|
ccxt/abstract/twox.py,sha256=RHI1yDeSsDxNgV3YX82DZCg1p36V-6fDOcmTXaMZK6w,166
|
|
257
259
|
ccxt/abstract/ubitex.py,sha256=3bN3gGo86vcA1MPvlJTOcSkf8Ql-q0gbvXJCqhB_a-Q,416
|
|
@@ -266,7 +268,7 @@ ccxt/abstract/xt.py,sha256=n3eX1cItL_J0j8prOViV-C_tRwIFv_GO8JTvZZw8jv8,27837
|
|
|
266
268
|
ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
|
|
267
269
|
ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
|
|
268
270
|
ccxt/abstract/zonda.py,sha256=X-hCW0SdX3YKZWixDyW-O2211M58Rno8kKJ6quY7rw4,7183
|
|
269
|
-
ccxt/async_support/__init__.py,sha256=
|
|
271
|
+
ccxt/async_support/__init__.py,sha256=MQWGRDhbI9AhAbvJTV1RJcdXBXA4Vvf_jdak3NAcz_Q,19178
|
|
270
272
|
ccxt/async_support/abantether.py,sha256=uLWn1i6gE8dtZr9BXmXfyT0Y-MzYYZU1DDeXGjFngAM,12064
|
|
271
273
|
ccxt/async_support/afratether.py,sha256=JC9ro3QrE8vE4YUm51xqwciSQhHfTPb98Mw1r6cJyvg,10869
|
|
272
274
|
ccxt/async_support/alpaca.py,sha256=oFpSnAjX-faRgTN4d5rwHa08WRaCkwiAbHGZ7JBe6Ww,81140
|
|
@@ -281,7 +283,7 @@ ccxt/async_support/binancecoinm.py,sha256=GS5wgqgwna0HcRW6f6hHjzPq5wYHAn_OArdNan
|
|
|
281
283
|
ccxt/async_support/binanceus.py,sha256=T9ab3Y4N822a_0agKM1mAkbOX3ChmSq_ymAsY2ZmxlI,9564
|
|
282
284
|
ccxt/async_support/binanceusdm.py,sha256=sdx3CYlOma49ss3XxRnZZpqkhwUa0cAz_tfP_64LOwU,2739
|
|
283
285
|
ccxt/async_support/bingx.py,sha256=gFXYiuHiNfh6BEghlr6MhmoI-1wTMGrEUSgvBIhE7CU,279832
|
|
284
|
-
ccxt/async_support/bit24.py,sha256=
|
|
286
|
+
ccxt/async_support/bit24.py,sha256=qsUKq4EXY06KGc8qiJnQPGNMA0dMfcPLoIAX99K6oXU,13825
|
|
285
287
|
ccxt/async_support/bit2c.py,sha256=CYx7PSZNdg3JyN08DTYRtLYPxsz8gOoYxpgN02h1LjI,41402
|
|
286
288
|
ccxt/async_support/bitbank.py,sha256=UHXNZ9GG4v-3-GHVxoFSYfNaLHSkPptfRlC0MiDBGcc,48041
|
|
287
289
|
ccxt/async_support/bitbns.py,sha256=L6wAlhQu7ydl8R1kph7_K6QvnMAKuvjWQd_4w7d_uzY,51185
|
|
@@ -331,7 +333,7 @@ ccxt/async_support/digifinex.py,sha256=8_STpgUHR4WFBYFgUJD7TJbH8ZOMOiqY5UZvklO2Y
|
|
|
331
333
|
ccxt/async_support/ellipx.py,sha256=RTBLSiZGXRWtcvhvACTvhjYxudyvJx5QNfVJqqosqdQ,86224
|
|
332
334
|
ccxt/async_support/eterex.py,sha256=Xs0IJgDVvJ5Es9y8gnisi9HqePYerx8zCg1h3_Y6kqM,10727
|
|
333
335
|
ccxt/async_support/excoino.py,sha256=DniOpS8pwmG2e6AZVr23W6GaH9vx5k0gujjDLK70BBs,15928
|
|
334
|
-
ccxt/async_support/exir.py,sha256=
|
|
336
|
+
ccxt/async_support/exir.py,sha256=GaftMPPxGxvStLgVo0F0G3lrSKKm2VeRE6teQTB3B9Q,14856
|
|
335
337
|
ccxt/async_support/exmo.py,sha256=D0WSU6GB1Pi2zcjR5zq-WGia6JubKAL__i_nZM38eKA,122525
|
|
336
338
|
ccxt/async_support/exnovin.py,sha256=bKBK1SBer2hPf_p_qImAvV4JI9S64LD4eYEH_h0Sg-M,13109
|
|
337
339
|
ccxt/async_support/farhadexchange.py,sha256=0B8UNuNthwDgiyFUdZPAF_e7kpuTD9Benz7FEr8pszk,9939
|
|
@@ -386,6 +388,7 @@ ccxt/async_support/tabdeal.py,sha256=_kDTQeB8pQSZKYOiBc0IoZBuIsOkwvhhhTNN8m4A0G8
|
|
|
386
388
|
ccxt/async_support/tetherland.py,sha256=k3zpZ7j6sFJm0Rb8f5tRVz46yG8Zyc5mHwKBm2cUYfE,13940
|
|
387
389
|
ccxt/async_support/timex.py,sha256=SMMswaincdUzCI8waSpCnCEMPG5zEWe6UtcE4KteJaI,77060
|
|
388
390
|
ccxt/async_support/tokocrypto.py,sha256=noI2aWGN2rH71WDomTl2GeysjsNbuMbLNHKMTNvJYOs,126690
|
|
391
|
+
ccxt/async_support/toobit.py,sha256=hDiHHwk_7zV0yH70zuzVnQb11fPVpafBuurU5ir5aO4,13817
|
|
389
392
|
ccxt/async_support/tradeogre.py,sha256=gTmxvLXyRX8Ye8OTIrpKLso9QltZ4ZOrwxHklHrvhv8,33954
|
|
390
393
|
ccxt/async_support/twox.py,sha256=FEYBvRZxl-mtN3RgN_s4GzlMG1f71nNH3KRqh1s2ioU,12120
|
|
391
394
|
ccxt/async_support/ubitex.py,sha256=lpLvSKKOftf7FjGRfIcJkY1sCWprmJQB-SvEvJIv_FY,16564
|
|
@@ -401,7 +404,7 @@ ccxt/async_support/yobit.py,sha256=FBI7ajvxprTYUqX8zosd7-LntDft8vIEjRTHng5ry8Y,5
|
|
|
401
404
|
ccxt/async_support/zaif.py,sha256=mh0PETLMTJV509zhT7jukddg6S7YhvwhCT7zqxC6YLA,31364
|
|
402
405
|
ccxt/async_support/zonda.py,sha256=7hmHotE5JBd8034d1ZbX3oIeWIpQFrQb8aK-dP3Btx0,85327
|
|
403
406
|
ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
|
|
404
|
-
ccxt/async_support/base/exchange.py,sha256=
|
|
407
|
+
ccxt/async_support/base/exchange.py,sha256=8da6qNt4N5ZwjLyy7T5XZaiwghbexHX3lPti67Mgzis,121268
|
|
405
408
|
ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
|
|
406
409
|
ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
|
|
407
410
|
ccxt/async_support/base/ws/cache.py,sha256=xf2VOtfUwloxSlIQ39M1RGZHWQzyS9IGhB5NX6cDcAc,8370
|
|
@@ -413,10 +416,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GhnGUt78pJ-AYL_Dq9produGjmB
|
|
|
413
416
|
ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
|
|
414
417
|
ccxt/base/decimal_to_precision.py,sha256=3XI30u9YudHbTA438397u5rkdlXa3atxwZEfUus3C4k,6803
|
|
415
418
|
ccxt/base/errors.py,sha256=OGhWNvNtRlJOzFx-n1x3ZjTnaPpfWH0Vc0xACS-MeDw,5012
|
|
416
|
-
ccxt/base/exchange.py,sha256=
|
|
419
|
+
ccxt/base/exchange.py,sha256=hCVro64mcaWt9mwkjXkaaOYB8lP6xiiL1e_WMP-Afog,334337
|
|
417
420
|
ccxt/base/precise.py,sha256=koce64Yrp6vFbGijJtUt-QQ6XhJgeGTCksZ871FPp_A,8886
|
|
418
421
|
ccxt/base/types.py,sha256=Gvbogh9i7pPH7Z18xesYeDPribqqwq8uKpOv-YODFBs,11505
|
|
419
|
-
ccxt/pro/__init__.py,sha256=
|
|
422
|
+
ccxt/pro/__init__.py,sha256=y9lSdKFSFamdzxT17RIkWpyQsokPiwGndJp0NkAw2lA,11463
|
|
420
423
|
ccxt/pro/alpaca.py,sha256=REAEZxdv2pY8xjxBGCBca3nPKpIdleVqr-IVpuVmADg,27637
|
|
421
424
|
ccxt/pro/apex.py,sha256=FLBaLN2FESIh9gqHPVwf0IkkIHpxGHHUcFwgBGBEkrA,42018
|
|
422
425
|
ccxt/pro/ascendex.py,sha256=P0DnIMIA-BIGxyoEQBLGtjH-whRhkPbhe8gU2s5V238,37526
|
|
@@ -739,8 +742,8 @@ ccxt/test/tests_async.py,sha256=D5ZDYYW635E2LFEhJt7HfIjbFVCQl3WSBEFnR-QEQzM,9549
|
|
|
739
742
|
ccxt/test/tests_helpers.py,sha256=egM69A2ZFYeVF5hwC1Qt-c5DOeClY5bv4jowmceeFV8,9736
|
|
740
743
|
ccxt/test/tests_init.py,sha256=qM0-Gb0h0p6CANWTkyYZI7wl-iYOcrPur7aj_OKh7m0,1212
|
|
741
744
|
ccxt/test/tests_sync.py,sha256=Rr72cGmoKqbUIIEJJAGh2_QhBc4rIZlBxVtGCQVd4BE,94440
|
|
742
|
-
ccxt_ir-4.
|
|
743
|
-
ccxt_ir-4.
|
|
744
|
-
ccxt_ir-4.
|
|
745
|
-
ccxt_ir-4.
|
|
746
|
-
ccxt_ir-4.
|
|
745
|
+
ccxt_ir-4.7.0.dist-info/licenses/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
|
|
746
|
+
ccxt_ir-4.7.0.dist-info/METADATA,sha256=bv8Q5fUtCJ4edgRGK73c7jFCXfXgBgFGkoYaE1D19m0,139254
|
|
747
|
+
ccxt_ir-4.7.0.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
|
|
748
|
+
ccxt_ir-4.7.0.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
|
|
749
|
+
ccxt_ir-4.7.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|