From e368bad7e4d4653694baf4e8085923d033ece51c Mon Sep 17 00:00:00 2001 From: boris Date: Tue, 25 Aug 2026 15:08:33 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E5=87=80=E5=80=BC=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E5=AE=9A=E7=82=B9=E9=87=8D=E5=A4=8D=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/fidc-core/src/portfolio.rs | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/crates/fidc-core/src/portfolio.rs b/crates/fidc-core/src/portfolio.rs index db00ff7..39203ff 100644 --- a/crates/fidc-core/src/portfolio.rs +++ b/crates/fidc-core/src/portfolio.rs @@ -907,7 +907,7 @@ impl PortfolioState { } pub fn total_equity(&self) -> f64 { - self.total_equity_money().to_f64() + self.cash.to_f64() + self.market_value() - self.cash_liabilities.to_f64() } pub fn total_value(&self) -> f64 { @@ -1112,25 +1112,6 @@ impl PortfolioState { }) } - fn market_value_money(&self) -> FixedMoney { - self.positions - .values() - .fold(FixedMoney::ZERO, |total, position| { - let value = Self::fixed_money(position.market_value(), "position market value") - .expect("position market value must be finite fixed-point money"); - total - .checked_add(value) - .expect("fixed-point market value overflow") - }) - } - - fn total_equity_money(&self) -> FixedMoney { - self.cash - .checked_add(self.market_value_money()) - .and_then(|value| value.checked_sub(self.cash_liabilities)) - .expect("fixed-point total equity overflow") - } - fn refresh_dividend_receivables(&mut self) { let mut per_symbol = BTreeMap::::new(); for receivable in &self.cash_receivables { @@ -1147,8 +1128,8 @@ impl PortfolioState { ) -> Result<(), String> { if unit_net_value_before > 0.0 && unit_net_value_before.is_finite() { let unit_nav = Self::fixed_money(unit_net_value_before, "unit net value")?; - let units_raw = self - .total_equity_money() + let total_equity = Self::fixed_money(self.total_equity(), "total equity")?; + let units_raw = total_equity .raw() .checked_mul(MONEY_SCALE) .and_then(|value| value.checked_div(unit_nav.raw()))