From db97ef1451cc5e42bce72ffb7136667108d4ab71 Mon Sep 17 00:00:00 2001 From: Hieu Nguyen Date: Fri, 31 Jan 2025 14:56:56 +0700 Subject: [PATCH 1/2] Attempt to fix position value calculation on velvet strat --- tradeexecutor/state/position.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tradeexecutor/state/position.py b/tradeexecutor/state/position.py index f19afcaa0..d5da6a39c 100644 --- a/tradeexecutor/state/position.py +++ b/tradeexecutor/state/position.py @@ -733,7 +733,16 @@ def calculate_value_using_price( reserve_quantity = sum([t.get_equity_for_reserve() for t in self.trades.values() if t.is_accounted_for_equity()]) - return float(token_quantity) * token_price + float(reserve_quantity) * reserve_price + direct_balance_updates = self.get_base_token_balance_update_quantity() + + value = float(token_quantity) * token_price + float(reserve_quantity) * reserve_price + + if self.is_short(): + value -= float(direct_balance_updates) * token_price + else: + value += float(direct_balance_updates) * token_price + + return value def get_equity(self) -> USDollarAmount: """Get equity tied to this position. From ea16864b18fbdb01f5a2d254da31931379f4db33 Mon Sep 17 00:00:00 2001 From: Hieu Nguyen Date: Sat, 1 Feb 2025 15:31:38 +0700 Subject: [PATCH 2/2] Fix tests --- tests/enzyme/test_enzyme_redeem.py | 4 ++-- tests/legacy/test_repair_trade_missing_tx.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/enzyme/test_enzyme_redeem.py b/tests/enzyme/test_enzyme_redeem.py index aefb57571..c4b1eb9a7 100644 --- a/tests/enzyme/test_enzyme_redeem.py +++ b/tests/enzyme/test_enzyme_redeem.py @@ -232,8 +232,8 @@ def test_enzyme_redeem_open_position( assert len(state.portfolio.open_positions[1].balance_updates) == 1 reserve = state.portfolio.get_default_reserve_position() - assert position.get_value() == pytest.approx(100) + assert position.get_value() == pytest.approx(50) assert reserve.get_value() == pytest.approx(200) - assert state.portfolio.calculate_total_equity() == pytest.approx(300) + assert state.portfolio.calculate_total_equity() == pytest.approx(250) diff --git a/tests/legacy/test_repair_trade_missing_tx.py b/tests/legacy/test_repair_trade_missing_tx.py index 162854952..a0789feb0 100644 --- a/tests/legacy/test_repair_trade_missing_tx.py +++ b/tests/legacy/test_repair_trade_missing_tx.py @@ -53,8 +53,8 @@ def test_repair_trade_missing_tx( assert pos.trades[8].is_missing_blockchain_transactions() assert len(pos.trades) == 4 - assert pos.get_value() == pytest.approx(2831.946809553303) - assert portfolio.calculate_total_equity() == pytest.approx(4062.6783229397383) + assert pos.get_value() == pytest.approx(2822.223554) + assert portfolio.calculate_total_equity() == pytest.approx(4049.33755226) repair_trades = repair_tx_not_generated(state, interactive=False) assert len(repair_trades) == 7 # 7 repairs across two positions @@ -68,5 +68,5 @@ def test_repair_trade_missing_tx( assert len(pos.trades) == 7 # 4 original + 3 repairs added - assert pos.get_value() == pytest.approx(2831.946809553303) - assert portfolio.calculate_total_equity() == pytest.approx(4062.6783229397383) + assert pos.get_value() == pytest.approx(2822.223554) + assert portfolio.calculate_total_equity() == pytest.approx(4049.33755226)