CTP期货交易系统

一、简介

(一)CTP简介

1、期货柜台简介

依据国内监管要求,客户无法直连交易所系统,中间必须经过期货公司(Broker)的系统,即柜台系统。期货公司会有多套柜台系统,在功能上分为主席和次席系统。

2、主席柜台

主席柜台功能全面,支持出入金、盘后结算等,要求高吞吐量与高可靠性,一般客户都是在主席系统上交易。

CTP (Comprehensive Transaction Platform,综合交易平台)是上期所子公司上期技术开发的一套主席系统。

3、次席柜台

次席系统一般只用于下单及撤单,重点是低延迟穿透时间,一般面向对时延要求较高的程序化交易客户。次席柜台的资金划拨、结算等功能则交由主席柜台实现。

4、API

在中国,任何柜台系统都必须调用交易所API才能下单。

期货柜台系统一般都会提供API给程序化客户接入柜台使用,同时柜台系统需要调用交易所的API将用户的交易订单传输给交易所。

5、交易所前置机

期货交易柜台需要通过交易所前置系统与交易所主机连接,前置系统是柜台与交易所撮合系统之间的通讯中继。

交易所前置服务器不仅仅起到中间桥梁的作用,还要以通讯IP地址控制连入的终端,减少交易主机的网络负担的作用,以及对交易指令进行一部分的正确性检测处理。同时,还可以起到防火墙的功能,防止交易主机受到外界的攻击,确保交易主机的安全运行。

为缓解交易系统压力,提高期货公司交易速度,交易所会设置多个交易前置机均衡前置机的系统负载,期货公司可按照交易所发布的前置机IP优选配置规则进行配置。

6、极速交易柜台

在中国期货市场,任何交易系统都必须调用交易所API(应用程序编程接口)才能下单。而国内交易所只提供软件版本API,而软件API只能通过CPU调用。

极速交易柜台拥有独立服务器的客户交易系统,使用独立的交易通道,优点在于委托速度快、申报指令推送快、成交回报快。

(二)CTP的优点

1、高可用性

CTP通过提高系统的容错、排错、检错、纠错能力来保证系统可用性。
对可能错误进行容错设计;对关键应用部件采用冗余设计,交易系统所有关键节点都有备份系统,出现故障时可以迅速、平滑地切换系统,不影响系统运行。交易数据可以实现精确重演,保证系统重要数据的安全性设置并发布运行日志和信息跟踪功能。在设计API接口和人机接口时,对关键输入信息引入检错、纠错机制。

2、大规模并发处理能力

期货交易系统对交易的实时性要求很高,客观上要求系统应当具有大规模并发的快速处理能力。一般从系统的体系结构和计算模型、内存组织结构、临时文件的组织结构和数量、软件结构和程序调用关系、系统数据的分布方式及应用的组织结构等方面提升系统的运行效率。

3、安全性

交易员或投资者的身份应得到有效验证,使得未授权用户不能进行交易;交易监控和关键数据日志记录,使得交易行为不可抵赖以及可日后审计;交易数据加密,使得交易不会泄密和被监控偷听等。

4、可扩展性

系统在软件体系结构维持不变的情况下,通过对硬件配置的扩展提升系统性能。同时,系统设计应尽可能灵活,保证以后的扩展性。交易系统内部,应当由相对独立的交易组件组成。

5、业务规则的隔离

通过对不断扩展的业务进行抽象,形成各种业务规则。对于这些业务规则,应当使相互之间的影响降到最低,在增加新的规则或对原有规则进行调整时,将影响降到最低。

(三)、CTP通讯模式

CTP API使用基于TCP协议上的FTD协议与CTP后台进行通讯,FTD协议中的所有通讯都基于某个通讯模式。CTP API通讯模式有三种:

1、对话通讯模式

是指由客户端主动发起的通讯请求,请求被CTP后台接收和处理,并给予响应,如报单、撤单及查询等;对应对话数据流(DialogRsp)和查询数据流(QueryRsp),通讯故障时,对话数据流(查询数据流)会重置,通讯途中的数据可能会丢失。 

2、私有通讯模式

是指CTP后台主动向某个特定的客户端发出的信息,如报单回报、成交回报等;对应私有数据流(Private),是一个可靠的数据流。

3、广播通讯模式

是指交易系统端主动向所有连接到系统上的客户端都发出相同的信息,如行情;对应公共数据流(Public),是一个可靠的数据流。

注:(1)CTP API与CTP后台通讯,不同通讯模式对应不同的通讯数据流。

(2)CTP系统中对话模式下被返回的消息称为响应,私有模式和广播模式下被返回的消息被称为回报

二、CTP架构

(一)系统架构

投资者终端:实现交易平台TradeApi接口和MdApi接口,为投资者提供报单操作入口及资金持仓等交易信息查询展示界面,如快期V2、无限易之类交易客户端。

交易员终端:实现交易平台UserApi接口,为期货公司交易员提供报单,银期转账,交易数据查询等功能,通常是技术、运营、交易员等人员使用,投资者较少接触。

FTD协议:FTD(Futures Trading Data Exchange Protocol,期货交易数据交换协议),包括体系结构、报文格式、数据字典、运作机制等内容。

交易前置:交易前置服务一方面通过TCP连接与交易终端相连,另一方面通过FIB与其它后台服务相连。交易前置主要负责与业务无关的通讯工作,可以分散交易系统的压力、降低交易系统的复杂度、提高安全性。交易前置主要的功能分为三类:链路管理、协议转换和数据路由。

行情服务:行情服务一方面通过TCP连接与交易终端相连,另一方面通过FIB从报盘管理应用订阅所有行情数据,转发给有订阅某合约行情数据的交易终端。

FIB信息总线:FIB(期货交易信息总线)是交易系统的通讯底层构件,为上层应用提供了数据包的封装、请求/应答通讯模式、发布/订阅通讯模式等接口。

仲裁服务:仲裁服务的主要作用是指导排队服务的状态切换。

排队服务:排队服务主要任务是将交易请求串行化,发布交易序列,做为交易核心处理数据的来源。

交易核心:交易核心主要负责基于投资者的持仓、报单、成交以及出入金情况进行实时的资金和仓位计算,做到事前风险控制,同时对报单进行校验、驱动交易所报盘接口工作以及发布实时交易结果到FIB。

交易查询:内置了与交易引擎完全相同的内存数据库结构以及业务规则的实现,基于对投资者实时结算的结果更新内存数据库,通过FIB提供交易终端通过交易前置服务发起的相关交易数据查询服务。

DBMT:与管理后台实时交互,将需要上下场的业务数据通过交易前置送达到交易核心进行处理。

TMDB:通过FIB订阅交易核心的处理结果,将报单、成交、收盘时行情、交易终端密码修改信息以及结算单确认信息等实时回写到物理数据库中供结算时使用。

交易初始化:交易初始化服务主要功能分为两大部分,一是根据数据库内容,生成交易核心所需初始化数据,另一个是向系统发出交易准备指令,使交易系统开始新一轮(trading session)交易。

报盘管理:通过TCP连接对交易和行情报盘进行管理,屏蔽掉了交易核心直接处理报盘接口程序与交易所前置之间复杂的通讯情况,简化了交易核心的处理逻辑。

报盘:实现了交易所的交易和行情API接口,通过交易所提供的远程交易席位进行报单和收取报单、成交回报,以及获取交易所发布行情的通道。

风控系统:旁路交易系统排队机发布的交易序列以及交易核心发布的交易结果,对交易数据进行实时监控,同时提供风险试算和风险账户强平功能。

业务数据库:为结算系统、交易系统、风控系统提供物理数据存储和数据来源。

管理平台:提供期货公司各种业务操作入口。

监控系统:旁路交易系统部分交易数据用于数据监控,同时兼顾交易系统物理部件的容量性能等监测。

银期管理:用于管理银期转账接口。

清算银行接口(银期接口):实现了各银行的银期转账接口,为交易系统与银行 系统提供数据交互通道。

监控中心秘钥接口:用于从保证金监控中心查询期货公司秘钥。

监控中心接口管理:用于管理监控中心秘钥接口。

(二)、网络架构

为实现网络系统的高性能、易扩展、易伸缩、容错以及易排错的设计目标,依据系统不同通讯阶段,对各子网进行了物理上的划分和隔离。

交易核心网(B1.1/B1.2):负责交易系统核心组件之间的通讯,主要为UDP广播通讯流量。

系统管理网(B1.3):连接所有主机和存储,系统管理使用。

仲裁网(B2):负责排队服务与仲裁服务之间的通讯。

数据库网(B3):负责其它服务器与数据库服务器之间的通讯。

专线前置网(S1):提供会员专线接入访问的前置通道,供远程系统管理,独立银期访问使用。

报盘前置网(S2):提供报盘前置模块与交易所前置相互访问的通道。

独立互联网(S3):提供用户通过互联网下单交易和行情的通道。

报盘管理网(B7):负责报盘管理模块与报盘接口模块之间的通讯。

(三)CTP部署模式

CTP系统和主交易系统的交互甚少。CTP系统每日从集中交易柜台获取资金、证券持仓、股东编码初始化数据,将相应的数据载入内存中做交易准备,其余费率、交易参数等均需要在CTP柜台进行相应设置来保证盘中的交易控制。盘中实时出入金,通过银证转账转入集中交易柜台,再调拨到CTP系统中增加资金,反之则划出资金。日终清算集中交易柜台直接通过登记公司和交易所的文件进行处理,CTP系统不参与清算过程。

三、CTP API

(一)、CTP API文件介绍

ThostFtdcTraderApi.h:C++头文件,包含交易相关指令,如报单。

ThostFtdcMdApi.h:C++头文件,包含行情相关指令。

ThostFtdcUserApiStruct.h:包含所有数据结构。

ThostFtdcUserApiDataType.h:包含所有数据类型。

thosttraderapi.lib、thosttraderapi.dll:交易相关动态链接库和静态链接库。

Thosttraderapi_se.lib、thosttraderapi_se.dll:穿透式版本交易相关动态链接库和静态链接库。

thostmduserapi.lib、thostmduserapi.dll:行情相关动态链接库和静态链接库。

Thostmduserapi_se.lib、thostmduserapi_se.dll:穿透式版本行情相关动态链接库和静态链接库。

error.dtd、error.xml:包含所有定义错误码和错误描述信息。

注:(1)Spi (如CThostFtdcTraderSpi)包含有所有的响应和回报函数,用于接收CTP发送或CTP转发交易所的信息,开发者需要实现接口类。

(2)Api (如CThostFtdcTraderApi)包含主动发起请求和订阅的接口函数,开发者直接调用即可。

(3)CTP API的SO动态库是8字节对齐的。

(二)、CTP行情API

CThostFtdcMdApi行情API接口包含CThostFtdcMdApi和CThostFtdcMdSpi,通过CThostFtdcMdApiApi向CTP发送命令,通过CThostFtdcMdSpi接收CTP响应。

(三)、CTP交易API

CThostFtdcTraderApi交易API接口包含CThostFtdcTraderApi和CThostFtdcTraderSpi,通过CThostFtdcTraderApi向CTP发送操作请求,通过CThostFtdcTraderSpi接收CTP操作响应。

(四)、CTP API实例化流程

(1)实现SPI接口并创建实例以及API实例。

SPI指 CThostFtdcTraderSpi或CThostFtdcMdSpi,API指CThostFtdcMdApi或CThostFtdcTraderApi。

(2)向API实例注册SPI实例。

(3)向API实例注册前置地址。交易接口需要注册交易前置地址,行情接口需要注册行情前置地址。

(4)订阅公有流(仅限交易接口,行情接口不需要)。用于接收公有数据,如合约的交易状态。默认模式是从上次断开连接处继续收取交易所发布数据(Resume模式)开发者还可以指定全部重新获取(Restart)或从登陆后获取(Quick)。

(5)订阅私有流(仅限交易接口,行情接口不需要)。用于接收私有数据如报单回报,默认模式是从上次断开连接处继续收取交易所发布数据(Resume模式),开发者还可以指定全部重新获取(Restart)或从登陆后获取(Quick)。

(6)初始化(Init)。

(7)等待线程退出(Join)。

四、系统运维

(一)、运维

1、服务器管理

确保服务器的正常运行,包括硬件设备的维护、故障排除和性能优化等。

2、网络管理

确保交易系统与交易所之间网络连接的稳定,处理网络故障和安全问题。

3、数据管理

负责期货交易系统的数据备份、存储和恢复,以及对数据进行监控和分析。

4、软件更新与升级

定期更新和升级期货交易系统的软件,确保系统的稳定性和安全性。

5、监控与报警

建立监控系统,实时监测交易系统的运行状态,及时发现并解决故障,并设置相应的报警机制。

6、故障排除与处理

当交易系统出现故障或异常时,及时进行问题分析和排查,并采取相应措施解决问题。

7、安全管理

保障交易系统的安全性,包括防范网络攻击、数据泄露等安全威胁,并定期进行安全演练和风险评估。

8、用户支持与培训

为期货交易系统的用户提供技术支持和培训,解答他们在使用系统过程中遇到的问题。

(二)错误排查

CTP期货交易系统常见错误排查主要包括以下几个方面:

1、网络连接问题

检查网络连接是否正常,包括网络是否稳定,是否能够访问交易所的服务器等。可以尝试重新启动网络设备或者更换网络连接方式。

2、交易账号错误

检查交易账号是否正确,包括账号是否已经注册成功,是否已经开通相应的交易权限等。可以联系期货公司进行确认和处理。

3、交易所连接问题

检查与交易所的连接是否正常,包括交易所的服务器是否正常运行,是否有宕机或者维护等情况。可以联系交易所的技术支持部门进行咨询和排查。

4、交易软件配置问题

检查交易软件的配置是否正确,包括交易服务器的地址、端口号、认证信息等是否填写正确。可以重新配置交易软件或者重新安装更新版本的软件。

5、数据订阅问题

检查数据订阅是否成功,包括市场行情数据是否正常推送到交易软件中。可以尝试重新订阅数据或者联系数据供应商进行咨询和处理。

6、交易策略代码问题

如果使用自动化交易策略,检查策略代码是否存在错误或者逻辑问题。可以进行代码调试和排查,或者联系策略开发者进行协助。

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Linux环境下使用C语言来完成ctp期货量化交易系统,首先需要安装相应的开发工具和环境,例如gcc编译器和相关的开发库。然后,可以通过ctp官方提供的API来进行开发。 接下来,需要编写C语言程序来连接ctp交易接口,包括登录行情服务器、连接交易服务器、订阅行情数据、下单交易等相关功能。在编写程序时,需要充分了解ctp交易接口的相关文档和示例代码,以便正确地调用接口函数。 在交易系统的开发过程中,需要考虑到错误处理、数据处理、交易策略的实现等方面。对于错误处理,可以通过编写日志来记录程序的运行情况,以便排查错误。对于数据处理,可以通过编写算法来对行情数据进行分析和处理,以支持量化交易策略的实现。 在编写交易策略时,需要根据具体的量化交易策略来实现相应的买卖逻辑,可以通过编写条件判断语句和相关算法来实现交易决策。 最后,在完成ctp期货量化交易系统的开发后,还需要进行充分的测试和优化。通过模拟交易和回测来验证交易系统的稳定性和盈利性,通过优化代码和算法来提高系统的性能和效率。 总之,在Linux环境下使用C语言完成ctp期货量化交易系统的开发,需要充分的了解ctp接口和API,编写对应的功能程序,实现量化交易策略,并进行测试和优化,以确保系统的稳定性和盈利性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值