ranaroussi / yfinance

Download market data from Yahoo! Finance's API
https://aroussi.com/post/python-yahoo-finance
Apache License 2.0
13.24k stars 2.34k forks source link

Adjusted Close from yfinance is not the same as total return from Yahoo Finance #2070

Open Allen-JThomas opened 1 week ago

Allen-JThomas commented 1 week ago

I am trying to calculate the monthly and annual percent return for a fund like VSMPX. My understanding is that the Adjusted Close from yfinance takes into account splits and dividends.

To get the percent return I am doing:

  hist = ticker.history(start="2020-01-01", end=None, interval="1d", auto_adjust=True)
  # Calculate daily, monthly, and annual percentage returns
  daily_returns = hist['Close'].pct_change()
  monthly_returns = hist['Close'].resample('M').last().pct_change()
  annual_returns = hist['Close'].resample('Y').last().pct_change()

  # Save the returns to CSV files
  daily_returns.to_csv("VSMPX_daily_adjusted_returns.csv")
  monthly_returns.to_csv("VSMPX_monthly_adjusted_returns.csv")
  annual_returns.to_csv("VSMPX_annual_adjusted_returns.csv")

My annual return is the following:

2016-12-31 00:00:00-05:00,0.12694628348918013
2017-12-31 00:00:00-05:00,0.21189241900874567
2018-12-31 00:00:00-05:00,-0.05155696029590995
2019-12-31 00:00:00-05:00,0.3079293379439798
2020-12-31 00:00:00-05:00,0.21010764518963132
2021-12-31 00:00:00-05:00,0.2574150697504418
2022-12-31 00:00:00-05:00,-0.19501641528697433
2023-12-31 00:00:00-05:00,0.26013908084513204

However, when I check the total return percentage on the Yahoo Finance website, my adjusted return percentages are off by a little. image

For example, you can see that my 2019 annual return is 30.79%, but on Yahoo Finance, it is 30.82%. I realize this is a small descripency but I want 1) Understand why there is a difference 2) I noticed every other total return is the same as Yahoo Finance, so concerned I am doing something wrong.

Kelly-W1115 commented 1 week ago

Good question and also wait for an answer

ValueRaider commented 1 week ago

Hard to answer without Yahoo's source code. Can you get a third opinion from other source e.g. Morning Star?

vdbergh commented 1 week ago

I find it confusing that hist['Close'] actually refers to the adjusted close price and not to the real close price. IMHO yfinance should supply both.

EDIT: I am now seeing that this behavior is configurable through the auto_adjust parameter to history. Sorry for noise!

Incidentally: I tried to compute the adjusted close prices for https://finance.yahoo.com/quote/HYLD.L/history/?period1=1352793600&period2=1728108169 following the explanation here https://help.yahoo.com/kb/SLN28256.html but the numbers I got were also slightly off.

ValueRaider commented 1 week ago

The adjustment from a dividend is 1.0 - [ dividend / close day before ] . Accumulate them by multiplying. Any differences are rounding errors.