Using timezone for trading session

This commit is contained in:
Oleg Sheynin 2025-07-16 18:17:34 +00:00
parent 9c34d935bd
commit facf7fb0c6
3 changed files with 2171 additions and 137 deletions

View File

@ -23,9 +23,9 @@
# "fit_method_class": "pt_trading.static_fit.StaticFit", # "fit_method_class": "pt_trading.static_fit.StaticFit",
"close_outstanding_positions": true, "close_outstanding_positions": true,
"trading_hours": { "trading_hours": {
"begin_session": "15:30:00", "begin_session": "06:00:00",
"end_session": "20:00:00", "end_session": "16:00:00",
"timezone": "UTC" "timezone": "America/New_York"
} }
} }

View File

@ -45,14 +45,18 @@ class TradingPair:
def get_begin_index(self) -> int: def get_begin_index(self) -> int:
if "trading_hours" not in self.config_: if "trading_hours" not in self.config_:
return 0 return 0
start_time = pd.to_datetime(self.config_["trading_hours"]["begin_session"]).time() assert "timezone" in self.config_["trading_hours"]
assert "begin_session" in self.config_["trading_hours"]
start_time = pd.to_datetime(self.config_["trading_hours"]["begin_session"]).tz_localize(self.config_["trading_hours"]["timezone"]).time()
mask = self.market_data_['tstamp'].dt.time >= start_time mask = self.market_data_['tstamp'].dt.time >= start_time
return int(self.market_data_.index[mask].min()) return int(self.market_data_.index[mask].min())
def get_end_index(self) -> int: def get_end_index(self) -> int:
if "trading_hours" not in self.config_: if "trading_hours" not in self.config_:
return 0 return 0
end_time = pd.to_datetime(self.config_["trading_hours"]["end_session"]).time() assert "timezone" in self.config_["trading_hours"]
assert "end_session" in self.config_["trading_hours"]
end_time = pd.to_datetime(self.config_["trading_hours"]["end_session"]).tz_localize(self.config_["trading_hours"]["timezone"]).time()
mask = self.market_data_['tstamp'].dt.time <= end_time mask = self.market_data_['tstamp'].dt.time <= end_time
return int(self.market_data_.index[mask].max()) return int(self.market_data_.index[mask].max())

File diff suppressed because one or more lines are too long