Skip to content

Commit 19e2fac

Browse files
committed
Add load tests
1 parent 958d3b5 commit 19e2fac

File tree

3 files changed

+154
-8
lines changed

3 files changed

+154
-8
lines changed

tests/domain/models/backtesting/test_backtest.py

Lines changed: 63 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@ def test_save_and_open(self):
6161
(0.5, datetime(2020, 6, 30)),
6262
(0.2, datetime(2020, 3, 31))
6363
],
64-
growth=0.0,
65-
growth_percentage=0.0,
66-
total_net_gain=0.0,
67-
total_net_gain_percentage=0.0,
68-
final_value=0.0,
69-
cagr=0.0,
64+
growth=1.0,
65+
growth_percentage=1.0,
66+
total_net_gain=1.0,
67+
total_net_gain_percentage=1.0,
68+
final_value=1.0,
69+
cagr=1.0,
7070
sharpe_ratio=0.0,
7171
rolling_sharpe_ratio=[
7272
(0.0, datetime(2020, 1, 1)),
@@ -280,24 +280,79 @@ def test_save_and_open(self):
280280
backtest = Backtest(
281281
backtest_runs=[backtest_run],
282282
backtest_permutation_tests=[permutation_test_metrics],
283-
backtest_summary=backtest_metrics
283+
backtest_summary=backtest_metrics,
284+
metadata={"strategy": "test_strategy"},
285+
risk_free_rate=0.02
284286
)
285287

286288
# Save the backtest
287289
backtest.save(self.dir_path)
288290
self.assertTrue((self.dir_path / "runs").exists())
289291

290-
# Check that there is atleast one results file
292+
# Check that there is at least one results file
291293
results_dir = (self.dir_path / "runs")
292294
self.assertEqual(1, (len(os.listdir(results_dir))))
293295

296+
# Get the first run
297+
first_run_dir = results_dir / os.listdir(results_dir)[0]
298+
self.assertTrue((first_run_dir / "run.json").exists())
299+
self.assertTrue((first_run_dir / "metrics.json").exists())
300+
294301
# Check that there is a permutation tests directory
295302
self.assertTrue((self.dir_path / "permutation_tests").exists())
296303

297304
# Check if there are 2 permutated_metrics folders
298305
permutated_metrics_dir = (self.dir_path / "permutation_tests")
299306

300307
self.assertEqual(1, (len(os.listdir(permutated_metrics_dir))))
308+
self.assertTrue((self.dir_path / "metadata.json").exists())
309+
self.assertTrue((self.dir_path / "summary.json").exists())
310+
311+
loaded_backtest = Backtest.open(self.dir_path)
312+
self.assertEqual(
313+
len(loaded_backtest.get_all_backtest_runs()), 1
314+
)
315+
self.assertEqual(
316+
len(loaded_backtest.get_all_backtest_permutation_tests()),
317+
1
318+
)
319+
320+
first_backtest_run = loaded_backtest.get_all_backtest_runs()[0]
321+
self.assertEqual(
322+
first_backtest_run.trading_symbol, "EUR"
323+
)
324+
self.assertEqual(
325+
first_backtest_run.backtest_start_date,
326+
datetime(2020, 1, 1)
327+
)
328+
self.assertEqual(
329+
first_backtest_run.backtest_end_date,
330+
datetime(2020, 12, 31)
331+
)
332+
self.assertEqual(
333+
first_backtest_run.initial_unallocated, 1000.0
334+
)
335+
self.assertEqual(
336+
len(first_backtest_run.portfolio_snapshots), 2
337+
)
338+
self.assertEqual(
339+
len(first_backtest_run.trades), 1
340+
)
341+
self.assertEqual(
342+
len(first_backtest_run.orders), 1
343+
)
344+
self.assertEqual(
345+
len(first_backtest_run.positions), 1
346+
)
347+
348+
backtest_metrics = first_backtest_run.backtest_metrics
349+
self.assertIsInstance(backtest_metrics, BacktestMetrics)
350+
self.assertEqual(backtest_metrics.cagr, 1.0)
351+
self.assertEqual(backtest_metrics.sharpe_ratio, 0.0)
352+
self.assertEqual(backtest_metrics.sortino_ratio, 0.0)
353+
self.assertEqual(backtest_metrics.calmar_ratio, 0.0)
354+
self.assertEqual(backtest_metrics.profit_factor, 0.0)
355+
self.assertEqual(backtest_metrics.annual_volatility, 0.0)
301356

302357
def test_get_backtest_run(self):
303358
pass

tests/domain/models/portfolio/__init__.py

Whitespace-only changes.
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
from datetime import datetime, timezone
2+
from unittest import TestCase
3+
4+
from investing_algorithm_framework.domain import PortfolioSnapshot
5+
6+
7+
class Test(TestCase):
8+
9+
def test_to_dict(self):
10+
snapshot = PortfolioSnapshot(
11+
portfolio_id="portfolio_1",
12+
trading_symbol="BTC/USDT",
13+
pending_value=5000,
14+
unallocated=2000,
15+
net_size=3000,
16+
total_net_gain=1500,
17+
total_revenue=7000,
18+
total_cost=5500,
19+
total_value=8000,
20+
cash_flow=1000,
21+
created_at=datetime(
22+
2023,
23+
10,
24+
1,
25+
12,
26+
0,
27+
0,
28+
tzinfo=timezone.utc
29+
),
30+
metadata={"strategy": "mean_reversion"},
31+
)
32+
snapshot_dict = snapshot.to_dict()
33+
self.assertEqual(snapshot_dict["portfolio_id"], "portfolio_1")
34+
self.assertEqual(snapshot_dict["trading_symbol"], "BTC/USDT")
35+
self.assertEqual(snapshot_dict["pending_value"], 5000)
36+
self.assertEqual(snapshot_dict["unallocated"], 2000)
37+
self.assertEqual(snapshot_dict["net_size"], 3000)
38+
self.assertEqual(snapshot_dict["total_net_gain"], 1500)
39+
self.assertEqual(snapshot_dict["total_revenue"], 7000)
40+
self.assertEqual(snapshot_dict["total_cost"], 5500)
41+
self.assertEqual(snapshot_dict["total_value"], 8000)
42+
self.assertEqual(snapshot_dict["cash_flow"], 1000)
43+
self.assertEqual(
44+
snapshot_dict["created_at"],
45+
"2023-10-01 12:00:00"
46+
)
47+
self.assertEqual(
48+
snapshot_dict["metadata"], {"strategy": "mean_reversion"}
49+
)
50+
51+
def test_from_dict(self):
52+
snapshot_data = {
53+
"portfolio_id": "portfolio_1",
54+
"trading_symbol": "BTC/USDT",
55+
"pending_value": 5000,
56+
"unallocated": 2000,
57+
"net_size": 3000,
58+
"total_net_gain": 1500,
59+
"total_revenue": 7000,
60+
"total_cost": 5500,
61+
"total_value": 8000,
62+
"cash_flow": 1000,
63+
"created_at": "2023-10-01T12:00:00+00:00",
64+
"metadata": {"strategy": "mean_reversion"},
65+
}
66+
snapshot = PortfolioSnapshot.from_dict(snapshot_data)
67+
self.assertEqual(snapshot.get_portfolio_id(), "portfolio_1")
68+
self.assertEqual(snapshot.get_trading_symbol(), "BTC/USDT")
69+
self.assertEqual(snapshot.get_pending_value(), 5000)
70+
self.assertEqual(snapshot.unallocated, 2000)
71+
self.assertEqual(snapshot.net_size, 3000)
72+
self.assertEqual(snapshot.total_net_gain, 1500)
73+
self.assertEqual(snapshot.total_revenue, 7000)
74+
self.assertEqual(snapshot.total_cost, 5500)
75+
self.assertEqual(snapshot.total_value, 8000)
76+
self.assertEqual(snapshot.cash_flow, 1000)
77+
self.assertEqual(
78+
snapshot.created_at,
79+
datetime(
80+
2023,
81+
10,
82+
1,
83+
12,
84+
0,
85+
0,
86+
tzinfo=timezone.utc
87+
)
88+
)
89+
self.assertEqual(
90+
snapshot.metadata, {"strategy": "mean_reversion"}
91+
)

0 commit comments

Comments
 (0)