Add stoploss or liquidation property
This commit is contained in:
		| @@ -302,6 +302,16 @@ class LocalTrade(): | |||||||
|     # Futures properties |     # Futures properties | ||||||
|     funding_fees: Optional[float] = None |     funding_fees: Optional[float] = None | ||||||
|  |  | ||||||
|  |     @property | ||||||
|  |     def stoploss_or_liquidation(self) -> float: | ||||||
|  |         if self.liquidation_price: | ||||||
|  |             if self.is_short: | ||||||
|  |                 return min(self.stop_loss, self.liquidation_price) | ||||||
|  |             else: | ||||||
|  |                 return max(self.stop_loss, self.liquidation_price) | ||||||
|  |  | ||||||
|  |         return self.stop_loss | ||||||
|  |  | ||||||
|     @property |     @property | ||||||
|     def buy_tag(self) -> Optional[str]: |     def buy_tag(self) -> Optional[str]: | ||||||
|         """ |         """ | ||||||
|   | |||||||
| @@ -1063,13 +1063,6 @@ class IStrategy(ABC, HyperStrategyMixin): | |||||||
|                     f"stoploss is {trade.stop_loss:.6f}, " |                     f"stoploss is {trade.stop_loss:.6f}, " | ||||||
|                     f"initial stoploss was at {trade.initial_stop_loss:.6f}, " |                     f"initial stoploss was at {trade.initial_stop_loss:.6f}, " | ||||||
|                     f"trade opened at {trade.open_rate:.6f}") |                     f"trade opened at {trade.open_rate:.6f}") | ||||||
|                 new_stoploss = ( |  | ||||||
|                     trade.stop_loss + trade.initial_stop_loss |  | ||||||
|                     if trade.is_short else |  | ||||||
|                     trade.stop_loss - trade.initial_stop_loss |  | ||||||
|                 ) |  | ||||||
|                 logger.debug(f"{trade.pair} - Trailing stop saved " |  | ||||||
|                              f"{new_stoploss:.6f}") |  | ||||||
|  |  | ||||||
|             return ExitCheckTuple(exit_type=exit_type) |             return ExitCheckTuple(exit_type=exit_type) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -148,6 +148,7 @@ def test_set_stop_loss_isolated_liq(fee): | |||||||
|     assert trade.liquidation_price == 0.11 |     assert trade.liquidation_price == 0.11 | ||||||
|     assert pytest.approx(trade.stop_loss) == 1.994999 |     assert pytest.approx(trade.stop_loss) == 1.994999 | ||||||
|     assert trade.initial_stop_loss == 1.8 |     assert trade.initial_stop_loss == 1.8 | ||||||
|  |     assert trade.stoploss_or_liquidation == trade.stop_loss | ||||||
|  |  | ||||||
|     trade.stop_loss = None |     trade.stop_loss = None | ||||||
|     trade.liquidation_price = None |     trade.liquidation_price = None | ||||||
| @@ -158,6 +159,7 @@ def test_set_stop_loss_isolated_liq(fee): | |||||||
|     assert trade.liquidation_price is None |     assert trade.liquidation_price is None | ||||||
|     assert trade.stop_loss == 1.9 |     assert trade.stop_loss == 1.9 | ||||||
|     assert trade.initial_stop_loss == 1.9 |     assert trade.initial_stop_loss == 1.9 | ||||||
|  |     assert trade.stoploss_or_liquidation == 1.9 | ||||||
|  |  | ||||||
|     trade.is_short = True |     trade.is_short = True | ||||||
|     trade.recalc_open_trade_value() |     trade.recalc_open_trade_value() | ||||||
| @@ -174,11 +176,13 @@ def test_set_stop_loss_isolated_liq(fee): | |||||||
|     assert trade.liquidation_price == 3.09 |     assert trade.liquidation_price == 3.09 | ||||||
|     assert trade.stop_loss == 2.2 |     assert trade.stop_loss == 2.2 | ||||||
|     assert trade.initial_stop_loss == 2.2 |     assert trade.initial_stop_loss == 2.2 | ||||||
|  |     assert trade.stoploss_or_liquidation == 2.2 | ||||||
|  |  | ||||||
|     trade.set_isolated_liq(3.1) |     trade.set_isolated_liq(3.1) | ||||||
|     assert trade.liquidation_price == 3.1 |     assert trade.liquidation_price == 3.1 | ||||||
|     assert trade.stop_loss == 2.2 |     assert trade.stop_loss == 2.2 | ||||||
|     assert trade.initial_stop_loss == 2.2 |     assert trade.initial_stop_loss == 2.2 | ||||||
|  |     assert trade.stoploss_or_liquidation == 2.2 | ||||||
|  |  | ||||||
|     trade.set_isolated_liq(3.8) |     trade.set_isolated_liq(3.8) | ||||||
|     assert trade.liquidation_price == 3.8 |     assert trade.liquidation_price == 3.8 | ||||||
| @@ -193,10 +197,14 @@ def test_set_stop_loss_isolated_liq(fee): | |||||||
|     assert trade.initial_stop_loss == 2.2 |     assert trade.initial_stop_loss == 2.2 | ||||||
|  |  | ||||||
|     # Stoploss does move lower |     # Stoploss does move lower | ||||||
|  |     trade.set_isolated_liq(1.5) | ||||||
|     trade.adjust_stop_loss(1.8, 0.1) |     trade.adjust_stop_loss(1.8, 0.1) | ||||||
|     assert trade.liquidation_price == 3.8 |     assert trade.liquidation_price == 1.5 | ||||||
|     assert pytest.approx(trade.stop_loss) == 1.89 |     assert pytest.approx(trade.stop_loss) == 1.89 | ||||||
|     assert trade.initial_stop_loss == 2.2 |     assert trade.initial_stop_loss == 2.2 | ||||||
|  |     assert trade.stoploss_or_liquidation == 1.5 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @pytest.mark.parametrize('exchange,is_short,lev,minutes,rate,interest,trading_mode', [ | @pytest.mark.parametrize('exchange,is_short,lev,minutes,rate,interest,trading_mode', [ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user