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