Add trading volume to /profit output
This commit is contained in:
parent
6a15d36d14
commit
40c9abc7e1
@ -1352,3 +1352,19 @@ class Trade(_DECL_BASE, LocalTrade):
|
|||||||
.group_by(Trade.pair) \
|
.group_by(Trade.pair) \
|
||||||
.order_by(desc('profit_sum')).first()
|
.order_by(desc('profit_sum')).first()
|
||||||
return best_pair
|
return best_pair
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_trading_volume(start_date: datetime = datetime.fromtimestamp(0)) -> float:
|
||||||
|
"""
|
||||||
|
Get Trade volume based on Orders
|
||||||
|
NOTE: Not supported in Backtesting.
|
||||||
|
:returns: Tuple containing (pair, profit_sum)
|
||||||
|
"""
|
||||||
|
trading_volume = Order.query.with_entities(
|
||||||
|
func.sum(Order.cost).label('volume')
|
||||||
|
).filter(
|
||||||
|
(Order.order_filled_date >= start_date)
|
||||||
|
& (Order.status == 'closed')
|
||||||
|
) \
|
||||||
|
.scalar()
|
||||||
|
return trading_volume
|
||||||
|
@ -452,6 +452,7 @@ class RPC:
|
|||||||
profit_all_ratio.append(profit_ratio)
|
profit_all_ratio.append(profit_ratio)
|
||||||
|
|
||||||
best_pair = Trade.get_best_pair(start_date)
|
best_pair = Trade.get_best_pair(start_date)
|
||||||
|
trading_volume = Trade.get_trading_volume(start_date)
|
||||||
|
|
||||||
# Prepare data to display
|
# Prepare data to display
|
||||||
profit_closed_coin_sum = round(sum(profit_closed_coin), 8)
|
profit_closed_coin_sum = round(sum(profit_closed_coin), 8)
|
||||||
@ -531,6 +532,7 @@ class RPC:
|
|||||||
'profit_factor': profit_factor,
|
'profit_factor': profit_factor,
|
||||||
'max_drawdown': max_drawdown,
|
'max_drawdown': max_drawdown,
|
||||||
'max_drawdown_abs': max_drawdown_abs,
|
'max_drawdown_abs': max_drawdown_abs,
|
||||||
|
'trading_volume': trading_volume,
|
||||||
}
|
}
|
||||||
|
|
||||||
def _rpc_balance(self, stake_currency: str, fiat_display_currency: str) -> Dict:
|
def _rpc_balance(self, stake_currency: str, fiat_display_currency: str) -> Dict:
|
||||||
|
@ -737,6 +737,7 @@ class Telegram(RPCHandler):
|
|||||||
markdown_msg += (
|
markdown_msg += (
|
||||||
f"\n*Avg. Duration:* `{avg_duration}`\n"
|
f"\n*Avg. Duration:* `{avg_duration}`\n"
|
||||||
f"*Best Performing:* `{best_pair}: {best_pair_profit_ratio:.2%}`\n"
|
f"*Best Performing:* `{best_pair}: {best_pair_profit_ratio:.2%}`\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)})`"
|
||||||
|
@ -706,6 +706,7 @@ def test_profit_handle(default_conf_usdt, update, ticker_usdt, ticker_sell_up, f
|
|||||||
assert '*Best Performing:* `ETH/USDT: 9.45%`' in msg_mock.call_args_list[-1][0][0]
|
assert '*Best Performing:* `ETH/USDT: 9.45%`' in msg_mock.call_args_list[-1][0][0]
|
||||||
assert '*Max Drawdown:*' in msg_mock.call_args_list[-1][0][0]
|
assert '*Max Drawdown:*' in msg_mock.call_args_list[-1][0][0]
|
||||||
assert '*Profit factor:*' in msg_mock.call_args_list[-1][0][0]
|
assert '*Profit factor:*' in msg_mock.call_args_list[-1][0][0]
|
||||||
|
assert '*Trading volume:* `60 USDT`' in msg_mock.call_args_list[-1][0][0]
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('is_short', [True, False])
|
@pytest.mark.parametrize('is_short', [True, False])
|
||||||
|
Loading…
Reference in New Issue
Block a user