From 167f9aa8d9087ffddfe1687a0542b3c4c182269d Mon Sep 17 00:00:00 2001 From: Sam Germain Date: Wed, 20 Oct 2021 05:43:46 -0600 Subject: [PATCH 1/3] Added gateio futures support, and added gatio to test_exchange exchanges variable --- freqtrade/exchange/gateio.py | 28 +++++++++++++++++++++++++++- tests/exchange/test_exchange.py | 11 +++++++++-- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/freqtrade/exchange/gateio.py b/freqtrade/exchange/gateio.py index 33006d4a5..8a84a787d 100644 --- a/freqtrade/exchange/gateio.py +++ b/freqtrade/exchange/gateio.py @@ -1,7 +1,8 @@ """ Gate.io exchange subclass """ import logging -from typing import Dict, List +from typing import Dict, List, Tuple +from freqtrade.enums import Collateral, TradingMode from freqtrade.exceptions import OperationalException from freqtrade.exchange import Exchange @@ -27,6 +28,31 @@ class Gateio(Exchange): funding_fee_times: List[int] = [0, 8, 16] # hours of the day + _supported_trading_mode_collateral_pairs: List[Tuple[TradingMode, Collateral]] = [ + # TradingMode.SPOT always supported and not required in this list + # (TradingMode.MARGIN, Collateral.CROSS), # TODO-lev: Uncomment once supported + # (TradingMode.FUTURES, Collateral.CROSS), # TODO-lev: Uncomment once supported + # (TradingMode.FUTURES, Collateral.ISOLATED) # TODO-lev: Uncomment once supported + ] + + @property + def _ccxt_config(self) -> Dict: + # Parameters to add directly to ccxt sync/async initialization. + if self.trading_mode == TradingMode.MARGIN: + return { + "options": { + "defaultType": "margin" + } + } + elif self.trading_mode == TradingMode.FUTURES: + return { + "options": { + "defaultType": "future" + } + } + else: + return {} + def validate_ordertypes(self, order_types: Dict) -> None: super().validate_ordertypes(order_types) diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index de1328f3e..2e00279fe 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -25,7 +25,7 @@ from tests.conftest import get_mock_coro, get_patched_exchange, log_has, log_has # Make sure to always keep one exchange here which is NOT subclassed!! -EXCHANGES = ['bittrex', 'binance', 'kraken', 'ftx'] +EXCHANGES = ['bittrex', 'binance', 'kraken', 'ftx', 'gateio'] def ccxt_exceptionhandlers(mocker, default_conf, api_mock, exchange_name, @@ -3206,6 +3206,7 @@ def test_set_margin_mode(mocker, default_conf, collateral): ("bittrex", TradingMode.MARGIN, Collateral.ISOLATED, True), ("bittrex", TradingMode.FUTURES, Collateral.CROSS, True), ("bittrex", TradingMode.FUTURES, Collateral.ISOLATED, True), + ("gateio", TradingMode.MARGIN, Collateral.ISOLATED, True), # TODO-lev: Remove once implemented ("binance", TradingMode.MARGIN, Collateral.CROSS, True), @@ -3215,6 +3216,9 @@ def test_set_margin_mode(mocker, default_conf, collateral): ("kraken", TradingMode.FUTURES, Collateral.CROSS, True), ("ftx", TradingMode.MARGIN, Collateral.CROSS, True), ("ftx", TradingMode.FUTURES, Collateral.CROSS, True), + ("gateio", TradingMode.MARGIN, Collateral.CROSS, True), + ("gateio", TradingMode.FUTURES, Collateral.CROSS, True), + ("gateio", TradingMode.FUTURES, Collateral.ISOLATED, True), # TODO-lev: Uncomment once implemented # ("binance", TradingMode.MARGIN, Collateral.CROSS, False), @@ -3223,7 +3227,10 @@ def test_set_margin_mode(mocker, default_conf, collateral): # ("kraken", TradingMode.MARGIN, Collateral.CROSS, False), # ("kraken", TradingMode.FUTURES, Collateral.CROSS, False), # ("ftx", TradingMode.MARGIN, Collateral.CROSS, False), - # ("ftx", TradingMode.FUTURES, Collateral.CROSS, False) + # ("ftx", TradingMode.FUTURES, Collateral.CROSS, False), + # ("gateio", TradingMode.MARGIN, Collateral.CROSS, False), + # ("gateio", TradingMode.FUTURES, Collateral.CROSS, False), + # ("gateio", TradingMode.FUTURES, Collateral.ISOLATED, False), ]) def test_validate_trading_mode_and_collateral( default_conf, From 1fa2600ee25e6ca0b89338141add3d91759c907b Mon Sep 17 00:00:00 2001 From: Sam Germain Date: Wed, 20 Oct 2021 08:17:11 -0600 Subject: [PATCH 2/3] Added gateio to test__ccxt_config --- tests/exchange/test_exchange.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 2e00279fe..75ebc27a3 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -3260,8 +3260,9 @@ def test_validate_trading_mode_and_collateral( ("ftx", "margin", {}), ("ftx", "futures", {}), ("bittrex", "spot", {}), - ("bittrex", "margin", {}), - ("bittrex", "futures", {}), + ("gateio", "spot", {}), + ("gateio", "margin", {"options": {"defaultType": "margin"}}), + ("gateio", "futures", {"options": {"defaultType": "future"}}), ]) def test__ccxt_config( default_conf, From ed91516f907ce024dc750d32e856e99a751d8bfa Mon Sep 17 00:00:00 2001 From: Sam Germain Date: Sat, 23 Oct 2021 13:48:18 -0600 Subject: [PATCH 3/3] Changed future to swap --- freqtrade/exchange/gateio.py | 2 +- tests/exchange/test_exchange.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/freqtrade/exchange/gateio.py b/freqtrade/exchange/gateio.py index 8a84a787d..83abd1266 100644 --- a/freqtrade/exchange/gateio.py +++ b/freqtrade/exchange/gateio.py @@ -47,7 +47,7 @@ class Gateio(Exchange): elif self.trading_mode == TradingMode.FUTURES: return { "options": { - "defaultType": "future" + "defaultType": "swap" } } else: diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 75ebc27a3..8e3fdfe74 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -3262,7 +3262,7 @@ def test_validate_trading_mode_and_collateral( ("bittrex", "spot", {}), ("gateio", "spot", {}), ("gateio", "margin", {"options": {"defaultType": "margin"}}), - ("gateio", "futures", {"options": {"defaultType": "future"}}), + ("gateio", "futures", {"options": {"defaultType": "swap"}}), ]) def test__ccxt_config( default_conf,