Add relative profit to daily/weekly commands

This commit is contained in:
Matthias 2022-06-11 11:18:21 +02:00
parent 0a801c0223
commit 76827b31a9
3 changed files with 19 additions and 8 deletions

View File

@ -302,11 +302,12 @@ class RPC:
return relativedelta(months=step) return relativedelta(months=step)
return timedelta(**{timeunit: step}) return timedelta(**{timeunit: step})
profit_units: Dict[date, Dict] = {}
if not (isinstance(timescale, int) and timescale > 0): if not (isinstance(timescale, int) and timescale > 0):
raise RPCException('timescale must be an integer greater than 0') raise RPCException('timescale must be an integer greater than 0')
profit_units: Dict[date, Dict] = {}
daily_stake = self._freqtrade.wallets.get_total_stake_amount()
for day in range(0, timescale): for day in range(0, timescale):
profitday = start_date - time_offset(day) profitday = start_date - time_offset(day)
# Only query for necessary columns for performance reasons. # Only query for necessary columns for performance reasons.
@ -318,8 +319,12 @@ class RPC:
curdayprofit = sum( curdayprofit = sum(
trade.close_profit_abs for trade in trades if trade.close_profit_abs is not None) trade.close_profit_abs for trade in trades if trade.close_profit_abs is not None)
# Calculate this periods starting balance
daily_stake = daily_stake - curdayprofit
profit_units[profitday] = { profit_units[profitday] = {
'amount': curdayprofit, 'amount': curdayprofit,
'daily_stake': daily_stake,
'rel_profit': round(curdayprofit / daily_stake, 8) if daily_stake > 0 else 0,
'trades': len(trades), 'trades': len(trades),
} }
@ -327,6 +332,8 @@ class RPC:
{ {
'date': f"{key.year}-{key.month:02d}" if timeunit == 'months' else key, 'date': f"{key.year}-{key.month:02d}" if timeunit == 'months' else key,
'abs_profit': value["amount"], 'abs_profit': value["amount"],
'starting_balance': value["daily_stake"],
'rel_profit': value["rel_profit"],
'fiat_value': self._fiat_converter.convert_amount( 'fiat_value': self._fiat_converter.convert_amount(
value['amount'], value['amount'],
stake_currency, stake_currency,

View File

@ -605,14 +605,16 @@ class Telegram(RPCHandler):
unit unit
) )
stats_tab = tabulate( stats_tab = tabulate(
[[period['date'], [[f"{period['date']} ({period['trade_count']})",
f"{round_coin_value(period['abs_profit'], stats['stake_currency'])}", f"{round_coin_value(period['abs_profit'], stats['stake_currency'])}",
f"{period['fiat_value']:.2f} {stats['fiat_display_currency']}", f"{period['fiat_value']:.2f} {stats['fiat_display_currency']}",
f"{period['trade_count']} trades"] for period in stats['data']], f"{period['rel_profit']:.2%}",
] for period in stats['data']],
headers=[ headers=[
val.header, f"{val.header} (trades)",
f'Profit {stake_cur}', f'Prof {stake_cur}',
f'Profit {fiat_disp_cur}', f'Prof {fiat_disp_cur}',
'Profit %',
'Trades', 'Trades',
], ],
tablefmt='simple') tablefmt='simple')

View File

@ -311,10 +311,12 @@ def test__rpc_timeunit_profit(default_conf_usdt, ticker, fee,
assert days['fiat_display_currency'] == default_conf_usdt['fiat_display_currency'] assert days['fiat_display_currency'] == default_conf_usdt['fiat_display_currency']
for day in days['data']: for day in days['data']:
# {'date': datetime.date(2022, 6, 11), 'abs_profit': 13.8299999, # {'date': datetime.date(2022, 6, 11), 'abs_profit': 13.8299999,
# 'starting_balance': 1055.37, 'rel_profit': 0.0131044,
# 'fiat_value': 0.0, 'trade_count': 2} # 'fiat_value': 0.0, 'trade_count': 2}
assert day['abs_profit'] in (0.0, pytest.approx(13.8299999), pytest.approx(-4.0)) assert day['abs_profit'] in (0.0, pytest.approx(13.8299999), pytest.approx(-4.0))
assert day['rel_profit'] in (0.0, pytest.approx(0.01310441), pytest.approx(-0.00377583))
assert day['trade_count'] in (0, 1, 2) assert day['trade_count'] in (0, 1, 2)
assert day['starting_balance'] in (pytest.approx(1059.37), pytest.approx(1055.37))
assert day['fiat_value'] in (0.0, ) assert day['fiat_value'] in (0.0, )
# ensure first day is current date # ensure first day is current date
assert str(days['data'][0]['date']) == str(datetime.utcnow().date()) assert str(days['data'][0]['date']) == str(datetime.utcnow().date())