统一每日PIT无风险收益指标

This commit is contained in:
boris
2026-09-03 14:04:51 +08:00
parent b15b93eec1
commit a3a077fa87
3 changed files with 284 additions and 44 deletions
+11 -2
View File
@@ -16,7 +16,7 @@ use crate::futures::{
FuturesAccountState, FuturesExecutionReport, FuturesOrderIntent, FuturesPositionEffect,
FuturesTransactionCostModel,
};
use crate::metrics::{BacktestMetrics, compute_backtest_metrics};
use crate::metrics::{BacktestMetrics, RiskFreeRateContract, compute_backtest_metrics};
use crate::portfolio::{CashReceivable, HoldingSummary, PortfolioState};
use crate::risk_control::{FidcRiskDecisionAudit, RiskCheckScope};
use crate::rules::EquityRuleHooks;
@@ -455,6 +455,7 @@ pub struct BacktestEngine<S, C, R> {
execution_quote_loader: Option<ExecutionQuoteLoader>,
execution_quote_request_cache:
BTreeSet<(NaiveDate, String, Option<NaiveTime>, Option<NaiveTime>)>,
risk_free_rate_contract: Option<RiskFreeRateContract>,
}
impl<S, C, R> BacktestEngine<S, C, R> {
@@ -485,9 +486,15 @@ impl<S, C, R> BacktestEngine<S, C, R> {
futures_validation_config: FuturesValidationConfig::default(),
execution_quote_loader: None,
execution_quote_request_cache: BTreeSet::new(),
risk_free_rate_contract: None,
}
}
pub fn with_risk_free_rate_contract(mut self, contract: RiskFreeRateContract) -> Self {
self.risk_free_rate_contract = Some(contract);
self
}
pub fn into_data(self) -> DataSet {
self.data
}
@@ -3374,7 +3381,9 @@ where
&result.daily_holdings,
&result.account_events,
self.aggregate_initial_cash(),
);
self.risk_free_rate_contract.as_ref(),
)
.map_err(BacktestError::Execution)?;
Ok(result)
}