Fx

使用歷史外匯數據更改時區(Interactive Brokers API IBPy)

  • December 14, 2018

**我希望能夠更改我對 IB API 的請求的時區,我該怎麼做?**我正在用 Python 編寫,因此使用此處找到的 IBPy 包裝器。

如何重現問題:

  1. 通過指定 contract.m_symbol = ‘AUD’, contract.m_secType = ‘CASH’, contract.m_exchange = ‘IDEALPRO’, contract.m_primaryExch = ‘IDEALPRO’, contract.m_currency = ‘NZD’ 創建要查詢的合約
  2. 使用 reqHistoricalData 獲取上述合約的每日開盤價,以 EST 為時區 23/6/2016。
  3. 現在通過修改 reqHistoricalData 的第三個參數來更改時區,以使用 JST 作為 23/6/2016 的時區。
  4. 比較第 2 步和第 3 步的開盤價

假設,函式 reqHistoricalData(…) 的第三個參數控制時區。但是,從 EST 更改為 JST 不會改變我的價格。我一直在聯繫 IB 的 API 人員。他們為 AUD.NZD 獲得以下結果:

以 EST 作為時區開盤價 23/6/16 為:1.046185 以 JST 作為時區開盤價 23/6/16 為:1.04598

我得到:1.046185 對於我嘗試過的所有時區(GMT、EST、JST)。

我已經接觸了以下資源:

如何更改歷史數據請求中的時區?非常感謝任何幫助,我保證下次您在新加坡時請您喝一杯。

我記得在時區方面遇到過類似的問題,並決定在我的 python 平台上使用 IB 以不同的方式處理時區(backtrader

我沒有試圖強迫平台的手,而是獲取平台給我的任何時區資訊,然後從那里工作到我想要的時區。

過程:

  • IB 為您EST提供資產的時區
  • 幸運的是,這是一個可以辨識的名稱pytz(您顯然應該安裝它)
  • 一旦您將 IB 時間戳轉換為一個datetime名為(天真的)對象dt並在其中包含時區名稱ibtzname

程式碼大致如下所示:

ibtz = pytz.timezone(ibtzname)
eastern_dt = ibtz.localize(dt)
sing_tz = pytz.timezone('Asia/Singapore')
sing_dt = eastern_dt.astimezone(sing_tz)

sing_tz顯然,ibtz如果它們始終是固定值,您可以記憶體它們。

您可能還希望在內部工作並且只在最後一刻UTC轉換回。Asia/Singapore但你自己的需要應該佔上風。

返回柱的時區是在登錄螢幕上在 TWS 中選擇的時區。

https://interactivebrokers.github.io/tws-api/historical_bars.html

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