weekday daytime dailybars ind support

This commit is contained in:
David Brazda
2023-12-28 11:33:19 +01:00
parent 77faa919c0
commit 0909fa947f
10 changed files with 126 additions and 12 deletions

View File

@@ -0,0 +1,29 @@
from v2realbot.strategyblocks.indicators.custom.classes.indicatorbase import IndicatorBase
from datetime import datetime, time
from v2realbot.utils.utils import zoneNY
class DayTime(IndicatorBase):
def __init__(self, state):
super().__init__(state)
#TODO toto v initu dynamicky
# Convert market open/close times to seconds since epoch
self.market_open_time = self._time_to_seconds_since_epoch(time(9, 30), state)
self.market_close_time = self._time_to_seconds_since_epoch(time(16, 0), state)
# Total market duration in seconds
self.total_market_duration = self.market_close_time - self.market_open_time
def _time_to_seconds_since_epoch(self, market_time, state):
# Convert a time object to seconds since epoch for a typical day (e.g., today)
today = datetime.fromtimestamp(state.time).astimezone(zoneNY).date()
market_datetime = zoneNY.localize(datetime.combine(today, market_time))
return market_datetime.timestamp()
def next(self, time):
current_timestamp = time[-1]
# Check if the current time is within market hours
if self.market_open_time <= current_timestamp <= self.market_close_time:
time_since_open = current_timestamp - self.market_open_time
normalized_time = time_since_open / self.total_market_duration
return normalized_time
else:
return 0

View File

@@ -0,0 +1,12 @@
from v2realbot.strategyblocks.indicators.custom.classes.indicatorbase import IndicatorBase
from datetime import datetime, time
from v2realbot.utils.utils import zoneNY
#do budoucna predelat na staticky indikator
class WeekDay(IndicatorBase):
def __init__(self, state):
super().__init__(state)
self.weekday = datetime.fromtimestamp(state.time).astimezone(zoneNY).weekday()
def next(self):
return self.weekday

View File

@@ -61,7 +61,11 @@ def target(state, params, name):
if split_index == -1:
return -2, "for second based window length, source is required in format bars|close"
dict_name = source[:split_index]
time_series = getattr(state, dict_name)["time"]
if dict_name == "bars":
#u baru je time v datetime, proto bereme udpated
time_series = getattr(state, dict_name)["updated"]
else:
time_series = getattr(state, dict_name)["time"]
state.cache[name]["time_series"] = time_series
else:
time_series = state.cache[name]["time_series"]