修正AiQuant目标市值估值口径
This commit is contained in:
@@ -2848,8 +2848,15 @@ where
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let valuation_price = self.target_value_valuation_price(date, data, symbol, snapshot);
|
||||
let current_value = valuation_price * current_qty as f64;
|
||||
let current_value = if self.aiquant_rqalpha_execution_rules {
|
||||
portfolio
|
||||
.position(symbol)
|
||||
.map(|position| position.market_value())
|
||||
.unwrap_or(0.0)
|
||||
} else {
|
||||
let valuation_price = self.target_value_valuation_price(date, data, symbol, snapshot);
|
||||
valuation_price * current_qty as f64
|
||||
};
|
||||
let cash_delta = target_value.max(0.0) - current_value;
|
||||
|
||||
if cash_delta.abs() > f64::EPSILON {
|
||||
@@ -5278,7 +5285,7 @@ mod tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn aiquant_target_value_valuation_uses_scheduled_tick_last_price() {
|
||||
fn aiquant_target_value_delta_uses_position_market_value() {
|
||||
let date = chrono::NaiveDate::from_ymd_opt(2023, 5, 8).expect("valid date");
|
||||
let symbol = "603101.SH";
|
||||
let broker = BrokerSimulator::new_with_execution_price(
|
||||
@@ -5369,12 +5376,6 @@ mod tests {
|
||||
vec![quote],
|
||||
)
|
||||
.expect("valid dataset");
|
||||
let snapshot = data.market(date, symbol).expect("market snapshot");
|
||||
assert_eq!(
|
||||
broker.target_value_valuation_price(date, &data, symbol, snapshot),
|
||||
5.83
|
||||
);
|
||||
|
||||
let mut portfolio = PortfolioState::new(8_261_416.62);
|
||||
portfolio.position_mut(symbol).buy(date, 21_200, 5.8817);
|
||||
let mut report = BrokerExecutionReport::default();
|
||||
@@ -5396,11 +5397,12 @@ mod tests {
|
||||
|
||||
assert_eq!(
|
||||
portfolio.position(symbol).map(|pos| pos.quantity),
|
||||
Some(21_400)
|
||||
Some(21_200)
|
||||
);
|
||||
let order = report.order_events.last().expect("target value order");
|
||||
assert_eq!(order.requested_quantity, 200);
|
||||
assert_eq!(order.filled_quantity, 200);
|
||||
if let Some(order) = report.order_events.last() {
|
||||
assert_eq!(order.requested_quantity, 0);
|
||||
assert_eq!(order.filled_quantity, 0);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user