[docs]classBacktestConfig:def__init__(self,symbols:List[str],start_date:date,end_date:date,interval:Interval=Interval.DAILY,initial_cash:float=100_000.0,transaction_cost_percent:float=0.001,slippage_percent:float=0.0005):self.symbols=symbolsself.start_date=start_dateself.end_date=end_dateself.interval=intervalself.initial_cash=initial_cashself.transaction_cost_percent=transaction_cost_percentself.slippage_percent=slippage_percent# Validationifnotself.symbols:raiseValueError("Symbols list cannot be empty.")ifself.start_date>=self.end_date:raiseValueError("Start date must be before end date.")ifself.initial_cash<=0:raiseValueError("Initial cash must be positive.")
[docs]defvalidate(self)->BacktestConfig:ifnotself.symbols:raiseValueError("Symbols list cannot be empty.")ifnotself.start_date:raiseValueError("Start date must not be None")ifnotself.end_date:raiseValueError("End date must not be None")ifnotself.interval:raiseValueError("Interval must not be None")ifnotself.initial_cash:raiseValueError("Initial cash must not be None")ifself.start_date>=self.end_date:raiseValueError("Start date must be before end date.")ifself.initial_cash<=0:raiseValueError("Initial cash must be positive.")ifnotself.transaction_cost_percent:self.transaction_cost_percent=0.001ifnotself.slippage_percent:self.slippage_percent=0.0005returnBacktestConfig(self.symbols,self.start_date,self.end_date,self.interval,self.initial_cash,self.transaction_cost_percent,self.slippage_percent)