diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 45c18378d..341693982 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -725,7 +725,7 @@ class FreqtradeBot(LoggingMixin): leverage=leverage, is_short=is_short, interest_rate=interest_rate, - isolated_liq=isolated_liq, + liquidation_price=isolated_liq, trading_mode=self.trading_mode, funding_fees=funding_fees ) diff --git a/freqtrade/persistence/migrations.py b/freqtrade/persistence/migrations.py index 08eb9563b..112538570 100644 --- a/freqtrade/persistence/migrations.py +++ b/freqtrade/persistence/migrations.py @@ -82,7 +82,8 @@ def migrate_trades_and_orders_table( # Leverage Properties leverage = get_column_def(cols, 'leverage', '1.0') - isolated_liq = get_column_def(cols, 'isolated_liq', 'null') + liquidation_price = get_column_def(cols, 'liquidation_price', + get_column_def(cols, 'isolated_liq', 'null')) # sqlite does not support literals for booleans is_short = get_column_def(cols, 'is_short', '0') @@ -137,7 +138,7 @@ def migrate_trades_and_orders_table( stoploss_order_id, stoploss_last_update, max_rate, min_rate, sell_reason, sell_order_status, strategy, enter_tag, timeframe, open_trade_value, close_profit_abs, - trading_mode, leverage, isolated_liq, is_short, + trading_mode, leverage, liquidation_price, is_short, interest_rate, funding_fees ) select id, lower(exchange), pair, @@ -155,7 +156,7 @@ def migrate_trades_and_orders_table( {sell_order_status} sell_order_status, {strategy} strategy, {enter_tag} enter_tag, {timeframe} timeframe, {open_trade_value} open_trade_value, {close_profit_abs} close_profit_abs, - {trading_mode} trading_mode, {leverage} leverage, {isolated_liq} isolated_liq, + {trading_mode} trading_mode, {leverage} leverage, {liquidation_price} liquidation_price, {is_short} is_short, {interest_rate} interest_rate, {funding_fees} funding_fees from {trade_back_name} @@ -233,10 +234,9 @@ def check_migrate(engine, decl_base, previous_tables) -> None: # Check if migration necessary # Migrates both trades and orders table! - # if not has_column(cols, 'buy_tag'): - if ('orders' not in previous_tables - or not has_column(cols_orders, 'ft_fee_base') - or not has_column(cols_orders, 'leverage')): + # if ('orders' not in previous_tables + # or not has_column(cols_orders, 'leverage')): + if not has_column(cols, 'liquidation_price'): logger.info(f"Running database migration for trades - " f"backup: {table_back_name}, {order_table_bak_name}") migrate_trades_and_orders_table( diff --git a/freqtrade/persistence/models.py b/freqtrade/persistence/models.py index 565ece5a4..b80d75dc0 100644 --- a/freqtrade/persistence/models.py +++ b/freqtrade/persistence/models.py @@ -329,7 +329,7 @@ class LocalTrade(): trading_mode: TradingMode = TradingMode.SPOT # Leverage trading properties - isolated_liq: Optional[float] = None + liquidation_price: Optional[float] = None is_short: bool = False leverage: float = 1.0 @@ -483,7 +483,7 @@ class LocalTrade(): 'leverage': self.leverage, 'interest_rate': self.interest_rate, - 'isolated_liq': self.isolated_liq, + 'liquidation_price': self.liquidation_price, 'is_short': self.is_short, 'trading_mode': self.trading_mode, 'funding_fees': self.funding_fees, @@ -507,25 +507,25 @@ class LocalTrade(): self.max_rate = max(current_price, self.max_rate or self.open_rate) self.min_rate = min(current_price_low, self.min_rate or self.open_rate) - def set_isolated_liq(self, isolated_liq: Optional[float]): + def set_isolated_liq(self, liquidation_price: Optional[float]): """ Method you should use to set self.liquidation price. Assures stop_loss is not passed the liquidation price """ - if not isolated_liq: + if not liquidation_price: return - self.isolated_liq = isolated_liq + self.liquidation_price = liquidation_price def _set_stop_loss(self, stop_loss: float, percent: float): """ Method you should use to set self.stop_loss. Assures stop_loss is not passed the liquidation price """ - if self.isolated_liq is not None: + if self.liquidation_price is not None: if self.is_short: - sl = min(stop_loss, self.isolated_liq) + sl = min(stop_loss, self.liquidation_price) else: - sl = max(stop_loss, self.isolated_liq) + sl = max(stop_loss, self.liquidation_price) else: sl = stop_loss @@ -553,13 +553,13 @@ class LocalTrade(): if self.is_short: new_loss = float(current_price * (1 + abs(stoploss / leverage))) # If trading with leverage, don't set the stoploss below the liquidation price - if self.isolated_liq: - new_loss = min(self.isolated_liq, new_loss) + if self.liquidation_price: + new_loss = min(self.liquidation_price, new_loss) else: new_loss = float(current_price * (1 - abs(stoploss / leverage))) # If trading with leverage, don't set the stoploss below the liquidation price - if self.isolated_liq: - new_loss = max(self.isolated_liq, new_loss) + if self.liquidation_price: + new_loss = max(self.liquidation_price, new_loss) # no stop loss assigned yet if self.initial_stop_loss_pct is None: @@ -1093,7 +1093,7 @@ class Trade(_DECL_BASE, LocalTrade): # Leverage trading properties leverage = Column(Float, nullable=True, default=1.0) is_short = Column(Boolean, nullable=False, default=False) - isolated_liq = Column(Float, nullable=True) + liquidation_price = Column(Float, nullable=True) # Margin Trading Properties interest_rate = Column(Float, nullable=False, default=0.0) diff --git a/tests/optimize/test_backtesting.py b/tests/optimize/test_backtesting.py index da8751566..1f0735907 100644 --- a/tests/optimize/test_backtesting.py +++ b/tests/optimize/test_backtesting.py @@ -613,7 +613,7 @@ def test_backtest__enter_trade_futures(default_conf_usdt, fee, mocker) -> None: # = 0.0008176703703703704 trade = backtesting._enter_trade(pair, row=row, direction='long') - assert pytest.approx(trade.isolated_liq) == 0.00081767037 + assert pytest.approx(trade.liquidation_price) == 0.00081767037 # Binance, Short # liquidation_price @@ -625,7 +625,7 @@ def test_backtest__enter_trade_futures(default_conf_usdt, fee, mocker) -> None: # = 0.0011787191419141915 trade = backtesting._enter_trade(pair, row=row, direction='short') - assert pytest.approx(trade.isolated_liq) == 0.0011787191 + assert pytest.approx(trade.liquidation_price) == 0.0011787191 # Stake-amount too high! mocker.patch("freqtrade.exchange.Exchange.get_min_pair_stake_amount", return_value=600.0) diff --git a/tests/rpc/test_rpc.py b/tests/rpc/test_rpc.py index ce881bcf1..7e34506d6 100644 --- a/tests/rpc/test_rpc.py +++ b/tests/rpc/test_rpc.py @@ -112,7 +112,7 @@ def test_rpc_trade_status(default_conf, ticker, fee, mocker) -> None: 'exchange': 'binance', 'leverage': 1.0, 'interest_rate': 0.0, - 'isolated_liq': None, + 'liquidation_price': None, 'is_short': False, 'funding_fees': 0.0, 'trading_mode': TradingMode.SPOT, @@ -194,7 +194,7 @@ def test_rpc_trade_status(default_conf, ticker, fee, mocker) -> None: 'exchange': 'binance', 'leverage': 1.0, 'interest_rate': 0.0, - 'isolated_liq': None, + 'liquidation_price': None, 'is_short': False, 'funding_fees': 0.0, 'trading_mode': TradingMode.SPOT, diff --git a/tests/test_freqtradebot.py b/tests/test_freqtradebot.py index add6c586d..b51637143 100644 --- a/tests/test_freqtradebot.py +++ b/tests/test_freqtradebot.py @@ -944,7 +944,7 @@ def test_execute_entry(mocker, default_conf_usdt, fee, limit_order, trade.is_short = is_short assert trade assert trade.open_rate_requested == 10 - assert trade.isolated_liq == liq_price + assert trade.liquidation_price == liq_price # In case of too high stake amount diff --git a/tests/test_persistence.py b/tests/test_persistence.py index c11987027..313f32685 100644 --- a/tests/test_persistence.py +++ b/tests/test_persistence.py @@ -116,38 +116,38 @@ def test_set_stop_loss_isolated_liq(fee): trading_mode=margin ) trade.set_isolated_liq(0.09) - assert trade.isolated_liq == 0.09 + assert trade.liquidation_price == 0.09 assert trade.stop_loss is None assert trade.initial_stop_loss is None trade._set_stop_loss(0.1, (1.0/9.0)) - assert trade.isolated_liq == 0.09 + assert trade.liquidation_price == 0.09 assert trade.stop_loss == 0.1 assert trade.initial_stop_loss == 0.1 trade.set_isolated_liq(0.08) - assert trade.isolated_liq == 0.08 + assert trade.liquidation_price == 0.08 assert trade.stop_loss == 0.1 assert trade.initial_stop_loss == 0.1 trade.set_isolated_liq(0.11) trade._set_stop_loss(0.1, 0) - assert trade.isolated_liq == 0.11 + assert trade.liquidation_price == 0.11 assert trade.stop_loss == 0.11 assert trade.initial_stop_loss == 0.1 # lower stop doesn't move stoploss trade._set_stop_loss(0.1, 0) - assert trade.isolated_liq == 0.11 + assert trade.liquidation_price == 0.11 assert trade.stop_loss == 0.11 assert trade.initial_stop_loss == 0.1 trade.stop_loss = None - trade.isolated_liq = None + trade.liquidation_price = None trade.initial_stop_loss = None trade._set_stop_loss(0.07, 0) - assert trade.isolated_liq is None + assert trade.liquidation_price is None assert trade.stop_loss == 0.07 assert trade.initial_stop_loss == 0.07 @@ -157,29 +157,29 @@ def test_set_stop_loss_isolated_liq(fee): trade.initial_stop_loss = None trade.set_isolated_liq(0.09) - assert trade.isolated_liq == 0.09 + assert trade.liquidation_price == 0.09 assert trade.stop_loss is None assert trade.initial_stop_loss is None trade._set_stop_loss(0.08, (1.0/9.0)) - assert trade.isolated_liq == 0.09 + assert trade.liquidation_price == 0.09 assert trade.stop_loss == 0.08 assert trade.initial_stop_loss == 0.08 trade.set_isolated_liq(0.1) - assert trade.isolated_liq == 0.1 + assert trade.liquidation_price == 0.1 assert trade.stop_loss == 0.08 assert trade.initial_stop_loss == 0.08 trade.set_isolated_liq(0.07) trade._set_stop_loss(0.1, (1.0/8.0)) - assert trade.isolated_liq == 0.07 + assert trade.liquidation_price == 0.07 assert trade.stop_loss == 0.07 assert trade.initial_stop_loss == 0.08 # Stop doesn't move stop higher trade._set_stop_loss(0.1, (1.0/9.0)) - assert trade.isolated_liq == 0.07 + assert trade.liquidation_price == 0.07 assert trade.stop_loss == 0.07 assert trade.initial_stop_loss == 0.08 @@ -1474,7 +1474,7 @@ def test_adjust_stop_loss_short(fee): trade.set_isolated_liq(0.63) trade.adjust_stop_loss(0.59, -0.1) assert trade.stop_loss == 0.63 - assert trade.isolated_liq == 0.63 + assert trade.liquidation_price == 0.63 def test_adjust_min_max_rates(fee): @@ -1539,7 +1539,7 @@ def test_get_open_lev(fee, use_db): @pytest.mark.usefixtures("init_persistence") -def test_to_json(default_conf, fee): +def test_to_json(fee): # Simulate dry_run entries trade = Trade( @@ -1608,7 +1608,7 @@ def test_to_json(default_conf, fee): 'exchange': 'binance', 'leverage': None, 'interest_rate': None, - 'isolated_liq': None, + 'liquidation_price': None, 'is_short': None, 'trading_mode': None, 'funding_fees': None, @@ -1683,7 +1683,7 @@ def test_to_json(default_conf, fee): 'exchange': 'binance', 'leverage': None, 'interest_rate': None, - 'isolated_liq': None, + 'liquidation_price': None, 'is_short': None, 'trading_mode': None, 'funding_fees': None,