本发明涉及股票数据处理
技术领域:
,特别是一种股票快速复权计算、全程价格定位的方法及系统。
背景技术:
:截至目前为止,股票复权的算法有两种:价格平移法及除权因子法。其中,除权因子法:除权因子=收盘价/除权价:将公司上市以来的除权因子连乘积,得到对应每一交易日的除权因子;向后复权价=股票收盘价(实际交易价)*每一交易日的除权因子;向前复权价=股票收盘价(实际交易价)*每一交易日的除权因子/一交易日的除权因子的乘积)。采用除权因子法时,对于向前复权,就是保持现有价位不变,将以前的价格缩减,将除权前的k线向下平移,使图形吻合,保持股价走势的连续性,此法有可能导致股价是负数。对于向后复权,就是保持先前的价格不变,而将以后的价格增加。与采用除权因子法相比,同样的股票的数据采用价格平移法分别进行前复权及后复权会得到不同股票价增长率。价格平移复权法的问题在于:当股票分红送配多,上市时间长,前复权的股价会产生负数,无法计算收益率,与后复权计算的结果差异大。而除权因子法的问题在于:计算量大,需要计算有史以来除权因子乘积,如计算任意两交易日的涨幅、均线值、区间最高价最低价、技术指标等。另外,现有的股票k线数据中,没有对某个交易日的在股票上市以来的位置进行标识,不利于直接计算任意交易日之间的交易日数,尤其当数据存在数据库中,更不利于数据的计算。技术实现要素:因此,针对上述的问题,本发明提出一种股票全程复权价计算与k线记录定位系统与方法,根据股票行情数据及除权价计算全程复权因子及对上市k线记录数做标识,以解决现有技术之不足。为了解决上述技术问题,本发明所采用的技术方案是,一种股票全程复权价计算与k线记录定位方法,包括:行情数据获取步骤,从深交所和上交所获取市场行情数据;行情数据预处理步骤,对获取的市场行情数据进行处理,生成预设周期的k线数据,例如分钟k线、日k线、周k线和月k线数据,当然,也可生成其他不定周期的数据;k线记录定位标识步骤,对股票交易数据进行标识,标识方法如下:将股票交易数据依照交易日及交易时间排成一个序列;按照k线的预设周期对该序列分别进行分割,生成预设周期的k线数据的定位标识,例如分钟k线数据定位标识、日k线数据定位标识、周k线数据定位标识、月k线数据定位标识及其他不定周期的k线数据定位标识;除权日因子及全程复权因子计算步骤,利用预设周期的k线数据及分红送配数据进行计算,首先计算除权日的除权因子,将非除权日的除权因子置为1;除权日的除权因子算法为:股权登记日收盘价/(股权登记日收盘价+配股价×配股比例-每股现金红利)*(1+每股送股比例+每股配股比例),计算全程复权因子,其方法是:某交易日的全程复权因子为自上市至某交易日所有的除权因子乘积。为实现k线记录定位,本发明还包括数据存储步骤和数据读取步骤。其中,数据存储步骤是将上述步骤所产生的数据优化保存,具体为:将上述预设周期的k线数据的定位标识写入一索引脚本中,将各定位标识对应的预设周期的k线数据存入第一数据表组中,第一数据表组包括多个数据表,分别存储不同预设周期的k线数据,索引脚本上具有转向第一数据表组的各个数据表的路径;将市场行情数据存入第二数据表中,将股票交易数据存入第三数据表中,将除权日因子和综合复权因子分别存入第四数据表和第五数据表中。其中,索引脚本可以是shell脚本或者sql脚本,方便查询数据时候读取。本发明将庞大繁杂的市场行情数据处理成分钟k线、日k线、周k以及月k线数据等预设周期的k线数据,将各预设周期的k线数据分别保存到不同的表中,并将预设周期的k线数据的定位标识写入索引脚本,连同索引脚本上转向第一数据表组的各个数据表的路径信息,可快速精准的获得所需的数据。对于存储市场行情数据的第二数据表,其数据庞大,还具有如下进一步的方案:第二数据表上设有第二分隔标记,且该第二分割标记同时还存储于索引脚本上,第二分隔标记可以是按照日期来分割的,例如年分隔标记或者月分隔标记,当按照年来分割时,在一年的数据末尾处增设标记符,并将该标记符存入索引脚本上,当读取某一年数据时,可先从索引脚本上获得对应的标记符,然后根据该标记符查询第二数据表上对应位置处的数据即可,具有快速、精准的优势。同样,其他存储数据庞大的表也可设置分割标记,例如:第三数据表上设有第三分隔标记,且该第三分割标记同时还存储于索引脚本上。其原理同上。数据读取步骤:如果待获取的信息为预设周期的k线数据,则查询索引脚本获取对应的数据表即可读取;如果待获取的信息为用户自定义的数据,则查询索引脚本获取对应的分隔标记,根据该分隔标记读取第三数据表或者第四数据表即可;如果待获取的信息为除权日因子或者综合复权因子则读取第四数据表或者第五数据表即可。本发明针对目前的复权算法提出如下策略,通过对除权日的复权计算,计算股票上市以来任意交易日的综合复权因子,对任意周期的k线数据的周期序列进行定位标识并对其进行优化存储,可方便快速的计算任意两交易日的涨幅,任何交易日的均价、最高最低价,任何技术指标;另外,由于做了定位标识并对其进行了优化存储,可以快速查找任意时间周期的指定位置的股票数据;并还可进行实时信号的发出以及信号预警等等。基于上述方法,本发明还提供一种股票全程复权价计算与k线记录定位系统,其包括行情数据获取及处理模块、除权日因子及全程复权因子计算模块、k线记录定位标识模块和数据存储模块;其中,行情数据获取及处理模块,用于从深交所和上交所获取市场行情数据,并对这些数据进行处理,生成预设周期的k线数据,例如分钟k线、日k线、周k线和月k线数据,当然,也可生成其他不定周期的数据;k线记录定位标识模块,用于对股票交易数据进行标识,标识方法如下:将股票交易数据依照交易日及交易时间排成一个序列;按照k线的预设周期对该序列分别进行分割,生成预设周期的k线数据的定位标识,例如分钟k线数据定位标识、日k线数据定位标识、周k线数据定位标识、月k线数据定位标识及其他不定周期的k线数据定位标识;除权日因子及全程复权因子计算模块,利用行情数据处理模块产生的数据及分红送配数据,包括:除权日的除权因子计算单元,该单元执行如下计算过程:首先将非除权日的除权因子置为1;其次,除权日的除权因子算法为:股权登记日收盘价/(股权登记日收盘价+配股价×配股比例-每股现金红利)×(1+每股送股比例+每股配股比例);全程复权因子计算单元,该单元执行如下计算过程:某交易日的全程复权因子为自上市至某交易日所有的除权因子乘积。数据存储模块用于保存上述模块产生的数据,其包括:定位标识存储单元:将预设周期的k线数据的定位标识写入一索引脚本中,将各定位标识对应的预设周期的k线数据存入第一数据表组中,第一数据表组包括多个数据表,分别存储不同预设周期的k线数据,索引脚本上具有转向第一数据表组的各个数据表的路径;市场行情数据存储单元:将市场行情数据存入第二数据表中;股票交易数据存储单元:将股票交易数据存入第三数据表中;除权日因子和综合复权因子存储单元:将除权日因子和综合复权因子分别存入第四数据表和第五数据表中。对于存储市场行情数据的第二数据表,其数据庞大,还具有如下进一步的方案:第二数据表上设有第二分隔标记,且该第二分割标记同时还存储于索引脚本上。同样,其他存储数据庞大的表也可设置分割标记,例如:第三数据表上设有第三分隔标记,且该第三分割标记同时还存储于索引脚本上。其原理同上。数据读取模块用于对数据存储模块存储的数据进行读取,其包括:k线数据查询单元:首先查询索引脚本获取对应的数据表,然后读取该数据表即可;市场行情数据查询单元:读取第二数据表即可;股票交易数据查询单元:读取第三数据表即可;除权日因子或者综合复权因子查询单元:读取第四数据表或者第五数据表即可。另外,如果待获取的信息为用户自定义的数据,则查询索引脚本获取对应的分隔标记,根据该分隔标记读取第三数据表或者第四数据表即可。数据存储模块存储股票除权数据,股票全程复权因子数据以及k线记录全程定位标识数据,供股票数据计算、股票数据统计,各种模型计算,及发布结果提供服务。进一步的,该系统还包括应用发布模块,该应用发布模块用于将数据存储模块的数据通过网页或者移动终端展现出来,并提供其他应用接口。本发明充分利用除权日因子计算全程复权因子保存入库,避免实时计算过程重复运算,节约时间,提高效率,不同于现有的单点复权法,不需要对行情数据向前遍历或向后遍历,方便直接运算;同时将k线数据全程定位,实现快速查找及提取数据,大大减少服务器查询、io吞吐压力,提高系统响应时间。附图说明图1是本发明的系统的体系结构图;图2是行情数据获取及处理模块的流程图;图3是除权日因子及全程复权因子计算模块的流程图;图4是k线记录定位标识模块的流程图;图5是应用发布模块的流程图。具体实施方式随着金融互联网及投资理财的被认同及普及,量化技术的逐渐被投资者认同,股票的数量、规模日益扩大,股票的除权价计算及快速定位应用也越广泛。与股票的除权价计算及快速定位相关的各种技术指标,实时信号的发出,信号预警,需要快速计算,目前为止,尚未发现国内机构提供对股价除权价全程定位的应用。本发明正是为解决该问题而提出的,现结合附图和具体实施方式对本发明进一步说明。具体的,参见图1,本发明的一种股票全程复权价计算与k线记录定位系统,其包括行情数据获取及处理模块、除权日因子及全程复权因子计算模块、k线记录定位标识模块、数据存储模块和应用发布模块。其中,行情数据获取及处理模块,参见图2,首先从深交所和上交所获取市场行情数据,然后对这些市场行情数据进行处理,分别生成预设周期的k线数据,例如分钟k线、日k线、周k线和月k线数据,当然,也可生成其他不定周期的数据,最后将数据存储到数据库中。除权日因子及全程复权因子计算模块,用于计算除权日因子及任意交易日自上市以来的综合复权因子。参见图3,根据行情数据获取及处理模块获取的市场行情数据进行除权因子计算:首先计算除权日的除权因子,将非除权日的除权因子置为1,计算全程复权因子,其方法是某交易日的全程复权因子为自上市至某交易日所有的除权因子乘积,结果保存。k线记录定位标识模块,用于对股票交易数据进行标识,参见图4,标识方法如下:将股票自首日上市至最近交易日依照交易日及交易时间排成一个序列;按照k线的预设周期对该序列分别进行分割,第一个分割标识为1,第二个分割标识为2,依次往下进行,直至结束,生成预设周期的k线数据的定位标识,例如分钟k线数据定位标识、日k线数据定位标识、周k线数据定位标识、月k线数据定位标识及其他不定周期的k线数据定位标识。那么k线位置为m的5周期均线ma5计算如下:ma5=(pm*fm+pm-1*fm-1+pm-2*fm-2+pm-3*fm-3+pm-4*fm-4)/5/fm;其中pm、fm分别为k线位置为m时的收盘价、复权因子。数据存储模块:存储市场行情数据,预设周期的k线数据,预设周期的k线数据的定位标识,除权日因子和综合复权因子、股票除权数据,股票全程复权因子数据以及k线记录全程定位标识数据。其中,为了达到进一步快速读取并获取数据的目的,数据存储模块包括如下过程:将上述预设周期的k线数据的定位标识写入一索引脚本中,将各定位标识对应的预设周期的k线数据存入第一数据表组中,第一数据表组包括多个数据表,分别存储不同预设周期的k线数据,索引脚本上具有转向第一数据表组的各个数据表的路径;将市场行情数据存入第二数据表中,将股票交易数据存入第三数据表中,将除权日因子和综合复权因子分别存入第四数据表和第五数据表中。其中,索引脚本可以是shell脚本或者sql脚本,方便查询数据时候读取。本发明将庞大繁杂的市场行情数据处理成分钟k线、日k线、周k以及月k线数据等预设周期的k线数据,将各预设周期的k线数据分别保存到不同的表中,并将预设周期的k线数据的定位标识写入索引脚本,连同索引脚本上转向第一数据表组的各个数据表的路径信息,可快速精准的获得所需的数据。对于存储市场行情数据的第二数据表,其数据庞大,还具有如下进一步的方案:第二数据表上设有第二分隔标记,且该第二分割标记同时还存储于索引脚本上,第二分隔标记可以是按照日期来分割的,例如年分隔标记或者月分隔标记,当按照年来分割时,在一年的数据末尾处增设标记符,并将该标记符存入索引脚本上,当读取某一年数据时,可先从索引脚本上获得对应的标记符,然后根据该标记符查询第二数据表上对应位置处的数据即可,具有快速、精准的优势。同样,其他存储数据庞大的表也可设置分割标记,例如:第三数据表上设有第三分隔标记,且该第三分割标记同时还存储于索引脚本上。其原理同上。数据读取步骤:如果待获取的信息为预设周期的k线数据,则查询索引脚本获取对应的数据表即可读取;如果待获取的信息为用户自定义的数据,则查询索引脚本获取对应的分隔标记,根据该分隔标记读取第三数据表或者第四数据表即可;如果待获取的信息为除权日因子或者综合复权因子则读取第四数据表或者第五数据表即可。好的索引将会允许系统实现最大化的并发,一个用户的查询对于其他用户的查询几乎没有影响,本发明通过上述索引脚本进行存储和读取方法,使得用户可以在最短的时间内查询到请求的数据,且可满足大数据量用户同时的并发查询,达到使用最少的系统资源带来最大的性能提升。应用发布模块,该应用发布模块用于将数据存储模块的数据通过网页或者移动终端展现出来,并提供其他应用接口。参见图5,应用发布模块的应用发布程序后端的服务程序,网页前端的展现程序,移动终端的app应用程序以及其他应用程序的数据接口。本发明采用上述方案,具有以下特点:(1)快速运算:任意量交易日的之间的涨幅,任何交易日的均价、最高最低价,任何技术指标(2)快速查找:由于做了定位标识,可以快速查找任意时间周期的指定位置的股票数据。本发明的上述方案的实施步骤如下:1、以万科a(000002)日k线为例,首先获取如表1所示的万科日k线数据:日期开盘价最高价最低价最近价成交量成交额1991-1-215.6315.6315.6315.631900014860001991-1-315.3915.3915.3915.3945003510001991-1-415.3115.3115.3115.3168005200001991-1-515.2315.2315.2315.2322001640001991-1-715.4715.4715.4715.4773005690001991-1-915.3115.3115.3115.3132002460001991-1-1015.2315.2315.2315.23300210001991-1-1115.1515.1515.1515.15300260001991-1-1414.9914.9914.9914.9920016000表1:k线数据2、计算除权日数据如表2所示:日期开盘价最高价最低价最近价除权因子1991-6-87.957.957.47.951.42281992-3-3011.911.910.110.651.21993-4-520.52120.420.51.5031994-6-21665.625.721.37581995-7-444.023.853.971.18781996-8-67.667.697.357.641.11831997-6-272121.820.7221.091.1551997-7-1415.81615.3115.61.16631998-7-1011.5111.7811.5111.61.1132表2:除权日因子3、计算全程复权因子如表3所示:日期开盘价最高价最低价最近价除权因子全程复权因子2015-7-1614.7114.8814.4314.71114.80772015-7-1714.7715.2114.6215.071114.80772015-7-2014.9715.3814.815.351114.80772015-7-2114.7714.7714.514.511.0337118.67672015-7-2214.5114.7514.114.71118.67672015-7-2314.5415.2314.4615.161118.67672015-7-2415.171615.115.411118.67672015-7-2715.4115.9613.9514.21118.67672015-7-2813.914.813.7614.621118.67672015-7-2914.614.7514.3514.61118.67672015-7-3014.5814.6514.0814.081118.6767表3:全程复权因子4、添加定位标识如表4所示:表4:定位标识数计算:1.万科a自上市至2015-7-30涨幅:(118.6767*14.08-15.63)/15.63*100=10590%2.万科a自2015-7-16至2015-7-30共交易5944-5934+1=11个交易日3.万科a2015-7-23的日k线的5日均值是:(118.6767*15.16+118.6767*14.7+118.6767*14.51+114.8077*15.35+114.8077*15.07)/118.6767/5=14.76本发明充分利用除权日因子计算全程复权因子保存入库,避免实时计算过程重复运算,节约时间,提高效率,不同于现有的单点复权法,不需要对行情数据向前遍历或向后遍历,方便直接运算;同时将k线数据全程定位,实现快速查找及提取数据,大大减少服务器查询、io吞吐压力,提高系统响应时间。尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。当前第1页12