CTP程序化交易入门系列之二:API基本架构及初始化
上節講了CTP程序化交易的入門工作:下載API,準備賬號密碼地址等。這節我們來講API基本架構及初始化。
一、 CTP API基本架構
?這里為了便于大家理解API的相關函數,我簡略地講一下API的基本架構。如上圖所畫,左邊部分是客戶的交易程序,中間是封裝好的API動態庫底層;右邊是CTP系統。以客戶登錄為例,順序邏輯如下:?其實這也是國內市場上(包括交易所)大部分異步API的基本架構。
二、接口文件清單
?以win64為例:
thosttraderapi.py //交易頭文件 _thosttraderapi.pyd //交易庫轉換文件 thosttraderapi.dll //交易官方動態庫,穿透式版為thosttraderapi_se.dll thostmduserapi.py //行情頭文件 _thostmduserapi.pyd //行情庫轉換文件 thostmduserapi.dll //行情官方動態庫,穿透式版為thostmduserapi_se.dll?可以看到API分為交易3個文件,主要負責認證,登錄,報單,撤單,查資金,查持倉等功能;行情3個文件,主要負責訂閱收取行情。兩部分可以獨立運行。
三、初始化函數說明
?API在調用前需要初始化,初始化的流程都是固定的(詳細參考td_demo.py):
import thosttraderapi as api//創建API實例 tradeapi=api.CThostFtdcTraderApi_CreateFtdcTraderApi() //創建SPI實例。CTradeSpi是繼承自頭文件中CThostFtdcTraderSpi的類型, //用于收從CTP的回復,可以重寫父類中的函數來實現自己的邏輯 tradespi=CTradeSpi(tradeapi) //將創建的SPI實例注冊進實例,這樣該API實例發出的請求對應的回報就會回調到對應的SPI實例的函數 tradeapi.RegisterSpi(tradespi) //訂閱共有流與私有流。訂閱方式主要有三種,分為斷點續傳,重傳和連接建立開始傳三種。 tradeapi.SubscribePrivateTopic(api.THOST_TERT_QUICK) tradeapi.SubscribePublicTopic(api.THOST_TERT_QUICK)// 注冊前置地址,是指將CTP前置的IP地址注冊進API實例內 tradeapi.RegisterFront(FrontAddr) //API啟動,init之后就會啟動一個內部線程讀寫,并去連CTP前置 tradeapi.Init()//Join函數是使得函數阻塞在這里,等待api實例創建的內部線程的結束。 //內部線程需要release才會釋放結束 tradeapi.Join()四、請求及回復函數說明
?以交易為例,從頭文件(thosttraderapi.py)底部可以看到有兩個類class CThostFtdcTraderApi和class CThostFtdcTraderSpi。CThostFtdcTraderApi類中是所有的請求函數,例如請求登錄:
def ReqUserLogin(self, pReqUserLoginField: 'CThostFtdcReqUserLoginField', nRequestID: 'int') -> "int":?投資者只需要用該函數所要求的參數類型聲明一個變量,并將變量中相應成員賦值,再調用函數發送出去就可。如下:
loginfield = api.CThostFtdcReqUserLoginField() loginfield.BrokerID="0000" loginfield.UserID="00001" loginfield.Password="123456" tradeapi.ReqUserLogin(loginfield,0)?這樣就會將登錄請求發送到CTP的前置。
?而該請求對應的回復我們怎么得到呢?這就需要靠SPI實例了。在第三節中可以看到通過RegisterSpi函數,API的實例和SPI的實例是一一對應的。所以如果CTP發回來回復,底層dll就保證了將回調到對應的SPI中登陸回復函數:
?該函數對應的參數便是CTP回復的信息,我們可以繼承CThostFtdcTraderSpi類,然后重寫該函數,將相應的信息答應出來,也可以在該函數中實現其他的邏輯,例如demo中就在該函數中繼續去查結算單信息。
?細心的讀者一定發現了,CThostFtdcTraderApi類中的請求函數和CThostFtdcTraderSpi類中的回復函數命名存在一一對應關系。這種對應關系可以借用官方文檔中一張圖:
五、初始化時序圖
?最后我們以官方文檔中的初始化時序圖收尾。
下節預告:
如何使用CTP API獲取實時行情
關注公眾號,一起學習程序化交易!
關注公眾號,一起學習程序化交易!
總結
以上是生活随笔為你收集整理的CTP程序化交易入门系列之二:API基本架构及初始化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: koa status 204的问题
- 下一篇: hex文件详解及常用合并方法介绍