拆分ST与星号ST风控语义

This commit is contained in:
boris
2026-07-03 09:00:50 +08:00
parent c32926cc34
commit 3bb001c374
17 changed files with 308 additions and 36 deletions
+13 -7
View File
@@ -202,6 +202,8 @@ pub struct CandidateEligibility {
pub date: NaiveDate,
pub symbol: String,
pub is_st: bool,
#[serde(default)]
pub is_star_st: bool,
pub is_new_listing: bool,
pub is_paused: bool,
pub allow_buy: bool,
@@ -215,6 +217,7 @@ pub struct CandidateEligibility {
impl CandidateEligibility {
pub fn eligible_for_selection(&self) -> bool {
!self.is_st
&& !self.is_star_st
&& !self.is_new_listing
&& !self.is_paused
&& !self.is_kcb
@@ -3128,15 +3131,16 @@ fn read_candidates(path: &Path) -> Result<Vec<CandidateEligibility>, DataSetErro
date: row.parse_date(0)?,
symbol: row.get(1)?.to_string(),
is_st: row.parse_bool(2)?,
is_new_listing: row.parse_bool(3)?,
is_paused: row.parse_bool(4)?,
allow_buy: row.parse_bool(5)?,
allow_sell: row.parse_bool(6)?,
is_kcb: row.parse_optional_bool(7).unwrap_or(false),
is_one_yuan: row.parse_optional_bool(8).unwrap_or(false),
is_star_st: row.parse_bool(3)?,
is_new_listing: row.parse_bool(4)?,
is_paused: row.parse_bool(5)?,
allow_buy: row.parse_bool(6)?,
allow_sell: row.parse_bool(7)?,
is_kcb: row.parse_optional_bool(8).unwrap_or(false),
is_one_yuan: row.parse_optional_bool(9).unwrap_or(false),
risk_level_code: row
.fields
.get(9)
.get(10)
.map(String::as_str)
.map(str::trim)
.filter(|value| !value.is_empty())
@@ -4003,6 +4007,7 @@ mod tests {
date,
symbol: symbol.to_string(),
is_st: false,
is_star_st: false,
is_new_listing: false,
is_paused: false,
allow_buy: true,
@@ -4093,6 +4098,7 @@ mod tests {
date,
symbol: symbol.to_string(),
is_st: false,
is_star_st: false,
is_new_listing: false,
is_paused: false,
allow_buy: true,