diff --git a/crates/fidc-core/src/cost.rs b/crates/fidc-core/src/cost.rs index 77acaad..aaeea47 100644 --- a/crates/fidc-core/src/cost.rs +++ b/crates/fidc-core/src/cost.rs @@ -55,6 +55,7 @@ impl Default for ChinaAShareCostModel { impl ChinaAShareCostModel { pub fn aiquant_rqalpha_default() -> Self { Self { + commission_rate: 0.00025, stamp_tax_rate_before_change: 0.0005, stamp_tax_rate_after_change: 0.0005, ..Self::default() diff --git a/crates/fidc-core/tests/core_rules.rs b/crates/fidc-core/tests/core_rules.rs index 7233015..e19217d 100644 --- a/crates/fidc-core/tests/core_rules.rs +++ b/crates/fidc-core/tests/core_rules.rs @@ -66,6 +66,22 @@ fn china_cost_model_applies_minimum_commission_and_stamp_tax() { assert!((sell.stamp_tax - 100.0).abs() < 1e-9); } +#[test] +fn aiquant_rqalpha_cost_model_matches_alv_run_options() { + let model = ChinaAShareCostModel::aiquant_rqalpha_default(); + + let buy = model.calculate(d(2026, 5, 19), OrderSide::Buy, 49_978.84); + assert!((buy.commission - 12.49471).abs() < 1e-9); + assert_eq!(buy.stamp_tax, 0.0); + + let sell = model.calculate(d(2026, 5, 19), OrderSide::Sell, 100_724.72); + assert!((sell.commission - 25.18118).abs() < 1e-9); + assert!((sell.stamp_tax - 50.36236).abs() < 1e-9); + + let small_buy = model.calculate(d(2026, 5, 19), OrderSide::Buy, 1_000.0); + assert!((small_buy.commission - 5.0).abs() < 1e-9); +} + #[test] fn china_cost_model_switches_stamp_tax_rate_after_2023_08_28() { let model = ChinaAShareCostModel::default();