Add /weekly and /monthly to Telegram RPC
/weekly now list weeks starting from monday instead of rolling weeks. /monthly now list months starting from the 1st. Signed-off-by: Antoine Merino <antoine.merino.dev@gmail.com>
This commit is contained in:
		| @@ -4,12 +4,12 @@ This module contains class to define a RPC communications | ||||
| import logging | ||||
| from abc import abstractmethod | ||||
| from datetime import date, datetime, timedelta, timezone | ||||
| from dateutil.relativedelta import relativedelta | ||||
| from math import isnan | ||||
| from typing import Any, Dict, List, Optional, Tuple, Union | ||||
|  | ||||
| import arrow | ||||
| import psutil | ||||
| from dateutil.relativedelta import relativedelta | ||||
| from numpy import NAN, inf, int64, mean | ||||
| from pandas import DataFrame | ||||
|  | ||||
| @@ -294,13 +294,14 @@ class RPC: | ||||
|             self, timescale: int, | ||||
|             stake_currency: str, fiat_display_currency: str) -> Dict[str, Any]: | ||||
|         today = datetime.utcnow().date() | ||||
|         first_iso_day_of_week = today - timedelta(days=today.weekday())  # Monday | ||||
|         profit_weeks: Dict[date, Dict] = {} | ||||
|  | ||||
|         if not (isinstance(timescale, int) and timescale > 0): | ||||
|             raise RPCException('timescale must be an integer greater than 0') | ||||
|  | ||||
|         for week in range(0, timescale): | ||||
|             profitweek = today - timedelta(weeks=week) | ||||
|             profitweek = first_iso_day_of_week - timedelta(weeks=week) | ||||
|             trades = Trade.get_trades(trade_filter=[ | ||||
|                 Trade.is_open.is_(False), | ||||
|                 Trade.close_date >= profitweek, | ||||
| @@ -335,14 +336,14 @@ class RPC: | ||||
|     def _rpc_monthly_profit( | ||||
|             self, timescale: int, | ||||
|             stake_currency: str, fiat_display_currency: str) -> Dict[str, Any]: | ||||
|         today = datetime.utcnow().date() | ||||
|         first_day_of_month = datetime.utcnow().date().replace(day=1) | ||||
|         profit_months: Dict[date, Dict] = {} | ||||
|  | ||||
|         if not (isinstance(timescale, int) and timescale > 0): | ||||
|             raise RPCException('timescale must be an integer greater than 0') | ||||
|  | ||||
|         for month in range(0, timescale): | ||||
|             profitmonth = today - relativedelta(months=month) | ||||
|             profitmonth = first_day_of_month - relativedelta(months=month) | ||||
|             trades = Trade.get_trades(trade_filter=[ | ||||
|                 Trade.is_open.is_(False), | ||||
|                 Trade.close_date >= profitmonth, | ||||
| @@ -357,7 +358,7 @@ class RPC: | ||||
|  | ||||
|         data = [ | ||||
|             { | ||||
|                 'date': key, | ||||
|                 'date': f"{key.year}-{key.month}", | ||||
|                 'abs_profit': value["amount"], | ||||
|                 'fiat_value': self._fiat_converter.convert_amount( | ||||
|                     value['amount'], | ||||
|   | ||||
| @@ -481,7 +481,7 @@ class Telegram(RPCHandler): | ||||
|                   f"{day['fiat_value']:.3f} {stats['fiat_display_currency']}", | ||||
|                   f"{day['trade_count']} trades"] for day in stats['data']], | ||||
|                 headers=[ | ||||
|                     'Month', | ||||
|                     'Day', | ||||
|                     f'Profit {stake_cur}', | ||||
|                     f'Profit {fiat_disp_cur}', | ||||
|                     'Trades', | ||||
| @@ -520,13 +520,14 @@ class Telegram(RPCHandler): | ||||
|                   f"{week['fiat_value']:.3f} {stats['fiat_display_currency']}", | ||||
|                   f"{week['trade_count']} trades"] for week in stats['data']], | ||||
|                 headers=[ | ||||
|                     'Week', | ||||
|                     'Monday', | ||||
|                     f'Profit {stake_cur}', | ||||
|                     f'Profit {fiat_disp_cur}', | ||||
|                     'Trades', | ||||
|                 ], | ||||
|                 tablefmt='simple') | ||||
|             message = f'<b>Weekly Profit over the last {timescale} weeks</b>:\n<pre>{stats_tab}</pre>' | ||||
|             message = f'<b>Weekly Profit over the last {timescale} weeks ' \ | ||||
|                       f'(starting from Monday)</b>:\n<pre>{stats_tab}</pre> ' | ||||
|             self._send_msg(message, parse_mode=ParseMode.HTML, reload_able=True, | ||||
|                            callback_path="update_weekly", query=update.callback_query) | ||||
|         except RPCException as e: | ||||
| @@ -565,7 +566,8 @@ class Telegram(RPCHandler): | ||||
|                     'Trades', | ||||
|                 ], | ||||
|                 tablefmt='simple') | ||||
|             message = f'<b>Monthly Profit over the last {timescale} months</b>:\n<pre>{stats_tab}</pre>' | ||||
|             message = f'<b>Monthly Profit over the last {timescale} months' \ | ||||
|                       f'</b>:\n<pre>{stats_tab}</pre> ' | ||||
|             self._send_msg(message, parse_mode=ParseMode.HTML, reload_able=True, | ||||
|                            callback_path="update_monthly", query=update.callback_query) | ||||
|         except RPCException as e: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user