Merge pull request #6513 from samgermain/gateio-stoploss

Gateio stoploss on exchange
This commit is contained in:
Matthias
2022-03-15 06:27:54 +01:00
committed by GitHub
5 changed files with 72 additions and 7 deletions

View File

@@ -376,7 +376,7 @@ class Exchange:
raise OperationalException(
'Could not load markets, therefore cannot start. '
'Please investigate the above error for more details.'
)
)
quote_currencies = self.get_quote_currencies()
if stake_currency not in quote_currencies:
raise OperationalException(
@@ -882,11 +882,11 @@ class Exchange:
raise OperationalException(e) from e
@retrier(retries=API_FETCH_ORDER_RETRY_COUNT)
def fetch_order(self, order_id: str, pair: str) -> Dict:
def fetch_order(self, order_id: str, pair: str, params={}) -> Dict:
if self._config['dry_run']:
return self.fetch_dry_run_order(order_id)
try:
order = self._api.fetch_order(order_id, pair)
order = self._api.fetch_order(order_id, pair, params=params)
self._log_exchange_response('fetch_order', order)
return order
except ccxt.OrderNotFound as e:
@@ -929,7 +929,7 @@ class Exchange:
and order.get('filled') == 0.0)
@retrier
def cancel_order(self, order_id: str, pair: str) -> Dict:
def cancel_order(self, order_id: str, pair: str, params={}) -> Dict:
if self._config['dry_run']:
try:
order = self.fetch_dry_run_order(order_id)
@@ -940,7 +940,7 @@ class Exchange:
return {}
try:
order = self._api.cancel_order(order_id, pair)
order = self._api.cancel_order(order_id, pair, params=params)
self._log_exchange_response('cancel_order', order)
return order
except ccxt.InvalidOrder as e:

View File

@@ -22,6 +22,8 @@ class Gateio(Exchange):
_ft_has: Dict = {
"ohlcv_candle_limit": 1000,
"ohlcv_volume_currency": "quote",
"stoploss_order_types": {"limit": "limit"},
"stoploss_on_exchange": True,
}
_headers = {'X-Gate-Channel-Id': 'freqtrade'}
@@ -31,4 +33,25 @@ class Gateio(Exchange):
if any(v == 'market' for k, v in order_types.items()):
raise OperationalException(
f'Exchange {self.name} does not support market orders.')
f'Exchange {self.name} does not support market orders.')
def fetch_stoploss_order(self, order_id: str, pair: str, params={}) -> Dict:
return self.fetch_order(
order_id=order_id,
pair=pair,
params={'stop': True}
)
def cancel_stoploss_order(self, order_id: str, pair: str, params={}) -> Dict:
return self.cancel_order(
order_id=order_id,
pair=pair,
params={'stop': True}
)
def stoploss_adjust(self, stop_loss: float, order: Dict) -> bool:
"""
Verify stop_loss against stoploss-order value (limit or price)
Returns True if adjustment is necessary.
"""
return stop_loss > float(order['stopPrice'])