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