本发明属于电子图形显示技术,具体涉及电子交易标的电子图形显示。
背景技术:
电子图形显示已广泛应用于各领域,如证券电子交易系统中,包括股票,期货,基金等电子交易图形,能够通过图形(如k线图形)显示一段时间内,交易标的的交易状态,如通过k线显示交易的实时价格,或一段时间内交易开盘价,收盘价,最高价,最低价等交易信息,方便使用者简便快速了解交易标的的交易状况。现有客户端使用的电子交易图形(如k线图形)显示系统和方法都只能显示单一交易标的的交易状态图。使用者需要了解多品种交易标的交易状态图,只能采用在同一显示屏上分屏显示,或用多个显示屏显示。这样显示的图形只能分别反映各交易标的各自的状态,不能直观显示多个交易标的组合后的交易状态;如同一类证券中不同标的组合,如多只股票组合交易状态。现有技术更不能显示不同类证券标的组合交易状态,如股票标的与期货标的的组合。现有电子交易图形(显示系统和方法,使用者不能在客户端任意选择多个交易标的,在系统中显示组合后的电子交易图形。
技术实现要素:
本发明的目的在于提供一种能够在客户端显示多品种交易标的组合显图形的系统及方法,从而解决现有客户端只能显示单一交易标的图形的问题,特别是能实现在客户端任意组合交易标的后,实现交易状态的组合显示。
本发明的技术方案之一多品种交易标的的同步图形显示方法,其步骤是:
1、从证券交易系统的交易品种中选取多个交易标的;
2、将多个交易标的的交易数据进行组合计算,得到组合后交易数据;
3、将组合后的交易数据通过坐标图形予以显示;
所述选取多个交易标的包括交易标的标示,交易价格,交易数量,交易方向;
所述坐标图形的构成:横坐标是时间维度,纵坐标是交易价格维度。
所述证券交易系统是采用电子化的方式自动地执行或辅助投资者买卖竞价作业的电脑系统。其交易品种包括权证,股票,期货,基金等,可以实现做多交易和做空交易。
优选的,所述选取的交易标的以列表显示。
所述列表显示包括多个交易标的选取过程中,基于证券电子交易系统中的交易品种搜索确定的交易标的;还包括输入的确定的交易标的的交易数量,交易方向;
所述选取多个交易标的生成列表:列表中含有选取交易标的组合后生成的交易标的组合表达式,组合表达式可以但不限于是±n1*b1±n2*b2±…±nm*bm;n为单个交易标的的交易数量,b为单个交易标的的代码;±为交易方向,其中+是做多交易,-做空交易方向,±是二选一;用以表示一种不同交易标的组合的交易标的,标的交易数量,交易方向;交易标的代码是现有证券电子交易系统中公用的表示交易标的的编码。组合表达式用以直观反映使用者实际或希望做出选择的结果。组合表达式可以是一组也可以多多组。
优选的,所述多个交易标的的交易数据进行组合计算方法表达式是:g=±n1*a1±n2*a2±…±nm*am;其中g为所有交易标的的交易价格的总和,n为单个交易标的的交易数量,a为单个交易的交易价格,±为交易方向,其中+是做多交易,-做空交易方向,±是二选一。
所述多个交易标的的交易数据进行组合采用非入栈的逐步化简算法,所述算法是使用正则表达式技术对复杂的表达式进行化简,其步骤是:
1.定义两个操作数或数和变量相乘的正则表达式regexa,
2.定义匹配出一个实数的正则表达式regexb
3.对表达式,记做expressiona匹配,匹配一个规则满足正则表达式regexa的字符串,对匹配出来的字符串进行运算得到一个数值类型的结果;将该数值类型结果替换expressiona中regexa匹配出的字符串,这样每做一次这样的化简,表达式中的乘号(*)就会少一个;所述字符串表示两数或数和变量相乘的表达式;
4.重复上步骤,直到表达式中无乘号(*),这时候剩下的表达式记为
expressionb,expressionb只含有+或-操作符;
5.对expressionb按照regexb来匹配,匹配出表达式中所有的实数,对实数进行相加得到结果。
所述组合计算方法是在得到组合表达式,经过解析后,得到交易标的对应的交易价格与交易数量,在进行计算。
在得到多个交易标的组合计算结果后,生成列表显示组合表达式,及计算交易结果。
优选的,所述选取多个交易标的是基于客户端设备操作,将组合交易标的的组合计算表达式以字符串的方式发送到服务器。
优选的,所述服务器在解析计算组合计算表达式后,将计算结果发送到客户端,以坐标图形予以显示。
优选的,所述坐标图形是k线图形。
本发明的技术方案之二多品种交易标的的同步图形显示系统,其特征在于它包括:
数据获取模块,用于获取交易标的交易数据;
交易标的选择模块,用于从数据获取模块中选取多个交易标的;
交易数据组合计算模块,用于对选取多个交易标的的交易数据进行组合计算;
图形显示模块,用于将计算得到的组合后交易数据通过坐标图形予以显示;
所述选取多个交易标的包括交易标的标示,交易价格,交易数量,交易方向;
所述坐标图形的构成:横坐标是时间维度,纵坐标是交易价格维度。
优选的,所述交易标的选择模块以列表形式显示组合的交易标的。
进一步的,它还包括通信模块,通信模块用于将所述交易标的选择模块选择的组合的交易标的信息传输输出;通信模块还用于将接收组合交易标的的组合交易数据的计算结果。
进一步的,所述交易标的选择模块,图形显示模块,通信模块设置于客户端设备,交易数据组合计算模块设置于服务器。
本发明所述的多品种交易标的包括现有证券电子交易体系中的各种证券品种,如股票,债券,基金,期货,银行票据等。交易方向指的是证券的做多交易和做空交易。硬件设备可以是单一的终端设备完成,也可以是客户端设备和服务器的组合设备完成。
获取交易标的交易数据是证券电子交易体系中的各种证券品种全部的数据,可以在客户端设备中完成,也可以在服务器中完成。
本发明基于交易标的的可选择组合计算,得到组合后的多种交易标的的组合交易结果,并将该结果以坐标图形的形式,特别是以k线图形的形式予以显示,弥补了现有k线图形只能显示单一交易标的的交易状态图缺陷,使用者可以简单直观的了解其组合的多交易标的的总体交易结果,方便使用者分析抉择。使用者可以基于证券电子交易系统的交易品种,在客户端设备上任意选择证券电子交易系统中的交易标的进行组合。客户端设备可以是客户端pc设备,移动终端等。可实现组合行情的历史计算、组合行情的实时计算、实时组合行情到k线行情转换、短周期k线到长周期k线转换、组合k线显示。
附图说明
图1客户端和服务器交互时序图。
图2交易标的组合的列表定义图。
图3搜索并选取交易标的图。
图4多品种交易标的的组合计算表达列表。
图5多品种交易标的组合实时行情列表。
图6多品种交易标的组合k线显示图。
具体实施方式
为了清楚的说明本发明权利要求书的技术方案,以下具体的实施方式用于对本发明技术方案予以解释和说明,本发明权利要求书的保护范围包括但不限于如下的具体实施方式。本领域的技术人员基于如下的技术启示完成的不同于如下具体实施方式的其他实施方式也是本发明的权利要求书的保护。
本实施例采用客户端设备和服务器共同完成本发明,这样可以降低使用者选择设备的要求,便于使用者使用。
服务器获取证券电子交易系统中交易品种的交易数据,交易数据包括交易品种的各种实时数据和历史交易数据。
在获取的交易品种中选择交易标可以通过搜索选择交易标的实现,以列表的形式予以显示,在列表中输入交易标的的交易数量以及交易方方向。交易方向可以采用“+”和“-”予以表示,其中“+”表示做多交易,“-”表示做空交易,系统中可以采用默认做多交易,此时不需要输入“+”。如图2,图3所示。可以在客户端设备完成。
列表显示还包括在选取交易标的组合后生成的交易标的组合表达式,所述组合表达式,用以表示一种不同交易标的组合的交易标的,标的交易数量,交易方向的总和,表达式为±n1*b1±n2*b2±…±nm*bm;n为单个交易标的的交易数量,b为单个交易标的的代码;±为交易方向,其中+是做多交易,-做空交易方向。表达式的起始标的如果是做多交易方向,可以不用显示“+”。
多个交易标的组合方式是多种形式的,如交易标的b1,b2的组合,交易标的b1,b5的组合等;多种形式均以列表的形式生成显示,如图4所示。可以选择其中的任意一种多种形式。
在得到组合表达式,经过解析后,得到交易标的对应的交易价格与交易数量,再进行计算。所述多个交易标的的交易数据进行组合计算方法是:g=±n1*a1±n2*a2±…±nm*am;其中g为所有交易标的的交易价格的总和,n为单个交易标的的交易数量,a为单个交易的交易价格,±为交易方向,其中+是做多交易,-做空交易方向,±是二选一。交易价格的总和的计算可以是服务器接收到客户端设备通信模块以字符串的方式传输的组合计算表达式经过解析后,基于各交易标的实时交易数据(交易价格,交易数量)计算的结果;当然也可以是各交易标的历史交易数据(交易价格,交易数量)计算的结果。服务器将计算的结果传送给客户端设备通信模块。
在得到上述计算结果以后,生成列表,显示多个交易标的组合的交易结果。生成的列表可以显示多个交易标的组合的不同组合形式,不同组合形式该交易结果的数据可以是实时数据,也可以是历史数据。如图5所示。具体可以是客户端设备接收从服务器传送的计算结果后,生成生成列表。
基于上述得到的组合的交易标的的总的交易价格,生成组合后的交易标的的“k”线图予以显示。“k”线图显示组合交易后的开盘价,最高价,最低价,实时价,收盘价。“k”线图以交易时间段予以显示,可以是日“k”线图连续图形,周“k”线图连续图形等。如图6所示。
具体的,交易标的组合定义说明:本发明使用客户端来定义组合计算表达式,定义方式如图2所示。
列表中的每一行表示表达式中的成分标的的信息,点击“合约代码”下对应的单元格,会看到一个“选取合约”的按钮,点击该按钮,会弹出如图3所示的对话框。
在图3所示的对话框中,输入股票或期货的名称或代码进行搜索,然后勾选需要的标的,确定。这样图2中就会增加一列。
如图2所显示的数据为例子,选取了海通证券和长江证券为成分标的,在组合系数中填入正整数或负整数,这里填入2和-3。
在图2所示对话框中,点击确定,则组合公式2*[600837.ss]-3*[000783.sz]显示在图4所示对话框中。
在图4所示对话框中,选择组合代码为“2*[600837.ss]-3*[000783.sz]”的行,点击确定,则在图5中显示2*[600837.ss]-3*[000783.sz]的实时行情(tick行情)。
关于系数的说明:正数的对应的实际意义是(做多)买入,负数对应的实际意义是(做空)卖出。
在实际的使用场景中,如果系数都为“+”,一般用来做一篮子交易,如果系数有“+”有“-”,一般是用来做套利或对冲交易。
在期货的套利操作中,一般是一正一负的组合,也可以是多正多负的组合,例如蝶式套利。
对于可以进行融券卖空的股票,也是可以和其他相关性比较强的股票进行套利交易的。以图2中的标的为例,海通证券和长江证券都是属于券商股,相关性在90%左右,价格比大致为3比2,为了方便做海通证券对长江证券的套利交易,使用本工具,将系数配比为2和-3,物理意义是2倍的海通证券股票的价格减去3倍的长江证券股票的价格,结果可以直观的展现在图6中,从图6显示的图形可以看出,这个组合有一定的协整特性。
实时组合的计算流程:
使用图2所示工具定义组合公式,本工具可以定义任何多品种交易对象的线性组合,例如2*[600837.ss]-3*[000783.sz],在“增加组合投资标的”对话框中,逐行选择海通证券和长江证券,系数分别是2和-3。
在定义好的组合合约列表中选择需要计算的合约,例如2*[600837.ss]-3*[000783.sz],客户端将定制信息以字符串的方式发送到服务器。
服务器解析字符串“2*[600837.ss]-3*[000783.sz]”,分别解析出系数2,3和交易标的信息600837.ss和000783.sz。
将上一步骤的时间序列进行遍历,获取某一时间点上的所有成分标的的行情。以2*[600837.ss]-3*[000783.sz]为例:取得股票600837.ss和股票000783.sz的分钟线k线行情
服务器计算时间集合(所有成分数据的并集),并按从小到大进行排序成时间序列
按照线性组合公式进行计算,计算开盘价和收盘价,并记录下对应的时间点。以2*[600837.ss]-3*[000783.sz]为例,按照配比系数进行价格计算,如果600837.ss价格为4.00,000783.sz价格为2.00,计算表达式为2*4.00-3*2.00,结果为2.00
表达式计算算法采用非入栈的逐步化简算法(限于表达式中只有四则运算,没有括号的情况),(目前表达式算法常见的有化后缀表达式计算、双栈法),以表达式2*[600837.ss]-3*[000783.sz]为例子(假[600837.ss]的值为8.0,[000783.sz]的值为4.9);
算法总体描述:
正则表达式:计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
本算法使用正则表达式技术对复杂的表达式进行化简
1.定义两个操作数(或数和变量)相乘的正则表达式regexa
2.定义匹配出一个实数的正则表达式regexb
3.对表达式(记做expressiona)匹配,匹配一个规则满足正则表达式regexa的字符串,对匹配出来的字符串(两数或数和变量相乘的表达式)进行运算得到一个数值类型的结果。将该数值类型结果替换expressiona中regexa匹配出的字符串,这样每做一次这样的化简,表达式中的乘号(*)就会少一个
4.重复上步骤,直到表达式中无乘号(*),这时候剩下的表达式记为expressionb,expressionb只含有+或-操作符
5.对expressionb按照regexb来匹配,匹配出表达式中所有的实数(例如表达式为"-40-6-4+2.1-91",使用regexb可以匹配出-40,-6,-4,+2.1,-91五个实数),对实数进行相加得到结果匹配表达式中乘法运算的正则表达式为(java语言描述)使用常量
regexa表示
string
regexa="(\\d)(\\*)(\\[)(\\d+)(\\.)((?:[a-z][a-z]+))(\\])";
本步骤目的是使用regexa匹配出所有的乘法操作表达式,进行化简,最后得到只剩下“+”和“-”操作符的表达式,以2*[600837.ss]-3*[000783.sz]为例详细说明:
需要求的表达式2*[600837.ss]-3*[000783.sz]的值,使用临时变量s3存储该字符串,即
strings3=2*[600837.ss]-3*[000783.sz]
遍历表达式s3,使用正则表达式regexa匹配出2*[600837.ss],放入临时变量s1
s1=2*[600837.ss]
s3=s1-3*[000783.sz]
替换s1中的[600837.ss]为实际价格8(元),计算出s1的值
s1=2*8=16
s3=16-3*[000783.sz]
继续遍历表达式s3,使用正则表达式regexa匹配出3*[000783.sz],放入临时变量s2
s2=3*[000783.sz]
s3=16-s2
替换s2中的[000783.sz]为实际价格4.9(元),计算出s2的值
s2=3*4.9=14.7
s3=16-14.7
s3中现在只剩下+-操作符
定义正则表达式stringregexb="((?<=\\(|-|\\+)-?\\d+)|(^-[0-9]+)";
遍历s3,使用regexb可以匹配出所有的操作数(“-”当做负数处理,“+”当正数处理)
即从s3匹配出16和-14.7两个实数,然后把匹配的结果直接相加,得到1.3
此方法可以推广到多个操作数的情况:
例如表达式为"-40-6-4+2.1-91",使用regexb可以匹配出-40,-6,-4,+2.1,-91五个实数,把匹配出来的5个数放入实数类型的数组,遍历计算就可以得到表达式的结果
基础时间粒度k线的计算流程
基础时间粒度是较短的时间粒度,可以用来合成比其时间粒度大的k线,例如选取1分钟为基础时间粒度,
可以使用1分钟k线生成5分钟k线,也可以使用1分钟k线合成日k线。
在本发明中,基础的时间粒度是可以在服务器端的配置文件中配置的。根据实际的需要和计算机的算力来进行配置,例如要进行期货的高频套利交易,可以配置为1秒;如果进行股票的套利交易,一篮子股票交易,配置为1分钟就足够了。
基础粒度k线的计算流程,以1分钟为例子
获取600837.ss和000783.sz的一分钟k线数据
按600837.ss和000783.sz的一分钟k线的时间进行遍历,按照4.2中的流程计算组合行情的开盘价、收盘价、最高价、最低价(这里记为p.open,p.close,p.high,p.low)。
p.open=2*[600837.ss].open-3*[000783.sz].open
p.close=2*[600837.ss].close-3*[000783.sz].close
p.high=max(p.open,p.close)
p.low=min(p.open,p.close)
按照需要的长时间框架进行合并计算,计算某个时间段的开盘价、最高价、最低价、收盘价。根据需要,可以将1分钟线合并为5分钟,1小时,1天等长周期的k线
合并算法如下(以1分钟合并5分钟k线为例说明合并算法,其他情况类推)
代号说明:为方便描述,使用计算机语言里的对象数组来标识时间序列
t1m[0]:t1m表示1分钟时间序列,方括号里面的0表示该序列的第一个点
t1m[1]:t1m表示1分钟时间序列,方括号里面的1表示该序列的第二个点
t1m[2]:t1m表示1分钟时间序列,方括号里面的2表示该序列的第三个点
t1m[3]:t1m表示1分钟时间序列,方括号里面的3表示该序列的第四个点
t1m[4]:t1m表示1分钟时间序列,方括号里面的4表示该序列的第五个点
t1m[n-1]:t1m表示1分钟时间序列,方括号里面的1表示该序列的第n个点
t5m[0]:t5m表示5分钟时间序列,方括号里面的0表示该序列的第一个点
一分钟线时间序列为t1m[0],t1m[1],t1m[2]…t1m[n-1];
五分钟线时间序列为t5m[0],t5m[1],t5m[2]…t5m[n-1];
时间序列上的每个点的属性有时间(time),开盘价(open),最高价(high),最低价(low),收盘价(close),成交量(volume),以t1m[0]为例,记为t1m[0].time,t1m[0].open,t1m[0].high,t1m[0].low,t1m[0].close,t1m[0].volume)
解析出t1m[0],t1m[1],t1m[2]…t1m[n-1]中的时间点t1m[0].time=09:31:00,t1m[1].time2=09:32:00,t1m[2].time=09:33:00…t1m[n-1]=…
获取5分钟k线框架(该时间框架事先已经定义好,可以直接获取到),第一个点09:30:01-09:35:00第二个点09:35:01-09:40:00
查询5分钟k线框架的第一个点,获取时间范围09:30:01-09:35:00
查询1分钟k线序列,找出时间在09:30:01-09:35:00中的5个点t1m[0].time,t1m[1].time…t1m[4].time
对5个点进行合并计算,合并规则
开盘价t5m[0].open=t1m[0].open
最高价t5m[0].high=max(t1m[0].high,t1m[1].high,t1m[2].high,t1m[3].high,t1m[4].high)
即求t1m[0].high,t1m[1].high,t1m[2].high,t1m[3].high,t1m[4].high的最大值
最低价t5m[0].low=max(t1m[0].low,t1m[1].low,t1m[2].low,t1m[3].low,t1m[4].low)
即求t1m[0].low,t1m[1].low,t1m[2].low,t1m[3].low,t1m[4].low的最小值
收盘价t5m[0].low=t1m[4].close
成交量t5m[0].volume=sum(t1m[0].volume,t1m[1].volume,t1m[2].volume,t1m[3].volume,t1m[4].volume)
即对t1m[0].volume,t1m[1].volume,t1m[2].volume,t1m[3].volume,t1m[4].volume求和
使用以上的方法计算t5m[1],t5m[2]…t5m[n]
图形展示
将计算结果(k线,指标),展示在图形上。(如图6所示)
根据成分标的的实时行情进行实时更新。
本发明对于两个时间序列,如果这两个时间序列协整,那么这两个时间序列存在某个线性组合,使得这个线性组合平稳。因为这个时间序列平稳,所以我们假设这个平稳的时间序列具有“均值回归”的性质。于是我们可以复制这两个时间序列,做统计套利。
检验这两个时间序列xt,yt是否具有某个线性组合,使得这个线性组合平稳,可以这样做:把yt对xt做线性回归,检验残差是否平稳。如果残差平稳,那么这两个时间序列xt,yt存在某个平稳的线性组合,否则不存在。
本发明提供了一种方法,对以上问题可以进行检测和可视化显示。并且,本发明可以推广到三个以上时间序列的线性组合场景。
实时行情可以用来合成k线,短周期可以合成长周期k线。