Extract Closed profit calculation to trade object
This commit is contained in:
parent
ed77889d6b
commit
b41c234440
@ -801,6 +801,19 @@ class Trade(_DECL_BASE, LocalTrade):
|
|||||||
Trade.is_open.is_(False),
|
Trade.is_open.is_(False),
|
||||||
]).all()
|
]).all()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_total_closed_profit() -> float:
|
||||||
|
"""
|
||||||
|
Retrieves total realized profit
|
||||||
|
"""
|
||||||
|
if Trade.use_db:
|
||||||
|
total_profit = Trade.query.with_entities(
|
||||||
|
func.sum(Trade.close_profit_abs)).filter(Trade.is_open.is_(False)).scalar()
|
||||||
|
else:
|
||||||
|
total_profit = sum(
|
||||||
|
t.close_profit_abs for t in LocalTrade.get_trades_proxy(is_open=False))
|
||||||
|
return total_profit or 0
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def total_open_trades_stakes() -> float:
|
def total_open_trades_stakes() -> float:
|
||||||
"""
|
"""
|
||||||
|
@ -70,9 +70,7 @@ class Wallets:
|
|||||||
# If not backtesting...
|
# If not backtesting...
|
||||||
# TODO: potentially remove the ._log workaround to determine backtest mode.
|
# TODO: potentially remove the ._log workaround to determine backtest mode.
|
||||||
if self._log:
|
if self._log:
|
||||||
closed_trades = Trade.get_trades_proxy(is_open=False)
|
tot_profit = Trade.get_total_closed_profit()
|
||||||
tot_profit = sum(
|
|
||||||
[trade.close_profit_abs for trade in closed_trades if trade.close_profit_abs])
|
|
||||||
else:
|
else:
|
||||||
tot_profit = LocalTrade.total_profit
|
tot_profit = LocalTrade.total_profit
|
||||||
tot_in_trades = sum([trade.stake_amount for trade in open_trades])
|
tot_in_trades = sum([trade.stake_amount for trade in open_trades])
|
||||||
|
@ -1124,6 +1124,21 @@ def test_total_open_trades_stakes(fee, use_db):
|
|||||||
Trade.use_db = True
|
Trade.use_db = True
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.usefixtures("init_persistence")
|
||||||
|
@pytest.mark.parametrize('use_db', [True, False])
|
||||||
|
def test_get_total_closed_profit(fee, use_db):
|
||||||
|
|
||||||
|
Trade.use_db = use_db
|
||||||
|
Trade.reset_trades()
|
||||||
|
res = Trade.get_total_closed_profit()
|
||||||
|
assert res == 0
|
||||||
|
create_mock_trades(fee, use_db)
|
||||||
|
res = Trade.get_total_closed_profit()
|
||||||
|
assert res == 0.000739127
|
||||||
|
|
||||||
|
Trade.use_db = True
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures("init_persistence")
|
@pytest.mark.usefixtures("init_persistence")
|
||||||
@pytest.mark.parametrize('use_db', [True, False])
|
@pytest.mark.parametrize('use_db', [True, False])
|
||||||
def test_get_trades_proxy(fee, use_db):
|
def test_get_trades_proxy(fee, use_db):
|
||||||
@ -1298,6 +1313,7 @@ def test_Trade_object_idem():
|
|||||||
'open_date',
|
'open_date',
|
||||||
'get_best_pair',
|
'get_best_pair',
|
||||||
'get_overall_performance',
|
'get_overall_performance',
|
||||||
|
'get_total_closed_profit',
|
||||||
'total_open_trades_stakes',
|
'total_open_trades_stakes',
|
||||||
'get_sold_trades_without_assigned_fees',
|
'get_sold_trades_without_assigned_fees',
|
||||||
'get_open_trades_without_assigned_fees',
|
'get_open_trades_without_assigned_fees',
|
||||||
|
Loading…
Reference in New Issue
Block a user