簡體   English   中英

使用 IBrokers 和 R,檢索多只股票實時交易數據的合適方法是什么?

[英]Using IBrokers and R, what is the appropriate way to retrieve live trading data for multiple stocks?

顯然,交易者可以在實時交易 session 中輕松監控 100 只股票。

以下是僅檢索 30 多個股票代碼的實時數據的代碼:

tws <- twsConnect()
sym <- c("AAPL", "MSFT", "GOOGL", "TWTR", "MSFT", "BABA","JD", "WLTW", "DIA",
         "QQQ", "VOO", "MOMO","IBB", "VOOG", "VYM","VNQ", "BIDU", "BA",
         "AYX", "ROKU", "UBER","ACB", "CRON", "TTD","BAM", "AZO", "JPM",
         "WMT", "GRUB", "TSN")
contracts <- lapply(sym, function(x) twsEquity(x, 'SMART','ISLAND'))

system.time(
last_prices <-   lapply(contracts, function(x) reqMktData(tws, 
                                                          Contract = x,
                                                          snapshot = TRUE))

)

這是性能指標:

2 -1 2104 Market data farm connection is OK:usfarm 
2 -1 2106 HMDS data farm connection is OK:ushmds 
2 -1 2158 Sec-def data farm connection is OK:secdefil 
   user  system elapsed 
  0.408   0.367  46.727 
Warning message:
In .Internal(gc(verbose, reset, full)) :
  closing unused connection 6 (->localhost:7496)

這顯然是不能接受的。 檢索 30 多只股票的實時數據不應超過 40 秒。

使用 quantmod::getSymbols,這個操作基本上是即時的。

我究竟做錯了什么?

我有一個 8 核 XEON 處理器。 也是最新型號之一。 不可能是我的硬件。

Ibrokers 只是單線程的。 這就是為什么一些 ibrokers 函數會一直運行,直到您中斷 R session。這基本上是一個 R 問題,因為 R(目前)是單線程的。 你可以通過創建新線程來模擬這個,因為 ib 可以處理這個,但這需要一個異步語言,而不是 R。例如,socketConnection 不能處理並行(asych)請求,你需要設置一個完整的每個線程的新連接。 可能,但隨后正確跟蹤從 ib 返回的消息變得更加困難。

reqMktData function 僅接受 1 個自動收報機(與語言無關),您需要遍歷自動收報機。 這種速度在其他語言中也往往是一個問題,開銷、ib 服務器的速度、延遲等等等等。但是將它與您使用 quantmod 進行的雅虎檢索進行比較並不完全相同。 在 ib 端進行了很多檢查,比如它是否是一條正確的消息,發送回的消息需要在顯示數據之前進行解碼。 所有這些都會增加開銷。

通常情況下,您會使用 reqMktData (snapshot = FALSE) 同時請求最多 100 個代碼的市場數據流,並實時查看 stream 的最新價格,但隨后您需要使用 python、c# 或 c++(或 java)。 此外,您還需要區分代碼,這意味着使用 requestids 或其他識別信息。 對於 python,請參閱 ib_insync 庫。 信息在這里

有關 ib api 問題的更多信息,請查看twsapi 組以了解有關 api 的最新錯誤/問題。R 在那里沒有太多代表,因為它仍然是 api 的一個非常舊的版本。還要檢查 stackoverflow 上的interactive-brokers標簽。 這也可能會給您一些想法/幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM