基於CTP的程序化交易系統開發(一)


自從綜合交易平臺(CTP)的API開放以來,很多人開始編寫自己的程序化交易系統,今天我想說說自己的一些看法。
   
首先解讀一下CTP的接口說明,CTPAPI使用建立在TCP協議之上FTD協議(《期貨交易數據交換協議》)與交易託管系統進行通訊,而交易託管系統負責投資者的交易業務處理。FTD 協議中規定了所有的通訊都基於某一種通訊模式。

交易涉及的通訊模式共有三種:

1.對話通訊模式,是指由會員端主動發起的通訊請求。該請求被交易所端接收和處理,並給予響應。例如報單、查詢等。這種通訊模式與普通的客戶/服務器模式相同。

2.私有通訊模式,是指交易所端主動,向某個特定的會員發出的信息。例如成交

回報等。

3.廣播通訊模式,是指交易所端主動,向市場中的所有會員都發出相同的信息。

例如公告、市場公共信息等。

CTP交易API提供了兩個接口,分別爲CThostFtdcTraderApiCThostFtdcTraderSpi

我們自己開發的交易系統通過CThostFtdcTraderApiCTP發送操作請求,通過CThostFtdcTraderSpi接收CTP的任何響應。

現在把主要的業務舉例在下表中

業務舉例

通訊模式

CThostFtdcTraderApi

CThostFtdcTraderSpi

登錄

對話模式

ReqUserLogin

OnRspUserLogin

報單錄入

ReqOrderInsert

OnRspOrderInsert

報單查詢

ReqQryOrder

OnRspQryOrder

成交查詢

ReqQryTrade

OnRspQryTrade

報單回報

私有模式

 

OnRtnOrder

成交回報

 

OnRtnTrade

行情涉及的通訊模式共有兩種:

1.對話通訊模式,同交易一樣,是指由會員端主動發起的通訊請求。該請求被交易所端接收和處理,並給予響應。例如登錄,退訂等。

2.廣播通訊模式,主要是行情訂閱,當訂閱行情後交易所端主動向會員連續主動發出行情信息。

業務舉例

通訊模式

CThostFtdcMdApi

CThostFtdcMdSpi

  登錄

對話
模式

ReqUserLogin

OnRspUserLogin

行情訂閱

廣播

模式

SubscribeMarketData

OnRspQryDepthMarketData

行情退訂

對話模式

UnSubMarketData

 

OnRspUnSubMarketData

 

可見,通過CTP提供的接口,我們可以向CTP發送業務申請,也不斷的按照三種通訊模式中的其中一種接收CTP的響應。因此我們寫的交易系統中至少就應該有兩個線程,一個稱其爲主業務線程,負責對CTP發出業務申請;另一個線程爲API工作線程,負責接收CTP通過廣播通訊模式,對話通訊模式,私有通訊模式其中一種模式對交易系統的響應。

    綜上所述,我們的程序化交易系統需要完成的業務可以劃分爲:

1.基本操作,比如登錄,訂閱等;

2.行情操作,比如對行情數據的接收,存儲等

3.訂單操作,比如報單;對報單,成交狀況的查詢;報單,成交狀況的私有回報等。

4.數據監聽和處理操作,比如接收到新數據之後的統計處理,滿足統計條件後的報單處理(其實這裏就是我們的策略所在)

    那麼,我建議將我們的程序化交易系統分爲四個線程,分別處理上述業務。程序的主線程就可以完成基本操作,完成登入,訂閱等初始化工作。

    其它三個線程工作關係如下圖所示:

基於CTP的程序化交易系統開發(一)

程序化交易系統是一個複雜的多線程網絡程序,在開發過程中要特別注意處理很多的線程互斥、數據處理造成的網絡丟包等一系列棘手問題。另外,對於CTP開發的資料,大家可以留言給我,我儘量提供,也歡迎大家多多討論。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章