diff --git a/freqtrade/enums/__init__.py b/freqtrade/enums/__init__.py index 6099f7003..c60baad2a 100644 --- a/freqtrade/enums/__init__.py +++ b/freqtrade/enums/__init__.py @@ -1,8 +1,11 @@ # flake8: noqa: F401 from freqtrade.enums.backteststate import BacktestState +from freqtrade.enums.collateral import Collateral +from freqtrade.enums.exchangename import ExchangeName from freqtrade.enums.interestmode import InterestMode from freqtrade.enums.rpcmessagetype import RPCMessageType from freqtrade.enums.runmode import NON_UTIL_MODES, OPTIMIZE_MODES, TRADING_MODES, RunMode from freqtrade.enums.selltype import SellType from freqtrade.enums.signaltype import SignalTagType, SignalType from freqtrade.enums.state import State +from freqtrade.enums.tradingmode import TradingMode diff --git a/freqtrade/enums/collateral.py b/freqtrade/enums/collateral.py new file mode 100644 index 000000000..0a5988698 --- /dev/null +++ b/freqtrade/enums/collateral.py @@ -0,0 +1,11 @@ +from enum import Enum + + +class Collateral(Enum): + """ + Enum to distinguish between + cross margin/futures collateral and + isolated margin/futures collateral + """ + CROSS = "cross" + ISOLATED = "isolated" diff --git a/freqtrade/enums/exchangename.py b/freqtrade/enums/exchangename.py new file mode 100644 index 000000000..288754305 --- /dev/null +++ b/freqtrade/enums/exchangename.py @@ -0,0 +1,10 @@ +from enum import Enum + + +class ExchangeName(Enum): + """All the exchanges supported by freqtrade that support leverage""" + + BINANCE = "Binance" + KRAKEN = "Kraken" + FTX = "FTX" + OTHER = None diff --git a/freqtrade/enums/signaltype.py b/freqtrade/enums/signaltype.py index d2995d57a..09426b0e8 100644 --- a/freqtrade/enums/signaltype.py +++ b/freqtrade/enums/signaltype.py @@ -7,6 +7,8 @@ class SignalType(Enum): """ BUY = "buy" SELL = "sell" + SHORT = "short" + EXIT_SHORT = "exit_short" class SignalTagType(Enum): diff --git a/freqtrade/enums/tradingmode.py b/freqtrade/enums/tradingmode.py new file mode 100644 index 000000000..a8de60c19 --- /dev/null +++ b/freqtrade/enums/tradingmode.py @@ -0,0 +1,11 @@ +from enum import Enum + + +class TradingMode(Enum): + """ + Enum to distinguish between + spot, margin, futures or any other trading method + """ + SPOT = "spot" + MARGIN = "margin" + FUTURES = "futures" diff --git a/freqtrade/exchange/binance.py b/freqtrade/exchange/binance.py index 0c470cb24..3ca1c52fe 100644 --- a/freqtrade/exchange/binance.py +++ b/freqtrade/exchange/binance.py @@ -4,6 +4,7 @@ from typing import Dict import ccxt +from freqtrade.enums import ExchangeName from freqtrade.exceptions import (DDosProtection, InsufficientFundsError, InvalidOrderException, OperationalException, TemporaryError) from freqtrade.exchange import Exchange @@ -15,6 +16,8 @@ logger = logging.getLogger(__name__) class Binance(Exchange): + exchange_name: ExchangeName = ExchangeName.BINANCE + _ft_has: Dict = { "stoploss_on_exchange": True, "order_time_in_force": ['gtc', 'fok', 'ioc'], diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index c6f60e08a..9f35fa6c0 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -21,6 +21,7 @@ from pandas import DataFrame from freqtrade.constants import DEFAULT_AMOUNT_RESERVE_PERCENT, ListPairsWithTimeframes from freqtrade.data.converter import ohlcv_to_dataframe, trades_dict_to_list +from freqtrade.enums import ExchangeName from freqtrade.exceptions import (DDosProtection, ExchangeError, InsufficientFundsError, InvalidOrderException, OperationalException, PricingError, RetryableOrderError, TemporaryError) @@ -69,6 +70,8 @@ class Exchange: } _ft_has: Dict = {} + exchange_name: ExchangeName = ExchangeName.BINANCE + def __init__(self, config: Dict[str, Any], validate: bool = True) -> None: """ Initializes this module with the given config, diff --git a/freqtrade/exchange/ftx.py b/freqtrade/exchange/ftx.py index 6cd549d60..6c73b25ba 100644 --- a/freqtrade/exchange/ftx.py +++ b/freqtrade/exchange/ftx.py @@ -4,6 +4,7 @@ from typing import Any, Dict import ccxt +from freqtrade.enums import ExchangeName from freqtrade.exceptions import (DDosProtection, InsufficientFundsError, InvalidOrderException, OperationalException, TemporaryError) from freqtrade.exchange import Exchange @@ -16,6 +17,8 @@ logger = logging.getLogger(__name__) class Ftx(Exchange): + exchange_name: ExchangeName = ExchangeName.FTX + _ft_has: Dict = { "stoploss_on_exchange": True, "ohlcv_candle_limit": 1500, diff --git a/freqtrade/exchange/kraken.py b/freqtrade/exchange/kraken.py index 1b069aa6c..dc1613a92 100644 --- a/freqtrade/exchange/kraken.py +++ b/freqtrade/exchange/kraken.py @@ -4,6 +4,7 @@ from typing import Any, Dict import ccxt +from freqtrade.enums import ExchangeName from freqtrade.exceptions import (DDosProtection, InsufficientFundsError, InvalidOrderException, OperationalException, TemporaryError) from freqtrade.exchange import Exchange @@ -15,6 +16,8 @@ logger = logging.getLogger(__name__) class Kraken(Exchange): + exchange_name: ExchangeName = ExchangeName.KRAKEN + _params: Dict = {"trading_agreement": "agree"} _ft_has: Dict = { "stoploss_on_exchange": True, diff --git a/freqtrade/leverage/__init__.py b/freqtrade/leverage/__init__.py new file mode 100644 index 000000000..9186b160e --- /dev/null +++ b/freqtrade/leverage/__init__.py @@ -0,0 +1 @@ +# flake8: noqa: F401