Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support custom period in Ticker.history() #2192

Merged
merged 1 commit into from
Dec 30, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Custom period
R5dan authored and ValueRaider committed Dec 30, 2024
commit 60c7477a0371e71a516514e734fb9cb398ba0943
7 changes: 6 additions & 1 deletion yfinance/scrapers/history.py
Original file line number Diff line number Diff line change
@@ -78,7 +78,7 @@ def history(self, period="1mo", interval="1d",

interval_user = interval
period_user = period
if repair and interval in ['5d', '1wk', '1mo', '3mo']:
if repair and interval in ["5d", "1wk", "1mo", "3mo"]:
# Yahoo's way of adjusting mutiday intervals is fundamentally broken.
# Have to fetch 1d, adjust, then resample.
if interval == '5d':
@@ -105,6 +105,11 @@ def history(self, period="1mo", interval="1d",
period_user = period
period = None
interval = '1d'
else:
end = utils._parse_user_dt(end, self.tz)
start = _datetime.date.fromordinal(end)
start -= utils._interval_to_timedelta(period)
start -= _datetime.timedelta(days=4)

start_user = start
end_user = end
24 changes: 8 additions & 16 deletions yfinance/utils.py
Original file line number Diff line number Diff line change
@@ -429,22 +429,14 @@ def _parse_user_dt(dt, exchange_tz):


def _interval_to_timedelta(interval):
if interval == "1mo":
return relativedelta(months=1)
elif interval == "3mo":
return relativedelta(months=3)
elif interval == "6mo":
return relativedelta(months=6)
elif interval == "1y":
return relativedelta(years=1)
elif interval == "2y":
return relativedelta(years=2)
elif interval == "5y":
return relativedelta(years=5)
elif interval == "10y":
return relativedelta(years=10)
elif interval == "1wk":
return _pd.Timedelta(days=7)
if interval[-1] == "d":
return relativedelta(days=int(interval[:-1]))
elif interval[-2:] == "wk":
return relativedelta(weeks=int(interval[:-2]))
elif interval[-2:] == "mo":
return relativedelta(months=int(interval[:-2]))
elif interval[-1] == "y":
return relativedelta(years=int(interval[:-1]))
else:
return _pd.Timedelta(interval)