diff --git a/core/scripts/importer.py b/core/scripts/importer.py index 9924a7d9..af2a8254 100644 --- a/core/scripts/importer.py +++ b/core/scripts/importer.py @@ -2,7 +2,7 @@ import os from datetime import datetime -from lobster.extender import Extender, weekdays +from lobster.extender import Extender, weekdays, TZ from lobster.parser import parse_top_of_book from models.order_book import OrderBook from mongo_db.db_connector import save_messages, save_order_book @@ -27,6 +27,7 @@ def load(message_file, ob_file_path, start_time, instrument, extend, top_of_book): + start_time = start_time.replace(tzinfo=TZ) start_timestamp = int(start_time.timestamp() * 10**9) # in nanoseconds interval = 10 * 10**9 # in nanoseconds diff --git a/core/scripts/lobster/extender.py b/core/scripts/lobster/extender.py index 82e0fce7..3df3968e 100644 --- a/core/scripts/lobster/extender.py +++ b/core/scripts/lobster/extender.py @@ -1,7 +1,7 @@ import csv import random from collections import defaultdict, namedtuple -from datetime import datetime, time, timedelta +from datetime import datetime, time, timedelta, timezone from lobster.parser import LobsterMessageParser from models.message import Message, MessageType @@ -9,6 +9,7 @@ Placement = namedtuple('Placement', ['index', 'message']) +TZ = timezone(timedelta(hours=-4)) # EST class _TopOfBook: def __init__(self, ask, bid): @@ -47,9 +48,9 @@ def _mix_by_index(base, mix): def weekdays(start: int, n): - current = datetime.fromtimestamp(start / 10 ** 9).date() + current = datetime.fromtimestamp(start / 10 ** 9, tz=TZ).date() for _ in range(n): - yield int(datetime.combine(current, time()).timestamp() * 10 ** 9) + yield int(datetime.combine(current, time(), tzinfo=TZ).timestamp() * 10 ** 9) offset = 3 if current.weekday() == 4 else 1 current = current + timedelta(days=offset) diff --git a/core/scripts/tests/test_extender.py b/core/scripts/tests/test_extender.py index c0352c6f..0c603b7d 100644 --- a/core/scripts/tests/test_extender.py +++ b/core/scripts/tests/test_extender.py @@ -6,13 +6,13 @@ from models.message import Message, MessageType from models.order_book import OrderBook from lobster.extender import ( - weekdays, Placement, Extender, + weekdays, Placement, Extender, TZ, _initial_qty_for_messages, _mix_by_index, _unfilled_qty_for_messages ) -def _datetime_ts(*args): - return datetime(*args).timestamp() * 10**9 +def _datetime_ts(*args, **kwargs): + return datetime(*args, **kwargs).timestamp() * 10**9 class ExtenderTest(unittest.TestCase): @@ -27,15 +27,15 @@ class ExtenderTest(unittest.TestCase): def test_weekdays(self): - ts = _datetime_ts(2019, 10, 24, 0, 0, 0, 1) + ts = _datetime_ts(2019, 10, 24, 0, 0, 0, 1, tzinfo=TZ) w = weekdays(ts, 4) self.assertEqual(ts - 10**3, next(w)) - friday = _datetime_ts(2019, 10, 25) + friday = _datetime_ts(2019, 10, 25, tzinfo=TZ) self.assertEqual(friday, next(w)) - monday = _datetime_ts(2019, 10, 28) + monday = _datetime_ts(2019, 10, 28, tzinfo=TZ) self.assertEqual(monday, next(w)) - tuesday = _datetime_ts(2019, 10, 29) + tuesday = _datetime_ts(2019, 10, 29, tzinfo=TZ) self.assertEqual(tuesday, next(w)) with self.assertRaises(StopIteration): next(w)