Как Yahoo Finance рассчитывает скорректированные цены акций? - PullRequest
1 голос
/ 18 января 2020

Вот как Yahoo Finance, по-видимому, рассчитывает скорректированные цены акций при закрытии:

https://help.yahoo.com/kb/adjusted-close-sln28256.html

Исходя из этого, я понимаю, что постоянный коэффициент применяется к нескорректированной цене и что указанный фактор изменяется с каждым событием дивиденда или разделения, что должно происходить не слишком часто. И что я должен быть в состоянии вывести этот фактор, разделив нескорректированное значение на скорректированную цену.

Однако, если я проверю это с помощью данных AAPL (используя Python), я получу непонятные результаты:

import yfinance 
df =  yfinance.download("AAPL", start="2010-01-01", end="2019-12-31")
df["Factor"] = df["Close"] / df["Adj Close"]
print(df["Factor"].nunique(), df["Factor"].count())

Что приводит к: 2442 2516

Так что фактор отличается в большинстве случаев. Но у AAPL обычно 4 дивидендных события в год, и в течение этого периода происходило дробление акций, поэтому я ожидаю примерно 40 различных факторов, а не 2442.

Является ли формула, которую Yahoo Finance предоставляет по ссылке выше, слишком упрощенной или Я что-то здесь упустил?

1 Ответ

0 голосов
/ 19 января 2020

Я не уверен, что это полный ответ, но он слишком длинный для комментария:

Во-первых, определенно существует проблема с округлением. Если вы измените третью строку на

df["Factor"] = df["Close"] / df["Adj Close"].round(12)

, вы получите 2441 уникальный фактор. Однако, если вы используете, например, round(6), вы получаете только 46 уникальных факторов.

Во-вторых, в соответствии с правилами корректировки на странице справки Yahoo по вашему вопросу, каждый дивиденд приводит к корректировке для 5 торговых дат непосредственно перед объявленной датой. В течение 10-летнего периода в вашем вопросе не было разделения акций и примерно 40 квартальных дивидендов. Это должно было привести к 200 датам с корректированными ценами закрытия. Все остальные 2300 или около того дат не должны иметь корректировок на закрытие, ie., Коэффициент 1. Тем не менее, когда вы запускаете:

df[df.Factor == 1].shape

вы получаете только 37 даты (независимо от используемого округления) без корректировок.

Очевидно, что это не имеет смысла и - если я Я что-то упускаю из базы c - есть ошибка в реализации методологии корректировки или в коде Yahoo.

...