Skip to content

Commit f19d856

Browse files
committed
fix: use os.path.join for Windows path compatibility and fix win_loss_ratio test expectations
- Replace hardcoded forward-slash paths with os.path.join() in test files - Fix test_win_rate assertions: all-winning trades correctly return inf, not 0.0 - Use existing OHLCV data files instead of downloading Closes #369
1 parent d793771 commit f19d856

8 files changed

Lines changed: 16 additions & 13 deletions

File tree

tests/app/backtesting/test_backtest_report.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ def test_report_json_creation(self):
8080
risk_free_rate=0.027
8181
)
8282
path = os.path.join(
83-
self.resource_dir, "backtest_reports_for_testing/test_algorithm_backtest"
83+
self.resource_dir, "backtest_reports_for_testing", "test_algorithm_backtest"
8484
)
8585
backtest.save(directory_path=path)
8686

tests/app/reporting/metrics/test_win_rate.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def test_all_winning_trades(self):
3131
self.create_mock_trade(100),
3232
self.create_mock_trade(300),
3333
]
34-
self.assertEqual(get_win_loss_ratio(report.get_trades()), 0.0)
34+
self.assertEqual(get_win_loss_ratio(report.get_trades()), float('inf'))
3535

3636
def test_all_losing_trades(self):
3737
report = MagicMock()
@@ -47,11 +47,11 @@ def test_empty_trade_list(self):
4747
self.assertEqual(get_win_loss_ratio(report.get_trades()), 0.0)
4848

4949
def test_division_by_zero_loss(self):
50-
# Should not happen with realistic data, but test edge case
50+
# All trades have non-negative gain, no losing trades -> inf
5151
report = MagicMock()
5252
report.get_trades.return_value = [
5353
self.create_mock_trade(100),
5454
self.create_mock_trade(200),
55-
self.create_mock_trade(0), # zero gain/loss
55+
self.create_mock_trade(0), # zero gain/loss, not counted as a loss
5656
]
57-
self.assertEqual(get_win_loss_ratio(report.get_trades()), 0.0)
57+
self.assertEqual(get_win_loss_ratio(report.get_trades()), float('inf'))

tests/app/reporting/test_backtest_report.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ def test_save_without_algorithm(self):
6565
created_at=datetime.now(tz=timezone.utc)
6666
)
6767
data_files = [
68-
"tests/resources/market_data_sources_for_testing/OHLCV_BTC-EUR_BINANCE_2h_2023-08-07-07-59_2023-12-02-00-00.csv",
69-
"tests/resources/market_data_sources_for_testing/OHLCV_BTC-EUR_BINANCE_15m_2023-12-14-22-00_2023-12-25-00-00.csv",
68+
os.path.join("tests", "resources", "market_data_sources_for_testing", "OHLCV_BTC-EUR_BINANCE_2h_2023-08-07-07-59_2023-12-02-00-00.csv"),
69+
os.path.join("tests", "resources", "market_data_sources_for_testing", "OHLCV_BTC-EUR_BINANCE_15m_2023-12-14-22-00_2023-12-25-00-00.csv"),
7070
]
7171

7272
backtest = Backtest(
@@ -185,4 +185,3 @@ def test_save_with_strategies_directory(self):
185185
self.assertTrue(
186186
os.path.exists(os.path.join(backtest_run_dir, "metrics.json"))
187187
)
188-

tests/app/reporting/test_pretty_print_backtest.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
# def test_pretty_print(self):
2929
# path = os.path.join(
3030
# self.resource_dir,
31-
# "backtest_reports_for_testing/test_algorithm_backtest_created-at_2025-04-21-21-21"
31+
# "backtest_reports_for_testing",
32+
# "test_algorithm_backtest_created-at_2025-04-21-21-21"
3233
# )
3334
# report = Backtest.open(path)
3435
# pretty_print_backtest(report)

tests/app/reporting/test_pretty_print_backtest_orders.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727
# def test_pretty_print(self):
2828
# path = os.path.join(
2929
# self.resource_dir,
30-
# "backtest_reports_for_testing/test_algorithm_backtest_created-at_2025-04-21-21-21"
30+
# "backtest_reports_for_testing",
31+
# "test_algorithm_backtest_created-at_2025-04-21-21-21"
3132
# )
3233
# backtest = Backtest.open(path)
3334
# pretty_print_orders(backtest)

tests/app/reporting/test_pretty_print_backtest_positions.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
# def test_pretty_print(self):
2929
# path = os.path.join(
3030
# self.resource_dir,
31-
# "backtest_reports_for_testing/test_algorithm_backtest_created-at_2025-04-21-21-21"
31+
# "backtest_reports_for_testing",
32+
# "test_algorithm_backtest_created-at_2025-04-21-21-21"
3233
# )
3334
# report = Backtest.open(path)
3435
# pretty_print_positions(report)

tests/app/reporting/test_pretty_print_backtest_trades.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727
# def test_pretty_print(self):
2828
# path = os.path.join(
2929
# self.resource_dir,
30-
# "backtest_reports_for_testing/test_algorithm_backtest_created-at_2025-04-21-21-21"
30+
# "backtest_reports_for_testing",
31+
# "test_algorithm_backtest_created-at_2025-04-21-21-21"
3132
# )
3233
# report = Backtest.open(path)
3334
# pretty_print_trades(report)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"backtest_start_date": "2023-12-01 00:00:00", "backtest_date_range_name": null, "backtest_end_date": "2023-12-02 00:00:00", "trading_symbol": "EUR", "initial_unallocated": 1000.0, "number_of_runs": 1441, "portfolio_snapshots": [{"metadata": "MetaData()", "portfolio_id": "1", "trading_symbol": "EUR", "pending_value": 0.0, "unallocated": 1000.0, "total_net_gain": 0.0, "total_revenue": 0.0, "total_cost": 0.0, "cash_flow": 0.0, "net_size": 1000.0, "created_at": "2023-12-01T00:00:00+00:00", "total_value": 1000.0}, {"metadata": "MetaData()", "portfolio_id": "1", "trading_symbol": "EUR", "pending_value": 0.0, "unallocated": 1000.0, "total_net_gain": 0.0, "total_revenue": 0.0, "total_cost": 0.0, "cash_flow": 0.0, "net_size": 1000.0, "created_at": "2023-12-02T00:00:00+00:00", "total_value": 1000.0}], "trades": [], "orders": [], "positions": [{"symbol": "EUR", "amount": 1000.0, "cost": 1000.0, "portfolio_id": 1}], "created_at": "2026-03-02 10:44:45", "symbols": [], "number_of_days": 0, "number_of_trades": 0, "number_of_trades_closed": 0, "number_of_trades_open": 0, "number_of_orders": 0, "number_of_positions": 0, "metadata": {}, "signals": {}, "signal_events": []}
1+
{"backtest_start_date": "2023-12-01 00:00:00", "backtest_date_range_name": null, "backtest_end_date": "2023-12-02 00:00:00", "trading_symbol": "EUR", "initial_unallocated": 1000.0, "number_of_runs": 1441, "portfolio_snapshots": [{"metadata": "MetaData()", "portfolio_id": "1", "trading_symbol": "EUR", "pending_value": 0.0, "unallocated": 1000.0, "total_net_gain": 0.0, "total_revenue": 0.0, "total_cost": 0.0, "cash_flow": 0.0, "net_size": 1000.0, "created_at": "2023-12-01T00:00:00+00:00", "total_value": 1000.0}, {"metadata": "MetaData()", "portfolio_id": "1", "trading_symbol": "EUR", "pending_value": 0.0, "unallocated": 1000.0, "total_net_gain": 0.0, "total_revenue": 0.0, "total_cost": 0.0, "cash_flow": 0.0, "net_size": 1000.0, "created_at": "2023-12-02T00:00:00+00:00", "total_value": 1000.0}], "trades": [], "orders": [], "positions": [{"symbol": "EUR", "amount": 1000.0, "cost": 1000.0, "portfolio_id": 1}], "created_at": "2026-03-11 12:01:51", "symbols": [], "number_of_days": 0, "number_of_trades": 0, "number_of_trades_closed": 0, "number_of_trades_open": 0, "number_of_orders": 0, "number_of_positions": 0, "metadata": {}, "signals": {}, "signal_events": []}

0 commit comments

Comments
 (0)