CN110740184B - 基于微服务架构的交易策略测试*** - Google Patents
基于微服务架构的交易策略测试*** Download PDFInfo
- Publication number
- CN110740184B CN110740184B CN201911010054.5A CN201911010054A CN110740184B CN 110740184 B CN110740184 B CN 110740184B CN 201911010054 A CN201911010054 A CN 201911010054A CN 110740184 B CN110740184 B CN 110740184B
- Authority
- CN
- China
- Prior art keywords
- test
- service module
- strategy
- transaction
- tested
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/60—Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Technology Law (AREA)
- Strategic Management (AREA)
- Marketing (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Economics (AREA)
- Development Economics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于微服务架构的交易策略测试***,该***包括:前端服务模块、测试服务模块和数据库服务模块,测试服务模块包括测试任务调度器和集群部署的多个测试任务执行器;前端服务模块用于接收用户终端发起的多个策略测试请求,并发送给测试服务模块;测试服务模块用于通过测试任务调度器将前端服务模块传输来的每个策略测试请求发送到一个测试任务执行器,每个测试任务执行器根据待测试交易策略的测试参数信息对待测试交易策略执行测试;数据库服务模块用于存储待测试交易策略的策略信息、市场行情数据,以及各个测试任务执行器的测试结果;前端服务模块还用于输出测试结果。本发明能够降低***耦合性,并满足高并发策略测试需求。
Description
技术领域
本发明涉及互联网领域,尤其涉及一种基于微服务架构的交易策略测试***。
背景技术
本部分旨在为权利要求书中陈述的本发明实施例提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
众所周知,在金融产品量化交易中,投资用户往往需要创建一个交易策略来执行量化交易。当一个交易策略创建后,往往需要对其执行历史回测或模拟交易测试,只有在测试结果符合一定条件的情况下,才能投放到实盘进行真实交易。
目前,现有的交易策略测试***基于B/S架构***,无法应对高并发的策略测试请求,导致策略测试效率很低。
发明内容
本发明实施例提供一种基于微服务架构的交易策略测试***,用以解决现有的交易策略测试***基于B/S架构***,无法应对高并发的策略测试请求,导致策略测试效率很低的技术问题,该***包括:前端服务模块、测试服务模块和数据库服务模块,测试服务模块包括测试任务调度器和集群部署的多个测试任务执行器;
其中,前端服务模块,与用户终端连接,用于接收用户终端发起的多个策略测试请求,并发送给测试服务模块,其中,每个策略测试请求中包含待测试交易策略的策略信息,以及对待测试交易策略执行测试的测试参数信息;
测试服务模块与前端服务模块连接,用于通过测试任务调度器将前端服务模块传输来的每个策略测试请求发送到一个测试任务执行器,其中,每个测试任务执行器根据待测试交易策略的测试参数信息对待测试交易策略执行测试;
数据库服务模块与前端服务模块和测试服务模块分别连接,用于存储待测试交易策略的策略信息、各个测试任务执行器对待测试交易策略执行测试所需的市场行情数据,以及各个测试任务执行器对待测试交易策略执行测试得到的测试结果;
其中,前端服务模块还用于输出待测试交易策略的测试结果。
本发明实施例中,基于微服务架构,将交易策略测试***的前端服务功能、测试服务功能和数据库服务功能分解,分别由独立的前端服务模块、测试服务模块和数据库服务模块来实现,在通过前端服务模块接收到用户终端发起的多个策略测试请求后,通过与前端服务模块连接的测试服务模块创建多个测试任务执行器,将每个策略测试请求发送到一个测试任务执行器上执行测试功能,由于数据库服务模块与前端服务模块和测试服务模块分别连接,使得前端服务模块能够将待测试交易策略的策略信息存储于数据库服务模块,测试服务模块中各个测试任务执行器,能够从数据库模块中获取待测试交易策略的策略信息,并根据数据库服务模块中存储的市场行情数据对待测试交易策略执行测试,在对待测试交易策略执行测试后,将测试结果存储于数据库服务模块,以便前端服务模块获取待测试交易策略的测试结果。
通过本发明实施例,基于微服务架构,将交易策略测试***的各个子服务功能分解,并由各个独立的模块来实现,能够降低***的耦合性,提供更加灵活的服务支持。另外,本发明实施例中测试服务模块采用集群部署的多个测试任务执行器来对多个策略测试请求进行测试,能够满足高并发的策略测试需求,使得交易策略测试***具有很强的可伸缩性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为本发明实施例中提供的一种基于微服务架构的交易策略测试***示意图;
图2为本发明实施例中提供的一种基于微服务架构的交易策略测试***交互示意图;
图3为本发明实施例中提供的一种基于Redis列表的消息队列示意图;
图4为本发明实施例中提供的一种对交易策略执行历史回测和模拟交易测试的方法流程图;
图5为本发明实施例中提供的一种可选的基于微服务架构的交易策略测试***示意图;
图6为本发明实施例中提供的一种可选的基于微服务架构的交易策略回测***示意图;
图7为本发明实施例中提供的一种历史回测具体实现流程图;
图8为本发明实施例中提供的一种实时模拟交易测试具体实现流程图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
在本说明书的描述中,所使用的“包含”、“包括”、“具有”、“含有”等,均为开放性的用语,即意指包含但不限于。参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”等的描述意指结合该实施例或示例描述的具体特征、结构或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构或者特点可以在任何的多个实施例或示例中以合适的方式结合。各实施例中涉及的步骤顺序用于示意性说明本申请的实施,其中的步骤顺序不作限定,可根据需要作适当调整。
本发明实施例中提供了一种基于微服务架构的交易策略测试***,用以解决现有的交易策略测试***基于B/S架构***,无法应对高并发的策略测试请求,导致策略测试效率很低的技术问题。
图1为本发明实施例中提供的一种基于微服务架构的交易策略测试***示意图,如图1所示,该***可以包括:前端服务模块10、测试服务模块20和数据库服务模块30,测试服务模块20包括测试任务调度器201和集群部署的多个测试任务执行器 202;
其中,前端服务模块10,与用户终端(图1中省略)连接,用于接收用户终端发起的多个策略测试请求,并发送给测试服务模块20,其中,每个策略测试请求中包含待测试交易策略的策略信息,以及对待测试交易策略执行测试的测试参数信息;
测试服务模块20与前端服务模块10连接,用于通过测试任务调度器201将前端服务模块10传输来的每个策略测试请求发送到一个测试任务执行器202,其中,每个测试任务执行器202根据待测试交易策略的测试参数信息对待测试交易策略执行测试;
数据库服务模块30与前端服务模块10和测试服务模块20分别连接,用于存储待测试交易策略的策略信息、各个测试任务执行器202对待测试交易策略执行测试所需的市场行情数据,以及各个测试任务执行器202对待测试交易策略执行测试得到的测试结果;
其中,前端服务模块10还用于输出待测试交易策略的测试结果。
需要说明的是,本发明实施例中待测试交易策略可以是由用户在用户终端本地通过代码编写方式或可视化配置方式创建的交易策略。优选地,本发明实施例中待测试交易策略可以是用于金融产品(例如,股票、基金、期货、外汇、贵金属、期权等产品)交易的量化策略。
作为一种可选的实施例,本发明实施例中测试服务模块20采用Docker搭建集群部署的各个测试任务执行器202,使得每个测试任务执行器202独占一个Docker容器。本发明实施例中,将测试任务执行器202对交易策略执行测试的功能虚拟化到Docker容器中,不仅能够使得各个测试任务执行器202之间测试服务相互隔离,互不影响,而且由于Docker容器通过复制便可新增一个处理节点,应用于测试服务模块20上,集群部署各个测试任务执行器202,具有很好的可扩展性,可以通过复制镜像文件的方式,快速增加集群中的计算节点。
此处还需要说明的是,本发明实施例中前端服务模块、测试服务模块和数据库服务模块是指独立运行各个子服务的模块,可以在一台设备上,也可以在不同的设备撒上,无论是在一台设备上,还是在不同的设备上,各个模块之间保证兼容性且低耦合连接,保证整体***稳定高效的运作机制。
下面,本发明实施例以前端服务模块、测试服务模块和数据库服务模块分别在不同的服务器上运行为例来进行说明。图2为本发明实施例中提供的一种基于微服务架构的交易策略测试***交互示意图,如图2所示,用户可以通过用户终端上基于客户端的应用或基于浏览器访问的应用,向前端服务器提交待测试交易策略(也即发送策略测试请求),前端服务器将待测试交易策略的策略信息存储在数据库服务器的文本数据库中。用户通过前端服务器调用集群测试服务***(包括:测试任务调度器和集群部署的多个测试任务执行器),集群测试服务***与前端服务器均遵循RESTful架构设计风格,能够保证前端服务器与集群测试服务***之间的互联。
前端服务器将接收到的来自用户终端的策略测试请求,发送给集群测试服务***上的测试任务调度器,通过测试任务调度器将策略测试请求分发给各个测试任务执行器,各个测试任务执行器对分配的待测试交易策略执行测试后,将测试结果存储至数据库服务器;数据库服务器基于前端服务器的查询请求,将测试结果返回至前端服务器。
由上可知,本发明实施例提供的基于微服务架构的交易策略测试***,基于微服务架构,将交易策略测试***的前端服务功能、测试服务功能和数据库服务功能分解,分别由独立的前端服务模块、测试服务模块和数据库服务模块来实现,在通过前端服务模块接收到用户终端发起的多个策略测试请求后,通过与前端服务模块连接的测试服务模块创建多个测试任务执行器,将每个策略测试请求发送到一个测试任务执行器上执行测试功能,由于数据库服务模块与前端服务模块和测试服务模块分别连接,使得前端服务模块能够将待测试交易策略的策略信息存储于数据库服务模块,测试服务模块中各个测试任务执行器,能够从数据库模块中获取待测试交易策略的策略信息,并根据数据库服务模块中存储的市场行情数据对待测试交易策略执行测试,在对待测试交易策略执行测试后,将测试结果存储于数据库服务模块,以便前端服务模块获取待测试交易策略的测试结果。
通过本发明实施例提供的基于微服务架构的交易策略测试***,基于微服务架构,将交易策略测试***的各个子服务功能分解,并由各个独立的模块来实现,能够降低***的耦合性,提供更加灵活的服务支持。另外,本发明实施例中测试服务模块采用集群部署的多个测试任务执行器来对多个策略测试请求进行测试,能够满足高并发的策略测试需求,使得交易策略测试***具有很强的可伸缩性。
虽然,本发明实施例中测试服务模块通过集群部署的多个测试任务执行器来对多个策略测试请求进行测试,但在高并发策略测试请求场景下,还是可能出现前端服务器模块接收到的策略测试请求数量超过测试服务模块集群部署的测试任务执行器的数量的情况下,这种高并发情况,可能导致测试服务模块宕机或重启,因而,作为一种可选的实施方式,本发明实施例提供的基于微服务架构的交易策略测试***中,前端服务模块10还可以将各个策略测试请求,通过Redis消息队列发送到测试服务模块20。图3为本发明实施例中提供的一种基于Redis列表的消息队列示意图,如图3 所示,本发明实施例使用Redis列表实现消息队列,由于Redis列表是使用双向链表实现的,保存了头尾节点,所以在列表头尾两边插取元素都是非常快的。
需要说明的是,测试服务模块20中集群部署的各个测试任务执行器会占用很多的物理资源,且集群部署的测试任务执行器数量越多,占用资源越多,因而,当测试服务模块20中各个测试任务执行器202对待测试交易策略执行测试结束的情况下,作为一种可选的实施方式,本发明实施例提供的基于微服务架构的交易策略测试***中,测试任务调度器201还用于在各个测试任务执行器202将交易策略的测试结果存储于数据库服务模块30的情况下,释放各个测试任务执行器202占用的物理资源。
通过上述实施方式,各个测试任务执行器对待测试交易策略执行测试后,将测试结果保存到数据库服务器模块30,使得前端服务模块10直接从据库服务器模块30 查询测试结果,因而,测试任务调度器201在各个测试任务执行器202将交易策略的测试结果存储于数据库服务模块30的情况下,及时释放各个测试任务执行器202占用的物理资源,以便对其他的策略测试请求进行处理。
优选地,各个测试任务执行器202可以将交易策略的测试结果,通过Kafka消息队列存储于数据库服务模块30中。本发明实施例通过增加消息队列Kafka,将策略测试结果写入文本数据库,能够保持***长时间的稳定性能。
当每个测试任务执行器202在对待测试交易策略执行测试的过程中,由于每个tick的市场行情数据,待测试交易策略都会产生一个测试结果(即策略交易结果),因而,针对交易策略的一次测试,通常涉及到百万甚至千万级别数据在测试任务执行器202与数据库服务模块30之间传输,本发明实施例通过在测试任务执行器202与数据库服务模块30之间设置Kafka消息队列,不仅支持高吞吐量,而且测试服务模块20和数据库服务模块30相互独立,其中,测试任务执行器202只需要负责将交易策略的测试结果传输到Kafka消息队列中即可;而数据库服务模块30只需要服务从 Kafka消息队列中读取各个交易策略的测试结果即可。
可选地,本发明实施例中,数据库服务模块30还可以用于将交易策略的测试结果存储于文本数据库中,以便通过直观文档的方式来完成测试结果数据的存储。优选地,采用的文本数据库可以是基于分布式文件存储的数据库MongoDB数据库。
作为一种可选的实施例,本发明实施例提供的基于微服务架构的交易策略测试***中,策略测试请求可以是历史回测请求或模拟交易测试请求;其中,历史回测请求用于请求基于历史行情数据对待测试交易策略执行历史回测;模拟交易测试请求用于请求基于实时市场行情数据对待测试交易策略执行模拟交易测试,其中,当策略测试请求为历史回测请求的情况下,测试任务执行器202的触发方式为事件触发;当策略测试请求为模拟交易测试请求的情况下,测试任务执行器202的触发方式为事件触发。
需要说明的是,当测试任务执行器是对待测试交易策略执行历史回测的情况下,由于对待测试交易策略执行历史回测使用的数据是用户选择的某一个回测时间段内的历史市场行情数据,因而,测试任务执行器的测试开始是由一个操作事件触发(例如,用户选择回测时间段,并通过点击回测按钮等控件触发测试任务执行器的测试) 的,称为事件触发;当测试任务执行器是对待测试交易策略执行模拟交易测试的情况下,由于对待测试交易策略执行模拟交易测试使用的数据是实时市场行情数据,因而,测试任务执行器的测试开始是由时间触发测试任务执行器的模拟交易测试,称为时间触发。
在一种可选的实施例中,本发明实施例提供的基于微服务架构的交易策略测试***中,数据库服务模块30还可以用于将实时市场行情数据存储于Redis数据库中,以及将历史市场行情数据存储于时间序列数据库,或采用分区的方式存储于关系型数据库中。
需要注意的是,由于策略回测接入的数据回测时间段内的历史市场行情数据,因而,策略回测执行完一个回测时间段则会自动停止,而模拟交易接入的实时市场行情数据,如果不停止,则会一直执行模拟交易测试。为了实现模拟交易测试的自动中断,本发明实施例中前端服务模块10接收到的各个策略测试请求中,如果策略测试请求为历史回测请求,则测试参数信息中可以至少包含对待测试交易策略执行历史回测的回测时间段;如果策略测试请求为模拟交易测试请求,则测试参数信息中可以至少包含对待测试交易策略执行模拟交易测试的模拟运行时长,使得回测任务执行器202 能够根据回测时间段停止历史回测或根据模拟运行时长,停止模拟交易测试。
一种可选的实施方式中,当策略测试请求为模拟交易测试请求的情况下,测试服务模块20中对待测试交易策略执行模拟交易测试的测试任务执行器202,直接从Redis数据库中,读取实时市场行情数据。
另一种可选的实施方式中,当策略测试请求为历史回测请求的情况下,测试任务调度器201根据待测试交易策略的测试参数信息,从时间序列数据库或关系型数据库中,读取历史市场行情数据,并缓存至测试服务模块20;其中,测试服务模块20中对待测试交易策略执行历史回测的测试任务执行器202,根据测试服务模块20中缓存的历史市场行情数据,对待测试交易策略执行历史回测。采用数据缓存的方式,将历史回测所需的市场行情数据缓存,不仅能够减少历史回测过程中对数据库的读写操作,还能够提高对交易策略测试的测试效率。
无论是上述哪一种实施方式,各个测试任务执行器202均可以通过RabbitMQ消息队列,读取对交易策略执行测试所需的市场行情数据。
进一步地,各个测试任务执行器202在读取每个tick的市场行情数据后向RabbitMQ消息队列返回一个确认消息;RabbitMQ消息队列根据接收到的各个测试任务执行器202返回的确认消息,清除相应tick的市场行情数据。
图4为本发明实施例中提供的一种对交易策略执行历史回测和模拟交易测试的方法流程图,如图4所示,主要包括如下几个部分:
(一)市场行情接入:
策略测试***的数据引擎接收由生产***数据引擎模块分发的所有实时市场行情数据。可选地,生产***数据引擎与策略测试***的数据引擎之间可以通过RabbitMQ消息队列传输市场行情数据。
(二)市场行情存储:
当策略测试***的数据引擎获取到市场行情数据后,将实时市场行情数据(例如,最近一个tick的市场行情数据)存储至Redis数据库,并将历史市场行情数据按照如下两种方式存储:
(1)存储到时间序列数据库(例如,DophinDB)。
(2)存储到非时间序列数据库,例如,采用关系型数据库(Mysql)+分区的方式存储。分区原则包括两个维度:以产品ID分区或按照时间分区。
(三)策略测试:
(1)用户通过前端界面选择实时模拟,同时选择待测试策略:
策略模拟交易***(测试任务执行器)根据前端选择的待测试策略,向策略测试***的数据引擎发起市场数据的订阅,策略测试***的数据引擎接收到订阅请求后,从Redis数据库中读取所请求产品的最新数据,发送到与策略模拟交易***(测试任务执行器)连接的RabbitMQ队列中;
(2)用户通过前端界面选择历史回测,同时选择策略、回测日期范围(日历形式):
策略模拟交易***(测试任务执行器)根据前端选择的待测试策略,以及历史回测的回测时间段,向策略测试***的回测引擎发起历史市场数据的订阅,回测引擎接收到订阅请求后,从时间序列数据库或关系型数据库中读取相应的历史数据,发送到与策略模拟交易***(测试任务执行器)通信的RabbitMQ队列中,同时将该时刻行情数据临时缓存;
(四)策略模拟交易***(测试任务执行器)读取RabbitMQ队列中的市场行情数据,并输出策略测试结果(例如,策略收益信息);
(五)用户通过前端界面查看策略测试结果。
图5为本发明实施例中提供的一种可选的基于微服务架构的交易策略测试***示意图,该***既可以用于策略的历史回测,也可以用于策略的模拟交易测试。市场行情数据接入到数据库服务模块的Redis数据库中,历史市场行情数据存储至时间序列数据库或采用分区的方式存储于关系型数据库中。当前端服务模块接收到策略测试请求后,调用测试服务,将策略测试请求通过消息队列发送给测试服务模块中的测试任务调度器,通过测试任务调度器发送给集群部署的各个测试任务执行器,对多个策略测试请求进行并发处理,各个测试任务执行器对待测试交易策略执行测试后,将测试结果通过Kafka消息队列存储至数据库服务模块的文本数据库中。
可选地,为了减少对数据库的读写操作,当策略测试请求为历史回测请求的情况下,测试任务调度器根据待测试交易策略的测试参数信息,从时间序列数据库或关系型数据库中,读取历史市场行情数据,并缓存至测试服务模块,以便测试服务模块中对待测试交易策略执行历史回测的测试任务执行器,根据测试服务模块中缓存的历史市场行情数据,对待测试交易策略执行历史回测。
图6为本发明实施例中提供的一种可选的基于微服务架构的交易策略回测***示意图,如图6所示,用户通过用户终端访问前端服务模块,提交策略,点击开始回测;前端服务模块将各个策略测试请求,经由分布式缓存Redis队列发送至回测调度器,若运行超时或回测调度器返回报错信息时,前端服务模块向用户终端发送回测启动失败的提示消息;若回测调度器返回回测启动成功的提示消息,前端服务模块接收消息并开始轮询数据库以获取回测结果。
回测调度器根据前端传入的策略文本标识、回测时间区间、交易标的等回测相关参数创建回测实例;并回测调度器从行情数据库中读取市场行情数据,按照产品标的、市场、日期等标识缓存到回测服务模块,以减少回测过程中读数据库操作,进而提高回测效率。回测调度器在回测器集群(Docker集群)上创建回测器,回测器读取回测实例上下文数据,并从回测服务模块的缓存或数据库服务模块中读取市场行情数据。
回测器集群通过驱动式批量处理引擎,执行回测实例,完成回测过程;并通过Kafka将回测结果或回测报告存储到数据库服务模块中的文本数据库。
前端服务模块定时扫描读取文本数据库,查询回测实例的执行结果;并根据回测结果进行可视化渲染,通过用户终端展示给用户,完成回测。
图7为本发明实施例中提供的一种历史回测具体实现流程图,如图7所示,包括如下步骤:
(1)启动回测引擎,开启thrift服务,等待待测试交易策略的数据订阅请求。
(2)启动测试任务执行器,发起登录请求,回测引擎接收后定义队列如下:
md_(senderCompID):(senderSubID)。
(3)启动测试任务执行器,向回测引擎发送数据订阅请求。
(4)回测引擎接收订阅请求之后,以请求参数中的mdStreamID为key绑定队列:
md_(senderCompID):(senderSubID)。
(5)回测引擎根据参数配置界面中指定的时间和订阅参数,从时间序列数据库中循环读取行情数据publish到对应的exchange中。此处需要考虑MQ的逐包确认机制。
(6)测试任务执行器对策略进行测试,输出测试结果策略接收消息进行处理,经TD将报价信息发送给模拟交易***。
(7)回测引擎确认数据发送完毕后,解绑key然后删除队列。
(8)测试任务执行器对策略进行测试,将测试结果存储至数据库。
图8为本发明实施例中提供的一种实时模拟交易测试具体实现流程图;如图8 所示,包括如下步骤:
(1)数据引擎开启thrift服务,等待待测试交易策略的数据订阅请求。
(2)启动测试任务执行器,向数据引擎发起登录请求,策略端接收后定义队列md_(senderCompID):(senderSubID)。
(3)待测试交易向数据引擎发送数据订阅请求。
(4)数据引擎接收数据订阅请求之后,以请求参数中的mdStreamID为key绑定队列:md_(senderCompID):(senderSubID)。
(5)数据引擎中一旦有根据参数配置界面中指定的时间和订阅参数,都会publish到对应的exchange中。
(6)测试任务执行器监听mq,一旦有新消息,接收并对待测试交易策略执行模拟交易测试。
(7)测试任务执行器对策略进行模拟交易测试,将测试结果存储至数据库。
(8)如果测试任务执行器取消对某数据的订阅,数据引擎解绑key,退出登录,输出模拟交易测试结果。
综上所述,本发实施例提供了一种基于微服务架构的交易策略测试***,基于微服务架构,将交易策略测试***的各个子服务功能分解,并由各个独立的模块来实现,能够降低***的耦合性,提供更加灵活的服务支持。本发明实施例中测试服务模块采用集群部署的多个测试任务执行器来对多个策略测试请求进行测试,能够满足高并发的策略测试需求,使得交易策略测试***具有很强的可伸缩性。可选地,采用Docker分布式集群部署,不仅子服务之间相互隔离,而且通过复制容器文件,并可实现集群节点的扩展,能够保证***的稳定性和高可用性。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种基于微服务架构的交易策略测试***,其特征在于,包括:前端服务模块、测试服务模块和数据库服务模块,所述测试服务模块包括测试任务调度器和集群部署的多个测试任务执行器;
其中,所述前端服务模块,与用户终端连接,用于接收用户终端发起的多个策略测试请求,并发送给所述测试服务模块,其中,每个策略测试请求中包含待测试交易策略的策略信息,以及对待测试交易策略执行测试的测试参数信息;
所述测试服务模块与所述前端服务模块连接,用于通过测试任务调度器将所述前端服务模块传输来的每个策略测试请求发送到一个测试任务执行器,其中,每个测试任务执行器根据待测试交易策略的测试参数信息对待测试交易策略执行测试;
所述数据库服务模块与所述前端服务模块和所述测试服务模块分别连接,用于存储待测试交易策略的策略信息、各个测试任务执行器对待测试交易策略执行测试所需的数据,以及各个测试任务执行器的测试结果;
其中,所述前端服务模块还用于输出交易策略的测试结果,所述测试服务模块是采用容器管理工具管理的容器集群,集群中每个容器都是独立的测试任务执行器,每个测试任务实例独占一个测试任务执行器;
所述策略测试请求为历史回测请求或模拟交易测试请求;所述历史回测请求用于请求基于历史行情数据对待测试交易策略执行历史回测;所述模拟交易测试请求用于请求基于实时市场行情数据对待测试交易策略执行模拟交易测试,其中,当策略测试请求为历史回测请求的情况下,测试任务执行器的触发方式为事件触发;当策略测试请求为模拟交易测试请求的情况下,测试任务执行器的触发方式为时间触发;
所述数据库服务模块还用于将实时市场行情数据存储于Redis数据库中,以及将历史市场行情数据存储于时间序列数据库,或采用分区的方式存储于关系型数据库中;
当所述策略测试请求为模拟交易测试请求的情况下,所述测试服务模块中对待测试交易策略执行模拟交易测试的测试任务执行器,直接从所述Redis数据库中,读取实时市场行情数据;
当策略测试请求为历史回测请求的情况下,所述测试任务调度器根据待测试交易策略的测试参数信息,从所述时间序列数据库或所述关系型数据库中,读取历史市场行情数据,并缓存至所述测试服务模块;其中,所述测试服务模块中对待测试交易策略执行历史回测的测试任务执行器,根据所述测试服务模块中缓存的历史市场行情数据,对待测试交易策略执行历史回测。
2.如权利要求1所述的***,其特征在于,所述前端服务模块将各个策略测试请求,通过Redis消息队列发送到所述测试服务模块。
3.如权利要求1所述的***,其特征在于,所述测试任务调度器还用于在各个测试任务执行器将交易策略的测试结果存储于所述数据库服务模块的情况下,释放各个测试任务执行器占用的物理资源。
4.如权利要求3所述的***,其特征在于,各个测试任务执行器将交易策略的测试结果,通过Kafka消息队列存储于所述数据库服务模块中。
5.如权利要求4所述的***,其特征在于,所述数据库服务模块还用于将交易策略的测试结果存储于文本数据库中。
6.如权利要求1所述的***,其特征在于,各个测试任务执行器通过RabbitMQ消息队列,读取对交易策略执行测试所需的市场行情数据。
7.如权利要求6所述的***,其特征在于,各个测试任务执行器在读取每个tick的市场行情数据后向RabbitMQ消息队列返回一个确认消息;RabbitMQ消息队列根据接收到的各个测试任务执行器返回的确认消息,清除相应tick的市场行情数据。
8.如权利要求1所述的***,其特征在于,所述待测试交易策略为在用户终端本地通过代码编写方式或可视化配置方式创建的交易策略。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911010054.5A CN110740184B (zh) | 2019-10-23 | 2019-10-23 | 基于微服务架构的交易策略测试*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911010054.5A CN110740184B (zh) | 2019-10-23 | 2019-10-23 | 基于微服务架构的交易策略测试*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110740184A CN110740184A (zh) | 2020-01-31 |
CN110740184B true CN110740184B (zh) | 2022-09-20 |
Family
ID=69270980
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911010054.5A Active CN110740184B (zh) | 2019-10-23 | 2019-10-23 | 基于微服务架构的交易策略测试*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110740184B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111737125B (zh) * | 2020-06-19 | 2024-01-30 | 中国工商银行股份有限公司 | 量化交易的行情数据的生成方法、装置和服务器 |
CN113300900A (zh) * | 2020-06-28 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 云上服务测试方法、装置和***以及容器测试方法和装置 |
CN112596885A (zh) * | 2020-12-25 | 2021-04-02 | 网易(杭州)网络有限公司 | 任务调度方法、装置、设备及存储介质 |
CN112866256A (zh) * | 2021-01-22 | 2021-05-28 | 中信银行股份有限公司 | 数据处理方法、装置及存储介质 |
CN112905486B (zh) * | 2021-03-26 | 2022-07-08 | 建信金融科技有限责任公司 | 一种服务集成测试方法、装置和*** |
CN114723566B (zh) * | 2022-06-10 | 2022-09-02 | 高盈国际创新科技(深圳)有限公司 | 金融交易数据处理方法及*** |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110349022A (zh) * | 2019-06-28 | 2019-10-18 | 北京奇才天下科技有限公司 | 一种基于微服务化的虚拟***交易场景的自动化测试方法、装置和电子设备 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9111019B2 (en) * | 2008-09-30 | 2015-08-18 | Interactive TKO, Inc. | Modeling and testing interactions between components of a software system |
CN107578334B (zh) * | 2017-09-07 | 2022-07-12 | 张毅 | 一种电子交易策略的执行方法和分布式交易*** |
CN207490985U (zh) * | 2017-09-07 | 2018-06-12 | 厦门宽投信息科技有限公司 | 一种电子交易策略测试设备 |
CN108765149B (zh) * | 2018-05-11 | 2021-10-19 | 南京工程学院 | 一种基于集群的量化策略回测***及其回测方法 |
-
2019
- 2019-10-23 CN CN201911010054.5A patent/CN110740184B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110349022A (zh) * | 2019-06-28 | 2019-10-18 | 北京奇才天下科技有限公司 | 一种基于微服务化的虚拟***交易场景的自动化测试方法、装置和电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN110740184A (zh) | 2020-01-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110740184B (zh) | 基于微服务架构的交易策略测试*** | |
US8306996B2 (en) | Processing model-based commands for distributed applications | |
US7949999B1 (en) | Providing support for multiple interface access to software services | |
CN108874558B (zh) | 分布式事务的消息订阅方法、电子装置及可读存储介质 | |
US7359824B2 (en) | Systems and methods for a distributed execution environment with per-command environment management | |
US20180113746A1 (en) | Software service execution apparatus, system, & method | |
US20100153492A1 (en) | Systems and Methods For Intregrating Services | |
AU2018309008B2 (en) | Writing composite objects to a data store | |
WO2002033636A9 (en) | Apparatus, methods and articles of manufacture for constructing and executing computerized transaction processes and programs | |
US20090228546A1 (en) | Distributed business process tracking | |
CN108062224B (zh) | 基于文件句柄的数据读写方法、装置及计算设备 | |
US7152189B2 (en) | Testing distributed services by using multiple boots to timeshare a single computer | |
US10621163B2 (en) | Tracking and reusing function results | |
CN112825525A (zh) | 用于处理事务的方法和装置 | |
US20070074225A1 (en) | Apparatus, method and computer program product providing integration environment having an integration control functionality coupled to an integration broker | |
US11341022B2 (en) | Runtime performance introspection | |
TWI287725B (en) | Specifying parameters for selective return to an invoker | |
CN109525642B (zh) | 一种用户机制下的lims***客户数据自动化上报方法 | |
CN114153427A (zh) | 持续集成流水线的优化方法及*** | |
CN101303751B (zh) | 交替处理的方法、***和计算机程序产品 | |
CN112181443A (zh) | 服务的自动化部署方法、装置及电子设备 | |
US20120296951A1 (en) | System and method to execute steps of an application function asynchronously | |
CN114374677B (zh) | 跨平台在线发布方法、装置、计算设备及存储介质 | |
US20220405678A1 (en) | Method and device for managing project by using data pointer | |
US20220405676A1 (en) | Method and device for managing project by using data filtering |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |