use pine_broker::Trade;
#[derive(Debug, Clone, Default)]
pub struct Backtest {
pub initial_capital: f64,
pub equity: Vec<f64>,
pub trades: Vec<Trade>,
pub net_profit: f64,
pub open_profit: f64,
pub gross_profit: f64,
pub gross_loss: f64,
pub max_drawdown: f64,
pub max_runup: f64,
pub win_trades: usize,
pub loss_trades: usize,
pub even_trades: usize,
pub position_size: f64,
pub mark_price: f64,
}
impl Backtest {
pub fn final_equity(&self) -> f64 {
self.equity.last().copied().unwrap_or(self.initial_capital)
}
pub fn closed_trades(&self) -> impl Iterator<Item = &Trade> {
self.trades.iter().filter(|t| !t.is_open())
}
pub fn open_trades(&self) -> impl Iterator<Item = &Trade> {
self.trades.iter().filter(|t| t.is_open())
}
}