回測

歷史股票程式碼數據源(用於創建可交易宇宙)

  • February 20, 2022

我猜想這個問題以前會在這裡的某個地方得到回答,但是我已經在兔子洞裡鑽了好幾天,試圖弄明白,但沒有運氣……

我想對不同的價值投資策略進行回測,並試圖為歷史股票程式碼找到一個高質量的來源,以創建一個可交易的宇宙。

例如,如果我想測試在 1 月 1 日購買最低市盈率股票並從 2010 年到 2020 年每年重新平衡的策略的表現,我需要知道 1 月 1 日每個股票可購買的股票程式碼範圍年。然後,我必須刪除所有不相關的程式碼,如 ETF、認股權證、優先股、SPAC 等。

我能找到的唯一可以讓您及時返回並獲取追溯程式碼數據的數據提供商是 Alpha Vantage,位於其“上市和退市狀態”端點下。它允許您輸入日期作為 URL 參數,並在該時間點提取各種交易所上列出的活動程式碼。

然而,數據是一團糟。當您從該端點提取數據時,它基本上將所有內容列為具有“股票”或“ETF”的資產類型。我已經嘗試通過“公司概覽”等其他端點執行它輸出的程式碼,我認為這可能會更準確地對每個程式碼的資產類型/行業進行分類,但沒有成功。

所以現在,我堅持嘗試按公司名稱過濾所有內容。就像它的名稱中有“保證”一樣,我將其排除在外,等等。但是為> 10k的股票程式碼編寫正確的邏輯基本上是不可能的。

有沒有人找到一個好的解決方案?提前致謝!!!

在沒有參考數據的情況下,可以通過對日終數據進行查詢並選擇在給定日期(例如在第每年在回測期間。

在 SQL 語法中,這將如下所示:

SELECT symbol, date_format(time, 'yyyy') AS dt
FROM atsd_session_summary
WHERE exchange = 'SIP' AND class = 'SIP' AND symbol LIKE 'A%'
 AND date_format(time, 'w') <= 2 AND datetime >= '2020'
GROUP BY exchange, class, symbol, PERIOD(1 year)
ORDER BY symbol, dt

如果您附近有參考數據,則按安全類型過濾是可以使用的另一種過濾器。好消息是安全類型不會改變,因此我們可以安全地將目前類型應用於歷史記錄。安全類型通常適用於所有零售數據平台 API,無論是 Alpha Vantage 還是其他。

 AND tags.entity.type = 'CS'

在此處輸入圖像描述

要正確執行此操作,您需要做幾件事:

  • 倖存者無偏差價格數據(即具有活躍和退市程式碼的數據)。如果您計劃在投資規則中使用基本面數據,您還需要無倖存者偏差的基本面數據。
  • 證券主數據足夠豐富,可以讓您區分不同的證券類型(優先股、普通股、ADR 等)
  • 一種根據您的標準動態過濾證券領域的方法,基於當時活躍的證券子集。

QuantRocket 很好地支持了這個案例。它包括美國股票的無倖存者偏差價格數據,並整合了來自 Sharadar 的無倖存者偏差基本面數據。擁有豐富的證券主數據Pipeline API專為對大量證券進行過濾和執行計算而設計。

免責聲明:我隸屬於 QuantRocket。

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