From b331d41c31be1dbe0dd4b6b3954fc64874ee5b90 Mon Sep 17 00:00:00 2001 From: boris Date: Sat, 3 Oct 2026 21:23:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=85=E5=9C=A8=E6=8C=81=E4=BB=93=E9=80=80?= =?UTF-8?q?=E5=BD=B9=E6=97=B6=E5=BD=92=E6=A1=A3=E6=89=B9=E6=AC=A1=E5=BA=8F?= =?UTF-8?q?=E5=8F=B7=E5=B9=B6=E4=BF=9D=E7=95=99=E6=97=A0=E6=8C=81=E4=BB=93?= =?UTF-8?q?=E7=8E=B0=E9=87=91=E6=9D=83=E7=9B=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/fidc-core/src/corporate_book.rs | 2 +- crates/fidc-core/src/portfolio.rs | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/crates/fidc-core/src/corporate_book.rs b/crates/fidc-core/src/corporate_book.rs index f472871..c8601c1 100644 --- a/crates/fidc-core/src/corporate_book.rs +++ b/crates/fidc-core/src/corporate_book.rs @@ -828,7 +828,7 @@ mod tests { sold.prune_flat_positions(); apply(date(), &data, &mut sold, &mut Vec::new(), true, true).unwrap(); assert_eq!(sold.cash_receivables()[0].amount, 50.); - assert_eq!(sold.position("000001.SZ").unwrap().quantity, 0); + assert!(sold.position("000001.SZ").is_none()); let mut converted = conversion_book(); converted.apply_successor_conversion("000001.SZ", "000002.SZ", 2., 0.).unwrap(); apply(date(), &data, &mut converted, &mut Vec::new(), true, true).unwrap(); diff --git a/crates/fidc-core/src/portfolio.rs b/crates/fidc-core/src/portfolio.rs index ea308f4..989047b 100644 --- a/crates/fidc-core/src/portfolio.rs +++ b/crates/fidc-core/src/portfolio.rs @@ -1214,8 +1214,10 @@ impl PortfolioState { pub fn prune_flat_positions(&mut self) { let mut sold_symbols = Vec::new(); for (symbol, position) in &self.positions { - self.retired_lot_sequences.entry(symbol.clone()).and_modify(|next| *next=(*next).max(position.next_lot_sequence)) - .or_insert(position.next_lot_sequence); + if position.is_flat() { + self.retired_lot_sequences.entry(symbol.clone()).and_modify(|next| *next=(*next).max(position.next_lot_sequence)) + .or_insert(position.next_lot_sequence); + } } self.positions.retain(|symbol, position| { if position.is_flat() {