File size: 1,709 Bytes
61a815f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | use crate::config::ValidationConfig;
use crate::models::MarketData;
use anyhow::{Result, bail};
pub struct DataValidator {
config: ValidationConfig,
}
impl DataValidator {
pub fn new(config: ValidationConfig) -> Self {
Self { config }
}
/// 验证市场数据
pub fn validate(&self, data: &MarketData) -> Result<()> {
// 验证价格范围
if let Some(price) = data.avg_sell_price {
if price < self.config.min_price || price > self.config.max_price {
bail!("价格超出范围: {}", price);
}
}
// 验证买卖档价格
for price in [
data.sell1_price, data.sell2_price, data.sell3_price,
data.sell4_price, data.sell5_price,
data.buy1_price, data.buy2_price, data.buy3_price,
data.buy4_price, data.buy5_price,
].iter().flatten() {
if *price < self.config.min_price || *price > self.config.max_price {
bail!("档位价格超出范围: {}", price);
}
}
// 验证数量非负
for volume in [
data.cum_volume,
data.sell1_volume, data.sell2_volume, data.sell3_volume,
data.sell4_volume, data.sell5_volume,
data.buy1_volume, data.buy2_volume, data.buy3_volume,
data.buy4_volume, data.buy5_volume,
].iter().flatten() {
if *volume == 0 {
// 允许为0
}
}
// 验证时间格式
if data.time_sec < 90000 || data.time_sec > 160000 {
// 允许盘前盘后,只做警告
}
Ok(())
}
}
|