綜合交易平臺API開發(fā)簡介.doc
綜合交易平臺API開發(fā)簡介大綱 Api概述 通用規(guī)則 交易業(yè)務 行情業(yè)務 參考資料 綜合交易平臺Api包括交易Api和行情Api 交易Api建立在Tcp協(xié)議上,實現了客戶端和綜合交易平臺之間的雙向異步通訊。行情Api可以運行在Tcp或者在Udp協(xié)議上。 下面把綜合交易平臺簡稱為Thost,交易Api簡稱為TraderApi ,行情Api簡稱為MdUserApi。上述2種Api統(tǒng)稱為Api概述 - 通訊模式Api有3種通訊模式: 對話通訊模式:由客戶端主動發(fā)起請求。Thost收到請求、處理請求后,返回1條或者多條響應紀錄。例如登入、各項查詢、報單、撤單等操作。 私有通訊模式:由Thost主動向客戶端發(fā)出的相關信息。例如委托回報、成交回報、錯單回報等 廣播通訊模式:由Thost主動向所有客戶端發(fā)出的公共信息,例如行情等。 有3種方式訂閱公有流和私有流enum THOST_TE_RESUME_TYPE/ 從當天的第一條記錄開始接收數據流THOST_TERT_RESTART = 0,/ 接收上次斷線以后的數據流THOST_TERT_RESUME,/ 接收本次登入以后的數據流THOST_TERT_QUICK;概述 - 初始化過程MdUserApi的初始化過程比較簡單,默認按照Quick的方式訂閱公有流和私有流。概述 - 樣例代碼 TraderApi樣例代碼: testTraderApi 初始化,登入,確認結算結果,查詢合約,查詢資金,查詢持倉,報單,收委托回報,撤單 MdUserApi樣例代碼: testMdUserApi 初始化,登入,訂閱,收行情概述 - 接口文件TraderApi接口文件: ThostFtdcTraderApi.h:定義了請求接口CThostFtdcUserApi,事件處理接口CThostFtdcUserSpi。 ThostFtdcUserApiStruct.h:定義了接口方法中用到的數據結構。 ThostFtdcUserApiDataType.h:定義了數據結構中用到數據類型,枚舉描述。 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ī)則Api的方法都是遵循一定的命名規(guī)則來設定。 請求指令:Req*, OnRsp*。如ReqUserLogin,OnRspUserLogin。 查詢指令:ReqQry*,OnRspQry*。如ReqQryInstrument,OnRspQryInstrument。 回報消息:OnRtn*,如OnRtnOrder,OnRtnTrade。 錯誤回報:OnErrRtn*,如OnErrRtnOrderInsert,OnErrRtnOrderAction。通用規(guī)則 查詢/請求 請求查詢合約virtual int ReqQryInstrument(CThostFtdcQryInstrumentField *pQryInstrument, int nRequestID) = 0; 請求查詢合約響應virtual void OnRspQryInstrument(CThostFtdcInstrumentField *pInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; 查詢參數如果查詢參數為空,說明需要查詢所有數據。如果需要查詢某個交易所的合約,就在查詢參數中指定ExchangeID。 請求編號RequestID發(fā)送請求時需要設定RequestID,TraderApi返回響應時返回相關請求的RequestID。因為TraderApi是異步實現的,終端程序可能連續(xù)發(fā)出多個請求和查詢指令。RequestID可以把請求/查詢指令和相關的回報關聯(lián)起來。 指令返回值如果調用方法成功,返回0。否則表示不成功。 響應信息RspInfo如果RspInfo為空,或者RspInfo的錯誤代碼為0,說明查詢成功。否則RspInfo中會保存錯誤編碼和錯誤信息。 查詢響應數據查詢響應方法每次返回1條記錄。如果沒有查詢結果,就返回空指針。 結束標志IsLast無論是否有查詢響應數據沒,只要查詢響應結束,IsLast為true。交易業(yè)務 交易序列號從報單到成交的交易過程中,會產生如下幾組交易序列號: FrontID + SessionID + OrderRef用戶使用這組交易序列號可以按照自己的方式來唯一標示發(fā)出的任何一筆委托。用戶登入成功后,會收到前置機編號FrontID, 會話編號SessionID 和最大報單引用MaxOrderRef。用戶在報單時設定報單引用OrderRef。 OrderRef可以從MaxOrderRef開始遞增。如果用戶沒有設定OrderRef,在報單響應中,Thost會為用戶設置一個的OrderRef。使得每個報單的這組序列號保持唯一。因為這組交易序列號是由用戶設定的。所以在沒有得到報單響應前,就可以使用這組交易序列號進行撤單操作。 BrokerID + BrokerOrderSeqThost收到用戶報單后,為每個經紀公司的報單生成1組交易序列號。 exchangeID + traderID + OrderLocalID交易席位在向交易所報單時,產生這組交易序列號,標示每一筆發(fā)往交易所的報單。 exchangeID + OrderSysID交易所接受了投資者報單,產生這組交易序列號,標示每一筆收到的報單。用戶撤單時也可以使用這組交易序列號 注意:服務器在觸發(fā)服務器預埋單、條件單時,會發(fā)送新的委托指令到交易所,需要設置新的OrderRef和OrderSysID。交易業(yè)務 用戶登入 用戶登入指令是ReqUserLogin。用戶登入時需要輸入:經紀公司代碼,用戶代碼(就是投資者代碼),密碼,用戶端產品信息(就是終端程序的名稱) 登入成功后,Thost返回:當前會話的參數。用戶可以用這些參數定義自己的交易序列號FrontID+SessionID+MaxOrderRef當前各個交易所的時間。終端程序依此可以估計未來各個交易所的時間。交易業(yè)務 準備交易 在1個交易日中: 為了讓投資者了解當前的交易風險。終端程序要在第一次發(fā)送交易指令之前,查詢投資者結算結果(ReqQrySettlementInfo)和確認投資者結算結果(ReqSettlementInfoConfirm),才能正常發(fā)送交易指令,包括報單、撤單、服務器預埋單等指令。 如果投資者已經確認過了結算結果,以后登入Thost,不再需要確認結算結果,就可以發(fā)送交易指令了。 可以通過請求查詢結算信息確認(ReqQrySettlementInfoConfirm)方法了解今天是否做了確認結算結果的操作。交易業(yè)務 報單指令 報單指令是:ReqOrderInsert。 報單指令中如下字段需要如下設置:/成交量類型:任何數量fldOrder.VolumeCondition = THOST_FTDC_VC_AV;/ 最小成交量:1fldOrder.MinVolume = 1;/ 強平原因:非強平fldOrder.ForceCloseReason = THOST_FTDC_FCC_NotForceClose;/ 自動掛起標志:是fldOrder.IsAutoSuspend = 1;/用戶強評標志:否fldOrder.UserForceClose = 0; 如果發(fā)送立即限價單:/ 報單價格條件類型:限價OrderPriceType = THOST_FTDC_OPT_LimitPrice;/ 價格:用戶設定LimitPrice = ;/ 有效期類型類型:當日有效TimeCondition = THOST_FTDC_TC_GFD; 如果發(fā)送立即市價單/ 報單價格條件類型:任意價fldOrder.OrderPriceType = THOST_FTDC_OPT_AnyPrice;/價格:0fldOrder.LimitPrice = 0;/有效期類型類型:立即完成,否則撤銷fldOrder.TimeCondition = THOST_FTDC_TC_IOC; 如果發(fā)送觸發(fā)單/觸發(fā)條件:用戶設定ContingentCondition = ; /止損價:用戶設定StopPrice = ;/ 報單價格條件類型:限價OrderPriceType = THOST_FTDC_OPT_LimitPrice;/ 價格:用戶設定LimitPrice = ;/ 有效期類型類型:當日有效TimeCondition = THOST_FTDC_TC_GFD; 關于平倉上期所區(qū)分昨倉和今倉。平昨倉時,開平標志類型設置為平倉THOST_FTDC_OF_Close平今倉時,開平標志類型設置為平今倉THOST_FTDC_OF_CloseToday 其他交易所不區(qū)分昨倉和今倉。開平標志類型統(tǒng)一設置為平倉THOST_FTDC_OF_Close 報單響應和回報Thost收到報單指令,如果沒有通過參數校驗,拒絕接受報單指令。用戶就會收到OnRspOrderInsert消息,其中包含了錯誤編碼和錯誤消息。如果Thost接受了報單指令,用戶不會收到OnRspOrderInser,而會收到OnRtnOrder,用來更新委托狀態(tài)。 交易所收到報單后,通過校驗。用戶會收到OnRtnOrder、OnRtnTrade。如果交易所認為報單錯誤,用戶就會收到OnErrRtnOrder。交易業(yè)務 撤單指令 撤單指令是:ReqOrderAction。 撤單輸入參數:/ 報單操作引用,/ OrderRef相似,由用戶自己設定,保持遞增。如果用戶不設定的話,由Thost來設定。OrderActionRef/ 操作標志類型:撤單ActionFlag = THOST_FTDC_AF_Delete/ 交易序列號FrontID +SessionID+OrderRef,ExchangID+OrderSysID。/ 其他參數BrokerID,UserID,InvestorID,InstrumentID, 撤單響應和回報:和報單響應和回報相似。 Thost收到撤單指令,如果沒有通過參數校驗,拒絕接受撤單指令。用戶就會收到OnRspOrderAction消息,其中包含了錯誤編碼和錯誤消息。 如果Thost接受了撤單指令,用戶不會收到OnRspOrderAction,而會收到OnRtnOrder,用來更新委托狀態(tài)。 交易所收到撤單后,通過校驗,執(zhí)行了撤單操作。用戶會收到OnRtnOrder。 如果交易所認為報單錯誤,用戶就會收到OnErrRtnOrderAction。注意:2階段提交的指令都是這個規(guī)律,包括銀期轉賬。交易業(yè)務- 委托回報 委托回報的事件處理方法是:OnRtnOrder()。 委托回報描述了報單的當前狀態(tài),其中包括: 原始的報單指令 上述幾組交易序列號:FrontID + SessionID + OrderRef,BrokerID + BrokerOrderSeq,ExchangeID + TraderID + LocalOrderIDExchangeID + OrderSysID, 報單委托狀態(tài) /TFtdcOrderStatusType是一個報單狀態(tài)類型/全部成交#define THOST_FTDC_OST_AllTraded '0'/部分成交還在隊列中#define THOST_FTDC_OST_PartTradedQueueing '1'/部分成交不在隊列中#define THOST_FTDC_OST_PartTradedNotQueueing '2'/未成交還在隊列中#define THOST_FTDC_OST_NoTradeQueueing '3'/未成交不在隊列中#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è)務 成交回報 成交回報的事件處理方法是:OnRtnTrade()。 成交回報描述了報單的成交事件 包括下述幾組交易序列號:BrokerID + BrokerOrderSeq,ExchangeID + TraderID + LocalOrderIDExchangeID + OrderSysID,交易業(yè)務 交易時序交易業(yè)務 其他業(yè)務 查詢基礎數據:交易所,合約,投資者,手續(xù)費率,保證金率,交易編碼 查詢交易數據:資金,持倉,(組合)持倉明細 其他交易功能:發(fā)送預埋單、條件單 查詢/回報:委托,成交,交易所狀態(tài) 銀期轉賬行情業(yè)務 訂閱/退訂 訂閱SubscribeMarketDataOnRspSubMarketDataOnRtnDepthMarketData 退訂UnSubMarketDataOnRspUnSubMarketData參考資料 Qq群:59216315,綜合交易平臺API技術 綜合交易平臺API開發(fā)常見問題列表.pdf 綜合交易平臺交易API特別說明.pdf 持倉各資金項計算規(guī)則.xls 綜合交易平臺條件單操作手冊.pdf CTP新版銀期轉帳TradeApi使用說明.pdf 交易/行情開發(fā)實例.rar(windows32/linux 64) 綜合交易平臺資料: http:/202.109.110.121/api.htm 模擬環(huán)境:請參考樣例程序中的配置