CTP开发(2)行情模块的开发

文章描述了一个独立的CTP行情和交易系统架构,旨在提高可扩展性,支持多个CTP账户的同时交易。通过CTPMdSpi类实现行情和交易的回调功能,MarketL1Core类管理主要逻辑,允许连接不同交易所。代码示例展示了登录、订阅市场数据等关键操作,以及如何处理心跳超时和错误响应。

我在做CTP开发之前,也参考了不少其他的资料,发现他们都是把行情和交易做在同一个工程里的。我呢之前也做过期货相关的交易平台,感觉这种把行情和交易做在一起的方法缺乏可扩展性。比如我开了多个CTP账户,要同时交易,这种做在一起的方法就很难实现;另外,如果我还要接入其他的交易所,该怎么接?

下面是我的软件架构图:

为了便于说明CTP行情、交易的开发,这个架构图是最初始版的。以后会在这个基础上进行深化,开发成可以实战的可扩展的交易平台。

理论上,1个CTP账号可以在6个地方进行多点登录;另外在实战中,有的客户会有多个CTP账号同时进行量化交易。所以,这个软件架构图是能满足多CTP账号同时交易的要求的。

1、类文件说明

(1)CTPMdSpi.h、CTPMdSpi.cpp

继承CThostFtdcMdSpi类,里面实现所有的回调函数,是最重要的类。

(2)MarketL1Core.h、MarketL1Core.cpp

主类,里面包含着程序调用的主要逻辑关系。

(3)Main.cpp

写main()函数的类。

2、代码说明

(1)CTPMdSpi.h

#pragma once

#include <string>
#include <vector>

#include "ctp/ThostFtdcMdApi.h"

class CTPMdSpi : public CThostFtdcMdSpi
{
public:
	CTPMdSpi() = default;
	~CTPMdSpi() = default;

	///当客户端与交易后台建立起通信连接时(还未登录前),该方法被调用。
	virtual void OnFrontConnected();
	
	///当客户端与交易后台通信连接断开时,该方法被调用。当发生这个情况后,API会自动重新连接,客户端可不做处理。
	///@param nReason 错误原因
	///        0x1001 网络读失败
	///        0x1002 网络写失败
	///        0x2001 接收心跳超时
	///        0x2002 发送心跳失败
	///        0x2003 收到错误报文
	virtual void OnFrontDisconnected(int nReason);
		
	///心跳超时警告。当长时间未收到报文时,该方法被调用。
	///@param nTimeLapse 距离上次接收报文的时间
	virtual void OnHeartBeatWarning(int nTimeLapse);
	
	///登录请求响应
	virtual void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, 
							CThostFtdcRspInfoField *pRspInfo, 
							int nRequestID, 
							bool bIsLast);

	///登出请求响应
	virtual void OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, 
							CThostFtdcRspInfoField *pRspInfo, 
							int nRequestID, 
							bool bIsLast);

	///请求查询组播合约响应
	virtual void OnRspQryMulticastInstrument(CThostFtdcMulticastInstrumentField *pMulticastInstrument, 
							CThostFtdcRspInfoField *pRspInfo, 
							int nRequestID, 
							bool bIsLast);

	///错误应答
	virtual void OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);

	///订阅行情应答
	virtual void OnRspSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, 
							CThostFtdcRspInfoField *pRspInfo, 
							int nRequestID, 
							bool bIsLast);

	///取消订阅行情应答
	virtual void OnRspUnSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, 
							CThostFtdcRspInfoField *pRspInfo, 
							int nRequestID, 
							bool bIsLast);

	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值