我應該如何儲存分時數據?
我應該如何儲存分時數據?例如,如果我有一個 IB 交易賬戶,我應該如何將分時數據直接下載並儲存到我的電腦上?我應該使用哪個軟體?
使用 R 中的 IBrokers 將是最簡單的途徑。將數據擷取到磁碟的一個簡單範例是:
library(IBrokers) tws <- twsConnect() aapl.csv <- file("AAPL.csv", open="w") # run an infinite-loop ( <C-c> to break ) reqMktData(tws, twsSTK("AAPL"), eventWrapper=eWrapper.MktData.CSV(1), file=aapl.csv) close(aapl.csv) close(tws)
這會將 CSV 樣式的輸出發送到磁碟。此外,數據可以儲存在循環內的 xts 對像中,這些對象可以附加/填充以提供用於分析的常量記憶體對象。對象可以與許多工具共享——包括使用 CRAN 上的 RBerkeley 包與其他具有 Berkeley DB 綁定的程序共享對象。如果進行智能管理,後一種方法會非常非常快。
鑑於 IB 的符號限制(或多或少 100 個並發)和 250 毫秒的更新 - R 通常可以毫不費力地處理所有這些(即執行 IB 的 TWS 甚至 IBGateway 客戶端的 JVM 可能遠遠超過 R/IBrokers CPU 使用率方面的程序)。
您甚至可以通過傳遞一個合約列表、增加 eWrapper 上的數量並確保您有一個合適的文件列表可以寫入來擴展上述語法以記錄多個交易品種。
就更接近長期儲存/訪問的東西而言,Josh 提到的包(mmap 和索引)也非常有用。我已經討論了一些基本選項數據範例,這些範例大小為 3-4GB,沒有派生列(總共 12GB),我幾乎可以立即使用 R 樣式的子集語法提取我需要的任何子集。例如,2009 年為 AAPL 找到 90k+ 份契約(在 70MM 行中)花費了數十毫秒。所有這些都沒有在 RAM 中保留任何東西,並且都在具有 2GB RAM 的筆記型電腦上執行。
我可能很快就會獲得更多關於後者軟體包的展示材料,並將在即將在芝加哥舉行的R/Finance會議上發表一些演講。我還計劃在 2011 年通過lemnica舉辦一些與 R 和 IB 相關的公共研討會。
稍後您想對分時數據做什麼?執行分析?您可以將刻度數據保存到一個平面文件中以供所有軟體使用,但是以後訪問它會很慢。
相反,您應該理想地保存數據:
- 面向列 - 欄位中的所有元素都連續儲存以便更好地記憶體
- 二進制 - 所有元素都可以立即使用;不需要詞法轉換
有許多面向列的數據庫,儘管目前沒有生產質量的數據庫是開源的。您可以嘗試q/kdb+ 的非商業版本來看看您的想法,但如果您還不習慣它,這將是一個巨大的學習曲線。
儲存分時數據時要考慮的其他事情是物理介質。理想情況下,您會想要:
- 本地儲存 - 跨 NFS 獲取將是痛苦的
- 固態 - 從磁碟獲取也很痛苦