From 13e15cc7c4d5a4179e9aa133acc7ad4bc1a2e9b2 Mon Sep 17 00:00:00 2001 From: boris Date: Sun, 5 Jul 2026 09:35:00 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85next=20open=E5=BC=80=E7=9B=98?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E5=9B=9E=E5=BD=92=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/fidc-core/src/engine.rs | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/crates/fidc-core/src/engine.rs b/crates/fidc-core/src/engine.rs index 0a17167..97410bd 100644 --- a/crates/fidc-core/src/engine.rs +++ b/crates/fidc-core/src/engine.rs @@ -4211,6 +4211,34 @@ mod tests { } } + #[derive(Debug)] + struct AuctionBuyWhenDecisionDateStrategy { + decision_date: NaiveDate, + } + + impl Strategy for AuctionBuyWhenDecisionDateStrategy { + fn name(&self) -> &str { + "auction_buy_when_decision_date" + } + + fn open_auction( + &mut self, + ctx: &StrategyContext<'_>, + ) -> Result { + if ctx.decision_date == self.decision_date && ctx.portfolio.position(SYMBOL).is_none() { + return Ok(StrategyDecision { + order_intents: vec![OrderIntent::Shares { + symbol: SYMBOL.to_string(), + quantity: 100, + reason: "auction_test_buy".to_string(), + }], + ..StrategyDecision::default() + }); + } + Ok(StrategyDecision::default()) + } + } + #[derive(Debug)] struct ScheduledBuyStrategy { rule: ScheduleRule, @@ -4915,7 +4943,7 @@ mod tests { let result = BacktestEngine::new( dataset, - BuyWhenDecisionDateStrategy { + AuctionBuyWhenDecisionDateStrategy { decision_date: second, }, broker,