From de1373deae45987e47e53e24b580924fd0b631f4 Mon Sep 17 00:00:00 2001 From: boris Date: Sun, 5 Jul 2026 23:06:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=97=A5=E7=BA=BF=E6=8A=95?= =?UTF-8?q?=E5=BD=B1=E7=BC=BA=E7=9B=98=E5=8F=A3=E9=87=8F=E6=8B=92=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fidc-core/src/platform_expr_strategy.rs | 40 +++++++++++-------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/crates/fidc-core/src/platform_expr_strategy.rs b/crates/fidc-core/src/platform_expr_strategy.rs index 6e635fd..de1c964 100644 --- a/crates/fidc-core/src/platform_expr_strategy.rs +++ b/crates/fidc-core/src/platform_expr_strategy.rs @@ -1541,7 +1541,10 @@ impl PlatformExprStrategy { let constraints = self.config.risk_config.trading_constraints; let mut max_fill = requested_qty; - if self.config.quote_quantity_limit || constraints.liquidity_limit_enabled { + let enforce_top_level_liquidity = quote.is_some() + && (self.config.quote_quantity_limit || constraints.liquidity_limit_enabled) + || quote.is_none() && constraints.liquidity_limit_enabled; + if enforce_top_level_liquidity { let top_level_liquidity = match (quote, side) { (Some(quote), OrderSide::Buy) => quote .ask1_volume @@ -1555,21 +1558,24 @@ impl PlatformExprStrategy { (None, OrderSide::Sell) => market.liquidity_for_sell().min(u32::MAX as u64) as u32, }; if top_level_liquidity == 0 { - return None; - } - let liquidity_limited = if side == OrderSide::Sell && allow_odd_lot_sell { - top_level_liquidity + if quote.is_some() { + return None; + } } else { - self.round_lot_quantity( - top_level_liquidity, - minimum_order_quantity, - order_step_size, - ) - }; - if liquidity_limited == 0 { - return None; + let liquidity_limited = if side == OrderSide::Sell && allow_odd_lot_sell { + top_level_liquidity + } else { + self.round_lot_quantity( + top_level_liquidity, + minimum_order_quantity, + order_step_size, + ) + }; + if liquidity_limited == 0 { + return None; + } + max_fill = max_fill.min(liquidity_limited); } - max_fill = max_fill.min(liquidity_limited); } if constraints.volume_limit_enabled { @@ -21544,9 +21550,9 @@ mod tests { ask1: 10.0, prev_close: 9.9, volume: 1_000_000, - minute_volume: 10_000, - bid1_volume: 2_000, - ask1_volume: 2_000, + minute_volume: 0, + bid1_volume: 0, + ask1_volume: 0, trading_phase: Some("continuous".to_string()), paused: false, upper_limit: 11.0,