Skip to content

Commit

Permalink
Fix DateRangeSlider bug for intraday data > 1 year
Browse files Browse the repository at this point in the history
Fixes bug where slider operation becomes erratic when data is
intraday and date range is greater than one year. Eratic
behaviour caused by, in this context, slider labels being set to a
format that excludes the year.
  • Loading branch information
maread99 committed Sep 20, 2024
1 parent 6042625 commit 719adfc
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/market_analy/gui_parts.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ def __init__(
Passed to `w.Layout` assigned to `ToggleButtons`.
"""
values = [intervals.to_ptinterval(lab) for lab in labels]
tooltips = ["Select date interval" for _ in range(len(values))]
tooltips = ["Select tick interval" for _ in range(len(values))]
super().__init__(
labels,
values,
Expand Down
1 change: 1 addition & 0 deletions src/market_analy/guis.py
Original file line number Diff line number Diff line change
Expand Up @@ -1439,6 +1439,7 @@ def _reset_chart(self):
self._interval_selector.set_value_unobserved(self._tick_interval)
if self._HAS_DRAWDOWN:
self._drawdown_selector.set_value_unobserved("ATH")
self.chart.show_y2()

def _reset(self):
self.slctr.disable()
Expand Down
3 changes: 3 additions & 0 deletions src/market_analy/utils/ipywidgets_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -450,6 +450,9 @@ def _label_format(self, dti: pd.DatetimeIndex):
else:
if all(dti == dti.normalize()):
fmt = "%y/%m/%d"
elif dti[0] + pd.DateOffset(years=1) <= dti[-1]:
# errors triggered in slider if %y not present when range >= 1 year
fmt = "%y/%m/%d/%H:%M"
elif dti[-1] - dti[0] > pd.Timedelta(days=28):
fmt = "%m/%d/%H:%M"
else:
Expand Down
3 changes: 3 additions & 0 deletions tests/test_analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -1042,6 +1042,7 @@ def verify_52wk_shows_dialog():
verify_chart_mark_y2_mult_windows(slice(2, -1))

# verify effect of reset button
gui._drawdown_selector.value = False
assert gui._icon_row_top.children[1].tooltip == "Reset"
gui._icon_row_top.children[1].click()
assert gui._interval_selector.value == mp.intervals.TDInterval.T5
Expand All @@ -1050,6 +1051,8 @@ def verify_52wk_shows_dialog():
assert gui.chart.plotted_interval == expected_plottable
assert gui.chart.plottable_interval == expected_plottable
assert gui.date_slider.slider.value == expected_init
assert gui.chart.mark_y2.visible
assert gui.chart.axes[2].visible

# verify raises dialog box when try to change interval to 1D for period < 1d
prices_prev = gui.prices.copy()
Expand Down

0 comments on commit 719adfc

Please sign in to comment.