From 1e6362debffd8ca0a2a84c93d98ed7f65889cd89 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 3 Feb 2022 19:41:45 +0100 Subject: [PATCH] Add test for new /status telegram message --- freqtrade/rpc/rpc.py | 2 -- freqtrade/rpc/telegram.py | 11 ++++---- tests/conftest_trades.py | 1 + tests/rpc/test_rpc.py | 2 -- tests/rpc/test_rpc_telegram.py | 47 ++++++++++++++++++++++++++++++++++ 5 files changed, 53 insertions(+), 10 deletions(-) diff --git a/freqtrade/rpc/rpc.py b/freqtrade/rpc/rpc.py index d731f6fa4..ed41dbb01 100644 --- a/freqtrade/rpc/rpc.py +++ b/freqtrade/rpc/rpc.py @@ -213,8 +213,6 @@ class RPC: order['type'], order['side'], order['remaining'] ) if order else None, )) - cp_cfg = self._config - trade_dict['position_adjustment_enable'] = cp_cfg['position_adjustment_enable'] results.append(trade_dict) return results diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index d4d6ae7af..ba6d8c75a 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -391,8 +391,8 @@ class Telegram(RPCHandler): sumA += (filled_trades[y]["amount"] * filled_trades[y]["average"]) sumB += filled_trades[y]["amount"] prev_avg_price = sumA/sumB - price_to_1st_buy = (cur_buy_average - filled_trades[0]["average"]) \ - / filled_trades[0]["average"] + price_to_1st_buy = ((cur_buy_average - filled_trades[0]["average"]) + / filled_trades[0]["average"]) minus_on_buy = (cur_buy_average - prev_avg_price)/prev_avg_price dur_buys = current_buy_datetime - arrow.get(filled_trades[x-1]["order_filled_date"]) days = dur_buys.days @@ -433,13 +433,12 @@ class Telegram(RPCHandler): trade_ids = [int(i) for i in context.args if i.isnumeric()] results = self._rpc._rpc_trade_status(trade_ids=trade_ids) - + position_adjust = self._config.get('position_adjustment_enable', False) messages = [] for r in results: r['open_date_hum'] = arrow.get(r['open_date']).humanize() r['num_entries'] = len(r['filled_entry_orders']) r['sell_reason'] = r.get('sell_reason', "") - r['position_adjustment_enable'] = r.get('position_adjustment_enable', False) lines = [ "*Trade ID:* `{trade_id}` `(since {open_date_hum})`", "*Current Pair:* {pair}", @@ -448,8 +447,8 @@ class Telegram(RPCHandler): "*Sell Reason:* `{sell_reason}`" if r['sell_reason'] else "", ] - if r['position_adjustment_enable']: - lines.append("*Number of Buy(s):* `{num_buys}`") + if position_adjust: + lines.append("*Number of Buy(s):* `{num_entries}`") lines.extend([ "*Open Rate:* `{open_rate:.8f}`", diff --git a/tests/conftest_trades.py b/tests/conftest_trades.py index 4496df37d..70a2a99a2 100644 --- a/tests/conftest_trades.py +++ b/tests/conftest_trades.py @@ -14,6 +14,7 @@ def mock_order_1(): 'side': 'buy', 'type': 'limit', 'price': 0.123, + 'average': 0.123, 'amount': 123.0, 'filled': 123.0, 'remaining': 0.0, diff --git a/tests/rpc/test_rpc.py b/tests/rpc/test_rpc.py index 1cdb0e4e8..05e9c1da8 100644 --- a/tests/rpc/test_rpc.py +++ b/tests/rpc/test_rpc.py @@ -108,7 +108,6 @@ def test_rpc_trade_status(default_conf, ticker, fee, mocker) -> None: 'stoploss_entry_dist_ratio': -0.10448878, 'open_order': None, 'exchange': 'binance', - 'position_adjustment_enable': False, 'filled_entry_orders': [{ 'amount': 91.07468123, 'average': 1.098e-05, 'cost': 0.0009999999999054, 'filled': 91.07468123, 'ft_order_side': 'buy', @@ -184,7 +183,6 @@ def test_rpc_trade_status(default_conf, ticker, fee, mocker) -> None: 'stoploss_entry_dist_ratio': -0.10448878, 'open_order': None, 'exchange': 'binance', - 'position_adjustment_enable': False, 'filled_entry_orders': [{ 'amount': 91.07468123, 'average': 1.098e-05, 'cost': 0.0009999999999054, 'filled': 91.07468123, 'ft_order_side': 'buy', diff --git a/tests/rpc/test_rpc_telegram.py b/tests/rpc/test_rpc_telegram.py index 13ec3f316..afa7a6a67 100644 --- a/tests/rpc/test_rpc_telegram.py +++ b/tests/rpc/test_rpc_telegram.py @@ -23,6 +23,7 @@ from freqtrade.exceptions import OperationalException from freqtrade.freqtradebot import FreqtradeBot from freqtrade.loggers import setup_logging from freqtrade.persistence import PairLocks, Trade +from freqtrade.persistence.models import Order from freqtrade.rpc import RPC from freqtrade.rpc.rpc import RPCException from freqtrade.rpc.telegram import Telegram, authorized_only @@ -218,6 +219,52 @@ def test_telegram_status(default_conf, update, mocker) -> None: assert status_table.call_count == 1 +@pytest.mark.usefixtures("init_persistence") +def test_telegram_status_multi_entry(default_conf, update, mocker, fee) -> None: + update.message.chat.id = "123" + default_conf['telegram']['enabled'] = False + default_conf['telegram']['chat_id'] = "123" + default_conf['position_adjustment_enable'] = True + mocker.patch.multiple( + 'freqtrade.exchange.Exchange', + fetch_order=MagicMock(return_value=None), + get_rate=MagicMock(return_value=0.22), + ) + + telegram, _, msg_mock = get_telegram_testobject(mocker, default_conf) + + create_mock_trades(fee) + trades = Trade.get_open_trades() + trade = trades[0] + trade.orders.append(Order( + order_id='5412vbb', + ft_order_side='buy', + ft_pair=trade.pair, + ft_is_open=False, + status="closed", + symbol=trade.pair, + order_type="market", + side="buy", + price=trade.open_rate * 0.95, + average=trade.open_rate * 0.95, + filled=trade.amount, + remaining=0, + cost=trade.amount, + order_date=trade.open_date, + order_filled_date=trade.open_date, + ) + ) + trade.recalc_trade_from_orders() + Trade.commit() + + telegram._status(update=update, context=MagicMock()) + assert msg_mock.call_count == 4 + msg = msg_mock.call_args_list[0][0][0] + assert re.search(r'Number of Buy.*2', msg) + assert re.search(r'Average Buy Price', msg) + assert re.search(r'Order filled at', msg) + + def test_status_handle(default_conf, update, ticker, fee, mocker) -> None: default_conf['max_open_trades'] = 3 mocker.patch.multiple(