diff --git a/freqtrade/main.py b/freqtrade/main.py index 095f7671a..7ca0cab57 100755 --- a/freqtrade/main.py +++ b/freqtrade/main.py @@ -191,12 +191,25 @@ def execute_sell(trade: Trade, limit: float) -> None: fmt_exp_profit = round(trade.calc_profit_percent(rate=limit) * 100, 2) profit_trade = trade.calc_profit(rate=limit) + current_rate = exchange.get_ticker(trade.pair, False)['bid'] + profit = trade.calc_profit_percent(current_rate) - message = '*{exchange}:* Selling [{pair}]({pair_url}) with limit `{limit:.8f}`'.format( + message = """*{exchange}:* Selling +*Current Pair:* [{pair}]({pair_url}) +*Limit:* `{limit}` +*Amount:* `{amount}` +*Open Rate:* `{open_rate:.8f}` +*Current Rate:* `{current_rate:.8f}` +*Profit:* `{profit:.2f}%` + """.format( exchange=trade.exchange, - pair=trade.pair.replace('_', '/'), + pair=trade.pair, pair_url=exchange.get_pair_detail_url(trade.pair), - limit=limit + limit=limit, + open_rate=trade.open_rate, + current_rate=current_rate, + amount=round(trade.amount, 8), + profit=round(profit * 100, 2), ) # For regular case, when the configuration exists diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index 0fdc734f4..70d5a78f3 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -147,7 +147,7 @@ def _status(bot: Bot, update: Update) -> None: ) if trade.close_profit else None message = """ *Trade ID:* `{trade_id}` -*Current Pair:* [{pair}]({market_url}) +*Current Pair:* [{pair}]({pair_url}) *Open Since:* `{date}` *Amount:* `{amount}` *Open Rate:* `{open_rate:.8f}` @@ -156,10 +156,11 @@ def _status(bot: Bot, update: Update) -> None: *Close Profit:* `{close_profit}` *Current Profit:* `{current_profit:.2f}%` *Open Order:* `{open_order}` +*Total Open Trades:* `{total_trades}` """.format( trade_id=trade.id, pair=trade.pair, - market_url=exchange.get_pair_detail_url(trade.pair), + pair_url=exchange.get_pair_detail_url(trade.pair), date=arrow.get(trade.open_date).humanize(), open_rate=trade.open_rate, close_rate=trade.close_rate, @@ -170,6 +171,7 @@ def _status(bot: Bot, update: Update) -> None: open_order='({} rem={:.8f})'.format( order['type'], order['remaining'] ) if order else None, + total_trades=len(trades) ) send_msg(message, bot=bot) diff --git a/freqtrade/tests/rpc/test_rpc_telegram.py b/freqtrade/tests/rpc/test_rpc_telegram.py index df2624815..986f3f8f0 100644 --- a/freqtrade/tests/rpc/test_rpc_telegram.py +++ b/freqtrade/tests/rpc/test_rpc_telegram.py @@ -237,7 +237,9 @@ def test_forcesell_handle(default_conf, update, ticker, ticker_sell_up, mocker): _forcesell(bot=MagicMock(), update=update) assert rpc_mock.call_count == 2 - assert 'Selling [BTC/ETH]' in rpc_mock.call_args_list[-1][0][0] + assert 'Selling' in rpc_mock.call_args_list[-1][0][0] + assert '[BTC_ETH]' in rpc_mock.call_args_list[-1][0][0] + assert 'Amount' in rpc_mock.call_args_list[-1][0][0] assert '0.00001172' in rpc_mock.call_args_list[-1][0][0] assert 'profit: 6.11%, 0.00006126' in rpc_mock.call_args_list[-1][0][0] assert '0.919 USD' in rpc_mock.call_args_list[-1][0][0] @@ -272,7 +274,9 @@ def test_forcesell_down_handle(default_conf, update, ticker, ticker_sell_down, m _forcesell(bot=MagicMock(), update=update) assert rpc_mock.call_count == 2 - assert 'Selling [BTC/ETH]' in rpc_mock.call_args_list[-1][0][0] + assert 'Selling' in rpc_mock.call_args_list[-1][0][0] + assert '[BTC_ETH]' in rpc_mock.call_args_list[-1][0][0] + assert 'Amount' in rpc_mock.call_args_list[-1][0][0] assert '0.00001044' in rpc_mock.call_args_list[-1][0][0] assert 'loss: -5.48%, -0.00005492' in rpc_mock.call_args_list[-1][0][0] assert '-0.824 USD' in rpc_mock.call_args_list[-1][0][0] diff --git a/freqtrade/tests/test_main.py b/freqtrade/tests/test_main.py index 7ff569e8f..23f4cd259 100644 --- a/freqtrade/tests/test_main.py +++ b/freqtrade/tests/test_main.py @@ -542,7 +542,10 @@ def test_execute_sell_up(default_conf, ticker, ticker_sell_up, mocker): execute_sell(trade=trade, limit=ticker_sell_up()['bid']) assert rpc_mock.call_count == 2 - assert 'Selling [BTC/ETH]' in rpc_mock.call_args_list[-1][0][0] + assert 'Selling' in rpc_mock.call_args_list[-1][0][0] + assert '[BTC_ETH]' in rpc_mock.call_args_list[-1][0][0] + assert 'Amount' in rpc_mock.call_args_list[-1][0][0] + assert 'Profit' in rpc_mock.call_args_list[-1][0][0] assert '0.00001172' in rpc_mock.call_args_list[-1][0][0] assert 'profit: 6.11%, 0.00006126' in rpc_mock.call_args_list[-1][0][0] assert '0.919 USD' in rpc_mock.call_args_list[-1][0][0] @@ -577,7 +580,9 @@ def test_execute_sell_down(default_conf, ticker, ticker_sell_down, mocker): execute_sell(trade=trade, limit=ticker_sell_down()['bid']) assert rpc_mock.call_count == 2 - assert 'Selling [BTC/ETH]' in rpc_mock.call_args_list[-1][0][0] + assert 'Selling' in rpc_mock.call_args_list[-1][0][0] + assert '[BTC_ETH]' in rpc_mock.call_args_list[-1][0][0] + assert 'Amount' in rpc_mock.call_args_list[-1][0][0] assert '0.00001044' in rpc_mock.call_args_list[-1][0][0] assert 'loss: -5.48%, -0.00005492' in rpc_mock.call_args_list[-1][0][0] assert '-0.824 USD' in rpc_mock.call_args_list[-1][0][0] @@ -607,10 +612,9 @@ def test_execute_sell_without_conf_sell_down(default_conf, ticker, ticker_sell_d execute_sell(trade=trade, limit=ticker_sell_down()['bid']) - print(rpc_mock.call_args_list[-1][0][0]) - assert rpc_mock.call_count == 2 - assert 'Selling [BTC/ETH]' in rpc_mock.call_args_list[-1][0][0] + assert 'Selling' in rpc_mock.call_args_list[-1][0][0] + assert '[BTC_ETH]' in rpc_mock.call_args_list[-1][0][0] assert '0.00001044' in rpc_mock.call_args_list[-1][0][0] assert 'loss: -5.48%, -0.00005492' in rpc_mock.call_args_list[-1][0][0] @@ -640,7 +644,9 @@ def test_execute_sell_without_conf_sell_up(default_conf, ticker, ticker_sell_up, execute_sell(trade=trade, limit=ticker_sell_up()['bid']) assert rpc_mock.call_count == 2 - assert 'Selling [BTC/ETH]' in rpc_mock.call_args_list[-1][0][0] + assert 'Selling' in rpc_mock.call_args_list[-1][0][0] + assert '[BTC_ETH]' in rpc_mock.call_args_list[-1][0][0] + assert 'Amount' in rpc_mock.call_args_list[-1][0][0] assert '0.00001172' in rpc_mock.call_args_list[-1][0][0] assert '(profit: 6.11%, 0.00006126)' in rpc_mock.call_args_list[-1][0][0] assert 'USD' not in rpc_mock.call_args_list[-1][0][0]