基于 Python 的股票价格序列相似性分析
摘要:本文主要能够根据用户所提供的股票寻找同行业内与其价格序列相似的股票,并能通过其在历史中的重复性对今后的趋势做预测。使用 Python 及相关库,结合动态时间弯曲(DTW)算法,用折线图的方式形象直观地展现出分析结果。
关键字:Python;股票价格序列;相似性;时间动态弯曲法;DTW
研究目的与意义
随着经济的发展,人民生活水平的提高,越来越多的人开始在股票、债券、基金等金融产品中投资理财。其中,股票市场无疑是非常火热的一个地方。如何找到一个好的投资策略无疑是大家最关心的问题。股票之间的关联度非常高,因此股市之间的联动性研究成为了股票市场研究的一个重要内容。股票市场联动性的研究不仅能够帮助投资者分析股票信息、掌握市场动态,还能够协助投资者做出相对正确的投资策略,从而实现收益增加[1]。
证券市场是否有效率,一直是金融理论界和业界关注的问题。1965 年,美国学者尤金·法马提出了“市场有效性假说”(EMH)。在这个假说下,证券市场的有效性是指信息的有效性,也就是说,若“市场内所有证券的价格在任何时候都能准确地反映出所有有关的信息”,则称市场是有效的。从法马提出 EMH 之后的近 40 多年来,市场有效性假说一直是金融学理论的核心命题。按照这一理论,证券市场的许多现象都可以用理性交易者模型来诠释[2]。
本项目基于时间动态弯曲算法(DTW)对股票市场进行分析,得到样本空间中与给定股票同行业内九支最相似的股票序列,并得到此支股票特定时间段的涨跌幅在历史上的可重复性与未来的可预测性,以供投资者做决策参考。
研究内容与方法
时间动态弯曲算法(DTW)
本算法通过动态规划计算两个序列的相似距离,其本质与求解字符串的最长公共子串类似[3]。
dp[i][j]表示序列 a[0:i]和 b[0:j]之间的相似距离的平方,状态转移方程为:
c++
+b[0])2 i=0,j=0
-b[j])2+dp[0][j-1] i=0
-b[0])2+dp[i-1][0] j=0
-b[j])2+min(dp[i-1][j], dp[j-1][i], dp[i-1][j-1]) i,j>0
dp[len(a)-1][len(b)-1]即为两个序列相似距离的平方。
图 1 两序列距离比较 图 2 两序列通过 DTW 比较距离
图 1 中可以直观看出实线与虚线序列相似度很高,距离很小,只是在时间轴上未对齐。若是采用左侧红色的欧氏距离进行计算,显然是不合理的,应采用右侧蓝线进行比较,如图 2 所示即为 DTW 算法找到两个序列波形对齐的点计算距离,可对两个序列可进行错位匹配[4]。
股票序列获取及处理
图 3 算法流程图
由投资者输入特定股票、时间段和分析指标和历史可追溯年数,通过 tushare 的接口获取其每日开盘价、收盘价、最高价、最低价、昨收价,并对每个指标除以第一个值获得其增幅序列,后文简称此增幅序列为序列。假定此股票为 A。
与股票 A 同行业股票分析
通过 tushare 接口筛选与 A 同时间段同行业(industry)的所有序列,并将其写入 database 数据库中的 industry_same 表中,对每一支序列计算其与 A 序列相似距离,取前 9 支距离最小的序列,利用 Python 的 tkinter 窗体展示这 9 支股票名称、对应曲线以供投资者做决策参考。
股票 A 自身涨跌幅的未来预测
通过 tushare 接口将股票 A 从回溯年数前至今的序列写入 database 数据库中的 self_future 表中,采用滚动窗口构建模型计算每一段子序列与 A 序列的相似距离,取前 9 支距离最小的序列,利用 Python 的 tkinter 窗体展示该序列。
数据结果
以平安银行(000001.SZ),日期始末为 2018.9.1~2018.11.1,评价指标收盘价,追溯 5 年为例。
图 4 用户输入界面
图 5 同行业股票绘图
其中蓝线为特定股票 A,红线为筛选出的股票序列
图 6 自身涨跌幅预测绘图
其中蓝线为特定股票 A,红线为股票 A 历史 5 年中与之相近的序列和之后 5 天的序列。
结论
通过图 5 可筛选出与平安银行(000001.SZ)同行业的银行股票中最相近的 9 支,分别是:宁波银行(002141.SZ)、南京银行(601009.SH)、工商银行(601398.SH)、张家港行(002839.SZ)、常熟银行(601128.SH)、江阴银行(002807.SZ)、民生银行(600016.SH)、华夏银行(600015.SH)、苏农银行(603323.SH)。
通过图 6 可知平安银行在 2018.9.1 至 2018.11.1 的收盘价收益率序列后续在 5 年内有 78% 的概率是上涨的,可供投资者做决策参考。
个人体会
通过本项目我不仅对金融中的股票领域有了初步的认知,了解股票分析一般用哪些参数,掌握了两个不同序列求距离可以利用时间动态弯曲算法求解;对 Python 的运用也更加熟练。因为代码量较大,需要及时进行 try、except 检验,如图 7 所示。
图 7 检验程序在每个关键处是否出现异常
总结与反思
本项目我认为还应该完善的是搜索,相似度算法以及存储数据方面的优化。目前时间复杂度较高,后期可将全盘数据提前存入数据库,并运用搜索算法,改进相似度算法以使程序运行更高效,缩短投资者的等待时间。
致谢
感谢华东理工大学信息科学与工程学院提供的“创新实践育人”平台
感谢陈苏老师的悉心指导
参考文献
林星.基于局部相似性分析的股票市场投资策略研究[D].山东:山东大学,2017.
田存志.市场非有效性:基于理性或行为金融学[J].广西社会科学,2004,(4):45-47. DOI:10.3969/j.issn.1004-6917.2004.04.015.
孙宏伟,王会青,张建辉.基于滑动窗口分段的动态时间弯曲下界算法[J].小型微型计算机系统,2016,37(4):768-772.
c++
Wang X, Mueen A, Ding H, et al. Explerimental comparison of representation methods and distance measures foe time series data[J]. Data Mining and Knowledge Discovery, 2013, 26(2):275-309.
参考文献
- 基于Android移动端的优惠券比价系统设计与实现(长安大学·李刚柱)
- 基于Heritrix和Lucene的国内机票比价系统的设计与实现(上海交通大学·李祥仪)
- 基于深度学习的短期股市价格趋势预测研究(兰州大学·覃勉)
- 基于机器学习的股票预测及股票推荐系统的设计与实现(北京交通大学·胡杰)
- 基于node.js的股票行情浏览及分析系统的设计与实现(山东大学·魏榆静)
- 并购重组后公司股票的数据挖掘(西南财经大学·刘荣娜)
- 基于node.js的股票行情浏览及分析系统的设计与实现(山东大学·魏榆静)
- 基于Android移动端的优惠券比价系统设计与实现(长安大学·李刚柱)
- 基于Heritrix和Lucene的国内机票比价系统的设计与实现(上海交通大学·李祥仪)
- 基于机器学习的A股市场统计套利溢价研究(上海财经大学·曾毅)
- 基于深度学习的科创板股票价格预测系统的设计与实现(北京邮电大学·王鹏飞)
- 基于Android移动端的优惠券比价系统设计与实现(长安大学·李刚柱)
- 融合知识图谱和情感分析的股价预测模型(华东师范大学·熊浩博)
- 基于多类特征的股票走势预测及推荐系统(哈尔滨工业大学·魏侨池)
- 基于股票数据流和投资者情绪的股价预测系统的设计与实现(华南理工大学·陈泽铭)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码驿站 ,原文地址:https://bishedaima.com/yuanma/36093.html