Fix a few more tests

This commit is contained in:
Matthias 2021-10-17 10:55:20 +02:00
parent 198f3c5238
commit e8f98e473d

View File

@ -2799,10 +2799,10 @@ def test_handle_cancel_exit_cancel_exception(mocker, default_conf_usdt) -> None:
@ pytest.mark.parametrize("is_short, open_rate, amt", [ @ pytest.mark.parametrize("is_short, open_rate, amt", [
(False, 2.0, 30.0), (False, 2.0, 30.0),
(True, 2.02, 29.7029703), (True, 2.02, 29.70297029),
]) ])
def test_execute_trade_exit_up(default_conf_usdt, ticker_usdt, fee, ticker_usdt_sell_up, mocker, def test_execute_trade_exit_up(default_conf_usdt, ticker_usdt, fee, ticker_usdt_sell_up, mocker,
is_short, open_rate, amt) -> None: ticker_usdt_sell_down, is_short, open_rate, amt) -> None:
rpc_mock = patch_RPCManager(mocker) rpc_mock = patch_RPCManager(mocker)
patch_exchange(mocker) patch_exchange(mocker)
mocker.patch.multiple( mocker.patch.multiple(
@ -2821,20 +2821,19 @@ def test_execute_trade_exit_up(default_conf_usdt, ticker_usdt, fee, ticker_usdt_
rpc_mock.reset_mock() rpc_mock.reset_mock()
trade = Trade.query.first() trade = Trade.query.first()
trade.is_short = is_short assert trade.is_short == is_short
assert trade assert trade
assert freqtrade.strategy.confirm_trade_exit.call_count == 0 assert freqtrade.strategy.confirm_trade_exit.call_count == 0
# Increase the price and sell it # Increase the price and sell it
mocker.patch.multiple( mocker.patch.multiple(
'freqtrade.exchange.Exchange', 'freqtrade.exchange.Exchange',
fetch_ticker=ticker_usdt_sell_up fetch_ticker=ticker_usdt_sell_down if is_short else ticker_usdt_sell_up
) )
# Prevented sell ... # Prevented sell ...
# TODO-lev: side="buy"
freqtrade.execute_trade_exit( freqtrade.execute_trade_exit(
trade=trade, trade=trade,
limit=ticker_usdt_sell_up()['ask' if is_short else 'bid'], limit=(ticker_usdt_sell_down()['ask'] if is_short else ticker_usdt_sell_up()['bid']),
sell_reason=SellCheckTuple(sell_type=SellType.ROI) sell_reason=SellCheckTuple(sell_type=SellType.ROI)
) )
assert rpc_mock.call_count == 0 assert rpc_mock.call_count == 0
@ -2842,10 +2841,9 @@ def test_execute_trade_exit_up(default_conf_usdt, ticker_usdt, fee, ticker_usdt_
# Repatch with true # Repatch with true
freqtrade.strategy.confirm_trade_exit = MagicMock(return_value=True) freqtrade.strategy.confirm_trade_exit = MagicMock(return_value=True)
# TODO-lev: side="buy"
freqtrade.execute_trade_exit( freqtrade.execute_trade_exit(
trade=trade, trade=trade,
limit=ticker_usdt_sell_up()['ask' if is_short else 'bid'], limit=(ticker_usdt_sell_down()['ask'] if is_short else ticker_usdt_sell_up()['bid']),
sell_reason=SellCheckTuple(sell_type=SellType.ROI) sell_reason=SellCheckTuple(sell_type=SellType.ROI)
) )
assert freqtrade.strategy.confirm_trade_exit.call_count == 1 assert freqtrade.strategy.confirm_trade_exit.call_count == 1
@ -2858,13 +2856,13 @@ def test_execute_trade_exit_up(default_conf_usdt, ticker_usdt, fee, ticker_usdt_
'exchange': 'Binance', 'exchange': 'Binance',
'pair': 'ETH/USDT', 'pair': 'ETH/USDT',
'gain': 'profit', 'gain': 'profit',
'limit': 2.2, 'limit': 2.0 if is_short else 2.2,
'amount': amt, 'amount': amt,
'order_type': 'limit', 'order_type': 'limit',
'open_rate': open_rate, 'open_rate': open_rate,
'current_rate': 2.3, 'current_rate': 2.01 if is_short else 2.3,
'profit_amount': 5.685, 'profit_amount': 0.29554455 if is_short else 5.685,
'profit_ratio': 0.09451372, 'profit_ratio': 0.00493809 if is_short else 0.09451372,
'stake_currency': 'USDT', 'stake_currency': 'USDT',
'fiat_currency': 'USD', 'fiat_currency': 'USD',
'sell_reason': SellType.ROI.value, 'sell_reason': SellType.ROI.value,
@ -2876,7 +2874,7 @@ def test_execute_trade_exit_up(default_conf_usdt, ticker_usdt, fee, ticker_usdt_
@ pytest.mark.parametrize("is_short", [False, True]) @ pytest.mark.parametrize("is_short", [False, True])
def test_execute_trade_exit_down(default_conf_usdt, ticker_usdt, fee, ticker_usdt_sell_down, def test_execute_trade_exit_down(default_conf_usdt, ticker_usdt, fee, ticker_usdt_sell_down,
mocker, is_short) -> None: ticker_usdt_sell_up, mocker, is_short) -> None:
rpc_mock = patch_RPCManager(mocker) rpc_mock = patch_RPCManager(mocker)
patch_exchange(mocker) patch_exchange(mocker)
mocker.patch.multiple( mocker.patch.multiple(
@ -2899,11 +2897,11 @@ def test_execute_trade_exit_down(default_conf_usdt, ticker_usdt, fee, ticker_usd
# Decrease the price and sell it # Decrease the price and sell it
mocker.patch.multiple( mocker.patch.multiple(
'freqtrade.exchange.Exchange', 'freqtrade.exchange.Exchange',
fetch_ticker=ticker_usdt_sell_down fetch_ticker=ticker_usdt_sell_up if is_short else ticker_usdt_sell_down
) )
# TODO-lev: side="buy" freqtrade.execute_trade_exit(
freqtrade.execute_trade_exit(trade=trade, limit=ticker_usdt_sell_down()['bid'], trade=trade, limit=(ticker_usdt_sell_up if is_short else ticker_usdt_sell_down)()['bid'],
sell_reason=SellCheckTuple(sell_type=SellType.STOP_LOSS)) sell_reason=SellCheckTuple(sell_type=SellType.STOP_LOSS))
assert rpc_mock.call_count == 2 assert rpc_mock.call_count == 2
last_msg = rpc_mock.call_args_list[-1][0][0] last_msg = rpc_mock.call_args_list[-1][0][0]
@ -2913,13 +2911,13 @@ def test_execute_trade_exit_down(default_conf_usdt, ticker_usdt, fee, ticker_usd
'exchange': 'Binance', 'exchange': 'Binance',
'pair': 'ETH/USDT', 'pair': 'ETH/USDT',
'gain': 'loss', 'gain': 'loss',
'limit': 2.01, 'limit': 2.2 if is_short else 2.01,
'amount': 30.0, 'amount': 29.70297029 if is_short else 30.0,
'order_type': 'limit', 'order_type': 'limit',
'open_rate': 2.0, 'open_rate': 2.02 if is_short else 2.0,
'current_rate': 2.0, 'current_rate': 2.2 if is_short else 2.0,
'profit_amount': -0.00075, 'profit_amount': -5.65990099 if is_short else -0.00075,
'profit_ratio': -1.247e-05, 'profit_ratio': -0.0945681 if is_short else -1.247e-05,
'stake_currency': 'USDT', 'stake_currency': 'USDT',
'fiat_currency': 'USD', 'fiat_currency': 'USD',
'sell_reason': SellType.STOP_LOSS.value, 'sell_reason': SellType.STOP_LOSS.value,
@ -3005,7 +3003,8 @@ def test_execute_trade_exit_custom_exit_price(
@ pytest.mark.parametrize("is_short", [False, True]) @ pytest.mark.parametrize("is_short", [False, True])
def test_execute_trade_exit_down_stoploss_on_exchange_dry_run( def test_execute_trade_exit_down_stoploss_on_exchange_dry_run(
default_conf_usdt, ticker_usdt, fee, is_short, ticker_usdt_sell_down, mocker) -> None: default_conf_usdt, ticker_usdt, fee, is_short, ticker_usdt_sell_down,
ticker_usdt_sell_up, mocker) -> None:
rpc_mock = patch_RPCManager(mocker) rpc_mock = patch_RPCManager(mocker)
patch_exchange(mocker) patch_exchange(mocker)
mocker.patch.multiple( mocker.patch.multiple(
@ -3022,23 +3021,23 @@ def test_execute_trade_exit_down_stoploss_on_exchange_dry_run(
freqtrade.enter_positions() freqtrade.enter_positions()
trade = Trade.query.first() trade = Trade.query.first()
trade.is_short = is_short assert trade.is_short == is_short
assert trade assert trade
# Decrease the price and sell it # Decrease the price and sell it
mocker.patch.multiple( mocker.patch.multiple(
'freqtrade.exchange.Exchange', 'freqtrade.exchange.Exchange',
fetch_ticker=ticker_usdt_sell_down fetch_ticker=ticker_usdt_sell_up if is_short else ticker_usdt_sell_down
) )
default_conf_usdt['dry_run'] = True default_conf_usdt['dry_run'] = True
freqtrade.strategy.order_types['stoploss_on_exchange'] = True freqtrade.strategy.order_types['stoploss_on_exchange'] = True
# Setting trade stoploss to 0.01 # Setting trade stoploss to 0.01
trade.stop_loss = 2.0 * 0.99 trade.stop_loss = 2.0 * 1.01 if is_short else 2.0 * 0.99
# TODO-lev: side="buy" freqtrade.execute_trade_exit(
freqtrade.execute_trade_exit(trade=trade, limit=ticker_usdt_sell_down()['bid'], trade=trade, limit=(ticker_usdt_sell_up if is_short else ticker_usdt_sell_down())['bid'],
sell_reason=SellCheckTuple(sell_type=SellType.STOP_LOSS)) sell_reason=SellCheckTuple(sell_type=SellType.STOP_LOSS))
assert rpc_mock.call_count == 2 assert rpc_mock.call_count == 2
last_msg = rpc_mock.call_args_list[-1][0][0] last_msg = rpc_mock.call_args_list[-1][0][0]
@ -3049,13 +3048,13 @@ def test_execute_trade_exit_down_stoploss_on_exchange_dry_run(
'exchange': 'Binance', 'exchange': 'Binance',
'pair': 'ETH/USDT', 'pair': 'ETH/USDT',
'gain': 'loss', 'gain': 'loss',
'limit': 1.98, 'limit': 2.02 if is_short else 1.98,
'amount': 30.0, 'amount': 29.70297029 if is_short else 30.0,
'order_type': 'limit', 'order_type': 'limit',
'open_rate': 2.0, 'open_rate': 2.02 if is_short else 2.0,
'current_rate': 2.0, 'current_rate': 2.2 if is_short else 2.0,
'profit_amount': -0.8985, 'profit_amount': -0.3 if is_short else -0.8985,
'profit_ratio': -0.01493766, 'profit_ratio': -0.00501253 if is_short else -0.01493766,
'stake_currency': 'USDT', 'stake_currency': 'USDT',
'fiat_currency': 'USD', 'fiat_currency': 'USD',
'sell_reason': SellType.STOP_LOSS.value, 'sell_reason': SellType.STOP_LOSS.value,
@ -3570,9 +3569,12 @@ def test_ignore_roi_if_buy_signal(default_conf_usdt, limit_order, limit_order_op
assert trade.sell_reason == SellType.ROI.value assert trade.sell_reason == SellType.ROI.value
@ pytest.mark.parametrize("is_short", [False, True]) @ pytest.mark.parametrize("is_short,val1,val2", [
(False, 1.5, 1.1),
(True, 0.5, 0.9)
])
def test_trailing_stop_loss(default_conf_usdt, limit_order_open, def test_trailing_stop_loss(default_conf_usdt, limit_order_open,
is_short, fee, caplog, mocker) -> None: is_short, val1, val2, fee, caplog, mocker) -> None:
patch_RPCManager(mocker) patch_RPCManager(mocker)
patch_exchange(mocker) patch_exchange(mocker)
mocker.patch.multiple( mocker.patch.multiple(
@ -3596,15 +3598,15 @@ def test_trailing_stop_loss(default_conf_usdt, limit_order_open,
freqtrade.enter_positions() freqtrade.enter_positions()
trade = Trade.query.first() trade = Trade.query.first()
trade.is_short = is_short assert trade.is_short == is_short
assert freqtrade.handle_trade(trade) is False assert freqtrade.handle_trade(trade) is False
# Raise ticker_usdt above buy price # Raise praise into profits
mocker.patch('freqtrade.exchange.Exchange.fetch_ticker', mocker.patch('freqtrade.exchange.Exchange.fetch_ticker',
MagicMock(return_value={ MagicMock(return_value={
'bid': 2.0 * 1.5, 'bid': 2.0 * val1,
'ask': 2.0 * 1.5, 'ask': 2.0 * val1,
'last': 2.0 * 1.5 'last': 2.0 * val1
})) }))
# Stoploss should be adjusted # Stoploss should be adjusted
@ -3613,16 +3615,19 @@ def test_trailing_stop_loss(default_conf_usdt, limit_order_open,
# Price fell # Price fell
mocker.patch('freqtrade.exchange.Exchange.fetch_ticker', mocker.patch('freqtrade.exchange.Exchange.fetch_ticker',
MagicMock(return_value={ MagicMock(return_value={
'bid': 2.0 * 1.1, 'bid': 2.0 * val2,
'ask': 2.0 * 1.1, 'ask': 2.0 * val2,
'last': 2.0 * 1.1 'last': 2.0 * val2
})) }))
caplog.set_level(logging.DEBUG) caplog.set_level(logging.DEBUG)
# Sell as trailing-stop is reached # Sell as trailing-stop is reached
assert freqtrade.handle_trade(trade) is True assert freqtrade.handle_trade(trade) is True
assert log_has("ETH/USDT - HIT STOP: current price at 2.200000, stoploss is 2.700000, " stop_multi = 1.1 if is_short else 0.9
"initial stoploss was at 1.800000, trade opened at 2.000000", caplog) assert log_has(f"ETH/USDT - HIT STOP: current price at {(2.0 * val2):6f}, "
f"stoploss is {(2.0 * val1 * stop_multi):6f}, "
f"initial stoploss was at {(2.0 * stop_multi):6f}, trade opened at 2.000000",
caplog)
assert trade.sell_reason == SellType.TRAILING_STOP_LOSS.value assert trade.sell_reason == SellType.TRAILING_STOP_LOSS.value