show /balance in stake currency
This commit is contained in:
parent
62d50f512d
commit
1bf8d8cff3
@ -354,7 +354,8 @@ class ApiServer(RPC):
|
||||
|
||||
Returns the current status of the trades in json format
|
||||
"""
|
||||
results = self._rpc_balance(self._config.get('fiat_display_currency', ''))
|
||||
results = self._rpc_balance(self._config['stake_currency'],
|
||||
self._config.get('fiat_display_currency', ''))
|
||||
return self.rest_dump(results)
|
||||
|
||||
@require_login
|
||||
|
@ -297,7 +297,7 @@ class RPC:
|
||||
'best_rate': round(bp_rate * 100, 2),
|
||||
}
|
||||
|
||||
def _rpc_balance(self, fiat_display_currency: str) -> Dict:
|
||||
def _rpc_balance(self, stake_currency: str, fiat_display_currency: str) -> Dict:
|
||||
""" Returns current account balance per crypto """
|
||||
output = []
|
||||
total = 0.0
|
||||
@ -310,27 +310,29 @@ class RPC:
|
||||
if not balance['total']:
|
||||
continue
|
||||
|
||||
if coin == 'BTC':
|
||||
est_stake: float = 0
|
||||
if coin == stake_currency:
|
||||
rate = 1.0
|
||||
est_stake = balance['total']
|
||||
else:
|
||||
try:
|
||||
pair = self._freqtrade.exchange.get_valid_pair_combination(coin, "BTC")
|
||||
|
||||
if pair.startswith("BTC"):
|
||||
rate = 1.0 / tickers.get(pair, {}).get('bid', 1)
|
||||
else:
|
||||
rate = tickers.get(pair, {}).get('bid', 1)
|
||||
pair = self._freqtrade.exchange.get_valid_pair_combination(coin, stake_currency)
|
||||
rate = tickers.get(pair, {}).get('bid', None)
|
||||
if rate:
|
||||
if pair.startswith(stake_currency):
|
||||
rate = 1.0 / rate
|
||||
est_stake = rate * balance['total']
|
||||
except (TemporaryError, DependencyException):
|
||||
logger.warning(f" Could not get rate for pair {coin}.")
|
||||
continue
|
||||
est_btc: float = rate * balance['total']
|
||||
total = total + est_btc
|
||||
total = total + (est_stake or 0)
|
||||
output.append({
|
||||
'currency': coin,
|
||||
'free': balance['free'] if balance['free'] is not None else 0,
|
||||
'balance': balance['total'] if balance['total'] is not None else 0,
|
||||
'used': balance['used'] if balance['used'] is not None else 0,
|
||||
'est_btc': est_btc,
|
||||
'est_stake': est_stake or 0,
|
||||
'stake': stake_currency,
|
||||
})
|
||||
if total == 0.0:
|
||||
if self._freqtrade.config.get('dry_run', False):
|
||||
|
@ -325,15 +325,16 @@ class Telegram(RPC):
|
||||
def _balance(self, update: Update, context: CallbackContext) -> None:
|
||||
""" Handler for /balance """
|
||||
try:
|
||||
result = self._rpc_balance(self._config.get('fiat_display_currency', ''))
|
||||
result = self._rpc_balance(self._config['stake_currency'],
|
||||
self._config.get('fiat_display_currency', ''))
|
||||
output = ''
|
||||
for currency in result['currencies']:
|
||||
if currency['est_btc'] > 0.0001:
|
||||
if currency['est_stake'] > 0.0001:
|
||||
curr_output = "*{currency}:*\n" \
|
||||
"\t`Available: {free: .8f}`\n" \
|
||||
"\t`Balance: {balance: .8f}`\n" \
|
||||
"\t`Pending: {used: .8f}`\n" \
|
||||
"\t`Est. BTC: {est_btc: .8f}`\n".format(**currency)
|
||||
"\t`Est. {stake}: {est_stake: .8f}`\n".format(**currency)
|
||||
else:
|
||||
curr_output = "*{currency}:* not showing <1$ amount \n".format(**currency)
|
||||
|
||||
|
@ -363,7 +363,7 @@ def test_rpc_balance_handle_error(default_conf, mocker):
|
||||
rpc = RPC(freqtradebot)
|
||||
rpc._fiat_converter = CryptoToFiatConverter()
|
||||
with pytest.raises(RPCException, match="Error getting current tickers."):
|
||||
rpc._rpc_balance(default_conf['fiat_display_currency'])
|
||||
rpc._rpc_balance(default_conf['stake_currency'], default_conf['fiat_display_currency'])
|
||||
|
||||
|
||||
def test_rpc_balance_handle(default_conf, mocker, tickers):
|
||||
@ -404,28 +404,33 @@ def test_rpc_balance_handle(default_conf, mocker, tickers):
|
||||
rpc = RPC(freqtradebot)
|
||||
rpc._fiat_converter = CryptoToFiatConverter()
|
||||
|
||||
result = rpc._rpc_balance(default_conf['fiat_display_currency'])
|
||||
result = rpc._rpc_balance(default_conf['stake_currency'], default_conf['fiat_display_currency'])
|
||||
assert prec_satoshi(result['total'], 12.309096315)
|
||||
assert prec_satoshi(result['value'], 184636.44472997)
|
||||
assert 'USD' == result['symbol']
|
||||
assert result['currencies'] == [
|
||||
{'currency': 'BTC',
|
||||
'free': 10.0,
|
||||
'balance': 12.0,
|
||||
'used': 2.0,
|
||||
'est_btc': 12.0,
|
||||
'free': 10.0,
|
||||
'balance': 12.0,
|
||||
'used': 2.0,
|
||||
'est_stake': 12.0,
|
||||
'stake': 'BTC',
|
||||
},
|
||||
{'free': 1.0,
|
||||
'balance': 5.0,
|
||||
'currency': 'ETH',
|
||||
'est_btc': 0.30794,
|
||||
'used': 4.0
|
||||
'est_stake': 0.30794,
|
||||
'used': 4.0,
|
||||
'stake': 'BTC',
|
||||
|
||||
},
|
||||
{'free': 5.0,
|
||||
'balance': 10.0,
|
||||
'currency': 'USDT',
|
||||
'est_btc': 0.0011563153318162476,
|
||||
'used': 5.0}
|
||||
'est_stake': 0.0011563153318162476,
|
||||
'used': 5.0,
|
||||
'stake': 'BTC',
|
||||
}
|
||||
]
|
||||
assert result['total'] == 12.309096315331816
|
||||
|
||||
|
@ -256,7 +256,8 @@ def test_api_balance(botclient, mocker, rpc_balance):
|
||||
'free': 12.0,
|
||||
'balance': 12.0,
|
||||
'used': 0.0,
|
||||
'est_btc': 12.0,
|
||||
'est_stake': 12.0,
|
||||
'stake': 'BTC',
|
||||
}
|
||||
|
||||
|
||||
|
@ -545,7 +545,8 @@ def test_balance_handle_too_large_response(default_conf, update, mocker) -> None
|
||||
'free': 1.0,
|
||||
'used': 0.5,
|
||||
'balance': i,
|
||||
'est_btc': 1
|
||||
'est_stake': 1,
|
||||
'stake': 'BTC',
|
||||
})
|
||||
mocker.patch('freqtrade.rpc.rpc.RPC._rpc_balance', return_value={
|
||||
'currencies': balances,
|
||||
|
Loading…
Reference in New Issue
Block a user