filled in liq formula class with what needs to be done
This commit is contained in:
parent
797d7e5ce6
commit
5312d044a0
@ -1,6 +1,8 @@
|
|||||||
# flake8: noqa: F401
|
# flake8: noqa: F401
|
||||||
from freqtrade.enums.backteststate import BacktestState
|
from freqtrade.enums.backteststate import BacktestState
|
||||||
from freqtrade.enums.interestmode import InterestMode
|
from freqtrade.enums.interestmode import InterestMode
|
||||||
|
from freqtrade.enums.leveragemode import LeverageMode
|
||||||
|
from freqtrade.enums.liqformula import LiqFormula
|
||||||
from freqtrade.enums.rpcmessagetype import RPCMessageType
|
from freqtrade.enums.rpcmessagetype import RPCMessageType
|
||||||
from freqtrade.enums.runmode import NON_UTIL_MODES, OPTIMIZE_MODES, TRADING_MODES, RunMode
|
from freqtrade.enums.runmode import NON_UTIL_MODES, OPTIMIZE_MODES, TRADING_MODES, RunMode
|
||||||
from freqtrade.enums.selltype import SellType
|
from freqtrade.enums.selltype import SellType
|
||||||
|
11
freqtrade/enums/leveragemode.py
Normal file
11
freqtrade/enums/leveragemode.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
from enum import Enum
|
||||||
|
|
||||||
|
|
||||||
|
class LeverageMode(Enum):
|
||||||
|
"""
|
||||||
|
Enum to distinguish between cross margin, isolated margin, and futures
|
||||||
|
"""
|
||||||
|
CROSS = "cross"
|
||||||
|
ISOLATED = "isolated"
|
||||||
|
CROSS_FUTURES = "cross_futures"
|
||||||
|
ISOLATED_FUTURES = "cross_futures"
|
72
freqtrade/enums/liqformula.py
Normal file
72
freqtrade/enums/liqformula.py
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
# from decimal import Decimal
|
||||||
|
from enum import Enum
|
||||||
|
# from math import ceil
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
from freqtrade.enums import LeverageMode
|
||||||
|
from freqtrade.exceptions import OperationalException
|
||||||
|
|
||||||
|
|
||||||
|
class LiqFormula(Enum):
|
||||||
|
"""Equations to calculate liquidation price"""
|
||||||
|
|
||||||
|
BINANCE = "BINANCE"
|
||||||
|
KRAKEN = "KRAKEN"
|
||||||
|
FTX = "FTX"
|
||||||
|
|
||||||
|
def __exception(self, leverage_mode: LeverageMode, freq_specific: Optional[bool] = True):
|
||||||
|
"""
|
||||||
|
Raises an exception if exchange used doesn't support desired leverage mode
|
||||||
|
:param leverage_mode: cross, isolated, cross_futures or isolated_futures
|
||||||
|
:param freq_specific:
|
||||||
|
False if the exchange does not support this leverage mode
|
||||||
|
True if only freqtrade doesn't support it
|
||||||
|
"""
|
||||||
|
if freq_specific:
|
||||||
|
raise OperationalException(
|
||||||
|
f"Freqtrade does not support {leverage_mode.value} on {self.name}")
|
||||||
|
else:
|
||||||
|
raise OperationalException(f"{self.name} does not support {leverage_mode.value}")
|
||||||
|
|
||||||
|
def __call__(self, **k):
|
||||||
|
leverage_mode: LeverageMode = k.leverage_mode
|
||||||
|
|
||||||
|
# * Cross Margin
|
||||||
|
if leverage_mode == LeverageMode.CROSS:
|
||||||
|
if self.name == "BINANCE":
|
||||||
|
# TODO: perform a calculation based on this formula
|
||||||
|
# https://www.binance.com/en/support/faq/f6b010588e55413aa58b7d63ee0125ed
|
||||||
|
self.__exception(leverage_mode)
|
||||||
|
elif self.name == "KRAKEN":
|
||||||
|
# TODO: perform a calculation based on this formula
|
||||||
|
# https://support.kraken.com/hc/en-us/articles/203325763-Margin-Call-Level-and-Margin-Liquidation-Level
|
||||||
|
self.__exception(leverage_mode)
|
||||||
|
elif self.name == "FTX":
|
||||||
|
self.__exception(leverage_mode)
|
||||||
|
|
||||||
|
# * Isolated Margin
|
||||||
|
elif leverage_mode == LeverageMode.ISOLATED:
|
||||||
|
if self.name == "KRAKEN": # Kraken doesn't have isolated margin
|
||||||
|
self.__exception(leverage_mode, False)
|
||||||
|
else:
|
||||||
|
self.__exception(leverage_mode)
|
||||||
|
|
||||||
|
# * Cross Futures
|
||||||
|
elif leverage_mode == LeverageMode.CROSS_FUTURES:
|
||||||
|
if self.name == "BINANCE":
|
||||||
|
# TODO: perform a calculation based on this formula
|
||||||
|
# https://www.binance.com/en/support/faq/b3c689c1f50a44cabb3a84e663b81d93
|
||||||
|
self.__exception(leverage_mode)
|
||||||
|
else:
|
||||||
|
self.__exception(leverage_mode)
|
||||||
|
|
||||||
|
# * Isolated Futures
|
||||||
|
elif leverage_mode == LeverageMode.ISOLATED_FUTURES:
|
||||||
|
if self.name == "BINANCE":
|
||||||
|
# TODO: perform a calculation based on this formula
|
||||||
|
# https://www.binance.com/en/support/faq/b3c689c1f50a44cabb3a84e663b81d93
|
||||||
|
self.__exception(leverage_mode)
|
||||||
|
elif self.name == "KRAKEN": # Kraken doesn't have isolated margin
|
||||||
|
self.__exception(leverage_mode, False)
|
||||||
|
else:
|
||||||
|
self.__exception(leverage_mode)
|
Loading…
Reference in New Issue
Block a user