From 5929fedf91c31d11aeb27479adf347d9f71e0a6e Mon Sep 17 00:00:00 2001 From: Boris Date: Wed, 26 Aug 2026 06:39:13 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=B3=E8=BF=87=E9=9B=B6=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E8=B4=B9=E6=97=A0=E6=95=88=E9=9B=86=E5=90=88=E5=A4=8D=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/fidc-core/src/engine.rs | 35 ++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/crates/fidc-core/src/engine.rs b/crates/fidc-core/src/engine.rs index 189275a..a1a6ab5 100644 --- a/crates/fidc-core/src/engine.rs +++ b/crates/fidc-core/src/engine.rs @@ -2952,20 +2952,27 @@ where merge_broker_report(&mut directive_report, futures_daily_settlement_report); let futures_expiration_report = self.settle_futures_expirations(execution_date); merge_broker_report(&mut directive_report, futures_expiration_report); - let dynamic_universe_snapshot = self.dynamic_universe.clone(); - let subscriptions_snapshot = self.subscriptions.clone(); - let management_fee_report = self.apply_management_fee( - execution_date, - decision_date, - decision_index, - &mut portfolio, - &post_close_open_orders, - dynamic_universe_snapshot.as_ref(), - &subscriptions_snapshot, - &mut process_events, - result.order_events.as_slice(), - result.fills.as_slice(), - )?; + let management_fee_report = if portfolio.management_fee_rate() <= 0.0 { + BrokerExecutionReport::default() + } else { + // The strategy context needs an immutable view while the + // engine mutably invokes the strategy. Avoid cloning these + // potentially large sets unless management fees are enabled. + let dynamic_universe_snapshot = self.dynamic_universe.clone(); + let subscriptions_snapshot = self.subscriptions.clone(); + self.apply_management_fee( + execution_date, + decision_date, + decision_index, + &mut portfolio, + &post_close_open_orders, + dynamic_universe_snapshot.as_ref(), + &subscriptions_snapshot, + &mut process_events, + result.order_events.as_slice(), + result.fills.as_slice(), + )? + }; merge_broker_report(&mut directive_report, management_fee_report); publish_phase_event( &mut self.strategy,