diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index 70d5a78f3..3d4ab5aa5 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -390,7 +390,8 @@ def _balance(bot: Bot, update: Update) -> None: if c['Balance'] or c['Available'] or c['Pending'] ] if not balances: - output = '`All balances are zero.`' + send_msg('`All balances are zero.`') + return total = 0.0 for currency in balances: @@ -398,7 +399,10 @@ def _balance(bot: Bot, update: Update) -> None: if coin == 'BTC': currency["Rate"] = 1.0 else: - currency["Rate"] = exchange.get_ticker('BTC_' + coin, False)['bid'] + if coin == 'USDT': + currency["Rate"] = 1.0 / exchange.get_ticker('USDT_BTC', False)['bid'] + else: + currency["Rate"] = exchange.get_ticker('BTC_' + coin, False)['bid'] currency['BTC'] = currency["Rate"] * currency["Balance"] total = total + currency['BTC'] output += """*Currency*: {Currency} diff --git a/freqtrade/tests/rpc/test_rpc_telegram.py b/freqtrade/tests/rpc/test_rpc_telegram.py index 7b1f656d6..2dacf33ce 100644 --- a/freqtrade/tests/rpc/test_rpc_telegram.py +++ b/freqtrade/tests/rpc/test_rpc_telegram.py @@ -631,6 +631,7 @@ def test_stop_handle_already_stopped(default_conf, update, mocker): def test_balance_handle(default_conf, update, mocker): + mock_balance = [{ 'Currency': 'BTC', 'Balance': 10.0, @@ -643,7 +644,34 @@ def test_balance_handle(default_conf, update, mocker): 'Available': 0.0, 'Pending': 0.0, 'CryptoAddress': 'XXXX', + }, { + 'Currency': 'USDT', + 'Balance': 10000.0, + 'Available': 0.0, + 'Pending': 0.0, + 'CryptoAddress': 'XXXX', + }, { + 'Currency': 'LTC', + 'Balance': 10.0, + 'Available': 10.0, + 'Pending': 0.0, + 'CryptoAddress': 'XXXX', }] + + def mock_ticker(symbol, refresh): + if symbol == 'USDT_BTC': + return { + 'bid': 10000.00, + 'ask': 10000.00, + 'last': 10000.00, + } + else: + return { + 'bid': 0.1, + 'ask': 0.1, + 'last': 0.1, + } + mocker.patch.dict('freqtrade.main._CONF', default_conf) msg_mock = MagicMock() mocker.patch.multiple('freqtrade.rpc.telegram', @@ -655,12 +683,32 @@ def test_balance_handle(default_conf, update, mocker): mocker.patch.multiple('freqtrade.fiat_convert.Pymarketcap', ticker=MagicMock(return_value={'price_usd': 15000.0}), _cache_symbols=MagicMock(return_value={'BTC': 1})) + mocker.patch('freqtrade.main.exchange.get_ticker', side_effect=mock_ticker) _balance(bot=MagicMock(), update=update) + result = msg_mock.call_args_list[0][0][0] assert msg_mock.call_count == 1 - assert '*Currency*: BTC' in msg_mock.call_args_list[0][0][0] - assert 'Balance' in msg_mock.call_args_list[0][0][0] - assert 'Est. BTC' in msg_mock.call_args_list[0][0][0] + assert '*Currency*: BTC' in result + assert '*Currency*: ETH' not in result + assert '*Currency*: USDT' in result + assert 'Balance' in result + assert 'Est. BTC' in result + assert '*BTC*: 12.00000000' in result + + +def test_zero_balance_handle(default_conf, update, mocker): + mocker.patch.dict('freqtrade.main._CONF', default_conf) + msg_mock = MagicMock() + mocker.patch.multiple('freqtrade.rpc.telegram', + _CONF=default_conf, + init=MagicMock(), + send_msg=msg_mock) + mocker.patch.multiple('freqtrade.main.exchange', + get_balances=MagicMock(return_value=[])) + _balance(bot=MagicMock(), update=update) + result = msg_mock.call_args_list[0][0][0] + assert msg_mock.call_count == 1 + assert '`All balances are zero.`' in result def test_help_handle(default_conf, update, mocker):