|  |  | @@ -11,7 +11,6 @@ import pytest | 
			
		
	
		
		
			
				
					
					|  |  |  | from sqlalchemy import create_engine, inspect, text |  |  |  | from sqlalchemy import create_engine, inspect, text | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | from freqtrade import constants |  |  |  | from freqtrade import constants | 
			
		
	
		
		
			
				
					
					|  |  |  | from freqtrade.enums import InterestMode |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | from freqtrade.exceptions import DependencyException, OperationalException |  |  |  | from freqtrade.exceptions import DependencyException, OperationalException | 
			
		
	
		
		
			
				
					
					|  |  |  | from freqtrade.persistence import LocalTrade, Order, Trade, clean_dry_run_db, init_db |  |  |  | from freqtrade.persistence import LocalTrade, Order, Trade, clean_dry_run_db, init_db | 
			
		
	
		
		
			
				
					
					|  |  |  | from tests.conftest import create_mock_trades, create_mock_trades_with_leverage, log_has, log_has_re |  |  |  | from tests.conftest import create_mock_trades, create_mock_trades_with_leverage, log_has, log_has_re | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -145,7 +144,7 @@ def test__set_stop_loss_isolated_liq(fee): | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.stop_loss = None |  |  |  |     trade.stop_loss = None | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.initial_stop_loss = None |  |  |  |     trade.initial_stop_loss = None | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.set_isolated_liq(0.09) |  |  |  |     trade.set_isolated_liq(isolated_liq=0.09) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.isolated_liq == 0.09 |  |  |  |     assert trade.isolated_liq == 0.09 | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.stop_loss == 0.09 |  |  |  |     assert trade.stop_loss == 0.09 | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.initial_stop_loss == 0.09 |  |  |  |     assert trade.initial_stop_loss == 0.09 | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -155,12 +154,12 @@ def test__set_stop_loss_isolated_liq(fee): | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.stop_loss == 0.08 |  |  |  |     assert trade.stop_loss == 0.08 | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.initial_stop_loss == 0.09 |  |  |  |     assert trade.initial_stop_loss == 0.09 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.set_isolated_liq(0.1) |  |  |  |     trade.set_isolated_liq(isolated_liq=0.1) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.isolated_liq == 0.1 |  |  |  |     assert trade.isolated_liq == 0.1 | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.stop_loss == 0.08 |  |  |  |     assert trade.stop_loss == 0.08 | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.initial_stop_loss == 0.09 |  |  |  |     assert trade.initial_stop_loss == 0.09 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.set_isolated_liq(0.07) |  |  |  |     trade.set_isolated_liq(isolated_liq=0.07) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.isolated_liq == 0.07 |  |  |  |     assert trade.isolated_liq == 0.07 | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.stop_loss == 0.07 |  |  |  |     assert trade.stop_loss == 0.07 | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.initial_stop_loss == 0.09 |  |  |  |     assert trade.initial_stop_loss == 0.09 | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -234,26 +233,25 @@ def test_interest(market_buy_order_usdt, fee): | 
			
		
	
		
		
			
				
					
					|  |  |  |         open_date=datetime.utcnow() - timedelta(hours=0, minutes=10), |  |  |  |         open_date=datetime.utcnow() - timedelta(hours=0, minutes=10), | 
			
		
	
		
		
			
				
					
					|  |  |  |         fee_open=fee.return_value, |  |  |  |         fee_open=fee.return_value, | 
			
		
	
		
		
			
				
					
					|  |  |  |         fee_close=fee.return_value, |  |  |  |         fee_close=fee.return_value, | 
			
		
	
		
		
			
				
					
					|  |  |  |         exchange='kraken', |  |  |  |         exchange='binance', | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         leverage=3.0, |  |  |  |         leverage=3.0, | 
			
		
	
		
		
			
				
					
					|  |  |  |         interest_rate=0.0005, |  |  |  |         interest_rate=0.0005, | 
			
		
	
		
		
			
				
					
					|  |  |  |         interest_mode=InterestMode.HOURSPERDAY |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     ) |  |  |  |     ) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 10min, 3x leverage |  |  |  |     # 10min, 3x leverage | 
			
		
	
		
		
			
				
					
					|  |  |  |     # binance |  |  |  |     # binance | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert round(float(trade.calculate_interest()), 8) == round(0.0008333333333333334, 8) |  |  |  |     assert round(float(trade.calculate_interest()), 8) == round(0.0008333333333333334, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     # kraken |  |  |  |     # kraken | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4 |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert float(trade.calculate_interest()) == 0.040 |  |  |  |     assert float(trade.calculate_interest()) == 0.040 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # Short |  |  |  |     # Short | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.is_short = True |  |  |  |     trade.is_short = True | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.recalc_open_trade_value() |  |  |  |     trade.recalc_open_trade_value() | 
			
		
	
		
		
			
				
					
					|  |  |  |     # binace |  |  |  |     # binace | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY |  |  |  |     trade.exchange = "binance" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert float(trade.calculate_interest()) == 0.000625 |  |  |  |     assert float(trade.calculate_interest()) == 0.000625 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # kraken |  |  |  |     # kraken | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4 |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert isclose(float(trade.calculate_interest()), 0.030) |  |  |  |     assert isclose(float(trade.calculate_interest()), 0.030) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 5hr, long |  |  |  |     # 5hr, long | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -261,40 +259,40 @@ def test_interest(market_buy_order_usdt, fee): | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.is_short = False |  |  |  |     trade.is_short = False | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.recalc_open_trade_value() |  |  |  |     trade.recalc_open_trade_value() | 
			
		
	
		
		
			
				
					
					|  |  |  |     # binance |  |  |  |     # binance | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY |  |  |  |     trade.exchange = "binance" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert round(float(trade.calculate_interest()), 8) == round(0.004166666666666667, 8) |  |  |  |     assert round(float(trade.calculate_interest()), 8) == round(0.004166666666666667, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     # kraken |  |  |  |     # kraken | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4 |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert float(trade.calculate_interest()) == 0.06 |  |  |  |     assert float(trade.calculate_interest()) == 0.06 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # short |  |  |  |     # short | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.is_short = True |  |  |  |     trade.is_short = True | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.recalc_open_trade_value() |  |  |  |     trade.recalc_open_trade_value() | 
			
		
	
		
		
			
				
					
					|  |  |  |     # binace |  |  |  |     # binace | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY |  |  |  |     trade.exchange = "binance" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert round(float(trade.calculate_interest()), 8) == round(0.0031249999999999997, 8) |  |  |  |     assert round(float(trade.calculate_interest()), 8) == round(0.0031249999999999997, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     # kraken |  |  |  |     # kraken | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4 |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert float(trade.calculate_interest()) == 0.045 |  |  |  |     assert float(trade.calculate_interest()) == 0.045 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 0.00025 interest, 5hr, long |  |  |  |     # 0.00025 interest, 5hr, long | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.is_short = False |  |  |  |     trade.is_short = False | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.recalc_open_trade_value() |  |  |  |     trade.recalc_open_trade_value() | 
			
		
	
		
		
			
				
					
					|  |  |  |     # binance |  |  |  |     # binance | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY |  |  |  |     trade.exchange = "binance" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert round(float(trade.calculate_interest(interest_rate=0.00025)), |  |  |  |     assert round(float(trade.calculate_interest(interest_rate=0.00025)), | 
			
		
	
		
		
			
				
					
					|  |  |  |                  8) == round(0.0020833333333333333, 8) |  |  |  |                  8) == round(0.0020833333333333333, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     # kraken |  |  |  |     # kraken | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4 |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert isclose(float(trade.calculate_interest(interest_rate=0.00025)), 0.03) |  |  |  |     assert isclose(float(trade.calculate_interest(interest_rate=0.00025)), 0.03) | 
			
		
	
		
		
			
				
					
					|  |  |  |     # short |  |  |  |     # short | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.is_short = True |  |  |  |     trade.is_short = True | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.recalc_open_trade_value() |  |  |  |     trade.recalc_open_trade_value() | 
			
		
	
		
		
			
				
					
					|  |  |  |     # binace |  |  |  |     # binace | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY |  |  |  |     trade.exchange = "binance" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert round(float(trade.calculate_interest(interest_rate=0.00025)), |  |  |  |     assert round(float(trade.calculate_interest(interest_rate=0.00025)), | 
			
		
	
		
		
			
				
					
					|  |  |  |                  8) == round(0.0015624999999999999, 8) |  |  |  |                  8) == round(0.0015624999999999999, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     # kraken |  |  |  |     # kraken | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4 |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert float(trade.calculate_interest(interest_rate=0.00025)) == 0.0225 |  |  |  |     assert float(trade.calculate_interest(interest_rate=0.00025)) == 0.0225 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 5x leverage, 0.0005 interest, 5hr, long |  |  |  |     # 5x leverage, 0.0005 interest, 5hr, long | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -302,19 +300,19 @@ def test_interest(market_buy_order_usdt, fee): | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.recalc_open_trade_value() |  |  |  |     trade.recalc_open_trade_value() | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.leverage = 5.0 |  |  |  |     trade.leverage = 5.0 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # binance |  |  |  |     # binance | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY |  |  |  |     trade.exchange = "binance" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert round(float(trade.calculate_interest()), 8) == 0.005 |  |  |  |     assert round(float(trade.calculate_interest()), 8) == 0.005 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # kraken |  |  |  |     # kraken | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4 |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert float(trade.calculate_interest()) == round(0.07200000000000001, 8) |  |  |  |     assert float(trade.calculate_interest()) == round(0.07200000000000001, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     # short |  |  |  |     # short | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.is_short = True |  |  |  |     trade.is_short = True | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.recalc_open_trade_value() |  |  |  |     trade.recalc_open_trade_value() | 
			
		
	
		
		
			
				
					
					|  |  |  |     # binace |  |  |  |     # binace | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY |  |  |  |     trade.exchange = "binance" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert round(float(trade.calculate_interest()), 8) == round(0.0031249999999999997, 8) |  |  |  |     assert round(float(trade.calculate_interest()), 8) == round(0.0031249999999999997, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     # kraken |  |  |  |     # kraken | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4 |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert float(trade.calculate_interest()) == 0.045 |  |  |  |     assert float(trade.calculate_interest()) == 0.045 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 1x leverage, 0.0005 interest, 5hr |  |  |  |     # 1x leverage, 0.0005 interest, 5hr | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -322,19 +320,19 @@ def test_interest(market_buy_order_usdt, fee): | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.recalc_open_trade_value() |  |  |  |     trade.recalc_open_trade_value() | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.leverage = 1.0 |  |  |  |     trade.leverage = 1.0 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # binance |  |  |  |     # binance | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY |  |  |  |     trade.exchange = "binance" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert float(trade.calculate_interest()) == 0.0 |  |  |  |     assert float(trade.calculate_interest()) == 0.0 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # kraken |  |  |  |     # kraken | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4 |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert float(trade.calculate_interest()) == 0.0 |  |  |  |     assert float(trade.calculate_interest()) == 0.0 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # short |  |  |  |     # short | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.is_short = True |  |  |  |     trade.is_short = True | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.recalc_open_trade_value() |  |  |  |     trade.recalc_open_trade_value() | 
			
		
	
		
		
			
				
					
					|  |  |  |     # binace |  |  |  |     # binace | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY |  |  |  |     trade.exchange = "binance" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert float(trade.calculate_interest()) == 0.003125 |  |  |  |     assert float(trade.calculate_interest()) == 0.003125 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # kraken |  |  |  |     # kraken | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4 |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert float(trade.calculate_interest()) == 0.045 |  |  |  |     assert float(trade.calculate_interest()) == 0.045 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -506,7 +504,7 @@ def test_update_limit_order(limit_buy_order_usdt, limit_sell_order_usdt, fee, ca | 
			
		
	
		
		
			
				
					
					|  |  |  |         open_date=arrow.utcnow().datetime, |  |  |  |         open_date=arrow.utcnow().datetime, | 
			
		
	
		
		
			
				
					
					|  |  |  |         fee_open=fee.return_value, |  |  |  |         fee_open=fee.return_value, | 
			
		
	
		
		
			
				
					
					|  |  |  |         fee_close=fee.return_value, |  |  |  |         fee_close=fee.return_value, | 
			
		
	
		
		
			
				
					
					|  |  |  |         exchange='binance', |  |  |  |         exchange='binance' | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     ) |  |  |  |     ) | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.open_order_id is None |  |  |  |     assert trade.open_order_id is None | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.close_profit is None |  |  |  |     assert trade.close_profit is None | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -550,7 +548,6 @@ def test_update_limit_order(limit_buy_order_usdt, limit_sell_order_usdt, fee, ca | 
			
		
	
		
		
			
				
					
					|  |  |  |         is_short=True, |  |  |  |         is_short=True, | 
			
		
	
		
		
			
				
					
					|  |  |  |         leverage=3.0, |  |  |  |         leverage=3.0, | 
			
		
	
		
		
			
				
					
					|  |  |  |         interest_rate=0.0005, |  |  |  |         interest_rate=0.0005, | 
			
		
	
		
		
			
				
					
					|  |  |  |         interest_mode=InterestMode.HOURSPERDAY |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     ) |  |  |  |     ) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.open_order_id = 'something' |  |  |  |     trade.open_order_id = 'something' | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.update(limit_sell_order_usdt) |  |  |  |     trade.update(limit_sell_order_usdt) | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -628,7 +625,6 @@ def test_calc_open_close_trade_price(limit_buy_order_usdt, limit_sell_order_usdt | 
			
		
	
		
		
			
				
					
					|  |  |  |         amount=30.0, |  |  |  |         amount=30.0, | 
			
		
	
		
		
			
				
					
					|  |  |  |         open_date=datetime.now(tz=timezone.utc) - timedelta(minutes=10), |  |  |  |         open_date=datetime.now(tz=timezone.utc) - timedelta(minutes=10), | 
			
		
	
		
		
			
				
					
					|  |  |  |         interest_rate=0.0005, |  |  |  |         interest_rate=0.0005, | 
			
		
	
		
		
			
				
					
					|  |  |  |         interest_mode=InterestMode.HOURSPERDAY, |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         fee_open=fee.return_value, |  |  |  |         fee_open=fee.return_value, | 
			
		
	
		
		
			
				
					
					|  |  |  |         fee_close=fee.return_value, |  |  |  |         fee_close=fee.return_value, | 
			
		
	
		
		
			
				
					
					|  |  |  |         exchange='binance', |  |  |  |         exchange='binance', | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -644,12 +640,12 @@ def test_calc_open_close_trade_price(limit_buy_order_usdt, limit_sell_order_usdt | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio() == round(0.0945137157107232, 8) |  |  |  |     assert trade.calc_profit_ratio() == round(0.0945137157107232, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 3x leverage, binance |  |  |  |     # 3x leverage, binance | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.leverage = 3 |  |  |  |     trade.leverage = 3 | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY |  |  |  |     trade.exchange = "binance" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade._calc_open_trade_value() == 60.15 |  |  |  |     assert trade._calc_open_trade_value() == 60.15 | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert round(trade.calc_close_trade_value(), 8) == 65.83416667 |  |  |  |     assert round(trade.calc_close_trade_value(), 8) == 65.83416667 | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit() == round(5.684166670000003, 8) |  |  |  |     assert trade.calc_profit() == round(5.684166670000003, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio() == round(0.2834995845386534, 8) |  |  |  |     assert trade.calc_profit_ratio() == round(0.2834995845386534, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4 |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     # 3x leverage, kraken |  |  |  |     # 3x leverage, kraken | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade._calc_open_trade_value() == 60.15 |  |  |  |     assert trade._calc_open_trade_value() == 60.15 | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_close_trade_value() == 65.795 |  |  |  |     assert trade.calc_close_trade_value() == 65.795 | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -662,7 +658,7 @@ def test_calc_open_close_trade_price(limit_buy_order_usdt, limit_sell_order_usdt | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_close_trade_value() == 66.231165 |  |  |  |     assert trade.calc_close_trade_value() == 66.231165 | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit() == round(-6.381165000000003, 8) |  |  |  |     assert trade.calc_profit() == round(-6.381165000000003, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio() == round(-0.319857894736842, 8) |  |  |  |     assert trade.calc_profit_ratio() == round(-0.319857894736842, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY |  |  |  |     trade.exchange = "binance" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     # 3x leverage, short, binance |  |  |  |     # 3x leverage, short, binance | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade._calc_open_trade_value() == 59.85 |  |  |  |     assert trade._calc_open_trade_value() == 59.85 | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_close_trade_value() == 66.1663784375 |  |  |  |     assert trade.calc_close_trade_value() == 66.1663784375 | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -675,7 +671,7 @@ def test_calc_open_close_trade_price(limit_buy_order_usdt, limit_sell_order_usdt | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit() == round(-6.316378437500013, 8) |  |  |  |     assert trade.calc_profit() == round(-6.316378437500013, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio() == round(-0.1055368159983292, 8) |  |  |  |     assert trade.calc_profit_ratio() == round(-0.1055368159983292, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 1x leverage, short, kraken |  |  |  |     # 1x leverage, short, kraken | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4 |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade._calc_open_trade_value() == 59.850 |  |  |  |     assert trade._calc_open_trade_value() == 59.850 | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_close_trade_value() == 66.231165 |  |  |  |     assert trade.calc_close_trade_value() == 66.231165 | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit() == -6.381165 |  |  |  |     assert trade.calc_profit() == -6.381165 | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -694,7 +690,6 @@ def test_trade_close(limit_buy_order_usdt, limit_sell_order_usdt, fee): | 
			
		
	
		
		
			
				
					
					|  |  |  |         fee_close=fee.return_value, |  |  |  |         fee_close=fee.return_value, | 
			
		
	
		
		
			
				
					
					|  |  |  |         open_date=datetime.now(tz=timezone.utc) - timedelta(minutes=10), |  |  |  |         open_date=datetime.now(tz=timezone.utc) - timedelta(minutes=10), | 
			
		
	
		
		
			
				
					
					|  |  |  |         interest_rate=0.0005, |  |  |  |         interest_rate=0.0005, | 
			
		
	
		
		
			
				
					
					|  |  |  |         interest_mode=InterestMode.HOURSPERDAY, |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         exchange='binance', |  |  |  |         exchange='binance', | 
			
		
	
		
		
			
				
					
					|  |  |  |     ) |  |  |  |     ) | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.close_profit is None |  |  |  |     assert trade.close_profit is None | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -805,7 +800,7 @@ def test_calc_open_trade_value(limit_buy_order_usdt, fee): | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.recalc_open_trade_value() |  |  |  |     trade.recalc_open_trade_value() | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade._calc_open_trade_value() == 59.85 |  |  |  |     assert trade._calc_open_trade_value() == 59.85 | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.leverage = 3 |  |  |  |     trade.leverage = 3 | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY |  |  |  |     trade.exchange = "binance" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade._calc_open_trade_value() == 59.85 |  |  |  |     assert trade._calc_open_trade_value() == 59.85 | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.is_short = False |  |  |  |     trade.is_short = False | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.recalc_open_trade_value() |  |  |  |     trade.recalc_open_trade_value() | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -832,7 +827,6 @@ def test_calc_close_trade_price(limit_buy_order_usdt, limit_sell_order_usdt, fee | 
			
		
	
		
		
			
				
					
					|  |  |  |         fee_close=fee.return_value, |  |  |  |         fee_close=fee.return_value, | 
			
		
	
		
		
			
				
					
					|  |  |  |         exchange='binance', |  |  |  |         exchange='binance', | 
			
		
	
		
		
			
				
					
					|  |  |  |         interest_rate=0.0005, |  |  |  |         interest_rate=0.0005, | 
			
		
	
		
		
			
				
					
					|  |  |  |         interest_mode=InterestMode.HOURSPERDAY |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     ) |  |  |  |     ) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.open_order_id = 'close_trade' |  |  |  |     trade.open_order_id = 'close_trade' | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.update(limit_buy_order_usdt) |  |  |  |     trade.update(limit_buy_order_usdt) | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -849,7 +843,7 @@ def test_calc_close_trade_price(limit_buy_order_usdt, limit_sell_order_usdt, fee | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert round(trade.calc_close_trade_value(rate=2.5, fee=0.003), 8) == 74.77416667 |  |  |  |     assert round(trade.calc_close_trade_value(rate=2.5, fee=0.003), 8) == 74.77416667 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 3x leverage kraken |  |  |  |     # 3x leverage kraken | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4 |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_close_trade_value(rate=2.5) == 74.7725 |  |  |  |     assert trade.calc_close_trade_value(rate=2.5) == 74.7725 | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_close_trade_value(rate=2.5, fee=0.003) == 74.735 |  |  |  |     assert trade.calc_close_trade_value(rate=2.5, fee=0.003) == 74.735 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -860,7 +854,7 @@ def test_calc_close_trade_price(limit_buy_order_usdt, limit_sell_order_usdt, fee | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_close_trade_value(rate=2.5, fee=0.003) == 75.300225 |  |  |  |     assert trade.calc_close_trade_value(rate=2.5, fee=0.003) == 75.300225 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 3x leverage binance, short |  |  |  |     # 3x leverage binance, short | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY |  |  |  |     trade.exchange = "binance" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert round(trade.calc_close_trade_value(rate=2.5), 8) == 75.18906641 |  |  |  |     assert round(trade.calc_close_trade_value(rate=2.5), 8) == 75.18906641 | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert round(trade.calc_close_trade_value(rate=2.5, fee=0.003), 8) == 75.22656719 |  |  |  |     assert round(trade.calc_close_trade_value(rate=2.5, fee=0.003), 8) == 75.22656719 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -870,7 +864,7 @@ def test_calc_close_trade_price(limit_buy_order_usdt, limit_sell_order_usdt, fee | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert round(trade.calc_close_trade_value(rate=2.5, fee=0.003), 8) == 75.22656719 |  |  |  |     assert round(trade.calc_close_trade_value(rate=2.5, fee=0.003), 8) == 75.22656719 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 1x leverage kraken, short |  |  |  |     # 1x leverage kraken, short | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4 |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert round(trade.calc_close_trade_value(rate=2.5), 8) == 75.2626875 |  |  |  |     assert round(trade.calc_close_trade_value(rate=2.5), 8) == 75.2626875 | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_close_trade_value(rate=2.5, fee=0.003) == 75.300225 |  |  |  |     assert trade.calc_close_trade_value(rate=2.5, fee=0.003) == 75.300225 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -1013,7 +1007,6 @@ def test_calc_profit(limit_buy_order_usdt, limit_sell_order_usdt, fee): | 
			
		
	
		
		
			
				
					
					|  |  |  |         open_rate=2.0, |  |  |  |         open_rate=2.0, | 
			
		
	
		
		
			
				
					
					|  |  |  |         open_date=datetime.now(tz=timezone.utc) - timedelta(minutes=10), |  |  |  |         open_date=datetime.now(tz=timezone.utc) - timedelta(minutes=10), | 
			
		
	
		
		
			
				
					
					|  |  |  |         interest_rate=0.0005, |  |  |  |         interest_rate=0.0005, | 
			
		
	
		
		
			
				
					
					|  |  |  |         interest_mode=InterestMode.HOURSPERDAY, |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         fee_open=fee.return_value, |  |  |  |         fee_open=fee.return_value, | 
			
		
	
		
		
			
				
					
					|  |  |  |         fee_close=fee.return_value, |  |  |  |         fee_close=fee.return_value, | 
			
		
	
		
		
			
				
					
					|  |  |  |         exchange='binance' |  |  |  |         exchange='binance' | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -1047,62 +1040,62 @@ def test_calc_profit(limit_buy_order_usdt, limit_sell_order_usdt, fee): | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 3x leverage, long ################################################### |  |  |  |     # 3x leverage, long ################################################### | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.leverage = 3.0 |  |  |  |     trade.leverage = 3.0 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # Higher than open rate - 2.1 quote |  |  |  |     # Higher than open rate - 2.1 quote | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY  # binance |  |  |  |     trade.exchange = "binance"  # binance | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit(rate=2.1, fee=0.0025) == 2.69166667 |  |  |  |     assert trade.calc_profit(rate=2.1, fee=0.0025) == 2.69166667 | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4    # kraken |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit(rate=2.1, fee=0.0025) == 2.6525 |  |  |  |     assert trade.calc_profit(rate=2.1, fee=0.0025) == 2.6525 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 1.9 quote |  |  |  |     # 1.9 quote | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY  # binance |  |  |  |     trade.exchange = "binance"  # binance | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit(rate=1.9, fee=0.0025) == -3.29333333 |  |  |  |     assert trade.calc_profit(rate=1.9, fee=0.0025) == -3.29333333 | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4    # kraken |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit(rate=1.9, fee=0.0025) == -3.3325 |  |  |  |     assert trade.calc_profit(rate=1.9, fee=0.0025) == -3.3325 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 2.2 quote |  |  |  |     # 2.2 quote | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY  # binance |  |  |  |     trade.exchange = "binance"  # binance | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit(fee=0.0025) == 5.68416667 |  |  |  |     assert trade.calc_profit(fee=0.0025) == 5.68416667 | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4    # kraken |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit(fee=0.0025) == 5.645 |  |  |  |     assert trade.calc_profit(fee=0.0025) == 5.645 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 3x leverage, short ################################################### |  |  |  |     # 3x leverage, short ################################################### | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.is_short = True |  |  |  |     trade.is_short = True | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.recalc_open_trade_value() |  |  |  |     trade.recalc_open_trade_value() | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 2.1 quote - Higher than open rate |  |  |  |     # 2.1 quote - Higher than open rate | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY  # binance |  |  |  |     trade.exchange = "binance"  # binance | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit(rate=2.1, fee=0.0025) == round(-3.308815781249997, 8) |  |  |  |     assert trade.calc_profit(rate=2.1, fee=0.0025) == round(-3.308815781249997, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4    # kraken |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit(rate=2.1, fee=0.0025) == -3.3706575 |  |  |  |     assert trade.calc_profit(rate=2.1, fee=0.0025) == -3.3706575 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 1.9 quote - Lower than open rate |  |  |  |     # 1.9 quote - Lower than open rate | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY  # binance |  |  |  |     trade.exchange = "binance"  # binance | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit(rate=1.9, fee=0.0025) == round(2.7063095312499996, 8) |  |  |  |     assert trade.calc_profit(rate=1.9, fee=0.0025) == round(2.7063095312499996, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4    # kraken |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit(rate=1.9, fee=0.0025) == 2.6503575 |  |  |  |     assert trade.calc_profit(rate=1.9, fee=0.0025) == 2.6503575 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # Test when we apply a Sell order. Uses sell order used above |  |  |  |     # Test when we apply a Sell order. Uses sell order used above | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY  # binance |  |  |  |     trade.exchange = "binance"  # binance | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit(fee=0.0025) == round(-6.316378437499999, 8) |  |  |  |     assert trade.calc_profit(fee=0.0025) == round(-6.316378437499999, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4    # kraken |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit(fee=0.0025) == -6.381165 |  |  |  |     assert trade.calc_profit(fee=0.0025) == -6.381165 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 1x leverage, short ################################################### |  |  |  |     # 1x leverage, short ################################################### | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.leverage = 1.0 |  |  |  |     trade.leverage = 1.0 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 2.1 quote - Higher than open rate |  |  |  |     # 2.1 quote - Higher than open rate | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY  # binance |  |  |  |     trade.exchange = "binance"  # binance | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit(rate=2.1, fee=0.0025) == round(-3.308815781249997, 8) |  |  |  |     assert trade.calc_profit(rate=2.1, fee=0.0025) == round(-3.308815781249997, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4    # kraken |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit(rate=2.1, fee=0.0025) == -3.3706575 |  |  |  |     assert trade.calc_profit(rate=2.1, fee=0.0025) == -3.3706575 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 1.9 quote - Lower than open rate |  |  |  |     # 1.9 quote - Lower than open rate | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY  # binance |  |  |  |     trade.exchange = "binance"  # binance | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit(rate=1.9, fee=0.0025) == round(2.7063095312499996, 8) |  |  |  |     assert trade.calc_profit(rate=1.9, fee=0.0025) == round(2.7063095312499996, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4    # kraken |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit(rate=1.9, fee=0.0025) == 2.6503575 |  |  |  |     assert trade.calc_profit(rate=1.9, fee=0.0025) == 2.6503575 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # Test when we apply a Sell order. Uses sell order used above |  |  |  |     # Test when we apply a Sell order. Uses sell order used above | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY  # binance |  |  |  |     trade.exchange = "binance"  # binance | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit(fee=0.0025) == round(-6.316378437499999, 8) |  |  |  |     assert trade.calc_profit(fee=0.0025) == round(-6.316378437499999, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4    # kraken |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit(fee=0.0025) == -6.381165 |  |  |  |     assert trade.calc_profit(fee=0.0025) == -6.381165 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -1115,7 +1108,6 @@ def test_calc_profit_ratio(limit_buy_order_usdt, limit_sell_order_usdt, fee): | 
			
		
	
		
		
			
				
					
					|  |  |  |         open_rate=2.0, |  |  |  |         open_rate=2.0, | 
			
		
	
		
		
			
				
					
					|  |  |  |         open_date=datetime.now(tz=timezone.utc) - timedelta(minutes=10), |  |  |  |         open_date=datetime.now(tz=timezone.utc) - timedelta(minutes=10), | 
			
		
	
		
		
			
				
					
					|  |  |  |         interest_rate=0.0005, |  |  |  |         interest_rate=0.0005, | 
			
		
	
		
		
			
				
					
					|  |  |  |         interest_mode=InterestMode.HOURSPERDAY, |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         fee_open=fee.return_value, |  |  |  |         fee_open=fee.return_value, | 
			
		
	
		
		
			
				
					
					|  |  |  |         fee_close=fee.return_value, |  |  |  |         fee_close=fee.return_value, | 
			
		
	
		
		
			
				
					
					|  |  |  |         exchange='binance' |  |  |  |         exchange='binance' | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -1150,62 +1142,62 @@ def test_calc_profit_ratio(limit_buy_order_usdt, limit_sell_order_usdt, fee): | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 3x leverage, long ################################################### |  |  |  |     # 3x leverage, long ################################################### | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.leverage = 3.0 |  |  |  |     trade.leverage = 3.0 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 2.1 quote - Higher than open rate |  |  |  |     # 2.1 quote - Higher than open rate | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY  # binance |  |  |  |     trade.exchange = "binance"  # binance | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio(rate=2.1) == round(0.13424771421446402, 8) |  |  |  |     assert trade.calc_profit_ratio(rate=2.1) == round(0.13424771421446402, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4    # kraken |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio(rate=2.1) == round(0.13229426433915248, 8) |  |  |  |     assert trade.calc_profit_ratio(rate=2.1) == round(0.13229426433915248, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 1.9 quote - Lower than open rate |  |  |  |     # 1.9 quote - Lower than open rate | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY  # binance |  |  |  |     trade.exchange = "binance"  # binance | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio(rate=1.9) == round(-0.16425602643391513, 8) |  |  |  |     assert trade.calc_profit_ratio(rate=1.9) == round(-0.16425602643391513, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4    # kraken |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio(rate=1.9) == round(-0.16620947630922667, 8) |  |  |  |     assert trade.calc_profit_ratio(rate=1.9) == round(-0.16620947630922667, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # Test when we apply a Sell order. Uses sell order used above |  |  |  |     # Test when we apply a Sell order. Uses sell order used above | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY  # binance |  |  |  |     trade.exchange = "binance"  # binance | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio() == round(0.2834995845386534, 8) |  |  |  |     assert trade.calc_profit_ratio() == round(0.2834995845386534, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4    # kraken |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio() == round(0.2815461346633419, 8) |  |  |  |     assert trade.calc_profit_ratio() == round(0.2815461346633419, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 3x leverage, short ################################################### |  |  |  |     # 3x leverage, short ################################################### | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.is_short = True |  |  |  |     trade.is_short = True | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.recalc_open_trade_value() |  |  |  |     trade.recalc_open_trade_value() | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 2.1 quote - Higher than open rate |  |  |  |     # 2.1 quote - Higher than open rate | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY  # binance |  |  |  |     trade.exchange = "binance"  # binance | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio(rate=2.1) == round(-0.1658554276315789, 8) |  |  |  |     assert trade.calc_profit_ratio(rate=2.1) == round(-0.1658554276315789, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4    # kraken |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio(rate=2.1) == round(-0.16895526315789455, 8) |  |  |  |     assert trade.calc_profit_ratio(rate=2.1) == round(-0.16895526315789455, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 1.9 quote - Lower than open rate |  |  |  |     # 1.9 quote - Lower than open rate | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY  # binance |  |  |  |     trade.exchange = "binance"  # binance | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio(rate=1.9) == round(0.13565461309523819, 8) |  |  |  |     assert trade.calc_profit_ratio(rate=1.9) == round(0.13565461309523819, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4    # kraken |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio(rate=1.9) == round(0.13285000000000002, 8) |  |  |  |     assert trade.calc_profit_ratio(rate=1.9) == round(0.13285000000000002, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # Test when we apply a Sell order. Uses sell order used above |  |  |  |     # Test when we apply a Sell order. Uses sell order used above | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY  # binance |  |  |  |     trade.exchange = "binance"  # binance | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio() == round(-0.3166104479949876, 8) |  |  |  |     assert trade.calc_profit_ratio() == round(-0.3166104479949876, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4    # kraken |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio() == round(-0.319857894736842, 8) |  |  |  |     assert trade.calc_profit_ratio() == round(-0.319857894736842, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 1x leverage, short ################################################### |  |  |  |     # 1x leverage, short ################################################### | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.leverage = 1.0 |  |  |  |     trade.leverage = 1.0 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 2.1 quote - Higher than open rate |  |  |  |     # 2.1 quote - Higher than open rate | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY  # binance |  |  |  |     trade.exchange = "binance"  # binance | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio(rate=2.1) == round(-0.05528514254385963, 8) |  |  |  |     assert trade.calc_profit_ratio(rate=2.1) == round(-0.05528514254385963, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4    # kraken |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio(rate=2.1) == round(-0.05631842105263152, 8) |  |  |  |     assert trade.calc_profit_ratio(rate=2.1) == round(-0.05631842105263152, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # 1.9 quote - Lower than open rate |  |  |  |     # 1.9 quote - Lower than open rate | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY  # binance |  |  |  |     trade.exchange = "binance" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio(rate=1.9) == round(0.045218204365079395, 8) |  |  |  |     assert trade.calc_profit_ratio(rate=1.9) == round(0.045218204365079395, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4    # kraken |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio(rate=1.9) == round(0.04428333333333334, 8) |  |  |  |     assert trade.calc_profit_ratio(rate=1.9) == round(0.04428333333333334, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # Test when we apply a Sell order. Uses sell order used above |  |  |  |     # Test when we apply a Sell order. Uses sell order used above | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPERDAY  # binance |  |  |  |     trade.exchange = "binance" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio() == round(-0.1055368159983292, 8) |  |  |  |     assert trade.calc_profit_ratio() == round(-0.1055368159983292, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.interest_mode = InterestMode.HOURSPER4    # kraken |  |  |  |     trade.exchange = "kraken" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.calc_profit_ratio() == round(-0.106619298245614, 8) |  |  |  |     assert trade.calc_profit_ratio() == round(-0.106619298245614, 8) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -1542,7 +1534,6 @@ def test_adjust_stop_loss_short(fee): | 
			
		
	
		
		
			
				
					
					|  |  |  |         open_rate=1, |  |  |  |         open_rate=1, | 
			
		
	
		
		
			
				
					
					|  |  |  |         max_rate=1, |  |  |  |         max_rate=1, | 
			
		
	
		
		
			
				
					
					|  |  |  |         is_short=True, |  |  |  |         is_short=True, | 
			
		
	
		
		
			
				
					
					|  |  |  |         interest_mode=InterestMode.HOURSPERDAY |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     ) |  |  |  |     ) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.adjust_stop_loss(trade.open_rate, 0.05, True) |  |  |  |     trade.adjust_stop_loss(trade.open_rate, 0.05, True) | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.stop_loss == 1.05 |  |  |  |     assert trade.stop_loss == 1.05 | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -1575,7 +1566,7 @@ def test_adjust_stop_loss_short(fee): | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.initial_stop_loss_pct == 0.05 |  |  |  |     assert trade.initial_stop_loss_pct == 0.05 | 
			
		
	
		
		
			
				
					
					|  |  |  |     #  Initial is true but stop_loss set - so doesn't do anything |  |  |  |     #  Initial is true but stop_loss set - so doesn't do anything | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.adjust_stop_loss(0.3, -0.1, True) |  |  |  |     trade.adjust_stop_loss(0.3, -0.1, True) | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert round(trade.stop_loss, 8) == 0.66  # TODO-mg: What is this test? |  |  |  |     assert round(trade.stop_loss, 8) == 0.66 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     assert trade.initial_stop_loss == 1.05 |  |  |  |     assert trade.initial_stop_loss == 1.05 | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.initial_stop_loss_pct == 0.05 |  |  |  |     assert trade.initial_stop_loss_pct == 0.05 | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.stop_loss_pct == 0.1 |  |  |  |     assert trade.stop_loss_pct == 0.1 | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -1859,7 +1850,6 @@ def test_stoploss_reinitialization_short(default_conf, fee): | 
			
		
	
		
		
			
				
					
					|  |  |  |         max_rate=1, |  |  |  |         max_rate=1, | 
			
		
	
		
		
			
				
					
					|  |  |  |         is_short=True, |  |  |  |         is_short=True, | 
			
		
	
		
		
			
				
					
					|  |  |  |         leverage=3.0, |  |  |  |         leverage=3.0, | 
			
		
	
		
		
			
				
					
					|  |  |  |         interest_mode=InterestMode.HOURSPERDAY |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     ) |  |  |  |     ) | 
			
		
	
		
		
			
				
					
					|  |  |  |     trade.adjust_stop_loss(trade.open_rate, -0.05, True) |  |  |  |     trade.adjust_stop_loss(trade.open_rate, -0.05, True) | 
			
		
	
		
		
			
				
					
					|  |  |  |     assert trade.stop_loss == 1.05 |  |  |  |     assert trade.stop_loss == 1.05 | 
			
		
	
	
		
		
			
				
					
					|  |  |   |