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());