一种基于自动量化微服务子系统的全市场多品种智能金融资管系统的制作方法

文档序号:19530605发布日期:2019-12-27 15:21阅读:194来源:国知局
一种基于自动量化微服务子系统的全市场多品种智能金融资管系统的制作方法

本发明属于金融信息技术领域,特别涉及一种基于自动量化微服务子系统的全市场多品种智能金融资管系统。

技术背景

目前,金融行业已经进入大资产管理时代,资产管理的规模达到天量的同时,金融同业之间的竞争壁垒被打破,一方面是不同金融机构被允许开展同质的资产管理业务,另一方面是原有系统业务的外延不断拓展,内涵不断丰富,金融类牌照相互之间的业务协同性明显增强。资产管理是典型的知识密集型、人才密集型行业,高度依赖具有专业知识和能力的人力资本。金融信息系统业务涉及面广、专业性强、结构复杂,外部需要打通不同领域、不同机构、不同价值链环节间的壁垒;内部需要打通产品界面、业务界面、组织界面之间的屏障;在产品与服务方面,需要设计出有竞争力的产品,需要对不同风险度的产品和客户实施差异化定价,对不同类型、属性和特征的风险进行科学有效的切分、重组,以实现风险与收益之间的合理匹配。而海量金融数据的处理,分析及决策,已经不再是单纯人力可及的,金融行业需要更加智能自动化的信息工具,减少对人力的依赖提升效率。因此,需要先进、安全和高效的信息技术系统与资产管理全过程的紧密融合引领资产管理行业的创新。



技术实现要素:

本发明的目的在于提供一种基于自动量化微服务子系统的全市场多品种智能金融资管系统,目的是其作为智能量化交易平台,可以进行金融市场数据的获取、加工和存储,策略的生产、回测、优化和存储,策略实例的编排、部署、运行、风控和管理,进而得出交易标的、交易信号和优秀的净值曲线,实现全维度的智能资管业务。

技术方案如下:

一种基于自动量化微服务子系统的全市场多品种智能金融资管系统,其特征在于,包括:

自动量化交易平台,负责接送报单指令、算法交易的执行和对接市场报单功能并且包括交易微服务子系统;数据平台,负责服务行情接入和相关衍生行情的生产;策略平台,负责策略生产以及高绩效的策略在线运行;

所述自动量化交易平台交易微服务子系统的报单流程为:s1:在交易容器的市场路由模块有信号的客户端动态路由将请求路由到对应的交易通道路由网关;s2:通道路由收到报单请求进行二次业务路由将请求转发到ctp通道或者ib通道;s3:对应通道收到请求后,先检查通道是否建立,如果没有则初始化并建立通道;s4:检查用户的登录状态,如果没有登录则进行重登;s5:进行参数的转换,转换到对应市场需要的参数并将报单请求换到redis触发异步落库;s6:最后将请求发往市场并等待市场的后续回报;交易微服务子系统的报单流程s6之后,收到市场回报后,先从redis获取订单信息,然后构建交易容器对应的event,调用容器管理的基础服务将回报发往交易容器。

优选的,所述自动量化交易平台中交易微服务子系统的撤单操作包括交易容器未成交触发撤单、或者页面手动撤销手工单、或者盘后定时撤单,撤单流程为:s1:otc收到撤单请求后,会根据对应的brokerid将请求转发到对应的ctp通道或者ib通道;s2:进行参数校验后进行撤单数据封装;s3:检查用户的登录状态,如果没有登录,则进行重登;s4:获取账户登录连接后,直接发送撤单请求;s5:同步收集到撤单回报后,进行后续状态变更。

优选的,所述自动量化交易平台中交易微服务子系统发单超时或者撤单超时,触发查单业务,查单流程为:s1:首先otc收到查单请求后,根据对应的订单号将请求转发到ctp通道或者ib通道;s2:从缓存中和数据库中组装查单请求必要的参数;s3:紧接着检查用户的登录状态,如果没有登录,则进行重登;s4:将查询结果返回。

优选的,所述自动量化交易平台中交易微服务子系统的策略实例的暂停和恢复可由后台管理人员进行界面操作。如果是暂停功能:首先管理平台发起暂停事件请求,经由交易api服务对策略实例状态进行校验,校验通过会经过基础api服务发往交易容器。交易容器会根据前端选择的是否自动平仓功能,进行对应的业务执行:如果选择了自动平仓,则会发起强平处理。如果没有选择自动平仓,则直接暂停策略实例。如果是恢复功能:首先管理平台发起恢复事件请求,经过交易api服务再经过基础api服务,最后发往容器启动移仓换月等操作。

优选的,所述自动量化交易平台中交易微服务子系统的仓位监控操作:通过获取策略仓数据得到仓差;通过获取可用交易容器并发送交易信号对齐仓位;通过从按时间范围获取未成交或部分成交子单获取仓差原因。

优选的,所述自动量化交易平台中的风控系统实时监控各个策略实例信号执行过程中出现监管指标范围外的四种风险情况:有实时信号,每分钟,每小时,每天四种类型:风控系统对开仓单进行校验,若开仓单所属实例的异常行为监管指标达到干预,则拒绝报单;盘中2分钟定时任务和成交回报会触发策略实例和账户的风筹风险计算接口,计算风筹风险等级,若策略实例级别风筹风险等级达到干预,则会调用trade-api接口对该策略实例进行暂停并平仓操作;交易容器报单前调用风控插件计算策略实例维度可用风筹是否充足,若不充足则直接拒单;定时任务系统对策略实例和账户维度风险指标监控表进行扫描,对策略实例和账户维度达到提醒、预警和干预级别的风险项进行报警;风控系统对撤单委托回报和成交回报进行策略实例和账户维度的预警值累加,达到预警级别后会触发报警。

交易平台包括定时任务子系统,定时任务每天晚上盘前8点35都会做一个当日结算,主要是统计各个资金数据和保障下一个交易日正常交易。因为有可能某一天,柜台没有给日结单,无法进行对账,所以当天会日结失败,但是后续会由本任务自动补充日结,并正确执行完成。流程为:s1:为了保证日结的性能做分片,针对账户进行分片,作为入口进行日结;s2:查询账户下所有非init状态的策略实例作为日结条件;s3:用该策略实例日结成功前一天的持仓记录和当天的成交记录,做一个撮合复盘,得到持仓数据和策略实例资金数据;s4:然后将复盘的资金、持仓更新到数据库,并计算账户的各项资金并更新,将所有资金计算完成之后,记录对应的资金快照;s5:最后进行日清。将手续费,平仓盈亏等全部清理,保证下个交易日资金的正常。

基于自动量化微服务子系统的全市场多品种智能金融资管系统通过统一的通道网关进行全球市场柜台的路由转发。资金账户的密码采用对称加密的方式存储到数据库。交易平台的在线交易进程监控包括trade-server监控、trade-schedule监控、trade-risk-server监控、trade-risk-server监控、期货交易容器、期货在线容器、外汇交易容器、外汇在线容器等。交易平台采用log4j2异步日志打印方式,日志监控告警内容包括ctp客户端监控(ctp接口超时和系统异常)、订单管理告警、算法交易告警、快照数据告警、交易单元处理异常、数据库监控、用户未登陆、所有正向正常消息通知、自成交次数已达到、频繁报撤单次数已达到、大额报撤单次数已达到、风筹已达到。

附图说明

图1是muji系统的简易逻辑架构示意图。

图2是muji系统在线运行部分的物理架构部署示意图。

图3是交易报单流程图。

图4是移仓换月流程图。

图5、6、7分别是交易微服务子系统的报单、撤单和查单流程图。

图8是仓差自动监控流程图。

图9是算法单处理流程图。

图10是数据平台硬件部署架构图。

图11是数据平台的功能流程图。

图12是数据平台的业务流程图。

图13是策略平台的逻辑结构图。

图14是策略平台的像评估时序图。

图15是策略容器-异步事件驱动流程图。

图16是策略平台平行计算任务调度原理图。

图17是策略筛选流程图。

图18是策略自动生产流程图。

图19是策略生产平行计算架构图。

图20是策略运行线性扩展架构图。

具体实施方式

为使本领域的技术人员更好地理解本发明的技术方案,下面结合实施例对本发明提供的一种基于自动量化微服务子系统的全市场多品种智能金融资管系统进行详细描述。以下实施例仅用于说明本发明而非用于限制本发明的范围。

本实施例中的基于自动量化微服务子系统的全市场多品种智能金融资管系统命名为木鸡(muji)系统。全市场概念包括国内市场和国外市场,多品种金融产品包括但不限于外汇、期货、股票、债券和数字货币产品的交易。

如图1中所示,木鸡(muji)系统主要包括三部分:交易平台,负责接送报单指令、算法交易的执行和对接市场报单功能;数据平台,负责服务行情接入和相关衍生行情的生产;策略平台,负责策略生产以及高绩效的策略在线运行。如图2所示,整个木鸡在线运行环节采用cep事件处理引擎,搭建在apama容器上进行核心业务的流转。数据平台提供行情推送的服务,以及基本面数据/历史行情查询的功能;策略在线容器接收行情数据,策略基于行情事件,进行策略思想的执行,产生交易信号.将信号发给交易容器;交易容器收到交易信号,会进行一系列的逻辑处理,例如母单生成,算法拆单,最后将订单报入市场;市场成交后,会推送回报事件给交易通道,随后回报事件会进入交易容器,进行订单数据的维护;最后完成持仓和资金相关的计算。表格1示出了木鸡(muji)系统的开发环境和运行环境。

表格1

i.交易平台:交易平台在木鸡系统内承担了交易信号处理,算法拆单,对接市场,资金计算以及风险控制的多重角色。支撑整个木鸡系统的在线交易部分,完成算法交易,风险控制,市场路由分发的核心功能。高安全:资金的安全、数据的安全、策略的安全、系统的安全;高可用:避免单点故障、实现账户的隔离、策略的隔离;高性能:数据获取的性能、数据处理的性能、策略执行的性能、高并发性能;高精确:数据处理的精确性、交易信号的精确性、资金管理的精确性;高稳定:系统长时间运行无故障,即便有,通过完善的故障修复机制,能极短时间恢复。支撑全市场:支撑国内市场、海外市场的金融标的在线交易;全品种:支撑股票、期货、期权、债券、外汇、基金等多平类的金融交易标的;全自动:基于人工智能技术,采用程序化交易和算法交易结合的方式完成所有交易流程;全资金:可以自由适配任意资金量大小的产品,输出优秀的净值曲线,实现资管增值业务的目标。表格2示出了交易平台的模块。

表格2

交易名词:

策略实例:策略实例是策略(策略组合)的具体执行,本质上是策略子单元实例的多样化组合,它包括待启动、运行、终止三种状态。

交易单元:在一个策略(策略组合)实例中单一交易品种从建仓到空仓的全过程,称为一个交易单元,中间包括加仓、减仓等操作。

移仓换月:期货主力合约进行切换后,对于木鸡系统内的合约实盘持仓,进行旧合约的平仓和新合约的开仓的过程。

策略仓:策略实例理论持有的头寸,根据策略信号累计生成。

实盘仓:当前策略实例实际持有的头寸,根据子单成交回报累计计算。

仓差:策略仓与实盘仓的差值,仓差=策略仓-实盘仓;仓差为正时,发出的委托指令与策略信号指令方向一致;仓差为负时,发出的委托指令与策略信号指令方向相反。

算法单结束:指母单处于完成状态,全部子单均有回报(包含成交、撤单成功或拒单)。

自动对齐:指交易信号执行的过程,自动将实盘仓的头寸和策略仓进行仓位对齐。

非自动对齐:与自动对齐任务对应,区别于手动对齐。指采用算法进行自动委托交易而不进行仓位对齐的一种交易方式。

手动对齐:区别于自动交易(包含自动对齐与非自动对齐),指人工介入采用手动干预的形式使策略仓与实盘仓一致的一种交易行为。手动对齐功能在策略实例运行状态下(包括运营中及已暂停),均有效。

追价单:当委托单一段时间没成交后,对委托单进行撤单,采用新的委托价进行重新报单(追单),根据新报入委托单的价格又可以分为对价追单,挂价追单,最新价追单。有时对价也称为对手价。

对价追单:如果要进行买入,对价追单就使用卖一价进行买入。

挂价追单:如果要进行买入,挂价追单就使用买一价进行买入。

最新价追单:最新价追单使用最新价(lastprice)进行买入或卖出。

限价指令:以交易所规定的限价指令报入,委托单需要指定委托价格。

市价指令:以交易所规定的市价指定报入,委托单不需要指定委托价格,交易所系统会自动将市价指令转换为委托方向的涨跌停板价格参与交易。买市价单会转换成涨停价买入,卖市价单会转换成跌停价卖出。

fok:立即全部成交否则自动撤销,指必须在指定价位、委托数量全部成交,否则自动被系统撤销。结果为要么全部成交,要么全部撤销。

fak:立即成交剩余数量自动撤销,指在指定价位成交,剩余定单自动被系统撤销。

交易日:国内期货当前遵循每日结算制度,除中金所以外都是下午15:00闭市,中金所15:15进行闭市,闭市后进行结算。交易日是指属于同一次结算的交易时间周期,通常说的夜盘交易日和自然日并不相同。比如5月30日(周四)晚上的夜盘,它归属的交易日应该为5月31日。

今仓:当前交易日开仓的持仓。昨仓:非当前交易日开仓的持仓。平今:对当日开仓的持仓进行平仓。

平昨:对非当日开仓的持仓进行平仓,当前国内期货大商所和郑商所,中金所不区分今仓,昨仓,可以使用平仓平掉所有持仓。上期所和上能所区分今仓昨仓,对于今仓必须使用平今才能进行平仓。

投保类型:投保类型分为套期保值(简称套保),套利和投机,通常我们的交易都属于投机;套期保值主要用于一些企业生产经营;套利主要用于一些机构的套利交易策略,有些交易所(如中金)会对套利交易者放宽最大撤单数这些监管要求。

合约价格最小变动单位:合约价格最小变动单位是指每次价格最小变动的点数,比如玉米最小变动单位是1,焦炭最小变动单位是0.5,if最小变动单位为0.2。

跳数:针对最小变动单位来的,比如玉米5跳对应的价格为5*1=5;焦炭5跳对应的价格为5*0.5=2.5;if5跳对应的价格为1。

保证金:在期货市场上,交易者只需按期货合约价格的一定比率交纳少量资金作为履行期货合约的财力担保,便可参与期货合约的买卖,这种资金就是期货保证金。

冻结保证金:开仓委托单报出还未成交时,收取的保证金叫冻结保证金。

如图3中所示,交易平台中交易容器的交易报单流程为:s1:交易信号到达交易容器后,经过信号管理模块逻辑处理实现信号初始化和策略仓关联;s2:信号从信号管理模块出队后,会进入订单管理模块过滤处理生成母单;s3:母单进入算法模块经过算法路由,先经过前置的处理逻辑处理平今指令,然后路由到对应的拆单算法进行拆单,所有的手数拆单完成后针对母单产生一个拆单结束的信号到算法后置模块;s4:拆单过程产生的子单直接发送到资金校验模块,进行风筹和资金的校验逻辑,校验通过后会发往市场路由,否则资金校验拒单;s5:交易路由模块默认通过java插件形式发送请求到交易通道网关,经过路由发往对应的交易市场;s6:从市场发回的回报先被交易通道内置的客户端接受,然后调用容器管理的基础服务将回报发回交易容器,进入交易容器的回报被子单状态监听器接受并触发对应的状态流转,进行成交回报落库,撤单/拒单的状态处理,最后触发资金计算和母单的状态推进。

交易平台中交易容器的交易报单流程s2中,所述订单管理模块进行三层过滤:处理主力映射下类型的信号获取对应的主力合约;仓位对齐,处理仓位自动对齐或者非自动对齐的逻辑来纠正报单手数;强平类型的二次确认,如果和实盘仓位不符,则重新初始化报单手数最后生成母单。交易平台中交易容器的交易报单流程s6之后,成交回报触发进行资金计算:通过java插件的形式逐层计算,先是策略实例维度的持仓和持仓维度的资金,然后是策略实例维度的资金,最后是账户维度的资金。交易平台中交易容器的交易报单流程s6之后,触发母单的对应动作后,母单的状态会随之推进,如果母单结束,将结果反馈到信号管理模块完成信号状态的推进。

交易平台中交易容器接收到的交易信号在容器的信号管理模块入库后初始为init;入库后的每一个交易信号处在一个逻辑队列中,队列的逻辑主键为stratinstid+symbol+positiondirection;非交易时间或高优的信号入队后会把部分信号直接推进到undo状态;若多个相同信号类型处在init则进行合并,被合并的信号被推进到merged;信号正常出队执行,状态流转到waiting等待算法执行;信号进入算法执行拆单,状态变为running;处于running状态的信号被高优先级别的信号终止后,流转为undo;异常情况推进到unknow;正常情况下信号执行完毕变为done。

如图4所示,交易平台的移仓换月流程为:s1:交易容器监听到交易定时任务系统发出的移仓换月信号s2:如果存在低优先级的执行信号,移仓换月信号会终止优先级低于自身的执行中信号,而后收到终止回报后,进入算法执行,否则直接进入算法。s3:进入算法交易后,开始进行算法计算,如果平旧手数为0,则直接更新策略仓为新主力合约;如果平旧手数大于0,则根据买卖量和价格,发送报单,并建立对当前订单回报的监听。交易平台的移仓换月流程s3之后,如果回报成功,则进行成交记录的更新;如果回报失败,则发送撤单请求;如果回报拒单,则触发风控报警监控机制,发送报警信号。

图5、6、7分别是交易微服务子系统的报单、撤单和查单流程图。交易平台包括交易微服务子系统,其报单流程为:s1:在交易容器的市场路由模块有信号的客户端动态路由将请求路由到对应的交易通道路由网关;s2:通道路由收到报单请求进行二次业务路由将请求转发到ctp通道或者ib通道;s3:对应通道收到请求后,先检查通道是否建立,如果没有则初始化并建立通道;s4:检查用户的登录状态,如果没有登录则进行重登;s5:进行参数的转换,转换到对应市场需要的参数并将报单请求换到redis触发异步落库;s6:最后将请求发往市场并等待市场的后续回报。交易微服务子系统的报单流程s6之后,收到市场回报后,先从redis获取订单信息,然后构建交易容器对应的event,调用容器管理的基础服务将回报发往交易容器。

交易微服务子系统的撤单操作包括交易容器未成交触发撤单、或者页面手动撤销手工单、或者盘后定时撤单,撤单流程为:s1:otc收到撤单请求后,会根据对应的brokerid将请求转发到对应的ctp通道或者ib通道;s2:进行参数校验后进行撤单数据封装;s3:检查用户的登录状态,如果没有登录,则进行重登;s4:获取账户登录连接后,直接发送撤单请求;s5:同步收集到撤单回报后,进行后续状态变更。

交易微服务子系统发单超时或者撤单超时,触发查单业务,查单流程为:s1:首先otc收到查单请求后,根据对应的订单号将请求转发到ctp通道或者ib通道;s2:从缓存中和数据库中组装查单请求必要的参数;s3:紧接着检查用户的登录状态,如果没有登录,则进行重登;s4:将查询结果返回。

交易微服务子系统的策略实例的暂停和恢复可由后台管理人员进行界面操作。如果是暂停功能:首先木鸡管理平台发起暂停事件请求,经由交易api服务对策略实例状态进行校验,校验通过会经过基础api服务发往交易容器。交易容器会根据前端选择的是否自动平仓功能,进行对应的业务执行:如果选择了自动平仓,则会发起强平处理。如果没有选择自动平仓,则直接暂停策略实例。如果是恢复功能:首先木鸡管理平台发起恢复事件请求,经过交易api服务再经过基础api服务,最后发往容器启动移仓换月等操作。

交易微服务子系统的仓位监控操作:通过获取策略仓数据得到仓差;通过获取可用交易容器并发送交易信号对齐仓位;通过从按时间范围获取未成交或部分成交子单获取仓差原因。

交易平台的风控系统实时监控各个策略实例信号执行过程中出现监管指标范围外的四种风险情况:有实时信号,每分钟,每小时,每天四种类型:风控系统对开仓单进行校验,若开仓单所属实例的异常行为监管指标达到干预,则拒绝报单;盘中2分钟定时任务和成交回报会触发策略实例和账户的风筹风险计算接口,计算风筹风险等级,若策略实例级别风筹风险等级达到干预,则会调用trade-api接口对该策略实例进行暂停并平仓操作;交易容器报单前调用风控插件计算策略实例维度可用风筹是否充足,若不充足则直接拒单;定时任务系统对策略实例和账户维度风险指标监控表进行扫描,对策略实例和账户维度达到提醒、预警和干预级别的风险项进行报警;风控系统对撤单委托回报和成交回报进行策略实例和账户维度的预警值累加,达到预警级别后会触发报警。

交易平台包括定时任务子系统,定时任务每天晚上盘前8点35都会做一个当日结算,主要是统计各个资金数据和保障下一个交易日正常交易。因为有可能某一天,柜台没有给日结单,无法进行对账,所以当天会日结失败,但是后续会由本任务自动补充日结,并正确执行完成。流程为:s1:为了保证日结的性能做分片,针对账户进行分片,作为入口进行日结;s2:查询账户下所有非init状态的策略实例作为日结条件;s3:用该策略实例日结成功前一天的持仓记录和当天的成交记录,做一个撮合复盘,得到持仓数据和策略实例资金数据;s4:然后将复盘的资金、持仓更新到数据库,并计算账户的各项资金并更新,将所有资金计算完成之后,记录对应的资金快照;s5:最后进行日清。将手续费,平仓盈亏等全部清理,保证下个交易日资金的正常。

muji系统通过统一的通道网关进行全球市场柜台的路由转发。资金账户的密码采用对称加密的方式存储到数据库。交易平台的在线交易进程监控包括trade-server监控、trade-schedule监控、trade-risk-server监控、trade-risk-server监控、期货交易容器、期货在线容器、外汇交易容器、外汇在线容器等。交易平台采用log4j2异步日志打印方式,日志监控告警内容包括ctp客户端监控(ctp接口超时和系统异常)、订单管理告警、算法交易告警、快照数据告警、交易单元处理异常、数据库监控、用户未登陆、所有正向正常消息通知、自成交次数已达到、频繁报撤单次数已达到、大额报撤单次数已达到、风筹已达到。

ii.数据平台:如图11所示,实时录入全球市场行情数据,通过流式处理,合成k线和指数,实时推送实时行情,提供数据服务接口,进行历史行情数据清洗和加工。

如图10所示,数据平台实现多路ctp行情行情接入处理的流程为:从数据源接入基础行情数据,且接收客户端使用不同的网络线路,最大限度保证数据的稳定;各个客户端通过netty将接收的行情发送到行情处理服务中;监控是否每个服务端都有行情,如果有一个或多个客户端没有行情,发出告警信息;监控服务端发出的基本面信息,判断是否一致,不一致的话发出告警信息;对于给出的告警信息做相应的处理,比如处理客户端应用问题,更换期货公司前置等。对于从不同客户端接收的行情数据根据时间优先和成交量优先的原则进行行情选优,所述数据平台使用选优后的行情数据做后续行情加工。

ib行情的接入:启用两个ibgateway获取行情数据,两个ib-client分别接受两个gateway的行情数据,在行情处理服务中进行行情筛选,选出主行情源的行情进行后续k线合成等处理。ib多活行情监控流程:定时任务为每秒1次,考虑避开刚开盘的时间和应用刚启动的时间,当主行情源或者备行情源超过5秒没有行情时,进行告警,告警控制频率(五分钟只发一次告警);如果是主行情源有异常,备行情源正常,需要切换行情源,将缓存中的主行情源设置为备行情源的编码,切换后将主行情源编码存入缓存(redis)。

实时k线合成过程:接受选优后的tick行情,校验交易时间,在交易时间才进行下面的步骤,根据是否是郑商所处理行情数据,发送tick数据到mq,获取上一根缓存的tick,获取缓存中的k线集合,根据低频k线周期合成低频k线,根据高频k线周期合成高频k线,tick数据异步入库,更新redis缓存k线集合。实时k线切分过程:定时任务每分钟执行处理,获取合约信息,根据是否到k线切分时间来切分缓存中的k线,遍历订阅的合约,多线程执行后续切k线程序,获取合约交易时间段,获取合约对应的k线集合缓存,计算累计交易时间数,遍历k线周期,判断是否应该切k线,如果需要切k线,就把缓存中的k线备份出来,清空缓存,k线异步入库,k线推送到策略容器。

行情订阅过程:使用td_subscribe_relation表存储合约与容器的订阅推送关系;初始化从新建中加载订阅合约与容器ip,port的关系;启动后通过mq监听订阅消息;接收到订阅消息后将订阅关系(包括订阅和取消订阅)维护在内存中;将订阅关系持久化到数据库。行情推送过程:合成k线是判断时否推送processinbar;切分k线判断是否推送完成的bar;如果bar需要推送,根据订阅关系通过tcp连接将bar推送至目标容器。

指数合成过程:查询合约品种数据;从mq上接收tick行情,判断是否第一笔tick,是第一笔的话把计时时间t1设置为tick的时间戳;不是第一笔的话和计时时间t1比较;差值大于500ms,则根据缓存的tick数据生成指数tick;缓存tick数据,根据指数合约tick合成k线,k线数据入库,k线数据推送策略平台。

数据平台全球市场行情加工处理的流程为:从不同的数据供应商接入全球各个市场的基础行情数据;将基础行情数据推送到mq集群,基础行情数据落地;各个行情加工处理应用从mq集群订阅基础行情数据和加工后的行情数据,进行行情加工,例如品种指数合成,跨期,跨品种套利行情加工,跨市场衍生数据处理等;加工后的行情数据推送到mq集群,加工后的行情数据落地。

衍生数据体现两品种或多品种的指数或基础合约报价之间的变化规律,衍生数据加工目的是为了套利交易提供行情支撑,主要包括三种形式:跨期套利衍生数据:反映同一市场的同一种商品不同交割期之间的价格差距的变化;跨品种套利衍生数据:反映同一市场不同商品品种之间的价格差距的变化(一般是指具有相关性的品种,如玉米和玉米淀粉,大豆,豆油和豆粕等组合);跨市场套利衍生数据:反映同一商品品种在不同市场的价格差距的变化,所述数据平台衍生数据加工流程为:创建衍生数据定义,衍生数据定义入库,计算公共交易时间段,在mq集群中订阅衍生数据定义中包含的基础合约,获取基础合约tick行情,根据衍生数据定义中的计算公式使用规则引擎aviator计算价格差价,生成衍生数据tick,衍生数据tick合k线,衍生数据tick切k线,推送衍生数据k线到策略容器以驱动策略运行。

历史数据清洗过程:启动后加载清洗目标,查询品种、合约数据;按交易日清洗tick数据;按交易日清洗k线数据,将异常行情信息写入日志文件。历史数据加工过程:加载品种,合约信息;加载基本合约tick,生成指数tick;使用指数tick生成高频指数k线和低频指数k线;k线入库。

数据平台通过dubbo接口提供其他平台数据查询服务。高并发高效实时处理,高可用保证系统稳定,合理数据存储结构与数据交互设计保证数据处理性能与准确性。

iii.策略平台:如图12和13所示,muji-manager是整个木鸡系统的门户,所有的前端接入请求都经由muji-manager转发到后台的服务。策略平台包含两个主要子系统:1、离线策略生产管理;2、在线策略运行管理。离线策略生产主要包括了3个子模块:1、策略生产模块(主要功能是流程控制、报告展现、列表查询等功能);2、策略回测优化模块(主要功能是策略回测任务的创建和运行、并行计算任务调度、注入策略到回测容器);3、回测容器(回测时候运行策略、发送行情到策略、运行策略时资金和持仓的计算以及提供策略api共策略调用。在线策略运行期间,因子计算模块同回测容器建立网络链接,接受来自回测容器的策略信号,并根据信号计算策略评价因子和评分(单曲线),在所有的策略实例运行完毕之后,计算策略在多个品种上的综合评分(综合曲线)。

策略平台内设置维元规则:在某个维度下定义一系列规则,用来描述市场,例如macd,ma,rsi等指标就是一套规则,不同维度的元规则和互相组合交叉,从而产生更好的描述能力。维元:简单点说维元就是一段描述市场的原子逻辑(不可再细分),隶属于特定维元规则,具有多/空方向,同一个维元规则下的不同元是互斥的,所有元加总覆盖时间序列上所有的市场状态。画像:通过多个维元叠加不同周期的排列组合。用来更加精确地从多个维度描述市场,公式:像=维(元)[周期]×维(元)[周期]×...,像的生成来自于1个或多个维(元)[周期]的排列组合。

策略平台包括多个策略子单元:画像子单元、开仓子单元、平仓子单元、资金管理子单元、风控子单元等等,每类子单元只能和不同类的子单元组成策略,将多个策略子单元进行排列组合,形成多个策略,公式:画像子单元×开仓子单元×平仓子单元×资金管理子单元×风控子单元。

策略平台的业务流程包括:维元管理:将上传好的维元代码上传到系统中,并支持后期维护;维元编排:根据维度选择多个维元,周期,进行全排列组合,产生像;像评估:针对一次维元编排产生的一批像进行回测,评估,筛选,找到符合条件的像以及参数;策略子单元管理:将策略子单元的代码上传到系统,并支持后期的维护;策略编排:选择的多个策略子单元,进行全排列,产生策略;策略筛选:根据一次策略编排产生的一批策略,进行逐个回测并按照指定的筛选规则进行筛选,符合条件的策略作为有效策略进行入库操作;策略适配:针对通过筛选的入库策略,进行参数适配,找到有效参数组对应的最好的交易品种;设置为待上线:将符合条件的策略实例(策略+参数+品种)设置为待上线;策略上线:将待上线策略从策略库推到线上,进入实盘或者模拟盘运行状态。

策略平台,主要包括produce/optimize/factor/muji-strategy-api。为了避免循环依赖,各个模块交互原则是上游模块调用下游模块采用dobbo服务,下游模块通知上游模块采用mq方式。produce模块负责像评估主流程控制,业务查询,元数据管理,在像评估的过程中涉及到像的回测时候,会通过dubbo调用optimize来实现回测;optimize负责像和策略的回测,优化,回测任务调度,回测时候需要通过dubbo调用infrastructure获取容器,注入策略和发送策略初始指令;infrastructure负责和策略容器进行交互,包括在线策略容器和离线策略容器的管理;muji-strategy-api:负责策略上线,在线策略的起停;factor:负责回测时候从离线容器correlator接受订单,并计算策略因子和评分,计算完成通过发送mq消息通知optimize或者produce模块。

回测容器集群:回测容器并发运行回测任务,资源消耗大,采用集群模式,集群包含6台机器,每个节点部署一个容器进程,支持水平扩展。

因子计算集群:占用资源多,单机多实例部署,其中一个部署4个服务,另外一个部署2个服务,服务数和回测容器数量是1:1。

在线策略容器集群:运行在线策略,支持单节点多容器,支持水平扩展。

像评估过程:manager接收到像评估任务启动请求,并通过dubbo调用,传递给produce模块;produce启动像评估逐级寻优,每层每个像都需要调用optimize进行回测;optimize收到像回测请求,创建像回测任务,参数炸开(排列组合),启动回测任务;启动回测任务包括:获取可用的策略容器资源,注入策略到容器,发送启动指令到容器;容器回测中策略进入运行中,会发送订单信号给factor,factor接收到订单开始计算策略绩效;factor计算完毕策略绩效之后会发送回测完成通知给optimize,optimize会根据通知做任务结束处理,包括修改任务状体,释放容器资源。

如图15所示,策略容器-异步事件驱动过程:针对不同的环境采用不同的行情信号驱动方式:如果是回测环境,则通过容器内部的monitor直接读取本地sqlite文件发送行情,如果是在线容器,则从data-source订阅行情;异步事件传递:行情/信号都是以异步事件方式在策略容器内部流转;在线策略支持完结bar,currentbar,tick全周期/全品种的行情订阅和驱动;策略内部读取历史行情数据采用本地内存缓存,减少大量io操作,将策略运行时间压缩到微秒级;容器中策略产生信号之后,会根据环境变量判断是回测还是在线,如果是回测任务,则将信号发送给factor模块进行绩效的计算,如果是在线容器,会直接发送到交易模块,然后转发到交易市场。

策略模块的并行计算任务调度过程:用户提交的一次请求会对应一个父任务,父任务不会直接进入任务等待队列,而是先拆分成粒度相对均匀的原子任务,进入等待队列,等待被调度;任务等待队列是按照用户设定的任务优先级排序,优先级高的靠近head,先被运行,相同优先级的按照时间先后顺序排序;调度模块循环获取等待队列的head对应的任务,然后获取可用的计算资源,如果有可用的空闲资源,head任务都会被移动到运行中的任务列表中,进入运行状态;运行完毕的任务会从运行中的任务列表中移除。

尤其是,optimize子系统的任务调度模块管理原子任务的运行和资源分配,任务创建的过程中会构造出树形结构,root节点代表用户能看到的一个任务,叶子节点是原子任务;原子任务按照优先级排序,进入任务等待队列,任务调度模块会定时从等待队列头部轮询,如果发现有可用的计算资源,将资源分配给该任务,将头部任务移到运行列表中,启动任务回测运行;optimize接收到来自factor子系统的通知,启动任务完成的处理流程,如果是成功结束,则释放资源,并通知任务调度启动下一个任务,另外还有一些业务处理流程;如果任务失败了,也会释放资源,同时对任务进行重试3次,如果重试3次都失败了,在业务上认为任务真正失败,然后才会进入失败处理流程,原子任务的失败会影响父任务的状态,包括任务树的根节点的状态和兄弟任务的状态。

策略模块通过维元编排形成画像的树形结构,采用逐层寻优的方式,树形结构上每个节点进行全市场的回测评估。画像评估逐级优化过程:像评估是针对一次维元编排产生的像的多层树形结构的每个节点做评估;每个节点代表一个像,每个像评估完都有一个评分和这个评分对应的最优参数,只有评分大于0.6的像在业务上被认为是有效的像,得分最高的参数将作为像的最优参数。为了减少计算量,上级节点(像)对应的最优参数,会遗传到下一次像,下层像会在上层像最优参数的基础之上,对本层的维元进行炸开(参数排列-笛卡尔乘积)回测评估。针对不同层级的像的评估标准不一样,针对一层像,按照净利润,第二层像则是单位时长亏损额。为了防止产生的有效像有过拟合的问题,评估过程中是采用的是全品种的综合曲线进行平台,同时参数优化也应用了参数平原算法,评估有效的像会参与到策略编排。

集群性能优化方案技术效果:

通过任务调度引擎,和资源池管理模块,动态管理和分配资源,将一个大任务拆分成小回测任务,多个小回测任务在不同的机器上同时运行。采用6台服务器组成的集群进行并行回测,集群吞吐量是185.53万bar/秒。用六年数据,采用双均线维元,周期为15分钟,只有一层像,每个像炸开492组参数,在6台服务器上进行全品种像评估,28536个实例,平均耗时为7.2分钟,按该结果估算,用6年数据进行生产,每天可回测570.72万个策略。

逐级寻优算法方案技术效果:

维元编排通过排列组合的方式将多个维元编排成多级树形结构,自树的根部开始逐级评估,寻找最优参数,并将最优参数传递给下一级像。这样的好处就是减少大量无效运算,节省计算资源以3个周期的双均线为例,每个节点是100组参数,进过排列之后,第一层是2个节点,第二层是4个节点,第三层是8个节点。

采用全排列混级寻优运算量:100*2+(100*100*4)+(100*100*100*8)=8040200;

采用逐级寻优运算量:100*2+100*4+100*8=1400;

比较而言,全排列混级寻优运算量是逐级寻优的5700多倍,采用逐级寻优后系统运算量只有全排列的1/5700,提升效果明显。

欠拟合解决:欠拟合指的是一般的回测的样本数据量过小,导致拟合的策略无法满足要求,误差较大,这里解决方案是大时间范围,大样本回测,目前针对国内期货市场回测的时间范围是2012-01-01到2019-3-31年,将近7年的数据;另外一个方法是针对全市场进行回测,如国内期货的像评估和策略筛选,选择流动性较好的29个品种进行回测,这样就能有效避免欠拟合的问题。

过拟合的解决:过拟合指的是指策略过度拟合了历史数据,而不具备泛化能力,解决方案是在像评估的过程中限制策略像的最大层数只到3级,同时采用平原参数,限制参数孤岛,另外还有采用样本内和样本外的分开测试,样本内训练策略,样本外回测是验证样本内产生的策略的有效性。

参数平原算法:确定目标因子:从目前已有的评价因子中,确定一个因子作为平原算法的基础评价因子(如:净利润、年化收益率等);确定近邻长度:新增,近邻长度为正整数。用于确定构建参数平原的参数组范围,默认值为2,业务人员可修改。设某个参数组有m个参数,找到其中每1个参数的近邻参数组(+n-n个步长,取该参数的近邻参数时,参数组中其他参数先固定不变),每1个参数有2n个近邻参数组和目标因子值(不包括这个参数自身),m个参数则会有m*2n个近邻参数组,最后加上参数自身,则共有m*2n+1个参数组及对应的目标因子值。例如:双均线策略中,fast参数组(1-50)对应50个参数,步长为1;slow参数组(0-200)对应21个参数,步长为10;设定近邻长度n=2,若选定参数组fast=6,slow=40时,则参数组取值范围为(6,20)、(6,30)、(6,40)、(6,50)、(6,60)、(4,40)、(5,40)、(7,40)、(8,40)。

策略生产过程中采用多级报告形式:由于在策略生产的过程中产生了大量的中间临时数据,占用大量的存储空间,为了节省存储资源的消耗,根据不同的业务需要,采用不同级别的报告,后台程序根据报告的级别存储数据。存储和计算量顺序:简易报告>概括报告>评分报告;针对级别低的报告,如果用户需要看更多的数据,使用报告展开功能,即可看到高级别的报告数据。

策略综合评分公式:f=n+m/100;

其中,n=年化无杠杆收益/最大回撤(代表盈利能力,同风险水平下,收益越高盈利能力越强)m=(pr-q)/r(代表有效性,p-胜率,r-盈亏比,q=1-p),综合评分f>0.6分,即认为是有效策略。

股票多因子的计算:

净值绩效:

年化收益率:(netvalue(end)-1)^(250/length(netvalue)),netvalue(end)为净值序列末尾值,length(netvalue)为净值序列长度;

卡玛比率:年化收益率/历史最大回撤;

夏普比率:(年化收益率-0.03)/年化波动率;年化波动率=std(r_i)*√250。

ic(信息系数):ic(t)=corr(f(t),r(t+1)),当期因子值序列f(t)与下期收益率序列r(t+1)的相关系数(反映因子对未来收益的预测能力),为序列值。

icmean:ic序列的平均值;

icstd.:ic序列的标准差;

ann.icir:

ann.icir=(mean(ic))/(std(ic))√c

其中c为一年内调仓次数。

换手率turnover:下期第i组调出股票数/当期第i组股票总数;

年化换手率ann.turnover:换手率turnover*年度调仓次数c。

如图18所示,策略的自动化生产:在produce中创建一个总体调度任务,接收页面数据,存入mongo,然后开始维元编排,任务成功以后,发送mq通知给produce模块,如果某个步骤执行失败,整体自动构建任务中止。由于人工操作从开始上传维元到最后产生有效策略,中间有很多步骤,操作比较繁琐,策略的自动化生产过程中可增加一个行的功能,将维元编排、像评估、策略编排和策略筛选流程拼接成一个流程,简化操作步骤。

策略平台采用机器学习算法来计算组合中每个策略的资金配比的权重。在线投资组合的目的是在每个时期选择投资组合权重,以最大化其最终财富。

如图19所示,大规模策略生产(并行计算)-策略回测的时候为了防止过度拟合,在对策略进行回测的时候都是采用长周期,全市场的方式进行回测,运算量巨大,单机已经无法满足回测性能要求,故设计出多机并行/单机多线程回测架构以支持海量策略实例的回测。策略回测任务,产生的策略实例过多,已经超过一台机器来运行能力上限,则自动将该任务拆分成子任务,子任务的拆分粒度以单台机器同时运行的策略实例的上限为准。

技术效果对照实例:

方案:采用单机多线程,每个机器同时运行200个线程,每个线程之间是无共享数据,无并发锁,通过采用本地内存缓存常用数据,以及k线行情优化算法,减少大量的io操作,启动任务之后cpu占用接近100%,且时间片都集中在usertime,最大限度的利用多核cpu性能。

结果:前用国内期货市场六年数据一分钟数据,在6台服务器进行并行回测,单实例平均耗时为0.5秒,单机平均吞吐量为47.83万bar/秒,对比大商所开发的业内主流的回测平台xquant,单机性能是xquant的12.5倍。

如图20所示,大规模策略运行(线性扩展):单个策略容器同时运行的策略是有上限的,一般来说1000个策略以内可以保证流程运行,假设一个策略平均可以配置10万的资金,这样就是限制了平台只能管理1亿规模的资金(1000*10万=1亿),但是如果要运行100万个策略,管理1000亿的资金就必须要求策略容器支持集群,且具备线性水平扩展的能力。

上面结合实施例对本发明的实例作了详细说明,但是本发明并不限于上述实例,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出的各种变化,也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1