修复分钟执行价成交量预过滤
This commit is contained in:
@@ -5275,7 +5275,11 @@ where
|
||||
"daily volume limit"
|
||||
};
|
||||
|
||||
if self.inactive_limit && (snapshot.paused || available_market_volume == 0) {
|
||||
let mut max_fill = requested_qty;
|
||||
|
||||
if self.inactive_limit
|
||||
&& (snapshot.paused || (!uses_intraday_quantity && available_market_volume == 0))
|
||||
{
|
||||
return Err(if snapshot.paused {
|
||||
"paused".to_string()
|
||||
} else {
|
||||
@@ -5283,7 +5287,10 @@ where
|
||||
});
|
||||
}
|
||||
|
||||
let mut max_fill = requested_qty;
|
||||
if uses_intraday_quantity {
|
||||
return Ok(max_fill);
|
||||
}
|
||||
|
||||
if self.liquidity_limit && uses_intraday_quantity && !self.is_open_auction_matching() {
|
||||
let top_level_liquidity = match side {
|
||||
OrderSide::Buy => snapshot.liquidity_for_buy(),
|
||||
@@ -6680,6 +6687,29 @@ mod tests {
|
||||
assert_eq!(fillable, Err("daily no volume".to_string()));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn minute_last_prefilter_does_not_use_snapshot_minute_volume() {
|
||||
let mut snapshot = limit_test_snapshot();
|
||||
snapshot.minute_volume = 0;
|
||||
snapshot.volume = 1_000_000;
|
||||
snapshot.bid1_volume = 0;
|
||||
snapshot.ask1_volume = 0;
|
||||
let broker = BrokerSimulator::new_with_execution_price(
|
||||
ChinaAShareCostModel::default(),
|
||||
ChinaEquityRuleHooks,
|
||||
PriceField::Last,
|
||||
)
|
||||
.with_matching_type(MatchingType::MinuteLast)
|
||||
.with_volume_limit(true)
|
||||
.with_volume_percent(0.25)
|
||||
.with_liquidity_limit(false);
|
||||
|
||||
let fillable =
|
||||
broker.market_fillable_quantity(&snapshot, OrderSide::Buy, 5_000, 100, 100, 0, false);
|
||||
|
||||
assert_eq!(fillable, Ok(5_000));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn target_value_valuation_uses_daily_snapshot_but_value_order_sizing_uses_intraday_minute() {
|
||||
let date = chrono::NaiveDate::from_ymd_opt(2025, 1, 2).expect("valid date");
|
||||
|
||||
Reference in New Issue
Block a user