程式
如何使用 Bloomberg API 高效下載日內數據?
我正在使用 Bloomberg API 和 C# 下載日內柱數據。
我已經調整了官方的 Bloomberg c#“IntradayBarExample”來滿足我的需要。
但是下載真的很慢,我發現這篇文章建議使用專用而不是
EventQueue
呼叫對象。但是這種改進並不是真正可以檢測到的。NextEvent()``Session
例如,您可以下載 AAL UW 股票程式碼最近 100 天的 5Min Bar – Best Bid Event-,最終獲得的數據不多(< 1Mo)需要很長時間。
你有沒有遇到同樣的問題?
正如 assylias 所建議的,我已經修改了我的程式碼以在多個執行緒中執行請求。如果您需要這樣做,這些是一些有價值的資訊:
1-創建一個執行緒安全的請求過程並
requestID
為您的請求分配不同的內容。processResponseEvent
通過函式將這些參數傳遞給eventloop
。這將允許您使用一個簡單的條件來檢查您收到的消息:if (msg.CorrelationID != requestID) { System.Console.WriteLine("WRONG ID "); return; }
2-並行提出您的請求,這意味著您將上述請求包含在一個循環中,例如:
WaitHandle[] waitHandles = new WaitHandle[numOfThreads]; for (int i = 0; i < numOfThreads; i++) { var j = i; var handle = new EventWaitHandle(false, EventResetMode.ManualReset); var thread = new Thread(() => { /// CALL HERE YOU REQUEST PROCEDURE FROM STEP 1 handle.Set(); }); waitHandles[j] = handle; thread.Start(); } foreach (var ee in waitHandles) ee.WaitOne();
最後,它不會增加每個請求的等待時間,但由於您正在一起執行一堆請求,您仍然可以節省大量時間。
Ps:您可以將變數
i
(來自for (int i = 0; i < numOfThreads; i++)
)用作requestID
。