从股票价格时间序列中检测几何图形的算法及其实现

上传人:jiups****uk12 文档编号:40039392 上传时间:2018-05-22 格式:PDF 页数:3 大小:156.32KB
返回 下载 相关 举报
从股票价格时间序列中检测几何图形的算法及其实现_第1页
第1页 / 共3页
从股票价格时间序列中检测几何图形的算法及其实现_第2页
第2页 / 共3页
从股票价格时间序列中检测几何图形的算法及其实现_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《从股票价格时间序列中检测几何图形的算法及其实现》由会员分享,可在线阅读,更多相关《从股票价格时间序列中检测几何图形的算法及其实现(3页珍藏版)》请在金锄头文库上搜索。

1、第 24 卷第 l 期 计算机应用与软件VoI. 24, No. l 2007 年 l 月 computer AppIications and SoftwareJan. 2007从股票价格时间序列中检测几何图形的算法及其实现万 举 李明禄(上海交通大学计算机科学与工程系 上海 200030)收稿日期: 2005 - l0 - 25。万举, 硕士生, 主研领域: 数据网格及应用。摘 要 描述了从股票价格时间序列中检测出一些对技术分析有用的特定的几何图形 (如双顶, 双底, 头肩顶) 的算法及其实现。首先得到用户指定的股票和时间段内的价格时间序列 (这里是每天的收盘价格) , 然后从中得到一部分直

2、观上对技术分析重要的点, 最后根据这些点来判断整个时间序列中是否有符合用户指定的几何图形。该方法用 Java 实现, 并使用 Jfreechart 工具绘制结果。实践证明该方法能有效地识别几何图形。关键词 股票价格 时间序列 检测几何图形THE ALGORITHM AND ITS IMPLEMENTATION OF DETECTING GEOMETRICAL PATTERN FROM PRICE-TIME SERIES OF STOCKSWan Ju Li MingIu(Department of Computer science and Engineering, shanghai Jiaot

3、ong Unilersity, shanghai 200030, China)Abstract This paper presents a method and its impIementation which detects a certain set of geometricaI patterns(such as doubIe top,doubIe bottom, head-shouIder-top)that are important to stock technicaI anaIyzing from stock price time series. The method first g

4、ets the pricetime series(here we use the cIosing price everyday for a stock)and then extracts some perceptuaIIy important points which are used to deter-mine whether a certain geometricaI patterns exist in the series. The method is impIemented using Java programming Ianguage and the resuIt ispresent

5、ed with the heIp of the tooI Jfreechart. The resuIts proved that this method is effective in the recognition of geometricaI pattern fromprice time series.Keywords Stock price Time series Detecting geometricaI pattern1 引言与概念定义时间序列数据在科学研究、 工程应用和商业交易记录中广泛存在, 时间序列数据库与普通数据库相比, 有其独特的性质,即时间序列的某些变量是按时间进行排序的

6、, 这就使得对时间序列的研究有了特殊性。本文中仅关心股票的每日收盘价格,若对于大盘指数的分析则为每日的收盘指数。本文主要是对研究股票价格时间序列的历史数据, 从中检测满足特定条件的几何图形模式, 用于指导未来的投资。文中提出了一种新的方法 (特别是针对极值点的判断) : 首先对价格时间序列进行预处理, 主要是去噪处理。然后对处理过的序列针对几何图形模式提取能刻画这些图形的点 (文中主要是极值点) 。最后根据得到的这些点来判断是否符合需要的几何图形。和目前其他研究成果相比主要是在性能上的提高, 时间复杂度能达到 0 (n) 级别。定义 1 股票的时间价格序列: 本文中对此定义是每只股票或者指数每

7、天的收盘价格, 在时间坐标上表现出来就是以时间 (天) 为横轴, 价格或者指数为纵轴。定义 2 股票变化趋势的翻转, 假设 a (i) 为一支股票或者指数第 i 天的收盘价格, a (t) 为一极值点, 在第 t 天之前为上升或者下降趋势, margin 为根据实际需要确定的一个正实数, 则从t +l 开始考容察, 若存在某天 I 使 (a (t)- a (I) ) / a (t) margin(对于第 t 天之前为上升趋势) 或者 (a (I)- a (t) ) / a (t) mar-gin (对于第 t 天之前为下降趋势) , 则称 t 为趋势翻转点。2 从股票时间价格序列中提取特定几何

8、图形 的算法2. 1 时间价格序列的预处理 去噪处理图 l 双顶 图 2 双底 图 3 头肩顶本文中使用的股票的时间价格序列是股票每天的收盘价格。这个序列大致反映了一只股票总体的价格上升或者下降变化趋势, 但也存在噪声, 因为在上升或者下降的时候会有短暂的幅度很小的下降或者上升, 通常叫做窄幅震荡。在股票分析中我们感兴趣的几何图形如双顶 (图 l) , 双底 (图 2) 和头肩顶 (图3) 等有一个重要的共同点就是他们都需要找出股价趋势翻转的点 (即由上涨趋势变为下降趋势或相反) 。噪声会极大地影176 计算机应用与软件2007 年响我们对趋势的判断, 所以为了后续的处理方便, 首先要消除价格

9、时间序列中的噪声。这里假设原始数据为 araw(n) , n =1, 2, 3, 借用图像处理中的平滑线形滤波器, 使用大小为 N 的滤波器 (N 为奇数) , 平滑滤波器的定义为:R (i)=Zi+ N/2I = i- N/2a (i) NZni =1a (i) n但是考虑到我们研究的问题的特殊性需要对这个公式做一些改进, 因为当一点的值和周围几个点的平均值差异超过一定量时可能就有翻转, 这些重要的点不能被平滑处理掉, 所以改进后的定义为:a (i)= a (i)ifa (i)- R (i) / R (i) metrics else a (i)= R (i)这里的 metrics 是一个与翻

10、转定义有关系的正实数, 一般可认为 metrics 等于定义 2 中的 margin。整个预处理过程只需要遍历一次输入的原始数据, 且对每个数据的处理时间为常量, 因为时间复杂度为 0 (n) 。2. 2 对时间价格序列提取特征点从感官上可以看到对于双顶、 双底和头肩顶我们感兴趣的点就是趋势翻转的点, 所以需要做的就是把所有的翻转点找出来。根据趋势翻转点的定义, 其实就是要找出满足一定条件的极值点。在本文的算法中输入为用户指定时间段内股票的所有价格时间序列 a (i) , i = 1, 2, , n, 用户指定的定义 2 中的 margin值, 输出为所有特征点的集合, 即输入序列的一个子序列

11、。提取特征点的算法步骤如下:(1)初始化一些变量 表示是否是上升趋势的布尔变量islncrease 为 false; 表示目前处理过程中还没加入特殊点序列的最大值 upper 和最小值都 lower 初始化为 a (1) ; 表示目前处理过程中还没加入特殊点序列的最大值和最小值的 index 的变量 lo-cation 为 1; 表示输入序列平均值的 average =Zni =1a (i) / n。特殊点的序列 (这里用有序集合表示) result = , 表示当前处理位置的 i =1。(2)遍历所有的输入数据 假设当前点为 a (i) , 如果目前是处于上升趋势, 则比较目前处理的点和 u

12、pper 的大小, 当前点大则将 upper 置为当前点的值: upper = a (i) , 设置 location 变量:location = i; 当前点小则计算 upper 值与当前值的差的绝对值与average 的比值upper - a (i) / average, 如果该比值超过 margin则认为 a (i) 为趋势翻转点, 加入到 result 集合: result = resultUupper; 回到刚加入趋势翻转点开始处理: i = location, 设置 isln-crease 为 false, 表示开始下降趋势; 设置 lower = upper。如果目前是处于下降趋

13、势, 则比较目前处理的点和 lower 的大小, 当前点小则将 lower 置为当前点的值: lower = a (i) , 设置location 变量: location = i; 当前点大则计算 lower 值与当前值的差的绝对值与 average 的比值lower - a (i) / average, 如果该比值超过 margin 则认为 a (i) 为趋势翻转点, 加入到 result 集合:result = resultUlower; 回到刚加入趋势翻转点开始处理: i = loca-tion, 设置 islncrease 为 true, 表示开始上升趋势; 设置 upper = l

14、ow-er。现在对此算法进行时间复杂度分析: 令 I = maX (index f(upper) , index f (lower) ) , index f () 为取该点在价格序列中的序号。整个算法可以看作由 I 和 location 构成滑动窗口从 i 移动到 n, 整个移动过程中 I 始终不会变小, 而 location 只在刚好判断出翻转点的时候由当前位置回到翻转点, 即是在上述算法中设置 i = location 的时候。假设最坏情况, 即每次都是正好在下个翻转点的时候确认当前翻转点, 则 i 移动的总距离为 3*n,即该算法的时间复杂度是 3*n, 为 0 (n) 级别。该算法能快

15、速有效地找到所有的趋势翻转点。2. 3 根据提取出的特征点判断是否存在特定的几何 图形这里介绍双顶的识别算法, 其他图形方法类似。双顶的形成, 是股价上升至首个高峰时, 遭受市场沽盘或获利回吐盘拖累转而向下回落。但当股价回落至某水平, 却吸引趁低吸纳的买盘进场, 带动股价回升。惟在第二次试冲高位期间, 成交量却较上一个高位的为低, 显然市场信心不足, 投资者把握机会趁高卖出, 拖累股价受阻而回落。一般来说要求:(1)后顶不能比前顶高, 且相差 3%以内;(2)左右顶出现的天数相差 10 天以内, 整个双顶周期不超过 150 天;(3)顶和低的差值要在一定范围内 (顶值的 5% 到 30% 之间

16、) ;(4)左顶的上涨起始点小于左顶的一定比例, 同时右顶的下降终止点小于右顶的一定比例 (根据实验定为 93% 效果比较好) 。根据这些条件很容易写出判断双顶是否存在的算法。该算法遍历提取出的整个特征点集合, 找出符合以上条件的点集(双顶由 5 个点构成) , 加入到双顶集合中。输入为特征点集合F (n) , 输出为双顶集合。注意一点, 如果特征点集合中的点数5, 不对其调用此方法, 因为双顶至少要 5 个点才能构成。这部分只需要遍历一次特征点集合, 时间复杂度也为0 (n) 。3 算法的实现及其实验结果分析整个方法在 Windows Xp 系统上用 Java 语言实现。其中用到了 Jfreechart 包来实现时间价格序列曲线的绘制。3. 1 时间价格序列预先处理的结果处理的结果如图 4, 可以看到经过处理以后一些小的噪声都被平滑掉了, 但趋势翻转的点都保存下来, 证明这样的处理达到了预期的效果。图 4 线形平滑处理前后价格时间序列的图形比较3. 2 从时间价格序列中检测双顶的结果本文中对 600618 (氯碱化工)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号