我在做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);

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

被折叠的 条评论
为什么被折叠?



