对齐持仓未实现盈亏口径

This commit is contained in:
boris
2026-09-07 06:26:34 +08:00
parent 1d1c93f8e2
commit c3f88ebf12
+9 -1
View File
@@ -323,6 +323,13 @@ impl Position {
.to_f64()
}
pub fn unrealized_average_price_pnl(&self) -> f64 {
if self.quantity == 0 || !self.average_price.is_finite() || self.average_price <= 0.0 {
return 0.0;
}
(self.last_price - self.average_price) * self.quantity as f64
}
pub fn pnl(&self) -> f64 {
self.realized_pnl.to_f64() + self.unrealized_pnl()
}
@@ -1180,7 +1187,7 @@ impl PortfolioState {
} else {
0.0
},
unrealized_pnl: position.unrealized_entry_pnl(),
unrealized_pnl: position.unrealized_average_price_pnl(),
realized_pnl: position.realized_entry_pnl(),
pnl: position.entry_pnl(),
trading_pnl: position.trading_pnl,
@@ -1441,6 +1448,7 @@ mod tests {
assert!((position.average_price - 7.5).abs() < 1e-12);
assert!((position.average_cost - 7.55).abs() < 1e-12);
assert!((position.average_entry_price().unwrap() - 5.0).abs() < 1e-12);
assert!((position.unrealized_average_price_pnl() + 150.0).abs() < 1e-12);
assert!((realized + 405.0).abs() < 1e-12);
assert!((position.unrealized_pnl() - 95.0).abs() < 1e-12);
assert!((position.pnl() + 310.0).abs() < 1e-12);