Skip to content

Commit e6b3186

Browse files
committed
Make datetimes timezone aware
1 parent f64ca4b commit e6b3186

File tree

8 files changed

+32
-12
lines changed

8 files changed

+32
-12
lines changed

investing_algorithm_framework/infrastructure/models/market_data_sources/ccxt.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
import pytz
23
import os
34
from datetime import timedelta, datetime, timezone
45
import polars
@@ -160,6 +161,13 @@ def _precompute_sliding_windows(self):
160161
for i in range(len(timestamps) - self.window_size + 1):
161162
# Use last timestamp as key
162163
end_time = timestamps[i + self.window_size - 1]
164+
165+
# Convert end_time datetime object to UTC
166+
if isinstance(end_time, str):
167+
end_time = parser.parse(end_time).astimezone(pytz.UTC)
168+
elif isinstance(end_time, datetime):
169+
end_time = end_time.replace(tzinfo=timezone.utc)
170+
163171
self.window_cache[end_time] = self.data.slice(i, self.window_size)
164172

165173
def load_data(self):
@@ -218,6 +226,9 @@ def get_data(
218226

219227
closest_date = None
220228
for ts in reversed(sorted_timestamps):
229+
date = date.astimezone(pytz.UTC)
230+
ts = ts.astimezone(pytz.UTC)
231+
221232
if ts < date:
222233
closest_date = ts
223234
break

tests/resources/strategies_for_testing/strategy_v1/strategy_v1.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ def apply_strategy(self, context: Context, market_data):
4545
continue
4646

4747
ohlcv_data = market_data[f"{pair}-ohlcv-2h"]
48+
49+
if ohlcv_data is None:
50+
return
51+
4852
# ticker_data = market_data[f"{symbol}-ticker"]
4953
# Add fast, slow, and trend EMAs to the data
5054
ohlcv_data = ema(

tests/scenarios/test_run_backtest_algorithm_param.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
from datetime import datetime, timedelta
1+
import time
2+
from datetime import datetime, timedelta, timezone
23
from unittest import TestCase
34

45
from investing_algorithm_framework import create_app, BacktestDateRange, \
@@ -12,9 +13,10 @@ class Test(TestCase):
1213
def test_run(self):
1314
"""
1415
"""
16+
start_time = time.time()
1517
app = create_app(name="GoldenCrossStrategy")
1618
app.add_market(market="BINANCE", trading_symbol="EUR", initial_balance=400)
17-
end_date = datetime(2023, 12, 2)
19+
end_date = datetime(2023, 12, 2, tzinfo=timezone.utc)
1820
start_date = end_date - timedelta(days=100)
1921
date_range = BacktestDateRange(
2022
start_date=start_date, end_date=end_date
@@ -44,3 +46,6 @@ def test_run(self):
4446
self.assertAlmostEqual(
4547
backtest_report.get_profit_percentage(), 0.8, delta=0.05
4648
)
49+
end_time = time.time()
50+
elapsed_time = end_time - start_time
51+
print(f"Test completed in {elapsed_time:.2f} seconds")

tests/scenarios/test_run_backtest_multiple_strategies_param.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import datetime, timedelta
1+
from datetime import datetime, timedelta, timezone
22
from unittest import TestCase
33

44
from investing_algorithm_framework import create_app, BacktestDateRange
@@ -15,7 +15,7 @@ def test_run(self):
1515
"""
1616
app = create_app(name="GoldenCrossStrategy")
1717
app.add_market(market="BINANCE", trading_symbol="EUR", initial_balance=400)
18-
end_date = datetime(2023, 12, 2)
18+
end_date = datetime(2023, 12, 2, tzinfo=timezone.utc)
1919
start_date = end_date - timedelta(days=100)
2020
date_range = BacktestDateRange(
2121
start_date=start_date, end_date=end_date

tests/scenarios/test_run_backtest_single_strategy_param.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import datetime, timedelta
1+
from datetime import datetime, timedelta, timezone
22
from unittest import TestCase
33

44
from investing_algorithm_framework import create_app, BacktestDateRange
@@ -13,7 +13,7 @@ def test_run(self):
1313
"""
1414
app = create_app(name="GoldenCrossStrategy")
1515
app.add_market(market="BINANCE", trading_symbol="EUR", initial_balance=400)
16-
end_date = datetime(2023, 12, 2)
16+
end_date = datetime(2023, 12, 2, tzinfo=timezone.utc)
1717
start_date = end_date - timedelta(days=100)
1818
date_range = BacktestDateRange(
1919
start_date=start_date, end_date=end_date

tests/scenarios/test_run_backtest_strategies_attribute.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import datetime, timedelta
1+
from datetime import datetime, timedelta, timezone
22
from unittest import TestCase
33

44
from investing_algorithm_framework import create_app, BacktestDateRange
@@ -13,7 +13,7 @@ def test_run(self):
1313
"""
1414
app = create_app(name="GoldenCrossStrategy")
1515
app.add_market(market="BINANCE", trading_symbol="EUR", initial_balance=400)
16-
end_date = datetime(2023, 12, 2)
16+
end_date = datetime(2023, 12, 2, tzinfo=timezone.utc)
1717
start_date = end_date - timedelta(days=100)
1818
date_range = BacktestDateRange(
1919
start_date=start_date, end_date=end_date

tests/scenarios/test_run_backtests_algorithms_param.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import datetime, timedelta
1+
from datetime import datetime, timedelta, timezone
22
from unittest import TestCase
33

44
from investing_algorithm_framework import create_app, BacktestDateRange, \
@@ -16,7 +16,7 @@ def test_run(self):
1616
"""
1717
app = create_app(name="GoldenCrossStrategy")
1818
app.add_market(market="BINANCE", trading_symbol="EUR", initial_balance=400)
19-
end_date = datetime(2023, 12, 2)
19+
end_date = datetime(2023, 12, 2, tzinfo=timezone.utc)
2020
start_date = end_date - timedelta(days=100)
2121
date_range = BacktestDateRange(
2222
start_date=start_date, end_date=end_date

tests/scenarios/test_run_backtests_strategies_param.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import datetime, timedelta
1+
from datetime import datetime, timedelta, timezone
22
from unittest import TestCase
33

44
from investing_algorithm_framework import create_app, BacktestDateRange
@@ -15,7 +15,7 @@ def test_run(self):
1515
"""
1616
app = create_app(name="GoldenCrossStrategy")
1717
app.add_market(market="BINANCE", trading_symbol="EUR", initial_balance=400)
18-
end_date = datetime(2023, 12, 2)
18+
end_date = datetime(2023, 12, 2, tzinfo=timezone.utc)
1919
start_date = end_date - timedelta(days=100)
2020
date_range = BacktestDateRange(
2121
start_date=start_date, end_date=end_date

0 commit comments

Comments
 (0)