-
-
Notifications
You must be signed in to change notification settings - Fork 2.5k
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
Adjusted Close from yfinance is not the same as total return from Yahoo Finance #2070
Comments
Good question and also wait for an answer |
Hard to answer without Yahoo's source code. Can you get a third opinion from other source e.g. Morning Star? |
I find it confusing that EDIT: I am now seeing that this behavior is configurable through the 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. |
The adjustment from a dividend is 1.0 - [ dividend / close day before ] . Accumulate them by multiplying. Any differences are rounding errors. |
Total returns typically assumes reinvestment on the payment date, which would create a slightly different value because of the compounding effect. Instead of discounting the price, the base unit (1 share) increases by the multiplier, base unit * (1 + (div/close)). The next dividend received, all else equal, would be a slightly larger amount. The adjusted price level would reflect the increase in the base unit (1 share), not because of any cash flow, but because of compounding from reinvestment. At the end of the holding period, the exit price would be the closing price multiplied by 1 + however many fractional shares accumulated from reinvestment. |
Valid way to adjust but Yahoo does reverse. |
@deeleeramone @ValueRaider Thanks for the answer! Although, I am not quite sure if I follow. Would it be possible to post a code snippet to calculate total return using yfinance? |
Calculating Total Return with and without DRIPBelow is an example of how to calculate total returns. First we calculate total returns without dividends reinvested (DRIP) and second we redo the calculation with DRIP "turned on." Total Return without DRIPFormula for Total Return without DRIPThe total return over a period (start date to end date) is calculated as: Where:
Example Code for Total Return without DRIPimport yfinance as yf
# Specify the stock and date range
ticker = 'AAPL'
start_date = '2020-01-01'
end_date = '2023-01-01'
# Fetch historical data
stock_data = yf.Ticker(ticker)
hist = stock_data.history(start=start_date, end=end_date, actions=True)
# Adjusted closing prices
close = hist['Close']
# Dividends
dividends = hist['Dividends']
# Initial and final adjusted prices
initial_price = close.iloc[0]
final_price = close.iloc[-1]
# Total dividends received
total_dividends = dividends.sum()
# Total return calculation
total_return = ((final_price + total_dividends) / initial_price) - 1
print(f"Total Return: {total_return * 100:.2f}%") Total Return with DRIPFormula for Total Return with DRIPTo calculate total return with DRIP:
Where:
Example Code for Total Return with DRIPimport yfinance as yf
# Specify the stock and date range
ticker = 'AAPL'
start_date = '2020-01-01'
end_date = '2023-01-01'
# Fetch historical data
stock_data = yf.Ticker(ticker)
hist = stock_data.history(start=start_date, end=end_date, actions=True)
# Start with 1 share
initial_price = hist['Adj Close'].iloc[0]
shares = 1
# Initialize variables
total_shares = shares
for date, dividend in hist['Dividends'].iteritems():
if dividend > 0:
# Adjusted closing price on dividend date
price_on_date = hist.loc[date, 'Adj Close']
# Calculate additional shares purchased with dividend
additional_shares = dividend * total_shares / price_on_date
# Update total shares
total_shares += additional_shares
# Final adjusted price
final_price = hist['Adj Close'].iloc[-1]
# Final portfolio value
final_portfolio_value = total_shares * final_price
# Initial portfolio value
initial_portfolio_value = shares * initial_price
# Total return with DRIP
total_return_drip = (final_portfolio_value / initial_portfolio_value) - 1
print(f"Total Return with DRIP: {total_return_drip * 100:.2f}%") |
Adding dividends to the adjusted price is total nonsense. |
@ValueRaider You are correct. My bad. Adjusted above comment. |
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:
My annual return is the following:
However, when I check the total return percentage on the Yahoo Finance website, my adjusted return percentages are off by a little.
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.
The text was updated successfully, but these errors were encountered: