Fx
使用歷史外匯數據更改時區(Interactive Brokers API IBPy)
**我希望能夠更改我對 IB API 的請求的時區,我該怎麼做?**我正在用 Python 編寫,因此使用此處找到的 IBPy 包裝器。
如何重現問題:
- 通過指定 contract.m_symbol = ‘AUD’, contract.m_secType = ‘CASH’, contract.m_exchange = ‘IDEALPRO’, contract.m_primaryExch = ‘IDEALPRO’, contract.m_currency = ‘NZD’ 創建要查詢的合約
- 使用 reqHistoricalData 獲取上述合約的每日開盤價,以 EST 為時區 23/6/2016。
- 現在通過修改 reqHistoricalData 的第三個參數來更改時區,以使用 JST 作為 23/6/2016 的時區。
- 比較第 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