為什麼我們需要事件驅動的回測器?
我正在quantstart 上閱讀這篇關於事件驅動回測的文章。在我看來,使用事件驅動的回測器的主要優點是它避免了前瞻偏差。
通常我在雅虎財經下載股票價格數據,其中包含Pandas的日期時間指數。
但是在 Python 的 statsmodels 中,特別是時間序列預測模型,如 ARIMA 和 GARCH,它們很好地擬合了數據。
問題:為什麼我們需要事件驅動的回測器?
您不需要事件驅動的回測器。
為了建立一些約定,將向量作為參數的函式或方法(例如 MATLAB 函式、
statsmodels
API 方法)有時可互換且容易混淆地稱為向量化函式。這並不一定意味著它使用 SIMD矢量化,儘管在給定輸入數據佈局的情況下,它通常非常適合使用 SIMD 矢量擴展 - 現代編譯器將利用這一點。在幕後,上述向量化函式只是簡單地將元素傳遞給一個循環,就像在這個意義上的事件驅動回測器一樣。因此,沒有正確理由偏愛一種方法而不是另一種方法。
但是,將此循環包裝在事件驅動的回測器而不是矢量化函式的主要好處是,前者與您為生產數據(一次以 1 個事件流式傳輸)實現它的方式相同,而後者需要修改以處理流式實時數據。
還有一個小的好處是,矢量化函式往往難以推理事件序列並避免前瞻偏差 - 您所需要的只是一個逐一的索引錯誤,從而嚴重損害您的準確性回測,而如果您以事件驅動的方式處理元素,則幾乎不可能犯此錯誤。
這兩種類型的回測器的目的略有不同。
矢量化回測是一種快速測試策略的相當粗略的方法。您可以通過將信號向量與收益向量相乘來做到這一點,結果就是資產曲線。
事件驅動的回測器是一個經過深思熟慮的模擬。通過使用事件驅動的回測器,我們可以通過僅在數據可用時提供數據來在很大程度上阻止前瞻偏差。這也非常符合您通過執行系統在現實生活中進行交易的方式。
我們還具有建構交易成本、流動性約束和市場影響的優勢。這不是矢量化方法可以做到的。(您可以在事後添加交易成本)。
您從 quantstart 引用的事件驅動系統具有額外的優勢,您可以通過更改參數輕鬆地將回測器換成實時模型。它已經創建了一個記事本、會計系統、前後績效指標。如果你想建立一個機構級的基礎設施,事件驅動是要走的路。
矢量化回測器用於快速研究想法,但如果你有一個事件驅動的,那麼你可以忘記矢量化……
哦,我知道已經實現了事件驅動架構的基金,我個人也使用過它。這是要走的路。