浅谈CTP期货行情交易API

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lt623265189/article/details/77850862

     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

猜你喜欢

转载自blog.csdn.net/lt623265189/article/details/77850862