gate-io-api 0.0.84__py3-none-any.whl → 0.0.86__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of gate-io-api might be problematic. Click here for more details.
- gate/ccxt/__init__.py +1 -1
- gate/ccxt/async_support/__init__.py +1 -1
- gate/ccxt/async_support/base/exchange.py +10 -7
- gate/ccxt/async_support/gate.py +24 -10
- gate/ccxt/base/exchange.py +88 -14
- gate/ccxt/gate.py +24 -10
- gate/ccxt/pro/__init__.py +1 -1
- {gate_io_api-0.0.84.dist-info → gate_io_api-0.0.86.dist-info}/METADATA +1 -1
- {gate_io_api-0.0.84.dist-info → gate_io_api-0.0.86.dist-info}/RECORD +10 -10
- {gate_io_api-0.0.84.dist-info → gate_io_api-0.0.86.dist-info}/WHEEL +0 -0
gate/ccxt/__init__.py
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# -----------------------------------------------------------------------------
|
|
4
4
|
|
|
5
|
-
__version__ = '4.5.
|
|
5
|
+
__version__ = '4.5.4'
|
|
6
6
|
|
|
7
7
|
# -----------------------------------------------------------------------------
|
|
8
8
|
|
|
@@ -708,6 +708,9 @@ class Exchange(BaseExchange):
|
|
|
708
708
|
async def un_watch_positions(self, symbols: Strings = None, params={}):
|
|
709
709
|
raise NotSupported(self.id + ' unWatchPositions() is not supported yet')
|
|
710
710
|
|
|
711
|
+
async def un_watch_ticker(self, symbol: str, params={}):
|
|
712
|
+
raise NotSupported(self.id + ' unWatchTicker() is not supported yet')
|
|
713
|
+
|
|
711
714
|
async def fetch_deposit_addresses(self, codes: Strings = None, params={}):
|
|
712
715
|
raise NotSupported(self.id + ' fetchDepositAddresses() is not supported yet')
|
|
713
716
|
|
|
@@ -868,19 +871,19 @@ class Exchange(BaseExchange):
|
|
|
868
871
|
async def repay_margin(self, code: str, amount: float, symbol: Str = None, params={}):
|
|
869
872
|
raise NotSupported(self.id + ' repayMargin is deprecated, please use repayCrossMargin or repayIsolatedMargin instead')
|
|
870
873
|
|
|
871
|
-
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}):
|
|
874
|
+
async def fetch_ohlcv(self, symbol: str, timeframe: str = '1m', since: Int = None, limit: Int = None, params={}):
|
|
872
875
|
message = ''
|
|
873
876
|
if self.has['fetchTrades']:
|
|
874
877
|
message = '. If you want to build OHLCV candles from trade executions data, visit https://github.com/ccxt/ccxt/tree/master/examples/ and see "build-ohlcv-bars" file'
|
|
875
878
|
raise NotSupported(self.id + ' fetchOHLCV() is not supported yet' + message)
|
|
876
879
|
|
|
877
|
-
async def fetch_ohlcv_ws(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}):
|
|
880
|
+
async def fetch_ohlcv_ws(self, symbol: str, timeframe: str = '1m', since: Int = None, limit: Int = None, params={}):
|
|
878
881
|
message = ''
|
|
879
882
|
if self.has['fetchTradesWs']:
|
|
880
883
|
message = '. If you want to build OHLCV candles from trade executions data, visit https://github.com/ccxt/ccxt/tree/master/examples/ and see "build-ohlcv-bars" file'
|
|
881
884
|
raise NotSupported(self.id + ' fetchOHLCVWs() is not supported yet. Try using fetchOHLCV instead.' + message)
|
|
882
885
|
|
|
883
|
-
async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}):
|
|
886
|
+
async def watch_ohlcv(self, symbol: str, timeframe: str = '1m', since: Int = None, limit: Int = None, params={}):
|
|
884
887
|
raise NotSupported(self.id + ' watchOHLCV() is not supported yet')
|
|
885
888
|
|
|
886
889
|
async def fetch_web_endpoint(self, method, endpointMethod, returnAsJson, startRegex=None, endRegex=None):
|
|
@@ -1850,7 +1853,7 @@ class Exchange(BaseExchange):
|
|
|
1850
1853
|
else:
|
|
1851
1854
|
raise NotSupported(self.id + ' fetchFundingInterval() is not supported yet')
|
|
1852
1855
|
|
|
1853
|
-
async def fetch_mark_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}):
|
|
1856
|
+
async def fetch_mark_ohlcv(self, symbol: str, timeframe: str = '1m', since: Int = None, limit: Int = None, params={}):
|
|
1854
1857
|
"""
|
|
1855
1858
|
fetches historical mark price candlestick data containing the open, high, low, and close price of a market
|
|
1856
1859
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
@@ -1868,7 +1871,7 @@ class Exchange(BaseExchange):
|
|
|
1868
1871
|
else:
|
|
1869
1872
|
raise NotSupported(self.id + ' fetchMarkOHLCV() is not supported yet')
|
|
1870
1873
|
|
|
1871
|
-
async def fetch_index_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}):
|
|
1874
|
+
async def fetch_index_ohlcv(self, symbol: str, timeframe: str = '1m', since: Int = None, limit: Int = None, params={}):
|
|
1872
1875
|
"""
|
|
1873
1876
|
fetches historical index price candlestick data containing the open, high, low, and close price of a market
|
|
1874
1877
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
@@ -1886,7 +1889,7 @@ class Exchange(BaseExchange):
|
|
|
1886
1889
|
else:
|
|
1887
1890
|
raise NotSupported(self.id + ' fetchIndexOHLCV() is not supported yet')
|
|
1888
1891
|
|
|
1889
|
-
async def fetch_premium_index_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}):
|
|
1892
|
+
async def fetch_premium_index_ohlcv(self, symbol: str, timeframe: str = '1m', since: Int = None, limit: Int = None, params={}):
|
|
1890
1893
|
"""
|
|
1891
1894
|
fetches historical premium index price candlestick data containing the open, high, low, and close price of a market
|
|
1892
1895
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
gate/ccxt/async_support/gate.py
CHANGED
|
@@ -72,14 +72,24 @@ class gate(Exchange, ImplicitAPI):
|
|
|
72
72
|
},
|
|
73
73
|
'test': {
|
|
74
74
|
'public': {
|
|
75
|
-
'futures': 'https://
|
|
76
|
-
'delivery': 'https://
|
|
77
|
-
'options': 'https://
|
|
75
|
+
'futures': 'https://api-testnet.gateapi.io/api/v4',
|
|
76
|
+
'delivery': 'https://api-testnet.gateapi.io/api/v4',
|
|
77
|
+
'options': 'https://api-testnet.gateapi.io/api/v4',
|
|
78
|
+
'spot': 'https://api-testnet.gateapi.io/api/v4',
|
|
79
|
+
'wallet': 'https://api-testnet.gateapi.io/api/v4',
|
|
80
|
+
'margin': 'https://api-testnet.gateapi.io/api/v4',
|
|
81
|
+
'sub_accounts': 'https://api-testnet.gateapi.io/api/v4',
|
|
82
|
+
'account': 'https://api-testnet.gateapi.io/api/v4',
|
|
78
83
|
},
|
|
79
84
|
'private': {
|
|
80
|
-
'futures': 'https://
|
|
81
|
-
'delivery': 'https://
|
|
82
|
-
'options': 'https://
|
|
85
|
+
'futures': 'https://api-testnet.gateapi.io/api/v4',
|
|
86
|
+
'delivery': 'https://api-testnet.gateapi.io/api/v4',
|
|
87
|
+
'options': 'https://api-testnet.gateapi.io/api/v4',
|
|
88
|
+
'spot': 'https://api-testnet.gateapi.io/api/v4',
|
|
89
|
+
'wallet': 'https://api-testnet.gateapi.io/api/v4',
|
|
90
|
+
'margin': 'https://api-testnet.gateapi.io/api/v4',
|
|
91
|
+
'sub_accounts': 'https://api-testnet.gateapi.io/api/v4',
|
|
92
|
+
'account': 'https://api-testnet.gateapi.io/api/v4',
|
|
83
93
|
},
|
|
84
94
|
},
|
|
85
95
|
'referral': {
|
|
@@ -1238,15 +1248,15 @@ class gate(Exchange, ImplicitAPI):
|
|
|
1238
1248
|
if self.check_required_credentials(False):
|
|
1239
1249
|
await self.load_unified_status()
|
|
1240
1250
|
rawPromises = []
|
|
1241
|
-
sandboxMode = self.safe_bool(self.options, 'sandboxMode', False)
|
|
1242
1251
|
fetchMarketsOptions = self.safe_dict(self.options, 'fetchMarkets')
|
|
1243
1252
|
types = self.safe_list(fetchMarketsOptions, 'types', ['spot', 'swap', 'future', 'option'])
|
|
1244
1253
|
for i in range(0, len(types)):
|
|
1245
1254
|
marketType = types[i]
|
|
1246
1255
|
if marketType == 'spot':
|
|
1247
|
-
if not sandboxMode:
|
|
1248
|
-
|
|
1249
|
-
|
|
1256
|
+
# if not sandboxMode:
|
|
1257
|
+
# gate doesn't have a sandbox for spot markets
|
|
1258
|
+
rawPromises.append(self.fetch_spot_markets(params))
|
|
1259
|
+
# }
|
|
1250
1260
|
elif marketType == 'swap':
|
|
1251
1261
|
rawPromises.append(self.fetch_swap_markets(params))
|
|
1252
1262
|
elif marketType == 'future':
|
|
@@ -1372,6 +1382,8 @@ class gate(Exchange, ImplicitAPI):
|
|
|
1372
1382
|
async def fetch_swap_markets(self, params={}):
|
|
1373
1383
|
result = []
|
|
1374
1384
|
swapSettlementCurrencies = self.get_settlement_currencies('swap', 'fetchMarkets')
|
|
1385
|
+
if self.options['sandboxMode']:
|
|
1386
|
+
swapSettlementCurrencies = ['usdt'] # gate sandbox only has usdt-margined swaps
|
|
1375
1387
|
for c in range(0, len(swapSettlementCurrencies)):
|
|
1376
1388
|
settleId = swapSettlementCurrencies[c]
|
|
1377
1389
|
request: dict = {
|
|
@@ -1384,6 +1396,8 @@ class gate(Exchange, ImplicitAPI):
|
|
|
1384
1396
|
return result
|
|
1385
1397
|
|
|
1386
1398
|
async def fetch_future_markets(self, params={}):
|
|
1399
|
+
if self.options['sandboxMode']:
|
|
1400
|
+
return [] # right now sandbox does not have inverse swaps
|
|
1387
1401
|
result = []
|
|
1388
1402
|
futureSettlementCurrencies = self.get_settlement_currencies('future', 'fetchMarkets')
|
|
1389
1403
|
for c in range(0, len(futureSettlementCurrencies)):
|
gate/ccxt/base/exchange.py
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# -----------------------------------------------------------------------------
|
|
6
6
|
|
|
7
|
-
__version__ = '4.5.
|
|
7
|
+
__version__ = '4.5.4'
|
|
8
8
|
|
|
9
9
|
# -----------------------------------------------------------------------------
|
|
10
10
|
|
|
@@ -1309,6 +1309,10 @@ class Exchange(object):
|
|
|
1309
1309
|
elif algoType == 'ES':
|
|
1310
1310
|
rawSignature = Exchange.ecdsa(token, secret, 'p256', algorithm)
|
|
1311
1311
|
signature = Exchange.base16_to_binary(rawSignature['r'].rjust(64, "0") + rawSignature['s'].rjust(64, "0"))
|
|
1312
|
+
elif algoType == 'Ed':
|
|
1313
|
+
signature = Exchange.eddsa(token.encode('utf-8'), secret, 'ed25519', True)
|
|
1314
|
+
# here the signature is already a urlencoded base64-encoded string
|
|
1315
|
+
return token + '.' + signature
|
|
1312
1316
|
else:
|
|
1313
1317
|
signature = Exchange.hmac(Exchange.encode(token), secret, algos[algorithm], 'binary')
|
|
1314
1318
|
return token + '.' + Exchange.urlencode_base64(signature)
|
|
@@ -1442,12 +1446,22 @@ class Exchange(object):
|
|
|
1442
1446
|
'v': v,
|
|
1443
1447
|
}
|
|
1444
1448
|
|
|
1449
|
+
|
|
1450
|
+
@staticmethod
|
|
1451
|
+
def binary_to_urlencoded_base64(data: bytes) -> str:
|
|
1452
|
+
encoded = base64.urlsafe_b64encode(data).decode("utf-8")
|
|
1453
|
+
return encoded.rstrip("=")
|
|
1454
|
+
|
|
1445
1455
|
@staticmethod
|
|
1446
|
-
def eddsa(request, secret, curve='ed25519'):
|
|
1456
|
+
def eddsa(request, secret, curve='ed25519', url_encode=False):
|
|
1447
1457
|
if isinstance(secret, str):
|
|
1448
1458
|
secret = Exchange.encode(secret)
|
|
1449
1459
|
private_key = ed25519.Ed25519PrivateKey.from_private_bytes(secret) if len(secret) == 32 else load_pem_private_key(secret, None)
|
|
1450
|
-
|
|
1460
|
+
signature = private_key.sign(request)
|
|
1461
|
+
if url_encode:
|
|
1462
|
+
return Exchange.binary_to_urlencoded_base64(signature)
|
|
1463
|
+
|
|
1464
|
+
return Exchange.binary_to_base64(signature)
|
|
1451
1465
|
|
|
1452
1466
|
@staticmethod
|
|
1453
1467
|
def axolotl(request, secret, curve='ed25519'):
|
|
@@ -2641,6 +2655,9 @@ class Exchange(object):
|
|
|
2641
2655
|
def un_watch_positions(self, symbols: Strings = None, params={}):
|
|
2642
2656
|
raise NotSupported(self.id + ' unWatchPositions() is not supported yet')
|
|
2643
2657
|
|
|
2658
|
+
def un_watch_ticker(self, symbol: str, params={}):
|
|
2659
|
+
raise NotSupported(self.id + ' unWatchTicker() is not supported yet')
|
|
2660
|
+
|
|
2644
2661
|
def fetch_deposit_addresses(self, codes: Strings = None, params={}):
|
|
2645
2662
|
raise NotSupported(self.id + ' fetchDepositAddresses() is not supported yet')
|
|
2646
2663
|
|
|
@@ -2862,9 +2879,9 @@ class Exchange(object):
|
|
|
2862
2879
|
def parse_to_numeric(self, number):
|
|
2863
2880
|
stringVersion = self.number_to_string(number) # self will convert 1.0 and 1 to "1" and 1.1 to "1.1"
|
|
2864
2881
|
# keep self in mind:
|
|
2865
|
-
# in JS:
|
|
2882
|
+
# in JS: 1 == 1.0 is True
|
|
2866
2883
|
# in Python: 1 == 1.0 is True
|
|
2867
|
-
# in PHP
|
|
2884
|
+
# in PHP: 1 == 1.0 is True, but 1 == 1.0 is False.
|
|
2868
2885
|
if stringVersion.find('.') >= 0:
|
|
2869
2886
|
return float(stringVersion)
|
|
2870
2887
|
return int(stringVersion)
|
|
@@ -3310,6 +3327,24 @@ class Exchange(object):
|
|
|
3310
3327
|
self.codes = list(currenciesSortedByCode.keys())
|
|
3311
3328
|
return self.markets
|
|
3312
3329
|
|
|
3330
|
+
def set_markets_from_exchange(self, sourceExchange):
|
|
3331
|
+
# Validate that both exchanges are of the same type
|
|
3332
|
+
if self.id != sourceExchange.id:
|
|
3333
|
+
raise ArgumentsRequired(self.id + ' shareMarkets() can only share markets with exchanges of the same type(got ' + sourceExchange['id'] + ')')
|
|
3334
|
+
# Validate that source exchange has loaded markets
|
|
3335
|
+
if not sourceExchange.markets:
|
|
3336
|
+
raise ExchangeError('setMarketsFromExchange() source exchange must have loaded markets first. Can call by using loadMarkets function')
|
|
3337
|
+
# Set all market-related data
|
|
3338
|
+
self.markets = sourceExchange.markets
|
|
3339
|
+
self.markets_by_id = sourceExchange.markets_by_id
|
|
3340
|
+
self.symbols = sourceExchange.symbols
|
|
3341
|
+
self.ids = sourceExchange.ids
|
|
3342
|
+
self.currencies = sourceExchange.currencies
|
|
3343
|
+
self.baseCurrencies = sourceExchange.baseCurrencies
|
|
3344
|
+
self.quoteCurrencies = sourceExchange.quoteCurrencies
|
|
3345
|
+
self.codes = sourceExchange.codes
|
|
3346
|
+
return self
|
|
3347
|
+
|
|
3313
3348
|
def get_describe_for_extended_ws_exchange(self, currentRestInstance: Any, parentRestInstance: Any, wsBaseDescribe: dict):
|
|
3314
3349
|
extendedRestDescribe = self.deep_extend(parentRestInstance.describe(), currentRestInstance.describe())
|
|
3315
3350
|
superWithRestDescribe = self.deep_extend(extendedRestDescribe, wsBaseDescribe)
|
|
@@ -3948,19 +3983,19 @@ class Exchange(object):
|
|
|
3948
3983
|
def repay_margin(self, code: str, amount: float, symbol: Str = None, params={}):
|
|
3949
3984
|
raise NotSupported(self.id + ' repayMargin is deprecated, please use repayCrossMargin or repayIsolatedMargin instead')
|
|
3950
3985
|
|
|
3951
|
-
def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}):
|
|
3986
|
+
def fetch_ohlcv(self, symbol: str, timeframe: str = '1m', since: Int = None, limit: Int = None, params={}):
|
|
3952
3987
|
message = ''
|
|
3953
3988
|
if self.has['fetchTrades']:
|
|
3954
3989
|
message = '. If you want to build OHLCV candles from trade executions data, visit https://github.com/ccxt/ccxt/tree/master/examples/ and see "build-ohlcv-bars" file'
|
|
3955
3990
|
raise NotSupported(self.id + ' fetchOHLCV() is not supported yet' + message)
|
|
3956
3991
|
|
|
3957
|
-
def fetch_ohlcv_ws(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}):
|
|
3992
|
+
def fetch_ohlcv_ws(self, symbol: str, timeframe: str = '1m', since: Int = None, limit: Int = None, params={}):
|
|
3958
3993
|
message = ''
|
|
3959
3994
|
if self.has['fetchTradesWs']:
|
|
3960
3995
|
message = '. If you want to build OHLCV candles from trade executions data, visit https://github.com/ccxt/ccxt/tree/master/examples/ and see "build-ohlcv-bars" file'
|
|
3961
3996
|
raise NotSupported(self.id + ' fetchOHLCVWs() is not supported yet. Try using fetchOHLCV instead.' + message)
|
|
3962
3997
|
|
|
3963
|
-
def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}):
|
|
3998
|
+
def watch_ohlcv(self, symbol: str, timeframe: str = '1m', since: Int = None, limit: Int = None, params={}):
|
|
3964
3999
|
raise NotSupported(self.id + ' watchOHLCV() is not supported yet')
|
|
3965
4000
|
|
|
3966
4001
|
def convert_trading_view_to_ohlcv(self, ohlcvs: List[List[float]], timestamp='t', open='o', high='h', low='l', close='c', volume='v', ms=False):
|
|
@@ -4372,16 +4407,27 @@ class Exchange(object):
|
|
|
4372
4407
|
result.append(account)
|
|
4373
4408
|
return result
|
|
4374
4409
|
|
|
4375
|
-
def
|
|
4410
|
+
def parse_trades_helper(self, isWs: bool, trades: List[Any], market: Market = None, since: Int = None, limit: Int = None, params={}):
|
|
4376
4411
|
trades = self.to_array(trades)
|
|
4377
4412
|
result = []
|
|
4378
4413
|
for i in range(0, len(trades)):
|
|
4379
|
-
|
|
4414
|
+
parsed = None
|
|
4415
|
+
if isWs:
|
|
4416
|
+
parsed = self.parse_ws_trade(trades[i], market)
|
|
4417
|
+
else:
|
|
4418
|
+
parsed = self.parse_trade(trades[i], market)
|
|
4419
|
+
trade = self.extend(parsed, params)
|
|
4380
4420
|
result.append(trade)
|
|
4381
4421
|
result = self.sort_by_2(result, 'timestamp', 'id')
|
|
4382
4422
|
symbol = market['symbol'] if (market is not None) else None
|
|
4383
4423
|
return self.filter_by_symbol_since_limit(result, symbol, since, limit)
|
|
4384
4424
|
|
|
4425
|
+
def parse_trades(self, trades: List[Any], market: Market = None, since: Int = None, limit: Int = None, params={}):
|
|
4426
|
+
return self.parse_trades_helper(False, trades, market, since, limit, params)
|
|
4427
|
+
|
|
4428
|
+
def parse_ws_trades(self, trades: List[Any], market: Market = None, since: Int = None, limit: Int = None, params={}):
|
|
4429
|
+
return self.parse_trades_helper(True, trades, market, since, limit, params)
|
|
4430
|
+
|
|
4385
4431
|
def parse_transactions(self, transactions: List[Any], currency: Currency = None, since: Int = None, limit: Int = None, params={}):
|
|
4386
4432
|
transactions = self.to_array(transactions)
|
|
4387
4433
|
result = []
|
|
@@ -4763,6 +4809,11 @@ class Exchange(object):
|
|
|
4763
4809
|
return market
|
|
4764
4810
|
return result
|
|
4765
4811
|
|
|
4812
|
+
def market_or_null(self, symbol: str):
|
|
4813
|
+
if symbol is None:
|
|
4814
|
+
return None
|
|
4815
|
+
return self.market(symbol)
|
|
4816
|
+
|
|
4766
4817
|
def check_required_credentials(self, error=True):
|
|
4767
4818
|
"""
|
|
4768
4819
|
@ignore
|
|
@@ -6048,6 +6099,29 @@ class Exchange(object):
|
|
|
6048
6099
|
symbol = None if (market is None) else market['symbol']
|
|
6049
6100
|
return self.filter_by_symbol_since_limit(sorted, symbol, since, limit)
|
|
6050
6101
|
|
|
6102
|
+
def handle_trigger_prices_and_params(self, symbol, params, omitParams=True):
|
|
6103
|
+
#
|
|
6104
|
+
triggerPrice = self.safe_string_2(params, 'triggerPrice', 'stopPrice')
|
|
6105
|
+
triggerPriceStr: Str = None
|
|
6106
|
+
stopLossPrice = self.safe_string(params, 'stopLossPrice')
|
|
6107
|
+
stopLossPriceStr: Str = None
|
|
6108
|
+
takeProfitPrice = self.safe_string(params, 'takeProfitPrice')
|
|
6109
|
+
takeProfitPriceStr: Str = None
|
|
6110
|
+
#
|
|
6111
|
+
if triggerPrice is not None:
|
|
6112
|
+
if omitParams:
|
|
6113
|
+
params = self.omit(params, ['triggerPrice', 'stopPrice'])
|
|
6114
|
+
triggerPriceStr = self.price_to_precision(symbol, float(triggerPrice))
|
|
6115
|
+
if stopLossPrice is not None:
|
|
6116
|
+
if omitParams:
|
|
6117
|
+
params = self.omit(params, 'stopLossPrice')
|
|
6118
|
+
stopLossPriceStr = self.price_to_precision(symbol, float(stopLossPrice))
|
|
6119
|
+
if takeProfitPrice is not None:
|
|
6120
|
+
if omitParams:
|
|
6121
|
+
params = self.omit(params, 'takeProfitPrice')
|
|
6122
|
+
takeProfitPriceStr = self.price_to_precision(symbol, float(takeProfitPrice))
|
|
6123
|
+
return [triggerPriceStr, stopLossPriceStr, takeProfitPriceStr, params]
|
|
6124
|
+
|
|
6051
6125
|
def handle_trigger_direction_and_params(self, params, exchangeSpecificKey: Str = None, allowEmpty: Bool = False):
|
|
6052
6126
|
"""
|
|
6053
6127
|
@ignore
|
|
@@ -6201,7 +6275,7 @@ class Exchange(object):
|
|
|
6201
6275
|
else:
|
|
6202
6276
|
raise NotSupported(self.id + ' fetchFundingInterval() is not supported yet')
|
|
6203
6277
|
|
|
6204
|
-
def fetch_mark_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}):
|
|
6278
|
+
def fetch_mark_ohlcv(self, symbol: str, timeframe: str = '1m', since: Int = None, limit: Int = None, params={}):
|
|
6205
6279
|
"""
|
|
6206
6280
|
fetches historical mark price candlestick data containing the open, high, low, and close price of a market
|
|
6207
6281
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
@@ -6219,7 +6293,7 @@ class Exchange(object):
|
|
|
6219
6293
|
else:
|
|
6220
6294
|
raise NotSupported(self.id + ' fetchMarkOHLCV() is not supported yet')
|
|
6221
6295
|
|
|
6222
|
-
def fetch_index_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}):
|
|
6296
|
+
def fetch_index_ohlcv(self, symbol: str, timeframe: str = '1m', since: Int = None, limit: Int = None, params={}):
|
|
6223
6297
|
"""
|
|
6224
6298
|
fetches historical index price candlestick data containing the open, high, low, and close price of a market
|
|
6225
6299
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
@@ -6237,7 +6311,7 @@ class Exchange(object):
|
|
|
6237
6311
|
else:
|
|
6238
6312
|
raise NotSupported(self.id + ' fetchIndexOHLCV() is not supported yet')
|
|
6239
6313
|
|
|
6240
|
-
def fetch_premium_index_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}):
|
|
6314
|
+
def fetch_premium_index_ohlcv(self, symbol: str, timeframe: str = '1m', since: Int = None, limit: Int = None, params={}):
|
|
6241
6315
|
"""
|
|
6242
6316
|
fetches historical premium index price candlestick data containing the open, high, low, and close price of a market
|
|
6243
6317
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
@@ -7036,7 +7110,7 @@ class Exchange(object):
|
|
|
7036
7110
|
clients = list(self.clients.values())
|
|
7037
7111
|
for i in range(0, len(clients)):
|
|
7038
7112
|
client = clients[i]
|
|
7039
|
-
futures =
|
|
7113
|
+
futures = client.futures
|
|
7040
7114
|
if (futures is not None) and ('fetchPositionsSnapshot' in futures):
|
|
7041
7115
|
del futures['fetchPositionsSnapshot']
|
|
7042
7116
|
elif topic == 'ticker' and (self.tickers is not None):
|
gate/ccxt/gate.py
CHANGED
|
@@ -71,14 +71,24 @@ class gate(Exchange, ImplicitAPI):
|
|
|
71
71
|
},
|
|
72
72
|
'test': {
|
|
73
73
|
'public': {
|
|
74
|
-
'futures': 'https://
|
|
75
|
-
'delivery': 'https://
|
|
76
|
-
'options': 'https://
|
|
74
|
+
'futures': 'https://api-testnet.gateapi.io/api/v4',
|
|
75
|
+
'delivery': 'https://api-testnet.gateapi.io/api/v4',
|
|
76
|
+
'options': 'https://api-testnet.gateapi.io/api/v4',
|
|
77
|
+
'spot': 'https://api-testnet.gateapi.io/api/v4',
|
|
78
|
+
'wallet': 'https://api-testnet.gateapi.io/api/v4',
|
|
79
|
+
'margin': 'https://api-testnet.gateapi.io/api/v4',
|
|
80
|
+
'sub_accounts': 'https://api-testnet.gateapi.io/api/v4',
|
|
81
|
+
'account': 'https://api-testnet.gateapi.io/api/v4',
|
|
77
82
|
},
|
|
78
83
|
'private': {
|
|
79
|
-
'futures': 'https://
|
|
80
|
-
'delivery': 'https://
|
|
81
|
-
'options': 'https://
|
|
84
|
+
'futures': 'https://api-testnet.gateapi.io/api/v4',
|
|
85
|
+
'delivery': 'https://api-testnet.gateapi.io/api/v4',
|
|
86
|
+
'options': 'https://api-testnet.gateapi.io/api/v4',
|
|
87
|
+
'spot': 'https://api-testnet.gateapi.io/api/v4',
|
|
88
|
+
'wallet': 'https://api-testnet.gateapi.io/api/v4',
|
|
89
|
+
'margin': 'https://api-testnet.gateapi.io/api/v4',
|
|
90
|
+
'sub_accounts': 'https://api-testnet.gateapi.io/api/v4',
|
|
91
|
+
'account': 'https://api-testnet.gateapi.io/api/v4',
|
|
82
92
|
},
|
|
83
93
|
},
|
|
84
94
|
'referral': {
|
|
@@ -1237,15 +1247,15 @@ class gate(Exchange, ImplicitAPI):
|
|
|
1237
1247
|
if self.check_required_credentials(False):
|
|
1238
1248
|
self.load_unified_status()
|
|
1239
1249
|
rawPromises = []
|
|
1240
|
-
sandboxMode = self.safe_bool(self.options, 'sandboxMode', False)
|
|
1241
1250
|
fetchMarketsOptions = self.safe_dict(self.options, 'fetchMarkets')
|
|
1242
1251
|
types = self.safe_list(fetchMarketsOptions, 'types', ['spot', 'swap', 'future', 'option'])
|
|
1243
1252
|
for i in range(0, len(types)):
|
|
1244
1253
|
marketType = types[i]
|
|
1245
1254
|
if marketType == 'spot':
|
|
1246
|
-
if not sandboxMode:
|
|
1247
|
-
|
|
1248
|
-
|
|
1255
|
+
# if not sandboxMode:
|
|
1256
|
+
# gate doesn't have a sandbox for spot markets
|
|
1257
|
+
rawPromises.append(self.fetch_spot_markets(params))
|
|
1258
|
+
# }
|
|
1249
1259
|
elif marketType == 'swap':
|
|
1250
1260
|
rawPromises.append(self.fetch_swap_markets(params))
|
|
1251
1261
|
elif marketType == 'future':
|
|
@@ -1371,6 +1381,8 @@ class gate(Exchange, ImplicitAPI):
|
|
|
1371
1381
|
def fetch_swap_markets(self, params={}):
|
|
1372
1382
|
result = []
|
|
1373
1383
|
swapSettlementCurrencies = self.get_settlement_currencies('swap', 'fetchMarkets')
|
|
1384
|
+
if self.options['sandboxMode']:
|
|
1385
|
+
swapSettlementCurrencies = ['usdt'] # gate sandbox only has usdt-margined swaps
|
|
1374
1386
|
for c in range(0, len(swapSettlementCurrencies)):
|
|
1375
1387
|
settleId = swapSettlementCurrencies[c]
|
|
1376
1388
|
request: dict = {
|
|
@@ -1383,6 +1395,8 @@ class gate(Exchange, ImplicitAPI):
|
|
|
1383
1395
|
return result
|
|
1384
1396
|
|
|
1385
1397
|
def fetch_future_markets(self, params={}):
|
|
1398
|
+
if self.options['sandboxMode']:
|
|
1399
|
+
return [] # right now sandbox does not have inverse swaps
|
|
1386
1400
|
result = []
|
|
1387
1401
|
futureSettlementCurrencies = self.get_settlement_currencies('future', 'fetchMarkets')
|
|
1388
1402
|
for c in range(0, len(futureSettlementCurrencies)):
|
gate/ccxt/pro/__init__.py
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
gate/__init__.py,sha256=rmRavmagjlyk7Z5zGWWJiY8tfYIPsk04hRzC4SYJOzA,222
|
|
2
|
-
gate/ccxt/__init__.py,sha256=
|
|
3
|
-
gate/ccxt/gate.py,sha256=
|
|
2
|
+
gate/ccxt/__init__.py,sha256=i3CZmpHc7MyEMUCc7MAmDc_pBJlNJCUi_x1fBJTW-PM,6126
|
|
3
|
+
gate/ccxt/gate.py,sha256=zCZJMYkxUE3qsy2q8Mo--ketScdWr7cmMji8hLduaj8,354225
|
|
4
4
|
gate/ccxt/abstract/gate.py,sha256=MrRMycFEpZKJ6yC7qi0p_qcwZtU9WJi5bBbVllskGoA,45044
|
|
5
|
-
gate/ccxt/async_support/__init__.py,sha256=
|
|
6
|
-
gate/ccxt/async_support/gate.py,sha256=
|
|
5
|
+
gate/ccxt/async_support/__init__.py,sha256=PwMxJHb_0srPtajXR1qR2ykJurEZYeycFSV07Cot1Eg,4859
|
|
6
|
+
gate/ccxt/async_support/gate.py,sha256=JkMRmZsHy5HesfqJUjJBqWlAydRsuJxJBLoPv2uwUPQ,356190
|
|
7
7
|
gate/ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
|
|
8
|
-
gate/ccxt/async_support/base/exchange.py,sha256=
|
|
8
|
+
gate/ccxt/async_support/base/exchange.py,sha256=yg4s0ITgw7YAAbfTHxBzRQo2cZtJj7BCvaUgMiUuvnw,121450
|
|
9
9
|
gate/ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
|
|
10
10
|
gate/ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
|
|
11
11
|
gate/ccxt/async_support/base/ws/cache.py,sha256=xf2VOtfUwloxSlIQ39M1RGZHWQzyS9IGhB5NX6cDcAc,8370
|
|
@@ -17,10 +17,10 @@ gate/ccxt/async_support/base/ws/order_book_side.py,sha256=GhnGUt78pJ-AYL_Dq9prod
|
|
|
17
17
|
gate/ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
|
|
18
18
|
gate/ccxt/base/decimal_to_precision.py,sha256=3XI30u9YudHbTA438397u5rkdlXa3atxwZEfUus3C4k,6803
|
|
19
19
|
gate/ccxt/base/errors.py,sha256=OGhWNvNtRlJOzFx-n1x3ZjTnaPpfWH0Vc0xACS-MeDw,5012
|
|
20
|
-
gate/ccxt/base/exchange.py,sha256
|
|
20
|
+
gate/ccxt/base/exchange.py,sha256=-Kn1sp6UDgjrpACqsX-mYpp-e3amK3UoMFSCai7exkM,337938
|
|
21
21
|
gate/ccxt/base/precise.py,sha256=koce64Yrp6vFbGijJtUt-QQ6XhJgeGTCksZ871FPp_A,8886
|
|
22
22
|
gate/ccxt/base/types.py,sha256=Gvbogh9i7pPH7Z18xesYeDPribqqwq8uKpOv-YODFBs,11505
|
|
23
|
-
gate/ccxt/pro/__init__.py,sha256=
|
|
23
|
+
gate/ccxt/pro/__init__.py,sha256=zBEzY7j6U6HBke9SVEgGNrQOoSRkmkL0839vvneyUbI,4173
|
|
24
24
|
gate/ccxt/pro/gate.py,sha256=Pl64TJO43NcLrqDGs2oU16bPfFqIjOHllJTkpGMuErI,89805
|
|
25
25
|
gate/ccxt/static_dependencies/README.md,sha256=3TCvhhn09_Cqf9BDDpao1V7EfKHDpQ6k9oWRsLFixpU,18
|
|
26
26
|
gate/ccxt/static_dependencies/__init__.py,sha256=tzFje8cloqmiIE6kola3EaYC0SnD1izWnri69hzHsSw,168
|
|
@@ -281,6 +281,6 @@ gate/ccxt/static_dependencies/toolz/curried/exceptions.py,sha256=gKFOHDIayAWnX2u
|
|
|
281
281
|
gate/ccxt/static_dependencies/toolz/curried/operator.py,sha256=ML92mknkAwzBl2NCm-4werSUmJEtSHNY9NSzhseNM9s,525
|
|
282
282
|
gate/ccxt/static_dependencies/typing_inspect/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
283
283
|
gate/ccxt/static_dependencies/typing_inspect/typing_inspect.py,sha256=5gIWomLPfuDpgd3gX1GlnX0MuXM3VorR4j2W2qXORiQ,28269
|
|
284
|
-
gate_io_api-0.0.
|
|
285
|
-
gate_io_api-0.0.
|
|
286
|
-
gate_io_api-0.0.
|
|
284
|
+
gate_io_api-0.0.86.dist-info/METADATA,sha256=wmI2e9jhHn2-9ytaUHrGSxQWbjMR5QWbMjcOWa-WjRM,26827
|
|
285
|
+
gate_io_api-0.0.86.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
286
|
+
gate_io_api-0.0.86.dist-info/RECORD,,
|
|
File without changes
|