上海钢铁交易中心有限公司
摘要:本文介绍了一套为核心用户提供的开放平台SDK,为期货子公司的量化系统提供标准API接口并提供自动化交易服务的平台。客户可以通过编制交易策略,在场外交易所间、场外与场内交易所进行双向交易,从而获得利润,与此同时,也可以活跃交易,刺激交易所交易量加速良性增长。
程序化交易是依赖于计算机交易平台和交易模型的,是指投资者利用计算机技术,通过特定的模型策略,自动寻找交易机会,自动完成交易行为,是资本市场现代化的重要标志之一,已经成为资本市场创新、发展一个新的增长点。
在国内外金融衍生品市场上,程序化交易已经有了很长时间的发展,对于短期交易或高频交易投资者来说,此交易模式非常具有吸引力,主要源于其多交易场所的市场结构,也源于其机构投资者为主的投资者结构,程序化交易可平滑不同市场和关联产品价格,提供市场流动性,提高价格发现效率,规避一些价格风险、也有利于克服交易中人为因素的影响。
但是现货市场与期货市场的跨市交易对接比较少,本文主要介绍一款在期现领域内的跨市程序化接口的解决方案。
某场外黑色交易市场自成立以来,成交量超过10万吨/日,活跃订单成交量超过8万吨/日,核心用户更是贡献了80%以上的交易量。其中核心客户有大型期现子公司、期货公司风险管理子公司等。尽管核心客户的参与度日趋上升,但是仍然有相当一部分业务水平较强、体量较大的期现机构尚未进场,这类机构往往基本较强的程序化交易能力,甚至其日常交易的90%以上已完全由程序化交易完成,通过建设一套程序化交易服务引导此类客户进场迫在眉睫。
开放平台主要面向场外交易客户,客户可以使用提供的SDK文件接入场外交易系统,获取该系统的行情数据,并籍此进行交易。
开放平台分为实盘和模拟盘两部分,实盘即为生产环境,模拟盘主要是为了便于客户实验自己编写的订单交易策略,模拟盘行情与实盘行情同步,但是拥有自己的资金模块,交易不会影响实盘行情。
平台含接口网关(行情和交易网关),行情和交易采集及服务,运营监控平台,SDK。
平台总体应用框架图如下:
为券商的量化系统提供标准API接口,总体示意如下图所示:
为了便于客户接入,除了生产环境(实盘)外,系统提供了模拟盘供客户测试。客户可在模拟盘使用虚拟资金进行交易以此验证自己交易策略的合理性。考虑到安全性问题,API需要验证签名,数据加密。同时为避免瞬间交易量过大,采取限流处理,并对特定的错单进行拦截。
场外交易所系统提供交易、行情API,做为本系统的采集程序,采集程序独立运行,多机热冗,行情采集到的数据通过多播通讯传递给网关,对于交易委托则在提交到系统前要做限流处理。为便于券商接入测试需要开通模拟盘环境,因此接入分模拟盘接入和实盘接入。如下图所示:
接口及协议转换如下图示意:
3.1.2与交易系统实盘对接
本系统与交易系统实盘的对接分为两部分:交易服务对接及行情服务对接。
目前交易服务提供http协议,系统根据请求API 协议和参数返回json目前交易服务提供http协议,交易系统根据请求API 协议和参数返回json格式数据。主要API如下:
客户登陆API: 客户登陆,客户退出等功能。
委托API:限价委托、市价委托、撤单、指定撤单等;
查询类API:交易信息查询,基础信息查询,客户撤单查询,商品列表查询,资金信息查询等相关功能。
成交通知:交易系统未能提供实现成交通知数据,因此需要主动轮询获取。
行情服务目前提供http协议,需要轮询去获取最新数据。
与行情系统对接的功能如下:
行情板块协议,需要通过板块然后到交易系统的品种获取合约数据;
行情列表,获取指定品种的3档行情数据,TICK数据通过此接口获取;
历史分时
历史分K
当日成交明细,时间到秒级的成交列表
行情状态,交易所行情状态
系统时间,系统校时用
3.1.3与交易系统模拟盘对接
内容同实盘,行情服务使用实盘行情、
为保证通讯的安全性,以SDK(动态库)的形式提供接口服务,内部实现TCP通讯,协议加密,断网重连,心跳等功能。
网关是TCP服务器,为券商提供长连服务,同时接交易所系统是HTTP服务,因此需要将异步请求转化为同步请求。网关需要负载均衡避免单点故障。开放API为券商提供标准化接口,充分考虑了安全性、易用性、性能等方法的问题,如下图所示:
系统开放平台现有接口做了一层封装,同样分为了行情和接口两部分协议,具体如下:
行情接口协议:
行情通道登录/登出
取合约列表
订阅/取消订阅
历史行情
交易接口协议:
交易通道登录/登出
交易类接口:
交易登录
委托(限价/市价)/撤销委托
成交通知
持仓查询
委托查询
成交查询
历史委托查询
历史成交查询
资金类接口:
当前资金查询
当日资金变动查询
历史资金明细查询
历史资金变动明细查询
主要功能包括:开户,白名单设置,监控,报警,对账等;
开户:开户功能即为为用户开设账户,账户类型类型分为以下两种:
券商类,不同的客户可以通过券商类通道交易;
机构类,限定为机构自己使用,机构可能会开多个通道,多个账户;
白名单:全局启用/关闭白名单,或对某个通道限定白名单;
监控:可以监控当前在线数,委托数,频度曲线,锁定数,服务器状态,异常情况等;
报警:对业务级进行报警,如:交易核心链接异常,报文异常,行为异常,流量异常等;短信和消息通过欧冶的公共平台调用;
主要技术栈包括:
后台:Java,Spring boot、dubbo、Zookeeper、redis等;
前端:Vue等
对向外的通讯进行加密,提供统一的协议标准;主要内容包括:多平台动态库,基于动态库的多语言例子;
主要技术栈包括:GCC,VC,C,C++,Java,Python等
分布式服务使用开源的Dubbo实现,并通过集群方式实现高可用。
分布式服务使用开源的Dubbo实现。
集群
系统使用集群方案,避免单点故障;
限流与降级
分布式限流和降级使用阿里的Sentinel中间件;
容错
如上图所示:①、②、③三层每层都会出现问题,一旦出现通讯问题就会出现:成功、失败、未处理三种可能,如果为成功或失败,则返回应答报文,如果为未处理,则会重新请求。
SDK自动断网重连
通过TCP通道和心跳包等获取链路的异常状况,断网瞬间会发起重连请求,未能成功的报文业务系统等通讯成功后继续提交。
报文一致性
通常上一个请求报文最少有一个应答报文,但不可以同一报文多次执行(通过唯一外部号来保证);
通讯机获取报文后会先缓存再发起业务调用,如果通讯机宕机,则此通讯机的链接会分配到其它通讯机,通道重连后会从缓存报文中重建会话,如果是服务接口通讯级异常,也要发起一致性查询。
会话重建逻辑:对没有明确成功或失败的报文,发起按外部号发起查询,以确实:成功/失败/未处理这三种可能,成功和失败的发起通知报文,未处理的相当于新任务。
数据一致性和完整性
此处专指成交通知的数据一致性和完整性,成交轮询获取增量后通过广播向外发成交消息,如果此时通讯机异常或通道不在线,则需要把此消息致为离线,等通道重连后发送离线消息(离线消息只保留当日数据)。
为确保消息完全被消费,也可以所成交通知改为pull,成交通知变为当前指针号,SDK根据已取指针和最新指针去拿成交数据,此方法对性能有一定影响;
离线判定算法:
1. 用户当日从某通道登录过;
2. 通道离线则此通道的所有用户均为离线;
3. 通讯机发送成功后,向服务发送成功应答,通过会话(通道+用户)成功应答确定是否离线存储
服务器资源如下
服务器用途 | 服务器数量 | CPU | 内存 | 磁盘 | 操作系统版本 | 软件及应用 |
模拟盘开放平台网关 | 1 | 2C | 6G | 100G | Centos 7.6 | 应用:交易/行情开放平台通讯网关 软件:jdk8 |
模拟盘开放平台服务 | 1 | 2C | 6G | 100G | Centos 7.6 | 应用:交易/行情开放平台微服务,采集服务 软件:jdk8 |
模拟盘交易 | 1 | 4C | 16G | 200G | Centos 7.6 | 应用:DS服务,认证服务,同步服务,一账通管理端服务 软件:redis,zookeeper,kafka,Tomcat7,jdk7 |
模拟盘通讯 | 1 | 4C | 16G | 200G | Centos 7.6 | 应用:交易中间件,web中间件,文件服务,订单管理服务 软件:Tomcat7,jdk7 |
模拟盘数据库服务器DB2(新建) | 1 | 4C | 12G | 200G | RHEL7.6 | |
实盘开放平台A/B (新建) | 2 | 2C | 6G | 100G | Centos 7.6 | 应用:交易/行情开放平台通讯网关/交易/行情开放平台微服务,采集服务 软件:jdk8 |
程序化交易统一监控 | 1 | 2C | 6G | 100G | Centos 7.6 | 应用:统一监控平台 软件:jdk8 |
公网入口采用防DDOS线路,并采用传输层S-APPA平台,提供域名端口抗DDOS攻击,降低网络安全风险,为后续三级等保提供安全保障。
本平台上线以来,一共有7家用户通过接口下单,给场外交易所带来了一定的活跃度。解决方案没有最好,只有更好,研究是无止境的,欢迎同行们加入这一领域的而研究。
第6页 共6页