其中ThostFtdcTraderApi.h定義了交易請求接口CThostFtdcUserApi和交易事件處理接口CThostFtdcUserSpi;
ThostFtdcMdApi.h定義了行情請求接口CThostFtdcMdApi,行情事件處理接口CThostFtdcMdSpi;
ThostFtdcUserApiStruct.h定義了接口方法中用到的數據結構。
ThostFtdcUserApiDataType.h定義了數據結構中用到數據類型,枚舉描述。
開發者通過CThostFtdcUserApi就可以完成交易接口的初始化,登入,確認結算結果,查詢合約,查詢資金,查詢持倉,報單,撤單等業務操作;通過CThostFtdcUserSpi獲取相應回報
開發者也可以通過CThostFtdcMdApi完成行情接口的初始化,登入,訂閱,收行情等業務;通過CThostFtdcMdSpi獲取相應的行情業務操作的回報。
上文提到了基於CTP的程序化交易系統開發最好要有四個線程:
1.完成初始化及退出操作的主線程;
2.行情接受和處理線程;
3.新行情數據監聽和處理線程;
4.訂單管理線程
現在先討論一下主線程的初始化工作。初始化工作包括交易接口和行情接口兩部分,對於交易接口的初始化,程序必須完成如下步驟:
1, 產生一個CThostFtdcTraderApi實例
2, 產生一個事件處理的實例
3, 註冊一個事件處理的實例
4, 訂閱私有流
5, 訂閱公共流
6, 設置交易託管服務的地址。
初始化過程的時序圖如下:
對於行情接口的初始化工作要簡單一些,因爲接口默認就訂閱了公有流和私有流,初始化過程的時序圖如下:
接下來就是行情接收和處理線程,行情的接收是通過CThostFtdcMdApi::SubscribeMarketData()完成對行情的訂閱,通過CThostFtdcMdSpi::OnRtnDepthMarketData()完成對於行情數據的接收。此線程的工作主要要完成如下三個方面:
1.行情數據的存儲:由於SubscribeMarketData()可以對多個合約行情進行訂閱,所以在接收到數據後的處理首先要考慮對不同合約的數據分別以合適的方式(這裏合適的方式是指存取,遍歷,查詢,增刪等操作最爲穩定快速的算法)存儲。
2.行情數據的補齊:這是一個相當重要的問題。當tick數據爲空的時候,必須以合適的方式補齊(因爲缺失的數據對後來的統計指標計算有較大的影響,所以數據補齊是相當考究的)。
3.最新行情數據到來時向數據監聽線程發出信號。
在下一文中我將討論一下剩餘的數據監聽和處理線程和訂單管理線程。