Add management fee callbacks
This commit is contained in:
@@ -525,11 +525,23 @@ impl Strategy for AccountFlowStrategy {
|
||||
receiving_days: 1,
|
||||
reason: "cash_in_next_day".to_string(),
|
||||
},
|
||||
OrderIntent::SetManagementFeeRate {
|
||||
rate: 0.01,
|
||||
reason: "enable_fee".to_string(),
|
||||
},
|
||||
],
|
||||
notes: Vec::new(),
|
||||
diagnostics: Vec::new(),
|
||||
})
|
||||
}
|
||||
|
||||
fn management_fee(
|
||||
&mut self,
|
||||
_ctx: &StrategyContext<'_>,
|
||||
_rate: f64,
|
||||
) -> Result<Option<f64>, fidc_core::BacktestError> {
|
||||
Ok(Some(42.0))
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -1489,10 +1501,10 @@ fn engine_applies_account_cash_flow_and_financing_intents() {
|
||||
|
||||
let result = engine.run().expect("backtest run");
|
||||
|
||||
assert!((result.equity_curve[0].cash - 11_500.0).abs() < 1e-6);
|
||||
assert!((result.equity_curve[0].total_equity - 10_500.0).abs() < 1e-6);
|
||||
assert!((result.equity_curve[1].cash - 12_500.0).abs() < 1e-6);
|
||||
assert!((result.equity_curve[1].total_equity - 11_500.0).abs() < 1e-6);
|
||||
assert!((result.equity_curve[0].cash - 11_458.0).abs() < 1e-6);
|
||||
assert!((result.equity_curve[0].total_equity - 10_458.0).abs() < 1e-6);
|
||||
assert!((result.equity_curve[1].cash - 12_416.0).abs() < 1e-6);
|
||||
assert!((result.equity_curve[1].total_equity - 11_416.0).abs() < 1e-6);
|
||||
assert!(result.account_events.iter().any(|event| {
|
||||
event
|
||||
.note
|
||||
@@ -1508,10 +1520,18 @@ fn engine_applies_account_cash_flow_and_financing_intents() {
|
||||
.note
|
||||
.contains("deposit_withdraw_settled amount=1000.00")
|
||||
}));
|
||||
assert!(result.account_events.iter().any(|event| {
|
||||
event
|
||||
.note
|
||||
.contains("management_fee rate=0.010000 fee=42.00")
|
||||
}));
|
||||
assert!(result.process_events.iter().any(|event| {
|
||||
event.kind == ProcessEventKind::AccountFinanceRepay
|
||||
&& event.detail.contains("liabilities_after=1000.00")
|
||||
}));
|
||||
assert!(result.process_events.iter().any(|event| {
|
||||
event.kind == ProcessEventKind::AccountManagementFee && event.detail.contains("fee=42.00")
|
||||
}));
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user