淺談CTP期貨行情交易API

     API下載地址:上期所ctp

1、什麼是CTP

     綜合交易平臺(Comprehensive Transaction Platform,CTP)是專門爲期貨公司開發的一套期貨經紀業務管理
系統,由交易、風險控制和結算三大系統組成。
     其中,交易系統主要負責訂單處理、行情轉發及銀期轉賬業務,結算系統負責交易管理、帳戶管理、經紀人
管理、資金管理、費率設置、日終結算、信息查詢以及報表管理等,風控系統則主要在盤中進行高速的實時
試算,以及時揭示並控制風險。系統能夠同時連通國內四家期貨交易所,支持國內商品期貨和股指期貨的交
易結算業務,並能自動生成、報送保證金監控文件和反洗錢監控文件。
     綜合交易平臺借鑑代表了國際衍生品領域交易系統先進水平的上期所“新一代交易所繫統”的核心技術,採
用創新的完全精確重演的分佈式體系架構。
     綜合交易平臺是基於全內存的交易系統,支持7x24小時連續交易,運維人員不必每日啓停系統,可以做到“一
鍵運維”。該特性使得綜合交易平臺新增交易中心以擴展業務規模時不用增加運維人力的成本。
     支持FENS機制的“一鍵切換”多活交易中心也是目前市場上只有CTP系統實現了的特性。該機制使得交易系統
可在某個交易中心宕機的情況下立即切換到另一個備用交易中心,得以實現真真正正的連續交易。
綜合交易平臺公開並對外開放交易系統接口,使用該接口可以接收交易所的行情數據和執行交易指令。該接
口採用開放接口(API)的方式接入,早已在期貨界已經形成事實上的行業標準。
     綜合交易平臺mini版(CTP mini),是一款速度更快,更輕量級的CTP系統。相對於CTP來說,它追求的是更
小型化的配置,更節約化的資源配備。而用CTP的API開發的客戶端程序也可以完美兼容CTP mini系統。

2、用途

     做自己的期貨交易軟件、自動化交易系統、貼水差價交易、行情數據服務等待。

3、API解析


上期所提供了以上幾個頭文件,實現相應的方法即可。

(1)行情模塊

ThostFtdcMdApi.h

//using namespace std;
class CustomMdSpi: public CThostFtdcMdSpi
{
	// ---- 繼承自CTP父類的回調接口並實現 ---- //
public:
	double begintime1;
	double begintime2;
	double begintime3;
	double begintime4;

	double endtime1;
	double endtime2;
	double endtime3;
	double endtime4;

	std::map<std::string, int> gMarket;


	///當客戶端與交易後臺建立起通信連接時(還未登錄前),該方法被調用。
	void OnFrontConnected();

	///當客戶端與交易後臺通信連接斷開時,該方法被調用。當發生這個情況後,API會自動重新連接,客戶端可不做處理。
	///@param nReason 錯誤原因
	///        0x1001 網絡讀失敗
	///        0x1002 網絡寫失敗
	///        0x2001 接收心跳超時
	///        0x2002 發送心跳失敗
	///        0x2003 收到錯誤報文
	void OnFrontDisconnected(int nReason);

	///心跳超時警告。當長時間未收到報文時,該方法被調用。
	///@param nTimeLapse 距離上次接收報文的時間
	void OnHeartBeatWarning(int nTimeLapse);

	///登錄請求響應
	void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);

	///登出請求響應
	void OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);

	///錯誤應答
	void OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);

	///訂閱行情應答
	void OnRspSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);

	///取消訂閱行情應答
	void OnRspUnSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);

	///訂閱詢價應答
	void OnRspSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);

	///取消訂閱詢價應答
	void OnRspUnSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);

	///深度行情通知
	void OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData);

	///詢價通知
	void OnRtnForQuoteRsp(CThostFtdcForQuoteRspField *pForQuoteRsp);
};


(2)交易模塊

   ThostFtdcTraderApi.h

#pragma once
// ---- 派生的交易類 ---- //
#include "CTP_API/ThostFtdcTraderApi.h"
#include <map>
#include <unordered_map>
#include <string>
#include <algorithm>
#include "iostream"
#include <iostream> 
#include <windows.h>
#include <vector>

class CustomTradeSpi : public CThostFtdcTraderSpi
{
// ---- ctp_api部分回調接口 ---- //
public:
	///當客戶端與交易後臺建立起通信連接時(還未登錄前),該方法被調用。
	void OnFrontConnected();

	///登錄請求響應
	void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);

	///錯誤應答
	void OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);

	///當客戶端與交易後臺通信連接斷開時,該方法被調用。當發生這個情況後,API會自動重新連接,客戶端可不做處理。
	void OnFrontDisconnected(int nReason);

	///心跳超時警告。當長時間未收到報文時,該方法被調用。
	void OnHeartBeatWarning(int nTimeLapse);

	///登出請求響應
	void OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);

	///投資者結算結果確認響應
	void OnRspSettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);

	///請求查詢合約響應
	void OnRspQryInstrument(CThostFtdcInstrumentField *pInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);

	///請求查詢資金賬戶響應
	void OnRspQryTradingAccount(CThostFtdcTradingAccountField *pTradingAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);

	///請求查詢投資者持倉響應
	void OnRspQryInvestorPosition(CThostFtdcInvestorPositionField *pInvestorPosition, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);

	///報單錄入請求響應
	void OnRspOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);

	///報單操作請求響應
	void OnRspOrderAction(CThostFtdcInputOrderActionField *pInputOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);

	///報單通知
	void OnRtnOrder(CThostFtdcOrderField *pOrder);

	///成交通知
	void OnRtnTrade(CThostFtdcTradeField *pTrade);
	
// ---- 自定義函數 ---- //
public:
	bool loginFlag; // 登陸成功的標識
	// 報單引用
	int iOrderRef;
	int iRequestID;

	// 所有成功訂單記錄
	std::map<char *, int> tradeOrderRefs;

	//int FRONT_ID;
	//int SESSION_ID;

	void reqOrderInsert(
		TThostFtdcInstrumentIDType instrumentID,
		TThostFtdcPriceType price,
		TThostFtdcVolumeType volume,
		TThostFtdcDirectionType direction); // 個性化報單錄入,外部調用
	//
	int InsertOrder(char *InstrumentID, TThostFtdcDirectionType dir, char offsetFlag, char priceType, double price, int num);
	//
	int DeleteOrder(char *InstrumentID, int orderRef);

	void CallBackCloseOrder(bool flag, int iOrderRef);
private:
	void reqUserLogin(); // 登錄請求
	void reqUserLogout(); // 登出請求
	void reqSettlementInfoConfirm(); // 投資者結果確認
	void reqQueryInstrument(); // 請求查詢合約
	void reqQueryTradingAccount(); // 請求查詢資金帳戶
	void reqQueryInvestorPosition(); // 請求查詢投資者持倉
	void reqOrderInsert(); // 請求報單錄入
	
	void reqOrderAction(CThostFtdcOrderField *pOrder); // 請求報單操作
	bool isErrorRspInfo(CThostFtdcRspInfoField *pRspInfo); // 是否收到錯誤信息
	bool isMyOrder(CThostFtdcOrderField *pOrder); // 是否我的報單回報
	bool isTradingOrder(CThostFtdcOrderField *pOrder); // 是否正在交易的報單
};

測試源碼:http://download.csdn.net/download/lt623265189/9964977

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