11from typing import List
22
3- from investing_algorithm_framework .domain .backtesting import Backtest , \
4- BacktestDateRange
3+ from investing_algorithm_framework .domain .backtesting import Backtest
54from investing_algorithm_framework .domain .backtesting import \
65 BacktestSummaryMetrics
76
@@ -30,16 +29,13 @@ def safe_weighted_mean(values, weights):
3029
3130def combine_backtests (
3231 backtests : List [Backtest ],
33- backtest_date_range : BacktestDateRange = None
3432) -> Backtest :
3533 """
3634 Combine multiple backtests into a single backtest by aggregating
3735 their results.
3836
3937 Args:
4038 backtests (List[Backtest]): List of Backtest instances to combine.
41- backtest_date_range (BacktestDateRange, optional): The date range
42- for the combined backtest.
4339
4440 Returns:
4541 Backtest: A new Backtest instance representing the combined results.
@@ -49,19 +45,11 @@ def combine_backtests(
4945
5046 for backtest in backtests :
5147 backtest_metric = None
52- backtest_run = None
48+ backtest_run = backtest .backtest_runs [0 ] \
49+ if len (backtest .backtest_runs ) > 0 else None
5350
54- if backtest_date_range is not None :
55- backtest_metric = \
56- backtest .get_backtest_metrics (backtest_date_range )
57- backtest_run = \
58- backtest .get_backtest_run (backtest_date_range )
59- else :
60- backtest_run = backtest .backtest_runs [0 ] \
61- if len (backtest .backtest_runs ) > 0 else None
62-
63- if backtest_run is not None :
64- backtest_metric = backtest_run .backtest_metrics
51+ if backtest_run is not None :
52+ backtest_metric = backtest_run .backtest_metrics
6553
6654 if backtest_metric is not None :
6755 backtest_metrics .append (backtest_metric )
@@ -196,16 +184,24 @@ def combine_backtests(
196184 )
197185
198186 metadata = None
187+ risk_free_rate = None
199188
200189 # Get first non-empty metadata
201190 for backtest in backtests :
202191 if backtest .metadata :
203192 metadata = backtest .metadata
204193 break
205194
195+ # Get the first risk-free rate
196+ for backtest in backtests :
197+ if backtest .risk_free_rate is not None :
198+ risk_free_rate = backtest .risk_free_rate
199+ break
200+
206201 backtest = Backtest (
207202 backtest_summary = summary ,
208203 metadata = metadata ,
204+ risk_free_rate = risk_free_rate ,
209205 backtest_runs = backtest_runs
210206 )
211207 return backtest
0 commit comments