Interactive Broker Python API 開發的Notes #2


返轉頭
20180329-20180404

搭左個環境後,就可以開始寫程式,

向寫程式過程之中難免要去搵官方既Doc:http://interactivebrokers.github.io/tws-api/index.html

要寫一個完整既IB Hello World Client,必須去implement兩個Class: IBApi.EWrapper 同埋 IBApi.EClientSocket 

前者 EWrapper 係用來接收由TWS發過來的信息,即係下行通道既介面;後者EClientSocket就係用來發返信息過去TWS,即係上行通道。

官方文件指出,使用EClientSocket之前必須先implement EWrapper,因為EClient的Constructor本身就要個EWrapper 做參數。

***

講到呢度就講解下前面求其抄返來果個Example,

果個Example有三個Classes:

TestApp係Inherit 前面兩個 TestWrapper同TestClient,本身無乜功能,只係用來Connect TWS同埋開條Thread。

TestWrapper由 EWrapper 而來,而TestClient inherit 左 EClient而成,查返ref 就咁樣樣:

from ibapi.wrapper import EWrapper from ibapi.client import EClient
TestClient入面有個speaking_clock() 的function,最終呢個function向最外面調用來執行 佢做過既野有三行: 首先去叫wrapper 果個init_time() 去init 一條Python Queue
time_storage=self.wrapper.init_time()
然後call reqCurrentTime() 呢個由Eclient而來的method
self.reqCurrentTime()
睇返API Doc會見到咁寫: 叫你去睇EWrapper::currentTime 其本上IB個API EClient同 EWrapper 入面的Method就咁一pair pair,呢邊叫個reqXXX,wrapper 果邊就有個相應的method被叫 而Python的Queue本身有get 用法,可參考呢度 當個時間返左來時Wrapper 果邊塞佢入去條Queue,而TestClient呢行就去等佢返來,等佢MAX_WAIT_SECONDS,過時就Timeout
current_time = time_storage.get(timeout=MAX_WAIT_SECONDS)
基本上佢呢個方法就係咁,把Wrapper果邊收返來的野通過條Queue掉返過來EClient呢邊,行起上來塵該唔會太高效率,夠簡單如果唔係要求每秒鐘都有單落應該係夠用。 ------------------------------------------------------- 返轉頭