pub const FLOAT_EPSILON: f64 = 1e-10;
#[inline]
pub fn is_valid_price(price: f64) -> bool {
price > 0.0 && !price.is_nan()
}
pub mod config;
pub mod mae_mfe;
pub mod portfolio;
pub mod position;
pub mod returns;
pub mod simulation;
pub mod stats;
pub mod stops;
pub mod tracker;
pub mod trades;
pub mod weights;
pub use returns::{cumulative_returns, daily_returns, portfolio_return};
pub use simulation::{
run_backtest, run_backtest_with_trades, BacktestConfig, BacktestResult, WideBacktestResult,
PriceData, TradeRecord, WideTradeRecord,
};
pub use stats::{calc_cagr, max_drawdown, sharpe_ratio, sortino_ratio, BacktestStats};
pub use position::PositionSnapshot;
pub use trades::TradeRecord as TradeBookRecord;
pub use weights::IntoWeights;
pub use mae_mfe::{MaeMfeConfig, MaeMfeMetrics, calculate_mae_mfe, calculate_mae_mfe_at_exit};