《綜合交易平臺API簡介.ppt》由會員分享,可在線閱讀,更多相關(guān)《綜合交易平臺API簡介.ppt(25頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、綜合交易平臺API簡介,,大綱,Api概述 通用規(guī)則 交易業(yè)務(wù) 行情業(yè)務(wù) 參考資料,概述,綜合交易平臺Api包括交易Api和行情Api 交易Api建立在Tcp協(xié)議上,實(shí)現(xiàn)了客戶端和綜合交易平臺之間的雙向異步通訊。行情Api可以運(yùn)行在Tcp或者在Udp協(xié)議上。 下面把綜合交易平臺簡稱為Thost,交易Api簡稱為TraderApi ,行情Api簡稱為MdUserApi。上述2種Api統(tǒng)稱為Api。,概述 - 通訊模式,Api有3種通訊模式: 對話通訊模式:由客戶端主動發(fā)起請求。Thost收到請求、處理請求后,返回1條或者多條響應(yīng)紀(jì)錄。例如登入、各項(xiàng)查詢、報單、撤單等操作。 私有通訊模式:由Tho
2、st主動向客戶端發(fā)出的相關(guān)信息。例如委托回報、成交回報、錯單回報等 廣播通訊模式:由Thost主動向所有客戶端發(fā)出的公共信息,例如行情等。,概述 通訊模式,有3種方式訂閱公有流和私有流 enum THOST_TE_RESUME_TYPE // 從當(dāng)天的第一條記錄開始接收數(shù)據(jù)流 THOST_TERT_RESTART = 0, // 接收上次斷線以后的數(shù)據(jù)流 THOST_TERT_RESUME, // 接收本次登入以后的數(shù)據(jù)流 THOST_TERT_QUICK ; 相同點(diǎn): 設(shè)定重傳數(shù)據(jù)流的起點(diǎn) 不同點(diǎn): 今天的第1條、第1條沒有收到過的記錄、登入后的第1條。,概述 - 初始化過程,MdUserA
3、pi的初始化過程比較簡單, 默認(rèn)按照Quick的方式訂閱公有流和私有流。,概述 - 樣例代碼,TraderApi樣例代碼: testTraderApi 初始化,登入,確認(rèn)結(jié)算結(jié)果,查詢合約,查詢資金,查詢持倉,報單,收委托回報,撤單 MdUserApi樣例代碼: testMdUserApi 初始化,登入,訂閱,收行情,概述 - 接口文件,TraderApi接口文件: ThostFtdcTraderApi.h: 定義了請求接口CThostFtdcUserApi,事件處理接口CThostFtdcUserSpi。 ThostFtdcUserApiStruct.h: 定義了接口方法中用到的數(shù)據(jù)結(jié)構(gòu)。
4、ThostFtdcUserApiDataType.h: 定義了數(shù)據(jù)結(jié)構(gòu)中用到數(shù)據(jù)類型,枚舉描述。 thosttraderapi.lib:靜態(tài)連接庫 thosttraderapi.dll:動態(tài)鏈接庫,MdUserApi接口文件: ThostFtdcMdApi.h: 定義了請求接口CThostFtdcMdApi,事件處理接口CThostFtdcMdSpi。 ThostFtdcUserApiStruct.h,ThostFtdcUserApiDataType.h: 和TraderApi公用。 thostMdapi.lib:靜態(tài)連接庫 thostMdapi.dll:動態(tài)鏈接庫,,通用規(guī)則 - 命名規(guī)則,
5、Api的方法都是遵循一定的命名規(guī)則來設(shè)定。 請求指令:Req***, OnRsp***。如ReqUserLogin,OnRspUserLogin。 查詢指令:ReqQry***,OnRspQry***。如ReqQryInstrument,OnRspQryInstrument。 回報消息:OnRtn***,如OnRtnOrder,OnRtnTrade。 錯誤回報:OnErrRtn***,如OnErrRtnOrderInsert,OnErrRtnOrderAction。,通用規(guī)則 查詢/請求,請求查詢合約 virtual int ReqQryInstrument(CThostFtdcQryInst
6、rumentField *pQryInstrument, int nRequestID) = 0; 請求查詢合約響應(yīng) virtual void OnRspQryInstrument(CThostFtdcInstrumentField *pInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ;,通用規(guī)則 查詢/請求,查詢參數(shù) 如果查詢參數(shù)為空,說明需要查詢所有數(shù)據(jù)。如果需要查詢某個交易所的合約,就在查詢參數(shù)中指定ExchangeID。 請求編號RequestID 發(fā)送請求時需要設(shè)定RequestI
7、D,TraderApi返回響應(yīng)時返回相關(guān)請求的RequestID。 因?yàn)門raderApi是異步實(shí)現(xiàn)的,終端程序可能連續(xù)發(fā)出多個請求和查詢指令。RequestID可以把請求/查詢指令和相關(guān)的回報關(guān)聯(lián)起來。 指令返回值 如果調(diào)用方法成功,返回0。 否則表示不成功。其中返回值-2、-3表示查詢請求受到流控限制,不能發(fā)送請求。,響應(yīng)信息RspInfo 如果RspInfo為空,或者RspInfo的錯誤代碼為0,說明查詢成功。 否則RspInfo中會保存錯誤編碼和錯誤信息。 查詢響應(yīng)數(shù)據(jù) 查詢響應(yīng)方法每次返回1條記錄。如果沒有查詢結(jié)果,就返回空指針。 結(jié)束標(biāo)志IsLast 無論是否有查詢響應(yīng)數(shù)據(jù)沒,只要
8、查詢響應(yīng)結(jié)束,IsLast為true。,交易業(yè)務(wù) 用戶登入,用戶登入指令是ReqUserLogin。 用戶登入時需要輸入:經(jīng)紀(jì)公司代碼,用戶代碼(就是投資者代碼),密碼,用戶端產(chǎn)品信息(就是終端程序的名稱) 登入成功后,Thost返回: 當(dāng)前會話的參數(shù)。用戶可以用這些參數(shù)定義自己的交易序列號FrontID+SessionID+MaxOrderRef 當(dāng)前各個交易所的時間。終端程序依此可以估計未來各個交易所的時間。,交易業(yè)務(wù) 準(zhǔn)備交易,在1個交易日中: 為了讓投資者了解當(dāng)前的交易風(fēng)險。終端程序要在第一次發(fā)送交易指令之前,查詢投資者結(jié)算結(jié)果(ReqQrySettlementInfo)和確認(rèn)投資者結(jié)
9、算結(jié)果(ReqSettlementInfoConfirm),才能正常發(fā)送交易指令,包括報單、撤單、服務(wù)器預(yù)埋單等指令。 如果投資者已經(jīng)確認(rèn)過了結(jié)算結(jié)果,以后登入Thost,不再需要確認(rèn)結(jié)算結(jié)果,就可以發(fā)送交易指令了。 可以通過請求查詢結(jié)算信息確認(rèn)(ReqQrySettlementInfoConfirm)方法了解今天是否做了確認(rèn)結(jié)算結(jié)果的操作。,交易業(yè)務(wù) 交易過程,交易業(yè)務(wù) 交易時序,交易業(yè)務(wù) 交易序列號,從報單到成交的交易過程中,會產(chǎn)生如下幾組交易序列號: FrontID + SessionID + OrderRef 用戶使用這組交易序列號可以按照自己的方式來唯一標(biāo)示發(fā)出的任何一筆委托。 用戶
10、登入成功后,會收到前置機(jī)編號FrontID, 會話編號SessionID 和最大報單引用MaxOrderRef。 用戶在報單時設(shè)定報單引用OrderRef。 OrderRef可以從MaxOrderRef開始遞增。 如果用戶沒有設(shè)定OrderRef,在報單響應(yīng)中,Thost會為用戶設(shè)置一個的OrderRef。使得每個報單的這組序列號保持唯一。 因?yàn)檫@組交易序列號是由用戶設(shè)定的。所以在沒有得到報單響應(yīng)前,就可以使用這組交易序列號進(jìn)行撤單操作。 BrokerID + BrokerOrderSeq Thost收到用戶報單后,為每個經(jīng)紀(jì)公司的報單生成1組交易序列號。 exchangeID + trade
11、rID + OrderLocalID 交易席位在向交易所報單時,產(chǎn)生這組交易序列號,標(biāo)示每一筆發(fā)往交易所的報單。 exchangeID + OrderSysID 交易所接受了投資者報單,產(chǎn)生這組交易序列號,標(biāo)示每一筆收到的報單。 用戶撤單時也可以使用這組交易序列號 注意:服務(wù)器在觸發(fā)服務(wù)器預(yù)埋單、條件單時,會發(fā)送新的委托指令到交易所,需要設(shè)置新的OrderRef和OrderSysID。,交易業(yè)務(wù) 報單指令,報單指令是:ReqOrderInsert。 報單指令中如下字段需要如下設(shè)置: ///成交量類型:任何數(shù)量 fldOrder.VolumeCondition = THOST_FTDC_VC_A
12、V; /// 最小成交量:1 fldOrder.MinVolume = 1; /// 強(qiáng)平原因:非強(qiáng)平 fldOrder.ForceCloseReason = THOST_FTDC_FCC_NotForceClose; /// 自動掛起標(biāo)志:是 fldOrder.IsAutoSuspend = 1; ///用戶強(qiáng)評標(biāo)志:否 fldOrder.UserForceClose = 0;,交易業(yè)務(wù) 報單指令,如果發(fā)送立即限價單: /// 報單價格條件類型:限價 OrderPriceType = THOST_FTDC_OPT_LimitPrice; /// 價格:用戶設(shè)定 LimitPrice = ;
13、/// 有效期類型類型:當(dāng)日有效 TimeCondition = THOST_FTDC_TC_GFD; FAK:TimeCondition = THOST_FTDC_TC_IOC; FOK:VolumeCondition = THOST_FTDC_VC_CV; 如果發(fā)送立即市價單 /// 報單價格條件類型:任意價 fldOrder.OrderPriceType = THOST_FTDC_OPT_AnyPrice; ///價格:0 fldOrder.LimitPrice = 0; ///有效期類型類型:立即完成,否則撤銷 fldOrder.TimeCondition = THOST_FTDC_T
14、C_IOC;,如果發(fā)送觸發(fā)單 ///觸發(fā)條件:用戶設(shè)定 ContingentCondition = ; ///止損價:用戶設(shè)定 StopPrice = ; /// 報單價格條件類型:限價 OrderPriceType = THOST_FTDC_OPT_LimitPrice; /// 價格:用戶設(shè)定 LimitPrice = ; /// 有效期類型類型:當(dāng)日有效 TimeCondition = THOST_FTDC_TC_GFD;,交易業(yè)務(wù) 報單指令,關(guān)于平倉 上期所區(qū)分昨倉和今倉。 平昨倉時,開平標(biāo)志類型設(shè)置為平倉THOST_FTDC_OF_Close 平今倉時,開平標(biāo)志類型設(shè)置為平今倉THO
15、ST_FTDC_OF_CloseToday 其他交易所不區(qū)分昨倉和今倉。 開平標(biāo)志類型統(tǒng)一設(shè)置為平倉THOST_FTDC_OF_Close 報單響應(yīng)和回報 Thost收到報單指令,如果沒有通過參數(shù)校驗(yàn),拒絕接受報單指令。用戶就會收到OnRspOrderInsert消息,其中包含了錯誤編碼和錯誤消息。 如果Thost接受了報單指令,用戶不會收到OnRspOrderInser,而會收到OnRtnOrder,用來更新委托狀態(tài)。 交易所收到報單后,通過校驗(yàn)。用戶會收到OnRtnOrder、OnRtnTrade。 如果交易所認(rèn)為報單錯誤,用戶就會收到OnErrRtnOrder。,交易業(yè)務(wù) 撤單指令,撤單
16、指令是:ReqOrderAction。 撤單輸入?yún)?shù): /// 報單操作引用, /// OrderRef相似,有用戶自己設(shè)定,保持遞增。如果用戶不設(shè)定的話,有Thost來設(shè)定。 OrderActionRef /// 操作標(biāo)志類型:撤單 ActionFlag = THOST_FTDC_AF_Delete /// 交易序列號 FrontID +SessionID+OrderRef, ExchangID+OrderSysID。 /// 其他參數(shù) BrokerID, UserID, InvestorID, InstrumentID,,撤單響應(yīng)和回報: 和報單響應(yīng)和回報相似。 Thost收到撤單指令,如
17、果沒有通過參數(shù)校驗(yàn),拒絕接受撤單指令。用戶就會收到OnRspOrderAction消息,其中包含了錯誤編碼和錯誤消息。 如果Thost接受了撤單指令,用戶不會收到OnRspOrderAction,而會收到OnRtnOrder,用來更新委托狀態(tài)。 交易所收到撤單后,通過校驗(yàn),執(zhí)行了撤單操作。用戶會收到OnRtnOrder。 如果交易所認(rèn)為報單錯誤,用戶就會收到OnErrRtnOrderAction。 注意:2階段提交的指令都是這個規(guī)律,包括銀期轉(zhuǎn)賬。,交易業(yè)務(wù)- 委托回報,委托回報的事件處理方法是:OnRtnOrder()。 委托回報描述了報單的當(dāng)前狀態(tài),其中包括: 原始的報單指令 上述幾組交易
18、序列號: FrontID + SessionID + OrderRef, BrokerID + BrokerOrderSeq, ExchangeID + TraderID + LocalOrderID ExchangeID + OrderSysID,,報單委托狀態(tài) ///TFtdcOrderStatusType是一個報單狀態(tài)類型 ///全部成交 #define THOST_FTDC_OST_AllTraded 0 ///部分成交還在隊(duì)列中 #define THOST_FTDC_OST_PartTradedQueueing 1 ///部分成交不在隊(duì)列中 #define THOST_FTDC_O
19、ST_PartTradedNotQueueing 2 ///未成交還在隊(duì)列中 #define THOST_FTDC_OST_NoTradeQueueing 3 ///未成交不在隊(duì)列中 #define THOST_FTDC_OST_NoTradeNotQueueing 4 ///撤單 #define THOST_FTDC_OST_Canceled 5 ///未知 #define THOST_FTDC_OST_Unknown a ///尚未觸發(fā) #define THOST_FTDC_OST_NotTouched b,交易業(yè)務(wù) 成交回報,成交回報的事件處理方法是:OnRtnTrade()。 成交回報
20、描述了報單的成交事件 包括下述幾組交易序列號: BrokerID + BrokerOrderSeq, ExchangeID + TraderID + LocalOrderID ExchangeID + OrderSysID,,交易業(yè)務(wù) 其他業(yè)務(wù),其他交易功能:發(fā)送服務(wù)器預(yù)埋單、服務(wù)器條件單 查詢基礎(chǔ)數(shù)據(jù):交易所,合約,投資者,手續(xù)費(fèi)率,保證金率,交易編碼 查詢交易數(shù)據(jù):資金,持倉,(組合)持倉明細(xì) 查詢/回報:委托,成交,交易所狀態(tài) 銀期轉(zhuǎn)賬,行情業(yè)務(wù) 訂閱/退訂,訂閱 SubscribeMarketData OnRspSubMarketData OnRtnDepthMarketData,退訂 UnSubMarketData OnRspUnSubMarketData,注意: 需要輸入合約列表。 允許重復(fù)訂閱,服務(wù)器會合并訂閱列表。,參考資料,Qq群:CTP_API開發(fā)技術(shù)N群 綜合交易平臺資料: http://202.109.110.121/api.htm 綜合交易平臺API開發(fā)常見問題列表.pdf 綜合交易平臺交易API特別說明.pdf 持倉各資金項(xiàng)計算規(guī)則.xls 綜合交易平臺條件單操作手冊.pdf CTP新版銀期轉(zhuǎn)帳TradeApi使用說明.pdf 交易/行情開發(fā)實(shí)例.rar 模擬環(huán)境:請參考樣例程序中的配置,