данные yfinance и yahoo finance сильно отличаются

#python #yfinance

Вопрос:

Я использую пакет yfinance в приведенном ниже коде Python, чтобы получать ежедневные данные о ценах за 5 лет для LGEN.L (Legal amp; General, компания, котирующаяся на Лондонской фондовой бирже более 100 лет). Результат приведен на первом рисунке ниже.

Затем я захожу на веб-сайт yahoo finance, просматриваю LGEN.L и нажимаю кнопку «5 лет»: см. Второй рисунок ниже (примечание: если вы посмотрите цену акций с других ресурсов, вы получите очень похожий профиль).

Хотя самые последние данные (справа от двух рисунков) совпадают примерно с 280, более старые данные (слева от двух рисунков) не совпадают: данные yfinance начинаются примерно со 150, в то время как данные yfinance начинаются примерно с 210; огромная разница

Что я делаю не так?

Код на Python:

 import yfinance as yf
import matplotlib.pyplot as plt

isin = "LGEN.L"

# Extract 5 years of daily data
df = yf.download(tickers=isin, period="5y", interval="1d", auto_adjust=True, prepost=False)
print(df)

#Extract time index
indx = df.index.to_numpy()
indx = indx.astype(str)
indx = [elem[:16] for elem in indx]
indx = [elem.replace(" ", "T") for elem in indx]

# Extract price (as average of openPrice, highPrice, lowPrice and closePrice
openPrice = df['Open'].to_numpy()
highPrice = df['High'].to_numpy()
lowPrice = df['Low'].to_numpy()
closePrice = df['Close'].to_numpy()
price = (openPrice   highPrice   lowPrice   closePrice) / 4.0
for i in range(len(openPrice)): print(indx[i]   ' / '   str(price[i]))

# Plot
fig = plt.scatter(indx, price)
plt.title(isin)
plt.show()
 

Этот код дает такую цифру:

введите описание изображения здесь

И цифра финансирования yahoo:

введите описание изображения здесь

Ответ №1:

Веб-сайт yahoo показывает строгую цену закрытия, в то время как вы построили СКОРРЕКТИРОВАННУЮ цену закрытия. Поэтому чем дальше вы возвращаетесь во времени, тем больше они расходятся.

Воспользуйся

 df = yf.download(tickers=isin, period="5y", interval="1d", auto_adjust=False, prepost=False)