程式

對於日間交易回測系統,我應該將日開盤價、收盤價、最高價、最低價、交易量分別放入數組中嗎?

  • September 5, 2013

我認為有兩種可能的方法:1. 將日開盤、收盤、最高價、最低價、交易量分別放入數組中,然後我有 5 個數組可以進行計算 2. 將所有這些放入一個數組或連結列表中進行計算。

我認為 1. 會更容易處理所有回測計算,你同意嗎?

背景資訊:我將使用 Java 開發我的系統並在 Windows 7 64 位/Ubuntu 64 位中執行。我最終會將實時交易版本連接到 Interactive Broker Java 套接字 API。

使用多個數組。這將為您提供一個面向列的儲存,在處理時間序列數據時,它的記憶體效率要高得多。具體來說,您正在描述一個可以查詢的“記憶體中”數據庫表。

您還需要考慮如何進行查找。你會有一個將符號映射到 OHLC 表的雜湊表嗎?你會按日期對錶進行分區嗎?考慮一下您將要執行什麼樣的查詢,然後建構您的數據以使該搜尋變得最簡單。

考慮到它是回測並且超性能不是很相關**,我建議遵循良好的 OOP 原則:

  • 創建一個BarData包含您需要的欄位的類(日期、o、h、l、c、v 等)
  • BarDatas 儲存在ArrayList<BarData>

然後,您可以將多個時間序列儲存在 aMap<String, List<BarData>>或 guavaMultiMap<String, BarData>中。

這應該會讓你的生活更輕鬆。

ps:我不知道 IB API - 如果它們有看起來像我的 BarData 的內置類型,那麼你最好直接使用它們。

**請注意,對於大多數案例而言,數組和 ArrayLists 之間的性能差異並沒有那麼大。

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