程式

YFinance 每日和每小時價值不連貫

  • July 15, 2021

我正在比較從 Python 中的 YFinance 提取的每日和每小時值。我預計市場第一個小時的開盤價等於當天的每日開盤價,市場最後一小時的收盤價等於每日收盤價。此外,最小和最大每日值應包含在至少一個小時值中。

我在這兩種情況下都啟用了反向調整,並為每小時數據啟用了上市前和上市後時間,以試圖找到相應的每日價值。

我的假設都不成立:每小時和每天的價值是不同的(開盤價、最高價、最低價和收盤價)。
例如:每日最高值為 32.746275,每小時最高值為 33.919899(11:30)。

我究竟做錯了什麼?

import yfinance as yf

ticker = 'AY'
net = yf.Ticker(ticker)

start_date, end_date = '2020-11-06', '2020-11-07'
daily_signals_df = net.history(start=start_date, end=end_date, interval='1d', back_adjust=True, auto_adjust=True, prepost=False)
hourly_signals_df = net.history(start=start_date, end=end_date, interval='1h', back_adjust=True, auto_adjust=True, prepost=True)
>>> daily_signals_df

在此處輸入圖像描述

>>> hourly_signals_df

在此處輸入圖像描述

當您對股票市場數據進行抽樣時,您確實需要了解正在使用哪些來源和規則,以及對數據進行的任何調整。對於不同的採樣週期,也可能存在不同的規則。

可能有不同的/方法應用於綜合磁帶價格、上市交易所價格和特定交易所價格。

例如,紐約證券交易所上市股票的開盤價可能與該股票在所有交易所的首次交易價格大不相同。某些數據也可能僅限於特定交易所以減少實時版稅(例如,僅限 IEX 或 Cboe 交易)。開盤的時間通常也不同——與其他場所相比,紐約證券交易所股票實際上可能需要幾分鐘才能“開盤”。

其次,在檢查歷史數據時,您需要確定使用哪些價格調整方法對公司行為的先前價格進行反向調整,例如拆分/反向拆分,股票股息(相同股票),股票股息(不同股票)/分拆,特別現金股利/分配、長期/短期資本收益、資本回報、普通現金股利/分配等。

在您的 AY 範例中,每日來源似乎已針對現金股息進行了調整。

每小時數據未針對現金股息進行調整,可能是原始數據(我尚未檢查確切值)。

每小時數據還存在單精度浮點不准確的問題。AY 在 20201106(不是 32.009998)上實際開盤價為 32.01 美元。

最佳建議:向您的數據供應商準確詢問他們的數據中包含哪些場所交易/交易類型以及使用哪些價格調整機制。如果您可以自己選擇各種參數,那就更好了。根據需要考慮舍入以克服浮點問題。

我將舉一個關於標準普爾 500 紐約證券交易所程式碼:GE(通用電氣)交易日期 20210623 的有趣範例,其數據點代表截至 20210714 的價值。通用電氣在 20210625 的交易日獲得 0.01 美元的股息。

  • 合併磁帶打開:13.02 美元
  • 紐約證券交易所開盤價:13.00 美元
  • IEX 開盤價:13,015 美元
  • 總回報調整後合併磁帶未平倉:$13.01009885931559

對於音量:

  • 最終合併磁帶量:43,677,544
  • 僅紐約證券交易所的最終交易量:8,188,906
  • 最終僅 IEX 交易量:855,297
  • 最終股息調整後的磁帶量:43,710,784.140

如您所見,價格和數量會根據所使用的方法/地點而變化。

全面披露:Norgate Data 是一家提供每日週期性股票數據的數據供應商。我是公司的共同所有人。

引用自:https://quant.stackexchange.com/questions/66043