Show drawdown from/to on /profit calls
This commit is contained in:
+14
-2
@@ -526,6 +526,7 @@ class RPC:
|
|||||||
winrate = (winning_trades / closed_trade_count) if closed_trade_count > 0 else 0
|
winrate = (winning_trades / closed_trade_count) if closed_trade_count > 0 else 0
|
||||||
|
|
||||||
trades_df = DataFrame([{'close_date': format_date(trade.close_date),
|
trades_df = DataFrame([{'close_date': format_date(trade.close_date),
|
||||||
|
'close_date_dt': trade.close_date,
|
||||||
'profit_abs': trade.close_profit_abs}
|
'profit_abs': trade.close_profit_abs}
|
||||||
for trade in trades if not trade.is_open and trade.close_date])
|
for trade in trades if not trade.is_open and trade.close_date])
|
||||||
|
|
||||||
@@ -533,10 +534,15 @@ class RPC:
|
|||||||
|
|
||||||
max_drawdown_abs = 0.0
|
max_drawdown_abs = 0.0
|
||||||
max_drawdown = 0.0
|
max_drawdown = 0.0
|
||||||
|
drawdown_start: Optional[datetime] = None
|
||||||
|
drawdown_end: Optional[datetime] = None
|
||||||
|
dd_high_val = dd_low_val = 0.0
|
||||||
if len(trades_df) > 0:
|
if len(trades_df) > 0:
|
||||||
try:
|
try:
|
||||||
(max_drawdown_abs, _, _, _, _, max_drawdown) = calculate_max_drawdown(
|
(max_drawdown_abs, drawdown_start, drawdown_end, dd_high_val, dd_low_val,
|
||||||
trades_df, value_col='profit_abs', starting_balance=starting_balance)
|
max_drawdown) = calculate_max_drawdown(
|
||||||
|
trades_df, value_col='profit_abs', date_col='close_date_dt',
|
||||||
|
starting_balance=starting_balance)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
# ValueError if no losing trade.
|
# ValueError if no losing trade.
|
||||||
pass
|
pass
|
||||||
@@ -588,6 +594,12 @@ class RPC:
|
|||||||
'expectancy_ratio': expectancy_ratio,
|
'expectancy_ratio': expectancy_ratio,
|
||||||
'max_drawdown': max_drawdown,
|
'max_drawdown': max_drawdown,
|
||||||
'max_drawdown_abs': max_drawdown_abs,
|
'max_drawdown_abs': max_drawdown_abs,
|
||||||
|
'max_drawdown_start': format_date(drawdown_start),
|
||||||
|
'max_drawdown_start_timestamp': dt_ts_def(drawdown_start),
|
||||||
|
'max_drawdown_end': format_date(drawdown_end),
|
||||||
|
'max_drawdown_end_timestamp': dt_ts_def(drawdown_end),
|
||||||
|
'drawdown_high': dd_high_val,
|
||||||
|
'drawdown_low': dd_low_val,
|
||||||
'trading_volume': trading_volume,
|
'trading_volume': trading_volume,
|
||||||
'bot_start_timestamp': dt_ts_def(bot_start, 0),
|
'bot_start_timestamp': dt_ts_def(bot_start, 0),
|
||||||
'bot_start_date': format_date(bot_start),
|
'bot_start_date': format_date(bot_start),
|
||||||
|
|||||||
@@ -889,7 +889,11 @@ class Telegram(RPCHandler):
|
|||||||
f"*Trading volume:* `{round_coin_value(stats['trading_volume'], stake_cur)}`\n"
|
f"*Trading volume:* `{round_coin_value(stats['trading_volume'], stake_cur)}`\n"
|
||||||
f"*Profit factor:* `{stats['profit_factor']:.2f}`\n"
|
f"*Profit factor:* `{stats['profit_factor']:.2f}`\n"
|
||||||
f"*Max Drawdown:* `{stats['max_drawdown']:.2%} "
|
f"*Max Drawdown:* `{stats['max_drawdown']:.2%} "
|
||||||
f"({round_coin_value(stats['max_drawdown_abs'], stake_cur)})`"
|
f"({round_coin_value(stats['max_drawdown_abs'], stake_cur)})`\n"
|
||||||
|
f" from `{stats['max_drawdown_start']} "
|
||||||
|
f"({round_coin_value(stats['drawdown_high'], stake_cur)})`\n"
|
||||||
|
f" to `{stats['max_drawdown_end']} "
|
||||||
|
f"({round_coin_value(stats['drawdown_low'], stake_cur)})`\n"
|
||||||
)
|
)
|
||||||
await self._send_msg(markdown_msg, reload_able=True, callback_path="update_profit",
|
await self._send_msg(markdown_msg, reload_able=True, callback_path="update_profit",
|
||||||
query=update.callback_query)
|
query=update.callback_query)
|
||||||
|
|||||||
Reference in New Issue
Block a user