程式
對於日間交易回測系統,我應該將日開盤價、收盤價、最高價、最低價、交易量分別放入數組中嗎?
我認為有兩種可能的方法:1. 將日開盤、收盤、最高價、最低價、交易量分別放入數組中,然後我有 5 個數組可以進行計算 2. 將所有這些放入一個數組或連結列表中進行計算。
我認為 1. 會更容易處理所有回測計算,你同意嗎?
背景資訊:我將使用 Java 開發我的系統並在 Windows 7 64 位/Ubuntu 64 位中執行。我最終會將實時交易版本連接到 Interactive Broker Java 套接字 API。
使用多個數組。這將為您提供一個面向列的儲存,在處理時間序列數據時,它的記憶體效率要高得多。具體來說,您正在描述一個可以查詢的“記憶體中”數據庫表。
您還需要考慮如何進行查找。你會有一個將符號映射到 OHLC 表的雜湊表嗎?你會按日期對錶進行分區嗎?考慮一下您將要執行什麼樣的查詢,然後建構您的數據以使該搜尋變得最簡單。
考慮到它是回測並且超性能不是很相關**,我建議遵循良好的 OOP 原則:
- 創建一個
BarData
包含您需要的欄位的類(日期、o、h、l、c、v 等)- 將
BarData
s 儲存在ArrayList<BarData>
然後,您可以將多個時間序列儲存在 a
Map<String, List<BarData>>
或 guavaMultiMap<String, BarData>
中。這應該會讓你的生活更輕鬆。
ps:我不知道 IB API - 如果它們有看起來像我的 BarData 的內置類型,那麼你最好直接使用它們。
**請注意,對於大多數案例而言,數組和 ArrayLists 之間的性能差異並沒有那麼大。