From 63da6bb1bdee28928b2695c86f55cb3eff5df0d9 Mon Sep 17 00:00:00 2001 From: boris Date: Wed, 8 Jul 2026 02:03:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3ALV=E8=A1=A5=E4=BB=93?= =?UTF-8?q?=E6=A7=BD=E4=BD=8D=E5=8D=A0=E7=94=A8=E8=AF=AD=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/fidc-core/src/platform_expr_strategy.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/crates/fidc-core/src/platform_expr_strategy.rs b/crates/fidc-core/src/platform_expr_strategy.rs index abb4768..e60cb86 100644 --- a/crates/fidc-core/src/platform_expr_strategy.rs +++ b/crates/fidc-core/src/platform_expr_strategy.rs @@ -2262,6 +2262,7 @@ impl PlatformExprStrategy { slot_working_symbols: &mut BTreeSet, same_bar_buy_symbols: &mut BTreeSet, pending_full_close_symbols: &BTreeSet, + slot_blocking_symbols: &BTreeSet, same_day_sold_symbols: &BTreeSet, exit_symbols: &BTreeSet, delayed_sold_symbols: &BTreeSet, @@ -2278,7 +2279,7 @@ impl PlatformExprStrategy { loop { let mut budget_working_symbols = slot_working_symbols.clone(); budget_working_symbols.extend(same_bar_buy_symbols.iter().cloned()); - if Self::effective_slot_count(&budget_working_symbols, pending_full_close_symbols) + if Self::effective_slot_count(&budget_working_symbols, slot_blocking_symbols) >= selection_limit { break; @@ -2304,7 +2305,7 @@ impl PlatformExprStrategy { &budget_working_symbols, &value_symbols, *pending_buy_value, - pending_full_close_symbols, + slot_blocking_symbols, ); let available_buy_cash = slot_buy_cash.min(*aiquant_available_cash); if debug_daily_top_up { @@ -8331,6 +8332,7 @@ impl Strategy for PlatformExprStrategy { let daily_top_up_target_budget = aiquant_total_value * trading_ratio; let mut daily_top_up_pending_buy_value = 0.0_f64; let mut pending_full_close_symbols = BTreeSet::::new(); + let mut slot_blocking_symbols = delayed_sold_symbols.clone(); let mut interleaved_pending_full_close_symbols = BTreeSet::::new(); let risk_level_forced_exit_time = self.risk_level_forced_exit_time(); self.pending_full_close_symbols.retain(|symbol| { @@ -8677,12 +8679,14 @@ impl Strategy for PlatformExprStrategy { ) .is_some(); if close_submitted { + slot_working_symbols.remove(&position.symbol); if Self::projected_position_is_flat(&projected, &position.symbol) { same_day_sold_symbols.insert(position.symbol.clone()); pending_full_close_symbols.remove(&position.symbol); self.pending_full_close_symbols.remove(&position.symbol); } else { pending_full_close_symbols.insert(position.symbol.clone()); + slot_blocking_symbols.insert(position.symbol.clone()); self.pending_full_close_symbols .insert(position.symbol.clone()); } @@ -8709,6 +8713,7 @@ impl Strategy for PlatformExprStrategy { &mut slot_working_symbols, &mut same_bar_buy_symbols, &pending_full_close_symbols, + &slot_blocking_symbols, &same_day_sold_symbols, &exit_symbols, &delayed_sold_symbols, @@ -8769,6 +8774,7 @@ impl Strategy for PlatformExprStrategy { self.pending_full_close_symbols.remove(&position.symbol); } else { pending_full_close_symbols.insert(position.symbol.clone()); + slot_blocking_symbols.insert(position.symbol.clone()); self.pending_full_close_symbols .insert(position.symbol.clone()); } @@ -8797,6 +8803,7 @@ impl Strategy for PlatformExprStrategy { &mut slot_working_symbols, &mut same_bar_buy_symbols, &pending_full_close_symbols, + &slot_blocking_symbols, &same_day_sold_symbols, &exit_symbols, &delayed_sold_symbols, @@ -8835,6 +8842,7 @@ impl Strategy for PlatformExprStrategy { self.pending_full_close_symbols.remove(&position.symbol); } else { pending_full_close_symbols.insert(position.symbol.clone()); + slot_blocking_symbols.insert(position.symbol.clone()); self.pending_full_close_symbols .insert(position.symbol.clone()); } @@ -8862,6 +8870,7 @@ impl Strategy for PlatformExprStrategy { &mut slot_working_symbols, &mut same_bar_buy_symbols, &pending_full_close_symbols, + &slot_blocking_symbols, &same_day_sold_symbols, &exit_symbols, &delayed_sold_symbols,