修正ALV补仓槽位占用语义

This commit is contained in:
boris
2026-07-08 02:03:15 +08:00
parent e847ecd54c
commit 63da6bb1bd
+11 -2
View File
@@ -2262,6 +2262,7 @@ impl PlatformExprStrategy {
slot_working_symbols: &mut BTreeSet<String>, slot_working_symbols: &mut BTreeSet<String>,
same_bar_buy_symbols: &mut BTreeSet<String>, same_bar_buy_symbols: &mut BTreeSet<String>,
pending_full_close_symbols: &BTreeSet<String>, pending_full_close_symbols: &BTreeSet<String>,
slot_blocking_symbols: &BTreeSet<String>,
same_day_sold_symbols: &BTreeSet<String>, same_day_sold_symbols: &BTreeSet<String>,
exit_symbols: &BTreeSet<String>, exit_symbols: &BTreeSet<String>,
delayed_sold_symbols: &BTreeSet<String>, delayed_sold_symbols: &BTreeSet<String>,
@@ -2278,7 +2279,7 @@ impl PlatformExprStrategy {
loop { loop {
let mut budget_working_symbols = slot_working_symbols.clone(); let mut budget_working_symbols = slot_working_symbols.clone();
budget_working_symbols.extend(same_bar_buy_symbols.iter().cloned()); 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 >= selection_limit
{ {
break; break;
@@ -2304,7 +2305,7 @@ impl PlatformExprStrategy {
&budget_working_symbols, &budget_working_symbols,
&value_symbols, &value_symbols,
*pending_buy_value, *pending_buy_value,
pending_full_close_symbols, slot_blocking_symbols,
); );
let available_buy_cash = slot_buy_cash.min(*aiquant_available_cash); let available_buy_cash = slot_buy_cash.min(*aiquant_available_cash);
if debug_daily_top_up { 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 daily_top_up_target_budget = aiquant_total_value * trading_ratio;
let mut daily_top_up_pending_buy_value = 0.0_f64; let mut daily_top_up_pending_buy_value = 0.0_f64;
let mut pending_full_close_symbols = BTreeSet::<String>::new(); let mut pending_full_close_symbols = BTreeSet::<String>::new();
let mut slot_blocking_symbols = delayed_sold_symbols.clone();
let mut interleaved_pending_full_close_symbols = BTreeSet::<String>::new(); let mut interleaved_pending_full_close_symbols = BTreeSet::<String>::new();
let risk_level_forced_exit_time = self.risk_level_forced_exit_time(); let risk_level_forced_exit_time = self.risk_level_forced_exit_time();
self.pending_full_close_symbols.retain(|symbol| { self.pending_full_close_symbols.retain(|symbol| {
@@ -8677,12 +8679,14 @@ impl Strategy for PlatformExprStrategy {
) )
.is_some(); .is_some();
if close_submitted { if close_submitted {
slot_working_symbols.remove(&position.symbol);
if Self::projected_position_is_flat(&projected, &position.symbol) { if Self::projected_position_is_flat(&projected, &position.symbol) {
same_day_sold_symbols.insert(position.symbol.clone()); same_day_sold_symbols.insert(position.symbol.clone());
pending_full_close_symbols.remove(&position.symbol); pending_full_close_symbols.remove(&position.symbol);
self.pending_full_close_symbols.remove(&position.symbol); self.pending_full_close_symbols.remove(&position.symbol);
} else { } else {
pending_full_close_symbols.insert(position.symbol.clone()); pending_full_close_symbols.insert(position.symbol.clone());
slot_blocking_symbols.insert(position.symbol.clone());
self.pending_full_close_symbols self.pending_full_close_symbols
.insert(position.symbol.clone()); .insert(position.symbol.clone());
} }
@@ -8709,6 +8713,7 @@ impl Strategy for PlatformExprStrategy {
&mut slot_working_symbols, &mut slot_working_symbols,
&mut same_bar_buy_symbols, &mut same_bar_buy_symbols,
&pending_full_close_symbols, &pending_full_close_symbols,
&slot_blocking_symbols,
&same_day_sold_symbols, &same_day_sold_symbols,
&exit_symbols, &exit_symbols,
&delayed_sold_symbols, &delayed_sold_symbols,
@@ -8769,6 +8774,7 @@ impl Strategy for PlatformExprStrategy {
self.pending_full_close_symbols.remove(&position.symbol); self.pending_full_close_symbols.remove(&position.symbol);
} else { } else {
pending_full_close_symbols.insert(position.symbol.clone()); pending_full_close_symbols.insert(position.symbol.clone());
slot_blocking_symbols.insert(position.symbol.clone());
self.pending_full_close_symbols self.pending_full_close_symbols
.insert(position.symbol.clone()); .insert(position.symbol.clone());
} }
@@ -8797,6 +8803,7 @@ impl Strategy for PlatformExprStrategy {
&mut slot_working_symbols, &mut slot_working_symbols,
&mut same_bar_buy_symbols, &mut same_bar_buy_symbols,
&pending_full_close_symbols, &pending_full_close_symbols,
&slot_blocking_symbols,
&same_day_sold_symbols, &same_day_sold_symbols,
&exit_symbols, &exit_symbols,
&delayed_sold_symbols, &delayed_sold_symbols,
@@ -8835,6 +8842,7 @@ impl Strategy for PlatformExprStrategy {
self.pending_full_close_symbols.remove(&position.symbol); self.pending_full_close_symbols.remove(&position.symbol);
} else { } else {
pending_full_close_symbols.insert(position.symbol.clone()); pending_full_close_symbols.insert(position.symbol.clone());
slot_blocking_symbols.insert(position.symbol.clone());
self.pending_full_close_symbols self.pending_full_close_symbols
.insert(position.symbol.clone()); .insert(position.symbol.clone());
} }
@@ -8862,6 +8870,7 @@ impl Strategy for PlatformExprStrategy {
&mut slot_working_symbols, &mut slot_working_symbols,
&mut same_bar_buy_symbols, &mut same_bar_buy_symbols,
&pending_full_close_symbols, &pending_full_close_symbols,
&slot_blocking_symbols,
&same_day_sold_symbols, &same_day_sold_symbols,
&exit_symbols, &exit_symbols,
&delayed_sold_symbols, &delayed_sold_symbols,