mirror of
https://github.com/freqtrade/freqtrade.git
synced 2025-11-29 08:33:07 +00:00
feat: update get_trading_volume interface to allow filtering for more props
This commit is contained in:
@@ -2106,16 +2106,18 @@ class Trade(ModelBase, LocalTrade):
|
|||||||
return best_pair
|
return best_pair
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_trading_volume(start_date: datetime | None = None) -> float:
|
def get_trading_volume(trade_filter: list | None = None) -> float:
|
||||||
"""
|
"""
|
||||||
Get Trade volume based on Orders
|
Get Trade volume based on Orders
|
||||||
NOTE: Not supported in Backtesting.
|
NOTE: Not supported in Backtesting.
|
||||||
:returns: Tuple containing (pair, profit_sum)
|
:returns: Tuple containing (pair, profit_sum)
|
||||||
"""
|
"""
|
||||||
filters = [Order.status == "closed"]
|
if not trade_filter:
|
||||||
if start_date:
|
trade_filter = []
|
||||||
filters.append(Order.order_filled_date >= start_date)
|
trade_filter.append(Order.status == "closed")
|
||||||
trading_volume = Trade.session.execute(
|
trading_volume = Trade.session.execute(
|
||||||
select(func.sum(Order.cost).label("volume")).filter(*filters)
|
select(func.sum(Order.cost).label("volume"))
|
||||||
|
.join(Order._trade_live)
|
||||||
|
.filter(*trade_filter)
|
||||||
).scalar_one()
|
).scalar_one()
|
||||||
return trading_volume or 0.0
|
return trading_volume or 0.0
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ from freqtrade.exchange import Exchange, timeframe_to_minutes, timeframe_to_msec
|
|||||||
from freqtrade.exchange.exchange_utils import price_to_precision
|
from freqtrade.exchange.exchange_utils import price_to_precision
|
||||||
from freqtrade.ft_types import AnnotationType
|
from freqtrade.ft_types import AnnotationType
|
||||||
from freqtrade.loggers import bufferHandler
|
from freqtrade.loggers import bufferHandler
|
||||||
from freqtrade.persistence import CustomDataWrapper, KeyValueStore, PairLocks, Trade
|
from freqtrade.persistence import CustomDataWrapper, KeyValueStore, Order, PairLocks, Trade
|
||||||
from freqtrade.persistence.models import PairLock, custom_data_rpc_wrapper
|
from freqtrade.persistence.models import PairLock, custom_data_rpc_wrapper
|
||||||
from freqtrade.plugins.pairlist.pairlist_helpers import expand_pairlist
|
from freqtrade.plugins.pairlist.pairlist_helpers import expand_pairlist
|
||||||
from freqtrade.rpc.fiat_convert import CryptoToFiatConverter
|
from freqtrade.rpc.fiat_convert import CryptoToFiatConverter
|
||||||
@@ -585,11 +585,14 @@ class RPC:
|
|||||||
Trade.is_open.is_(False) & (Trade.close_date >= start_date)
|
Trade.is_open.is_(False) & (Trade.close_date >= start_date)
|
||||||
) | Trade.is_open.is_(True)
|
) | Trade.is_open.is_(True)
|
||||||
|
|
||||||
if direction:
|
if direction == "long":
|
||||||
if direction == "long":
|
dir_filter = Trade.is_short.is_(False)
|
||||||
trade_filter = trade_filter & Trade.is_short.is_(False)
|
trade_filter = trade_filter & dir_filter
|
||||||
elif direction == "short":
|
elif direction == "short":
|
||||||
trade_filter = trade_filter & Trade.is_short.is_(True)
|
dir_filter = Trade.is_short.is_(True)
|
||||||
|
trade_filter = trade_filter & dir_filter
|
||||||
|
else:
|
||||||
|
dir_filter = True
|
||||||
|
|
||||||
trades: Sequence[Trade] = Trade.session.scalars(
|
trades: Sequence[Trade] = Trade.session.scalars(
|
||||||
Trade.get_trades_query(trade_filter, include_orders=False).order_by(Trade.id)
|
Trade.get_trades_query(trade_filter, include_orders=False).order_by(Trade.id)
|
||||||
@@ -610,7 +613,9 @@ class RPC:
|
|||||||
closed_trade_count = len([t for t in trades if not t.is_open])
|
closed_trade_count = len([t for t in trades if not t.is_open])
|
||||||
|
|
||||||
best_pair = Trade.get_best_pair(start_date)
|
best_pair = Trade.get_best_pair(start_date)
|
||||||
trading_volume = Trade.get_trading_volume(start_date)
|
trading_volume = Trade.get_trading_volume(
|
||||||
|
[Order.order_filled_date >= start_date, dir_filter]
|
||||||
|
)
|
||||||
|
|
||||||
# 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)
|
||||||
|
|||||||
Reference in New Issue
Block a user