量化平台的回测方法、装置、电子设备和可读介质
技术领域
本公开涉及计算机技术领域,更具体地,涉及一种量化平台的回测方法、装置、电子设备和可读介质。
背景技术
随着计算机技术的快速发展,量化投资近30年来一直是欧美资本市场发展的焦点,且由于交易策略的严谨性、回溯性和直观性,使其成为全球金融机构的主流投资手段与方法。
在实现本构思的过程中,发明人发现现有技术中至少存在如下问题:现有的投资发展存在从业人员少且入行门槛高的缺陷。具体地,若用户想要选择数据驱动型策略进行回测时,则需要采用现有主流的量化平台进行量化策略的制定,从而需要用户熟练掌握编程语言(Java、Python等)、设定复杂的计算处理及构造纯数学模型。但如果用户仅需要构建一个简单的趋势跟踪策略,或用户对编程语言和数据工具并不精通,则平台体验就会大打折扣,从而导致大批用户的流失。
发明内容
有鉴于此,本公开提供了一种能够降低入行门槛的量化平台的回测方法、装置、电子设备和可读介质。
本公开的一个方面提供了一种量化平台的回测方法,该方法包括:获取第一语言编写的量化策略;根据预设规则,将第一语言编写的量化策略转换为量化平台可以调用的量化策略;以及将量化平台可以调用的量化策略嵌入预制的回测模板,以供量化平台根据量化策略进行回测,其中,第一语言为量化平台不能调用的、过程式的函数语言。
根据本公开的实施例,上述第一语言编写的量化策略包括有由第一语言定义的多个第一函数,上述根据预设规则,将第一语言编写的量化策略转换为量化平台可以调用的量化策略包括:根据翻译规则,翻译得到与第一语言编写的量化策略中的过程式的函数语言段对应的通用语言段;根据转换规则及多个第一函数,将通用语言段中与多个第一函数对应的第一语言段,转换为表征由通用语言定义的、与多个第一函数对应的函数的第二语言段;以及根据由第一语言段转换为第二语言段的通用语言段,确定量化平台可以调用的量化策略,其中,通用语言段的通用语言包括用于构建所述量化平台的语言。
根据本公开的实施例,上述根据翻译规则,翻译得到与第一语言编写的量化策略中的过程式的函数语言段对应的通用语言段包括:解析第一语言编写的量化策略,得到过程式的函数语言段的关键字和上下文信息;根据过程式的函数语言段的关键字和上下文信息,确定第一语言编写的量化策略是否存在语法错误;以及在第一语言编写的量化策略不存在语法错误的情况下,根据翻译规则,翻译过程式的函数语言段,得到对应的通用语言段。
根据本公开的实施例,上述根据翻译规则,翻译得到与第一语言编写的量化策略中的过程式的函数语言段对应的通用语言段还包括:获取用户输入的回测参数;以及将回测参数代入翻译得到的通用语言段中。
根据本公开的实施例,在将量化平台可以调用的量化策略嵌入预制的回测模板之后,上述量化平台的回测方法还包括:根据量化平台可以调用的量化策略中的回测参数,一次性获取与回测对象对应的回测时段内的所有回测数据,其中,量化平台根据量化策略及回测数据进行回测,回测参数包括回测对象和回测时段。
根据本公开的实施例,上述根据转换规则及多个第一函数,将通用语言段中与多个第一函数对应的第一语言段,转换为表征由通用语言定义的、与多个第一函数对应的函数的第二语言段包括:根据多个第一函数,确定适用于通用语言的、与多个第一函数对应的多个第二函数;定义与多个第二函数中至少两个第二函数一一对应的运算对象及运算对象之间的运算规则;根据多个第一函数,确定包括运算对象和运算规则的函数的算法规则;以及根据多个第二函数、运算对象、运算规则及所述算法规则,将第一语言段转换为第二语言段。
根据本公开的实施例,上述根据由第一语言段替换为第二语言段的通用语言段,确定量化平台可以调用的量化策略包括:对由第一语言段替换为第二语言段的通用语言段进行以下操作之后,得到量化平台可以调用的量化策略:对由第一语言段替换为第二语言段的通用语言段进行优化处理;并且/或者对由通用语言定义的、与多个第一函数对应的函数进行优化处理;并且/或者对由通用语言定义的、与多个第一函数对应的函数进行容错处理。
根据本公开的实施例,上述根据由第一语言段转换为第二语言段的通用语言段,确定量化平台可以调用的量化策略包括:将由第一语言段转换为第二语言段的通用语言段编译成第二语言编写的语言段,得到量化平台可以调用的量化策略,其中,第二语言为除通用语言外,量化平台能够执行的语言,第二语言包括以下至少之一:Java或C++。
根据本公开的实施例,第一语言包括JDL;并且/或者,通用语言包括以下至少之一:Python、Java、C++。
本公开的另一个方面提供了一种量化平台的回测装置。该装置包括量化策略获取模块、转换模块和嵌入模块。其中,量化策略获取模块用于获取第一语言编写的量化策略;转换模块用于根据预设规则,将第一语言编写的量化策略转换为量化平台可以调用的量化策略;嵌入模块用于将量化平台可以调用的量化策略嵌入预制的回测模板,以供量化平台根据量化策略进行回测,其中,第一语言为量化平台不能调用的、过程式的函数语言。
根据本公开的实施例,上述第一语言编写的量化策略包括有由第一语言定义的多个第一函数,上述转换模块包括翻译子模块、转换子模块和量化策略确定子模块。其中,翻译子模块用于根据翻译规则,翻译得到与第一语言编写的量化策略中的过程式的函数语言段对应的通用语言段;转换子模块用于根据转换规则及多个第一函数,将通用语言段中与多个第一函数对应的第一语言段,转换为表征由通用语言定义的、与多个第一函数对应的函数的第二语言段;量化策略确定子模块用于根据由第一语言段转换为第二语言段的通用语言段,确定量化平台可以调用的量化策略,其中,通用语言段的通用语言包括用于构建量化平台的语言。
根据本公开的实施例,上述翻译子模块包括解析单元、语法错误确定单元和翻译单元。其中,解析单元用于解析第一语言编写的量化策略,得到过程式的函数语言段的关键字和上下文信息;语法错误确定单元用于根据过程式的函数语言段的关键字和上下文信息,确定第一语言编写的量化策略是否存在语法错误;翻译单元用于在第一语言编写的量化策略不存在语法错误的情况下,根据翻译规则,翻译过程式的函数语言段,得到对应的通用语言段。
根据本公开的实施例,上述翻译子模块还可以包括回测参数获取单元和回测参数代入单元。其中,回测参数获取单元用于获取用户输入的回测参数;回测参数代入单元用于将回测参数代入翻译得到的通用语言段中。
根据本公开的实施例,上述量化平台的回测装置还可以包括回测数据获取模块,该回测数据获取模块用于在嵌入模块将量化平台可以调用的量化策略嵌入预设的回测模板之后,根据量化平台可以调用的量化策略中的回测参数,一次性获取与回测对象对应的回测时段内的所有回测数据,其中,所述量化平台根据量化策略及回测数据进行回测,回测参数包括回测对象和回测时段。
根据本公开的实施例,上述转换子模块可以包括函数确定单元、运算定义单元、算法规则确定单元和语言段转换单元。其中,函数确定单元用于根据多个第一函数,确定适用于通用语言的、与多个第一函数对应的多个第二函数;运算定义单元用于定义与多个第二函数中至少两个第二函数对应的运算对象及运算对象之间的运算规则;算法规则确定单元用于根据多个第一函数,确定包括运算对象和运算规则的函数的算法规则;语言段转换单元用于根据多个第二函数、运算对象、运算规则及算法规则,将第一语言段转换为第二语言段。
根据本公开的实施例,上述量化策略确定子模块用于对由第一语言段替换为第二语言段的通用语言段进行以下操作之后,得到量化平台可以调用的量化策略:对由第一语言段替换为第二语言段的通用语言段进行优化处理;并且/或者对由通用语言定义的、与多个第一函数对应的函数进行优化处理;并且/或者对由通用语言定义的、与多个第一函数对应的函数进行容错处理。
根据本公开的实施例,上述量化策略确定子模块还用于将由第一语言段转换为第二语言段的通用语言段编译成第二语言编写的语言段,得到量化平台可以调用的量化策略,其中,第二语言为除通用语言外,量化平台能够执行的语言,第二语言包括以下至少之一:Java或C++。
根据本公开的实施例,上述第一语言包括JDL;并且/或者,上述通用语言包括以下至少之一:Python、Java、C++。
本公开的另一个方面提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行上述的量化平台的回测方法。
本公开的另一个方面提供了一种计算机可读存储介质,存储有计算机可执行指令,所述指令在被执行时用于实现如上所述的量化平台的回测方法。
本公开的另一个方面提供了一种计算机程序,该计算机程序包括计算机可执行指令,该指令在被执行时用于实现如上所述的量化平台的回测方法。
根据本公开的实施例,可以至少部分地解决现有技术中量化策略的建立具有较高门槛,量化平台的使用对用户具有较高要求的缺陷,并因此通过自动将用户输入的简洁直接的过程式的函数语言编写的量化策略转换为量化平台可调用的量化策略,降低用户编写量化策略的门槛,从而避免量化平台用户的流失,提高用户体验。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的量化平台的回测方法、装置、电子设备和可读介质的应用场景;
图2示意性示出了根据本公开实施例的量化平台的回测方法的流程图;
图3示意性示出了根据本公开实施例的转换得到量化平台可调用的量化策略的流程图;
图4A示意性示出了根据本公开实施例的根据翻译规则翻译量化策略的流程图;
图4B示意性示出了根据本公开另一实施例的根据翻译规则翻译量化策略的流程图;
图4C示意性示出了根据本公开又一实施例的根据翻译规则翻译量化策略的操作流程图;
图5示意性示出了根据本公开另一实施例的量化平台的回测方法的流程图;
图6A示意性示出了根据本公开实施例的根据转换规则转换语言段的流程图;
图6B示意性示出了根据本公开实施例的转换得到量化平台可以调用的量化策略的流程图;
图7示意性示出了根据本公开实施例的适于执行量化平台的回测方法的系统架构图;
图8示意性示出了根据本公开实施例的量化平台的回测装置的结构框图;
图9示意性示出了根据本公开实施例的适于执行量化平台的回测方法的电子设备的方框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。在使用类似于“A、B或C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B或C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。
本公开的实施例提供了一种能够降低回测门槛的量化平台的回测方法、装置、电子设备及可读介质,其中量化平台的回测方法包括:获取第一语言编写的量化策略;根据预设规则,将第一语言编写的量化策略转换为量化平台可以调用的量化策略;以及将量化平台可以调用的量化策略嵌入预制的回测模板,以供量化平台根据量化策略进行回测,其中,第一语言为量化平台不能调用的、过程式的函数语言。
图1示意性示出了根据本公开实施例的量化平台的回测方法、装置、电子设备和可读介质的应用场景。需要说明的是,图1所示仅为可以应用本公开实施例的应用场景的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。
如图1所示,该应用场景中包括终端设备111、112、113。
其中,终端设备111、112、113可以是具有显示屏的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
终端设备111、112、113上例如可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、社交平台软件、文本编辑类应用、量化分析类应用等(仅为示例),具体地,终端设备111、112、113具体例如可以安装有能够展示量化平台的应用程序,或者安装有能够用于浏览量化平台网页的浏览器应用等。
根据本公开的实施例,终端设备111、112、113例如还具有与用户进行交互的功能及处理功能,以接收用户输入的量化策略,并通过对该量化策略的处理实现对量化策略的回测,向用户提供回测结果,以便于用户根据回测结果对输入的量化策略进行合理调整,实现用户量化投资的需求。
根据本公开的实施例,终端设备111、112、113接收的用户输入的量化策略例如可以是通过过程式的函数语言编写的,该过程式的函数语言具体例如可以是JDL(jHipsterDomain Language),则考虑到过程式的函数语言为编写规则简单、直观的语言类型,因此通过实现该过程式的函数语言与程序语言的转换,可以使得量化平台根据该过程式的函数语言进行回测,并因此可以降低量化平台的使用门槛,提高用户体验,吸引更多的用户使用。
根据本公开的实施例,该应用场景例如还可以包括服务器120和网络130,网络130用以在终端设备111、112、113和服务器120之间提供通信链路的介质。网络130可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
服务器120可以是提供各种服务的服务器,例如可以对用户利用终端设备111、112、113所使用的量化平台提供支持的后台管理服务器(仅为示例),后台管理服务器可以向量化平台提供对量化策略进行回测所需的数据,或者,该后台管理服务器也可以用于对量化策略进行回测,并将回测结果反馈给终端设备111、112、113。
需要说明的是,本公开实施例所提供的量化平台的回测方法一般可以由终端设备111、112、113或服务器120执行。相应地,本公开实施例所提供的量化平台的回测装置一般可以设置于终端设备111、112、113或服务器120中。本公开实施例所提供的量化平台的回测方法也可以由不同于服务器120且能够与终端设备111、112、113和/或服务器120通信的服务器或服务器集群执行。相应地,本公开实施例所提供的量化平台的回测装置也可以设置于不同于服务器120且能够与终端设备111、112、113和/或服务器120通信的服务器或服务器集群中。
可以理解的是,图1中的终端设备、网络和服务器的类型和数目仅仅是示意性的,根据实现需要,可以具有任意类型和任意数目的终端设备、网络和服务器。
图2示意性示出了根据本公开实施例的量化平台的回测方法的流程图。
如图2所示,该量化平台的回测方法包括操作S210-操作S230。
在操作S210,获取第一语言编写的量化策略。
其中,量化平台具体例如可以是量化交易平台,用于使用户根据其选择的股票池及量化策略,对量化策略进行回测。根据本公开的实施例,该量化平台例如可以是通过参考图1中的终端设备111、112、113浏览的网页或者终端设备111、112、113中安装的客户端应用。
其中,第一语言具体可以是量化平台不能调用的、过程式的函数语言,通过该过程式的函数语言例如可以实现证券行业中常用的编程函数。根据本公开的实施例,其中的编程函数例如可以包括有11个大类的200多个函数,其中的11个大类例如可以包括有引用函数(例如可内置52个子函数)、逻辑函数(例如可内置9个子函数)、选择函数(例如可内置4个子函数)、操作符(例如可内置17个子函数)、关联财务函数(例如可内置5个子函数)、统计函数(例如可内置13个子函数)、数学函数(例如可内置24个子函数)、时间函数(例如可内置32个子函数)、形态函数(例如可内置12个子函数)、交易函数(例如可内置8个子函数)和行情函数(例如可内置7个子函数)。
根据本公开的实施例,该过程式的函数语言例如可以是与计算机语言相比更加简洁与直观的JDL,从而可以使得未曾接受过编程教育的交易员,经过短时间的培训,即可掌握该过程式的函数语言的编写思路,从而轻松的定制化交易策略。
根据本公开的实施例,其中的量化策略例如可以是量化平台的用户制定的交易策略,具体例如可以是“短期均线上穿长期均线时,做多”和/或“短期均线下穿长期均线时,做空”等量化交易策略。具体地,该量化策略例如可以由第一语言定义的多个第一函数组成。
在操作S220,根据预设规则,将第一语言编写的量化策略转换为量化平台可以调用的量化策略。
其中,量化平台可以调用的量化策略例如可以是量化平台能够识别并调用的程序语言编写的量化策略,则上述操作S220具体即为将第一语言编写的量化策略转换为量化平台能够识别并调用的程序语言编写的量化策略,其中的程序语言例如可以是量化平台的构建语言,或者与量化平台的构建语言不同的其他程序语言,具体例如可以是Python语言、Java语言或C++语言等。可以理解的是,上述程序语言仅作为示例以利于理解本公开,本公开对此不作限定。
其中,上述的预设规则例如可以是第一语言与量化平台能够识别并调用的程序语言的转换规则,该规则具体可以是量化平台的开发人员设定的,且对于不同类型的第一语言,具有不同的预设规则。
在操作S230,将量化平台可以调用的量化策略嵌入预制的回测模板,以供量化平台根据量化策略进行回测。
其中,回测模板具体例如可以是具有量化策略初始化信息的程序模板,其中的量化策略初始化信息例如可以包括设置的滑点、手续费、基准等信息,以及程序模板的起始符和终止符等信息。
根据本公开的实施例,上述操作S230具体例如可以是将表征量化平台可以调用的量化策略的程序段加入回测模板中对应于量化策略的部分,则量化平台通过调取并运行加入有量化策略的回测模板,即可实现对量化策略的回测。
综上可知,本公开实施例的量化平台的回测方法,能够通过处理,由量化平台根据简洁直接的过程式的函数语言编写的量化策略进行回测,相较于现有技术中只能依据复杂的程序语言编写的量化策略进行回测的技术方案,可以有效降低普通受众使用量化平台的门槛,从而方便普通受众使用量化平台做交易策略的研究,且还可以解决传统软件中“只能看,不能跑”的问题。
图3示意性示出了根据本公开实施例的转换得到量化平台可调用的量化策略的流程图。
如图3所示,参考图2中的操作S220具体例如可以包括操作S221-操作S223。
在操作S221,根据翻译规则,翻译得到与第一语言编写的量化策略中的过程式的函数语言段对应的通用语言段。
该操作S221具体即为将第一语言编写的量化策略中的第一语言翻译为通用语言,其中的翻译规则具体即为将第一语言翻译为通用语言的规则,上述操作例如还可以是根据第一语言和通用语言的语言对照表,将第一语言中的每个语句依次替换为通用语言的语句。
根据本公开的实施例,编写通用语言段的通用语言例如可以是量化平台的构建语言,例如可以是Python语言等。
在操作S222,根据转换规则及多个第一函数,将通用语言段中与多个第一函数对应的第一语言段,转换为表征由通用语言定义的、与多个第一函数对应的函数的第二语言段。
由于第一语言为过程式的函数语言,其编写的量化策略中可能包括函数之间的运算,而若仅简单的将第一语言翻译为通用语言,则考虑到通用语言体系中函数与函数之间是无法直接参与计算的,通过操作S221翻译得到的量化策略可能存在无法执行的情况。
而本公开实施例的操作S222,通过将通用语言段中与第一语言定义的多个第一函数对应的第一语言段,替换为与多个函数对应的、通用语言定义的函数的语言段,则可以使得替换后的第二语言段为可被量化平台执行的语言段,且可以使得替换后的第二语言段能够完整的表征第一语言定义的多个第一函数,并因此使得量化平台回测的依据即为用户输入的量化策略,从而进一步保证得到的回测结果为用户需求的结果。
在操作S223,根据由第一语言段转换为第二语言段的通用语言段,确定所述量化平台可以调用的量化策略。
根据对操作S222的描述可知,由第一语言段替换为第二语言段的通用语言段已经能够完整的表征第一语言编写的量化策略,因此该操作S223可以不对通用语言段执行任何操作,参考图2中操作S230嵌入预制的回测模版的量化平台可以调用的量化策略具体即为将由第一语言段替换为第二语言段的通用语言段代入回测模版,以供量化平台进行回测。
根据本公开的实施例,为了提高量化平台回测时,通用语言段的运行速度,例如还可以对由第一语言段替换为第二语言段的通用语言段进行程序优化或算法优化,具体优化详见后续描述。
图4A示意性示出了根据本公开实施例的根据翻译规则翻译量化策略的流程图。
如图4A所示,参考图3描述的操作S221具体可以包括操作S2211-操作S2213。
在操作S2211,解析第一语言编写的量化策略,得到过程式的函数语言段的关键字和上下文信息。
根据本公开的实施例,该操作S2211例如可以是采用开源工具对第一语言编写的量化策略进行解析。具体地,例如可以采用词法分析器(Lex)和编译器代码生成器(Yace)等功能强大的解析工具对第一语言编写的量化策略进行解析,以提高解析效率。
根据本公开的实施例,在通用语言选择Python时,具体可以采用Lex和Yace的Python实现PLY代码解析来实现对第一语言编写的量化策略的解析。具体当第一语言为JDL语言时,采用PLY代码解析可以一次性解析3000行左右的JDL编写的代码,平均耗时为毫秒级别。
根据本公开的实施例,为了进一步提升解析的效率,例如还可以采用“分批解析”的方式,则上述操作S2211首先应该按照JDL的语法结束符和固定的行数对JDL编写的量化策略进行切割;然后,利用PLY解析出JDL编写的量化策略中每行代码的字符、数字、符号、注释、空行等基本要素。根据本公开的实施例,为了简化后续的翻译,上述操作S2211在解析得到每行代码的基本要素后,例如还可以将不影响最终语义的符号、注释和空行等进行剔除。
根据本公开的实施例,在上述解析的过程中,例如还可以同时提取上下文信息,例如赋值变量在上下文中的使用、重赋值等;且在经上述解析操作后,根据得到的字符、数字等基本要素后,可以自该些基本要素中识别得到其中包括的关键词(例如JDL的专属函数、符号和保留字等),具体例如可以是HHV、LLV、AND等函数和符号等。
在操作S2212,根据所述过程式的函数语言段的关键字和上下文信息,确定所述第一语言编写的量化策略是否存在语法错误。
根据本公开的实施例,该操作S2212例如可以是对识别得到的关键字及上下文信息进行检查,具体可以是检查关键字是否被误用、赋值变量在上下文中的使用等是否存在错误。
根据本公开的实施例,若该操作S2212确定存在语法错误时,例如可以根据错误类型,通过量化平台抛出提示性异常,以提醒用户对量化策略进行调整修改。
根据本公开的实施例,在操作S2212确定不存在语法错误的情况下,则执行参考图4A描述的操作S2213,即在第一语言编写的量化策略不存在语法错误的情况下,根据翻译规则,翻译过程式的函数语言段,得到对应的通用语言段。
根据本公开的实施例,该操作S2213例如可以用于在解析及语法检查后,将第一语言翻译成通用语言,具体例如可以是将JDL翻译成Python语言,该翻译过程例如可以是替换过程,以对关键字和符号等基本要素进行替换。例如,把JDL的常量替换为HwhBase对象,以参与对象计算;或者将JDL中的“与”运算符AND、&&替换为Python中可以重载的&运算符等。
根据本公开的实施例,上述操作S2213例如还可以包括对翻译后的通用语言进行“重塑”的操作,具体例如可以是对翻译后的Python语言,按照原JDL编写的量化策略的语义,进行运算优先级的重塑,主要集中在“&”和“|”这两个符号,这是由于在Python中,表示逻辑与、或的符号and和or不允许重载,因此只能用“&(位与)”和“|(位或)”替代,但这两个运算符的优先级,在整个Python体系中的大致安排为:&>|>比较运算符>赋值运算符>逻辑运算符,为了保证JDL的语义,必须借助强制运算符和JDL代码重排的方案,重塑代码结构。
综上可知,本公开实施例的方法,先对过程式的量化语言进行语法检查,仅在不存在语法错误的情况下对第一语言编写的量化策略进行翻译,从而可以避免翻译得到的量化策略不准确,导致影响回测结果的缺陷,并因此可以保证回测得到的结果为用户需求的结果,以更好的指导用户对量化策略进行优化。
图4B示意性示出了根据本公开另一实施例的根据翻译规则翻译量化策略的流程图。
如图4B所示,参考图3中的操作S221除了参考图4A描述的操作S2211-操作S2213外,例如还可以包括操作S2214-操作S2215。
在操作S2214,获取用户输入的回测参数,以及在操作S2215,将回测参数代入翻译得到的通用语言段中。
根据本公开的实施例,回测参数例如可以包括有回测对象和回测时段,其中,回测对象具体例如可以是用户选择的股票池中的股票信息,例如可以是股票代码、证券上市的交易所、证券单位等,回测时段即为用户选择的回测时间段,该回测时间段具体例如仅可选择当前日之前的时间段。可以理解的是,上述回测参数仅作为实例以利于理解本公开,本公开对此不作限定。
根据本公开的实施例,量化平台例如可以具有供用户输入回测参数的交互窗口,则上述操作S2214即为获取用户通过量化平台输入的回测参数。考虑到操作S2213得到的通用语言段描述有与第一语言定义的多个第一函数对应的函数,且该些函数用于量化平台进行回测,因此该些函数中具有多个参量为回测参数,因此在操作S2215中将操作S2214获取的回测参数代入通用语言段中,可以为量化平台进行回测提供条件。
综上可知,本公开实施例的方法由于在操作S2214-操作S2215中已经代入了回测参数,因此在量化平台进行回测时,则不再需要获取回测参数,只需直接调用量化策略即可,可以有效提高回测效率,且在用户无感知的情况下即可将量化策略应用于回测,因此可提高用户体验。
图4C示意性示出了根据本公开又一实施例的根据翻译规则翻译量化策略的操作流程图。
综合参考图4A-图4B的方法,本公开实施例的根据翻译规则翻译量化策略的具体流程例如可以是参考图4C描述的流程。
其中,策略加载得到的即为参考图2中操作S210获取的第一语言编写的量化策略,具体例如可以是用户采用JDL编写的量化策略。随即便可对获取的量化策略进行翻译。
首先采用PLY对JDL编写的量化策略进行解析,先将量化策略进行切割,以实现分批解析,在解析得到基本要素后,进行检索,具体可以是检索不影响语义的要素,并将该不影响语义的要素进行剔除,以简化代码,提高翻译效率。该步骤具体可以是参考图4A描述的操作S2211,在此不再赘述。
然后对解析和剔除处理后得到的关键字和上下文进行语法检查,在语法检查得到语法错误时,则抛出异常,供用户作为调试的参考;而在语法检查未得到语法错误时,则进行内容更替。该步骤具体可以是参考图4A描述的操作S2212,在此不再赘述。
最后,根据JDL与Python语言的转换规则,对经过语法检查的内容进行替换,以将JDL代码替换为Python代码,同时为了保证替换后的Python代码能够表达原JDL代码的语义,对替换得到的代码进行运算优先级等的重塑。该步骤具体可以是参考图4A描述的操作S2213,在此不再赘述。
最后,为了使用户无感知的将量化策略应用于回测,则向重塑后的Python代码“注入”回测信息,具体可以是向表征量化策略的Python代码中的相关函数中注入“股票编码”、“回测时间”及“上下文信息”等。该步骤具体可以是参考图4B描述的操作S2214-操作S2215,在此不再赘述。
图5示意性示出了根据本公开另一实施例的量化平台的回测方法的流程图。
考虑到参考图4B描述的方法已将回测参数代入了量化策略中,且在回测时,某支股票的数据对于量化策略中的函数而言是“从头到尾”不间断的,因此,可以在量化平台根据量化策略进行回测之前,一次性地预先把所有回测对象在回测时段的行情、财务数据等都取出来,这样可以有效地加速回测速度。
因此如图5所示,本公开实施例的量化平台的回测方法,除了参考图2描述的操作S210-操作S230外,还可以包括操作S240,该操作S240是在操作S230之后执行的。其中,操作S220可以包括参考图3描述的操作S221-操作S223,操作S221可以包括参考图4A描述的操作S2211-操作S2213,以及参考图4B描述的操作S2214-操作S2215。
在操作S240,根据量化平台可以调用的量化策略中的回测参数,一次性获取与回测对象对应的回测时段内的所有回测数据。该操作具体例如可以是,自参考图1描述的服务器120中获取与用户输入的股票代码对应的股票在回测时段内的行情数据和财务数据等。
图6A示意性示出了根据本公开实施例的根据转换规则转换语言段的流程图。
根据本公开的实施例,考虑到第一语言(例如JDL)是一种过程式的函数语言,其函数表达例如可以是“A=(C+O+L)/3”,该函数表达经由操作S221翻译后得到的形式例如为“A=(CLOSE(id)+OPEN(id)+LOW(id))/3”,在通用语言为Python语言的情况下,考虑到Python体系中,函数(例如CLOSE函数)与函数(例如OPEN函数)之间是无法直接参与计算的,因此需要借助Python可重载操作符的特点,重构与第一函数对应的通用语言可调用的函数,并作用于相关对象,以实现与第一函数相同或类似的功能。
因此,如图6A所示,参考图3描述的操作S222具体例如可以包括操作S2221-操作S2224。
在操作S2221,根据多个第一函数,确定适用于通用语言的、与多个第一函数对应的多个第二函数。
根据本公开的实施例,该操作S2222例如可以是自操作S221翻译得到的通用语言段中确定第二函数。具体地,对于第一函数“A=(C+O+L)/3”,确定的与该第一函数对应的第二函数例如可以包括有函数CLOSE(id)、OPEN(id)和LOW(id)。
可以理解的是,对于不涉及多个函数之间运算的第一函数,确定的对应的第二函数应该为一个,而对于涉及到多个函数之间运算的第一函数,确定的对应的第二函数的个数具体应该与第一函数涉及的多个函数的个数相同。
在操作S2222,定义与所述多个第二函数中至少两个第二函数一一对应的运算对象及所述运算对象之间的运算规则。
根据本公开的实施例,该操作S2222中运算对象的定义例如可以是针对核心算法函数构造出相关的运算对象,具体例如可以是针对涉及到多个函数之间运算的第一函数,对该第一函数涉及的每个函数构造出相关的运算对象。具体地,对于第一函数“A=(C+O+L)/3”,可以分别为子函数C、O和L构造对应的运算对象,且构造的运算对象与子函数C、O和L一一对应。
根据本公开的实施例,为了保证量化平台的安全性及满足计算时的特性,上述操作S2222在定义运算对象之间的运算规则之前,例如还可以对参与的运算的对象进行类型的检查,以保证后续定义的运算规则作用的两个运算对象均为量化平台指定的“内置类型”,例如,保证运算规则作用的两个运算对象的数据类型及长度的统一性、缺失值计算的统一性等。
根据本公开的实施例,上述操作S2222中定义运算对象之间的运算规则具体可以是指“重载运算符”的操作,具体可以是对Python的原一元运算符(+、-)、算术运算符(+、-、*、/、mod)、关系运算符(>、≥、<、≤、==、!=)和/或逻辑运算符(&、|)等,进行语义上的重载,使之作用于经过“类型检查”的运算对象。
在操作S2223,根据多个第一函数,确定包括运算对象和运算规则的函数的算法规则。
根据本公开的实施例,该操作S2223具体可以是将操作S2222定义的运算对象及运算对象之间的运算规则代入操作S221翻译得到的与第一函数对应的函数中,例如,对于第一函数“A=(C+O+L)/3”,该操作包括将操作S2222中定义的与C、O、L分别对应的运算对象及该运算对象之间的运算规则代入直译得到的函数“A=(CLOSE(id)+OPEN(id)+LOW(id))/3”中,并定义该函数“A=(CLOSE(id)+OPEN(id)+LOW(id))/3”的算法规则,即根据运算对象及运算对象之间的运算规则得到函数值A的算法规则。
最后,在操作S2224,根据多个第二函数、运算对象、运算规则及算法规则,将第一语言段转换为第二语言段。
对第一语言段中表征的所有函数执行操作S2221-操作S2223后,即可得到表征与第一语言定义的所有第一函数一一对应的、通用语言定义的函数的第二语言段,从而完成第一语言段与第二语言段之间的转换。
综上可知,通过上述第一语言段与第二语言段的转换,可以避免通用语言体系中,函数与函数之间无法直接参与计算导致的无法执行直译得到的量化策略的情况发生,并通过通用语言可重载操作符的特性,将第一语言段转换为第二语言段,可保证第二语言段表征的函数能够实现第一语言编写的量化策略中多个第一函数的相同或相似作用,并因此可以准确无误的得到与第一语言编写的量化策略对应的量化平台可调用的量化策略,从而可进一步保证回测得到的结果满足用户的需求。
图6B示意性示出了根据本公开实施例的转换得到量化平台可以调用的量化策略的流程图。
根据本公开的实施例,参考图6A描述的根据转换规则转换语言段的方法例如还可以由参考图6B的流程图来详细描述。
如图6B所示,在采用PLY对第一语言编写的量化策略进行解析后,可以执行包括定义运算对象、核心计算和动态结构调整的三步操作。
其中,核心计算操作例如可以包括确定与第一函数对应的多个第二函数,即核心计算操作具体可以包括参考图6A描述的操作S2221,并以确定的第二函数作为定义运算对象的参考。
其中,定义运算对象操作包括对运算对象的定义、对运算对象进行类型检查及进行运算符重载等操作,具体可以是参考图6A描述的操作操作S2222,在此不再赘述。
相应地,核心计算操作例如还可以根据多个第一函数,确定包括定义的运算对象和运算规则的函数的算法规则,具体可以包括参考图6A描述的操作S2223,以将第一语言段转换为第二语言段。
根据本公开的实施例,将第一语言段转换为第二语言段的通用语言段即可作为最终的量化平台可以调用的量化策略。
根据本公开的实施例,为了提高量化平台根据量化策略进行回测的效率,例如还可以对由第一语言段替换为第二语言段的通用语言段进行处理。
具体地,根据本公开的实施例,在定义运算对象后或转换得到第二语言段后,例如还可以对将第一语言段转换为第二语言段的通用语言段进行优化,以确定量化平台可以调用的量化策略,最终确定得到的例如可以是Python量化策略。
上述优化例如可以是对通用语言段进行动态结构调整,具体可以是对通用语言代码进行“去重”操作,即抽取代码中“重复计算”的部分,并进行替换,仅保留通用语言代码中相同的多个计算中的第一个计算,而为后续相同的其他计算的计算值赋予第一个计算的计算值;并且/或者,上述动态结构调整具体还可以是对通用语言代码进行“抛弃”处理,直接剔除代码中的无效计算(例如不参与到最终买卖的计算)和无效变量(例如可以是在上文定义过,而在下文未使用的变量),以提高根据量化策略进行回测时的运行效率。
具体地,根据本公开的实施例,如图6B所示,在得到由第一语言段替换为第二语言段的通用语言段后,为了得到最终的量化平台可以调用的量化策略,上述的核心计算操作例如还可以包括对由通用语言定义的、与多个第一函数对应的函数进行算法的优化处理。例如可以利用Numpy、Pandas等类库来对算法进行优化,以加速计算过程,以大大地提升运算效率。
具体地,根据本公开的实施例,如图6B所示,核心计算操作在确定了算法规则后,例如还可以包括对由通用语言定义的、与多个第一函数对应的函数进行容错处理,例如可以是在函数内部设定很多异常处理的规则,以使得在根据量化策略进行回测时,不会存在因行情数据缺失、异常值等问题,导致回测终止运行的情况发生,并因此可以保证根据量化策略进行回测的稳定性。
根据本公开的实施例,在通用语言为Python语言的情况下,考虑到Python(在不做任何处理的情况下)属于解释性语言,其效率低于Java、C++,因此为了提升根据量化策略进行回测的速度,例如还可以在得到将第一语言段替换为第二语言段的通用语言段后,将该通用语言段编译成第二语言编写的语言段,具体可以是编译成Java或C++等语言段,从而得到最终量化平台可以调用的量化策略。可以理解的是,上述的第二语言仅作为实例以利于理解本公开,本公开对此不作限定,只要该第二语言为量化平台可以调用,且相较于通用语言能够提升执行速度即可。
图7示意性示出了根据本公开实施例的适于执行量化平台的回测方法的系统架构图。
如图7所示,本公开实施例的适于执行量化平台的回测方法的系统架构,具体包括策略解析层、对象运算层、核心算法层和策略生成层。
JDL函数策略作为该系统架构的初始输入,分别经由上述的策略解析层、对象运算层、核心算法层和策略生成层处理后,可以得到以嵌入有量化平台可以调用的量化策略的回测模板,以供量化平台调用并根据量化策略进行回测。
其中,策略解析层具体可以用于采用PLY对JDL函数策略进行解析,对解析后的内容进行语法检查和内容更替。具体地,该策略解析层可以用于执行参考图4A描述的操作S2211-操作S2213,还可以执行参考图4B描述的操作S2214-操作S2215,且参考图4C具体则为该策略解析层的工作流程,在此不再赘述。
其中,对象运算层例如可以用于定义运算对象及运算对象之间的运算规则,以塑造运算体系,具体地,该对象运算层例如可以用于执行参考图6A描述的操作操作S2222,或者参考图6B中描述的定义运算对象的操作,在此不再赘述。
根据本公开的实施例,对象运算层例如还可以用于对由第一语言段转换为第二语言段的通用语言段进行动态结构调整,以提高后续的回测效率,所述的动态结构调整具体是前述的包括“去重”和“抛弃”操作的调整,在此不再赘述。
其中,核心算法层例如可以用于确定包括运算对象和运算规则的算法函数,具体地,该核心算法层可以用于执行参考图6A描述的操作S2221和操作S2223,再者,该核心算法层例如还可以用于对算法进行优化处理及容错处理,在此不再赘述。
根据本公开的是实施例,该核心算法层例如还可以用于对由第一语言段转换为第二语言段的通用语言段进行预编译,以编译得到第二语言的量化策略,加速量化平台的回测速度。
其中,策略生成层用于将确定的量化平台可以调用的量化策略嵌入模板,以生成最终量化平台执行回测操作时调用的模板,具体地,该策略生成层用于执行参考图2描述的操作S230,在此不再赘述。
根据本公开的实施例,该策略生成层例如还可以用于根据策略解析层注入的回测参数进行数据预加载,具体还可以用于执行参考图5描述的操作S240,在此不再赘述。
可以理解的是,参考图7描述的系统架构可以设置于参考图1描述的终端设备111、112、113中;也可以部分地设置于参考图1描述的终端设备111、112、113中,而部分地设置于参考图1描述的服务器120中,在此不再赘述。
图8示意性示出了根据本公开实施例的量化平台的回测装置的结构框图。
如图8所示,本公开实施例的量化平台的回测装置800包括量化策略获取模块810、转换模块820和嵌入模块830。
其中,量化策略获取模块810用于获取第一语言编写的量化策略,所述的第一语言为所述量化平台不能调用的、过程式的函数语言,具体例如可以是JDL。根据本公开的实施例,该量化策略获取模块810例如可以用于执行参考图2描述的操作S210,在此不再赘述。
其中,转换模块820用于根据预设规则,将第一语言编写的量化策略转换为量化平台可以调用的量化策略。根据本公开的实施例,该转换模块820例如可以用于执行参考图2描述的操作S220,在此不再赘述。
其中,嵌入模块830用于将量化平台可以调用的量化策略嵌入预制的回测模板,以供量化平台根据量化策略进行回测。根据本公开的实施例,该嵌入模块830例如可以用于执行参考图2描述的操作S230,在此不再赘述。
根据本公开的实施例,第一语言编写的量化策略例如可以包括有由第一语言定义的多个第一函数,转换模块820例如可以包括有翻译子模块821、转换子模块822和量化策略确定子模块823。其中,翻译子模块821用于根据翻译规则,翻译得到与第一语言编写的量化策略中的过程式的函数语言段对应的通用语言段;转换子模块822用于根据转换规则及多个第一函数,将通用语言段中与多个第一函数对应的第一语言段,转换为表征由通用语言定义的、与多个第一函数对应的函数的第二语言段;量化策略确定子模块823用于根据由第一语言段转换为第二语言段的通用语言段,确定量化平台可以调用的量化策略,其中,通用语言包括用于构建量化平台的语言,例如可以是Python语言、Java语言或C++语言。根据本公开的实施例,该翻译子模块821、转换子模块822和量化策略确定子模块823可以分别用于执行参考图3描述的操作S221-操作S223,在此不再赘述。
根据本公开的实施例,上述翻译子模块821例如可以包括解析单元8211、语法错误确定单元8212和翻译单元8213。其中,解析单元8211用于解析第一语言编写的量化策略,得到过程式的函数语言段的关键字和上下文信息;语法错误确定单元8212用于根据过程式的函数语言段的关键字和上下文信息,确定第一语言编写的量化策略是否存在语法错误;翻译单元8213用于在第一语言编写的量化策略不存在语法错误的情况下,根据翻译规则,翻译过程式的函数语言段,得到对应的通用语言段。根据本公开的实施例,解析单元8211、语法错误确定单元8212和翻译单元8213例如可以分别用于执行参考图4A描述的操作S2211-操作S2213,在此不再赘述。
根据本公开的实施例,上述翻译子模块821例如还可以包括回测参数获取单元8214和回测参数代入单元8215。其中,回测参数获取单元8214用于获取用户输入的回测参数,回测参数代入单元8215用于将回测参数代入翻译得到的通用语言段中。根据本公开的实施例,回测参数获取单元8214和回测参数代入单元8215可以分别用于执行参考图4B描述的操作S2214-操作S2215,在此不再赘述。
相应地,根据本公开的实施例,本上述量化平台的回测装置800例如还可以包括回测数据获取模块840,用于在嵌入模块830将量化平台可以调用的量化策略嵌入预设的回测模板之后,根据量化平台可以调用的量化策略中的回测参数,一次性获取与回测对象对应的回测时段内的所有回测数据,其中,量化平台根据量化策略及回测数据进行回测,回测参数包括回测对象和回测时段。根据本公开的实施例,该回测数据获取模块840具体可以用于执行参考图5描述的操作S240,在此不再赘述。
根据本公开的实施例,上述转换子模块822例如可以包括函数确定单元8221、运算定义单元8222、算法规则确定单元8223和语言段转换单元8224。其中,函数确定单元8221用于根据多个第一函数,确定适用于通用语言的、与多个第一函数对应的多个第二函数;运算定义单元8222用于定义与多个第二函数中至少两个第二函数对应的运算对象及运算对象之间的运算规则;算法规则确定单元8223用于根据多个第一函数,确定包括运算对象和运算规则的函数的算法规则;语言段转换单元8224用于根据多个第二函数、运算对象、运算规则及算法规则,将所述第一语言段转换为第二语言段。根据本公开的实施例,函数确定单元8221、运算定义单元8222、算法规则确定单元8223和语言段转换单元8224具体可以分别用于执行参考图6A描述的操作S2221-操作S2224,在此不再赘述。
根据本公开的实施例,上述量化策略确定子模块823具体例如可以通过对由第一语言段替换为第二语言段的通用语言段进行以下操作之后,得到量化平台可以调用的量化策略:对由第一语言段替换为第二语言段的通用语言段进行优化处理;并且/或者对由通用语言定义的、与多个第一函数对应的函数进行优化处理;并且/或者对由通用语言定义的、与多个第一函数对应的函数进行容错处理。
根据本公开的实施例,在通用语言为Python等解释性的语言的情况下,上述量化策略确定子模块823具体例如还可以用于将由第一语言段转换为第二语言段的通用语言段编译成第二语言编写的语言段,得到量化平台可以调用的量化策略,其中,第二语言是除通用语言外,量化平台能够执行的语言,该第二语言例如可以是Java语言或C++语言。
根据本公开的实施例的模块、子模块、单元、子单元中的任意多个、或其中任意多个的至少部分功能可以在一个模块中实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以被拆分成多个模块来实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式的硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,根据本公开实施例的模块、子模块、单元、子单元中的一个或多个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
例如,量化策略获取模块810、转换模块820、嵌入模块830、回测数据获取模块840、翻译子模块821、转换子模块822、量化策略确定子模块823、解析单元8211、语法错误确定单元8212、翻译单元8213、回测参数获取单元8214、回测参数代入单元8215、函数确定单元8221、运算定义单元8222、算法规则确定单元8223以及语言段转换单元8224中的任意多个可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,量化策略获取模块810、转换模块820、嵌入模块830、回测数据获取模块840、翻译子模块821、转换子模块822、量化策略确定子模块823、解析单元8211、语法错误确定单元8212、翻译单元8213、回测参数获取单元8214、回测参数代入单元8215、函数确定单元8221、运算定义单元8222、算法规则确定单元8223以及语言段转换单元8224中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,量化策略获取模块810、转换模块820、嵌入模块830、回测数据获取模块840、翻译子模块821、转换子模块822、量化策略确定子模块823、解析单元8211、语法错误确定单元8212、翻译单元8213、回测参数获取单元8214、回测参数代入单元8215、函数确定单元8221、运算定义单元8222、算法规则确定单元8223以及语言段转换单元8224中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图9示意性示出了根据本公开实施例的适于执行量化平台的回测方法的电子设备的方框图。图9示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图9所示,根据本公开实施例的电子设备900包括处理器901,其可以根据存储在只读存储器(ROM)902中的程序或者从存储部分908加载到随机访问存储器(RAM)903中的程序而执行各种适当的动作和处理。处理器901例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC)),等等。处理器901还可以包括用于缓存用途的板载存储器。处理器901可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 903中,存储有电子设备900操作所需的各种程序和数据。处理器901、ROM902以及RAM 903通过总线904彼此相连。处理器901通过执行ROM 902和/或RAM 903中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM902和RAM 903以外的一个或多个存储器中。处理器901也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,电子设备900还可以包括输入/输出(I/O)接口905,输入/输出(I/O)接口905也连接至总线904。电子设备900还可以包括连接至I/O接口905的以下部件中的一项或多项:包括键盘、鼠标等的输入部分906;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分907;包括硬盘等的存储部分908;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分909。通信部分909经由诸如因特网的网络执行通信处理。驱动器910也根据需要连接至I/O接口905。可拆卸介质911,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器910上,以便于从其上读出的计算机程序根据需要被安装入存储部分908。
根据本公开的实施例,根据本公开实施例的方法流程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分909从网络上被下载和安装,和/或从可拆卸介质911被安装。在该计算机程序被处理器901执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 902和/或RAM 903和/或ROM 902和RAM 903以外的一个或多个存储器。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。