matlab对数据的量化分析方法,金融量化分析数据传输方法与流程

本发明涉及计算机数据处理、传输技术领域,具体涉及金融量化分析数据传输方法。

背景技术:

数据在互联网传输之前一般要经过序列化处理,数据经过序列化之后,更变网络传输,解析和储存。但是序列化同时使得数据传输的性能降低。而在金融量化分析的应用中对数据传输的性能要求是极其高的,同时对数据的安全性也有一定的要求。

目前常用的序列化方法有两种:

第一种:把数据序列化为字符串传输,比如xml,json,这种方法的优点是序列化后的数据的可读性很高,缺点就是可读性强带来的不安全,还有转换速度非常慢、且转换后数据所占用的字节数变大,导致传输时间增加。

第二种:把数据转换为二进制传输,目前流行比较广的有protocol buffer。Protocol buffer对比xml,json等序列化方法性能有所提高。但是其序列化后的内容附带了相应的反序列化信息,如果数据被拦截很容易解析出其中的数据,同时其在处理整型的数据是动态变化的,因此可能会导致所占用的字节数过大,导致传输效率降低。

对于金融领域,尤其是量化投资、证券交易的场景下,往往需要快速的对数据进行分析、处理从而在最短的时间内做出交易决策。因此需要的数据序列化方法必须满足以下特点:高性能,具有一定的安全性。又因为金融量化常用的编程语言有:matlab、python、R等。目前市场上尚未存在完全支持matlab、python、R等语言的二进制序列化协议。

技术实现要素:

本发明的目的在于提供用于金融领域的更安全、更快速的,同时支持matlab,python,R等常用的金融量化语言的金融量化分析数据传输方法。

本发明采用以下技术方案:

金融量化分析数据传输方法,其特征在于,包括以下步骤:

发送方对第一数据结构进行描述,生成描述文件;

其中,所述描述的信息包括数据结构中各个成员变量的数据类型及其位置;

发送方保存该描述文件,并将该描述文件提供至接收方;

发送方根据所述描述文件,生成所述第一数据结构的序列化代码;

发送方计算所述第一数据结构当前各个成员变量所包含的第一数据序列化后所占用的总内存大小;

发送方根据所述计算的总内存大小申请相应内存;

发送方将所述第一数据及所申请的内存作为参数传入序列化代码,将当前各个成员变量所包含的第一数据进行序列化,序列化后生成的第二数据保存在所述申请的内存;

发送方将所述第二数据发送至接收方;

接收方根据所述描述文件生成第二数据结构以及反序列化代码;

接收方将所述第二数据作为参数传入所述反序列化代码,进行反序列化后解析出第一数据,将所述解析出的第一数据保存在第二数据结构。

本发明提供的金融量化分析数据传输方法适用于金融领域,具有更安全、更快速,同时支持matlab,python,R等常用的金融量化语言的优点。

附图说明

图1为本发明实施例提供的金融量化分析数据传输方法的流程图。

具体实施方式

以下结合附图及具体实施例对本发明作进一步说明。

参照图1。本实施例提供的金融量化分析数据传输方法,包括以下步骤:

发送方对第一数据结构进行描述,生成描述文件;

其中,所述描述的信息包括数据结构中各个成员变量的数据类型及其位置;

发送方保存该描述文件,并将该描述文件提供至接收方;

这里,发送方将描述文件提供至接收方的方法为:通过线下物理介质的方式;

发送方根据所述描述文件,生成所述第一数据结构的序列化代码;

发送方计算所述第一数据结构当前各个成员变量所包含的第一数据序列化后所占用的总内存大小。

所述计算总内存大小的方法为:

规定各个金融量化语言都支持的基本数据类型以及数据类型所占用的内存大小,对数据类型用一个数字进行标示。

目前金融量化后台系统软件主要采用C++语言开发,金融量化分析前端软件主要采用matlab语言开发,现以C++、matlab交互举例。

matlab支持的数据类型有int、double、int64、string等,C++亦支持上述数据类型,因此这几种数据类型可用于C++、matlab之间的数据传输。

各个类型所占的字节数分别为:int=4字节,double=8字节,int64=8字节,string=2字节+字符串内容的长度。

根据以上的规定,计算内存占用总大小的C++代码举例如下:

第一数据结构为:

总字节数量,根据之前约定的double占用8个字节,字符串string的字节数量为2+字符串长度(注:这里的wstring是utf16编码因此所占用的字节数量为字符串长度乘以2),可计算出当前第一数据demo所占用的字节数为:8+2+5*2=20。

采用以上所述计算总内存大小的方法,具有以下优点:内存占用精确到字节,不会占用过多的内存及带宽。

发送方根据所述计算的总内存大小申请相应内存;

发送方将所述第一数据及所申请的内存作为参数传入序列化代码,将当前各个成员变量所包含的第一数据进行序列化,序列化后生成的第二数据保存在所述申请的内存;

其中,将当前各个成员变量所包含的第一数据进行序列化的方法为:将第一数据的内容拷贝到申请到的内存里面,并且明确标识出所拷贝的内容大小。

采用该序列化的方法具有以下优点:序列化后的数据的排列是按照1字节紧密排列,发送时不占用过多的内存和带宽。

将数据进行序列化为二进制数据后进行传输,相对于将数据序列化为字符串进行传输,由于二进制数据相对于字符串的可读性更低,因此本方法传输数据更安全。

将第一数据序列化为二进制数据、再将序列化为二进制的数据反序列化解析出第一数据,该序列化以及反序列化均使用二进制进行操作,相对于使用字符串进行序列化以及反序列化的方法,具有速度快、内存占用小的优点。

以C++为例:

对double的序列化的C++代码为:

从上面代码可看出,对double序列化时只占用了8个字节,同时把占用的字节数作为返回值返回给调用方。

对wstring的序列化为:

从上面代码可看出,对wstring序列化占用2个字节加上字节长度,又因为wstring的字符集编码为utf16,因此所占用的字节数量必须乘以2。同时把所占用的字节数返回给调用方。

对Demo的序列化代码为:

从上面代码可看出,序列化Demo时,根据序列化wstring和double的返回值调整下一个成员变量将内容序列化到buffer的位置,从而达到1字节紧密排列的目的。

发送方将所述第二数据发送至接收方。

接收方根据所述描述文件生成第二数据结构以及反序列化代码;

接收方将所述第二数据作为参数传入所述反序列化代码,进行反序列化后解析出第一数据,将所述解析出的第一数据保存在第二数据结构。

上述计算内存占用总大小的C++代码中的数据结构Demo生成的描述文件,以接收方采用Matlab语言的举例,接收方根据所述描述文件生成第二数据结构以及反序列化代码;接收方将所述第二数据作为参数传入所述反序列化代码,进行反序列化后解析出第一数据,将所述解析出的第一数据保存在第二数据结构的两个步骤的Matlab代码举例如下:

综上,本实施例提供的金融量化分析数据传输方法,具有以下优点:

1.内存占用精确到字节,不会占用过多的内存及带宽。

2.序列化后的数据的排列是按照1字节紧密排列,发送时不占用过多的内存和带宽。

3.将数据进行序列化为二进制数据后进行传输,相对于将数据序列化为字符串进行传输,由于二进制数据相对于字符串的可读性更低,因此本方法传输数据更安全。

4.将第一数据序列化为二进制数据、再将序列化为二进制的数据反序列化解析出第一数据,该序列化以及反序列化均使用二进制进行操作,相对于使用字符串进行序列化以及反序列化的方法,具有速度快、内存占用小的优点。

5.序列化代码和反序列化代码在数据传输之前已生成,因此对数据进行列化及反序列化时不需要再生成序列化代码和反序列化代码,因此因此对数据进行列化及反序列化的速度快。

6.发送方生成描述文件之后,一方面自身保存该描述文件,另一方面该描述文件通过线下物理介质转存至接收方,由此描述文件非线上传输至接收方,从而避免线上传输描述文件时该描述文件泄漏等安全问题。

7.接收方收到该描述文件之后,根据该描述文件生成第一数据结构的反序列化代码。由于接收方本地存在反序列化代码,故发送方在发送序列化后的第二数据的时候,不需要再向接收方发送反序列化信息,由此减少数据的发送量,并且避免了反序列化信息线上传输泄漏的问题,从而提高了数据传输的安全性。

8.发送方采用线下物理介质的方式将描述文件提供至接收方,故描述文件不会在线上传输时外泄,序列化后的数据内不包含任何反序列化信息,因此在没有描述文件的情况下,从序列化后的数据中难以反序列出数据,因此传输的数据安全性高。

9.由于发送方生成的描述文件的信息包括数据结构中各个成员变量的数据类型及其位置,因此,接收方可以根据描述文件生成反序列化代码以及存储反序列化后的数据的数据结构。

10.通过规定各个金融量化语言都支持的基本数据类型以及数据类型所占用的内存大小,对数据类型用一个数字进行标示,由此该金融量化分析数据传输方法同时支持matlab,python,R等常用的金融量化语言。

你可能感兴趣的:(matlab对数据的量化分析方法,金融量化分析数据传输方法与流程)