Add management fee callbacks

This commit is contained in:
boris
2026-04-23 20:18:31 -07:00
parent 85feee6dac
commit c843de078f
9 changed files with 241 additions and 10 deletions

View File

@@ -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]