From 0dca3319508232e350059a55d11fdbdc62892d84 Mon Sep 17 00:00:00 2001 From: boris Date: Sat, 18 Jul 2026 08:54:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=A5=E6=A0=BC=E4=BD=BF=E7=94=A8=E7=9C=9F?= =?UTF-8?q?=E5=AE=9E=E4=B8=8A=E5=B8=82=E5=A4=A9=E6=95=B0=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E5=80=99=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/fidc-core/src/platform_expr_strategy.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/crates/fidc-core/src/platform_expr_strategy.rs b/crates/fidc-core/src/platform_expr_strategy.rs index 4100180..70e08df 100644 --- a/crates/fidc-core/src/platform_expr_strategy.rs +++ b/crates/fidc-core/src/platform_expr_strategy.rs @@ -3650,7 +3650,13 @@ impl PlatformExprStrategy { allow_sell: candidate.allow_sell, touched_upper_limit, touched_lower_limit, - listed_days: if candidate.is_new_listing { 0 } else { 365 }, + listed_days: factor + .extra_factors + .get("listed_days") + .copied() + .filter(|value| value.is_finite() && *value >= 0.0) + .map(|value| value.floor() as i64) + .unwrap_or(-1), stock_ma_short, stock_ma_mid, stock_ma_long, @@ -15902,7 +15908,7 @@ mod tests { pe_ttm: 8.0, turnover_ratio: Some(1.0), effective_turnover_ratio: Some(1.0), - extra_factors: BTreeMap::new(), + extra_factors: BTreeMap::from([("listed_days".to_string(), 263.0)]), }], vec![CandidateEligibility { date, @@ -15965,6 +15971,7 @@ mod tests { assert!((stock.market_cap_bn - 18.0).abs() < 1e-9); assert!((stock.free_float_cap - 9.0).abs() < 1e-9); assert!((stock.free_float_cap_bn - 9.0).abs() < 1e-9); + assert_eq!(stock.listed_days, 263); assert_eq!(stock.close, 10.0); assert!(stock.high.is_nan()); assert!(stock.low.is_nan());