Skip to content

Commit 5522620

Browse files
committed
Change to combine metrics function
1 parent f67613d commit 5522620

File tree

2 files changed

+17
-26
lines changed

2 files changed

+17
-26
lines changed

investing_algorithm_framework/app/app.py

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
BACKTESTING_START_DATE, BACKTESTING_END_DATE, APP_MODE, MarketCredential, \
1818
AppMode, BacktestDateRange, DATABASE_DIRECTORY_NAME, DataSource, \
1919
BACKTESTING_INITIAL_AMOUNT, SNAPSHOT_INTERVAL, Backtest, \
20-
PortfolioConfiguration, SnapshotInterval, DataType, \
20+
PortfolioConfiguration, SnapshotInterval, DataType, combine_backtests, \
2121
PortfolioProvider, OrderExecutor, ImproperlyConfigured, \
2222
DataProvider, INDEX_DATETIME, tqdm, BacktestPermutationTest, \
2323
LAST_SNAPSHOT_DATETIME, BACKTESTING_FLAG
@@ -929,14 +929,9 @@ def run_vector_backtests(
929929
)
930930

931931
for strategy in backtests_ordered_by_strategy:
932-
# Merge all backtests for the same strategy
933-
main_backtest = Backtest()
934-
strategy_backtests = backtests_ordered_by_strategy[strategy]
935-
936-
for backtest in strategy_backtests:
937-
main_backtest = main_backtest.merge(backtest)
938-
939-
backtests.append(main_backtest)
932+
backtests.append(
933+
combine_backtests(backtests_ordered_by_strategy[strategy])
934+
)
940935

941936
return backtests
942937

investing_algorithm_framework/domain/backtesting/combine_backtests.py

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from typing import List
22

3-
from investing_algorithm_framework.domain.backtesting import Backtest, \
4-
BacktestDateRange
3+
from investing_algorithm_framework.domain.backtesting import Backtest
54
from investing_algorithm_framework.domain.backtesting import \
65
BacktestSummaryMetrics
76

@@ -30,16 +29,13 @@ def safe_weighted_mean(values, weights):
3029

3130
def 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

Comments
 (0)