有网友提问应该用什么样的数据库/数据结构/算法来计算某支股票的相似K线? 具体的问题描述是,假设给出某股某段行情K线(单位/日),从任何其他股票历史中匹配出与之最为相似的某段历史K线,并给出相似度值(单位/%),并以此排序,获取最为相似的N个结果。

我们可以使用k线的距离以及股票日回报的相关性来衡量k线相似度,使用Tushare提供的沪深股票2008年到2017年的日线行情数据来做实验。如何把Tushare数据导入到 DolphinDB database 可以参考教程如何使用DolphinDB处理Tushare金融数据。

Tushare提供的沪深股票日线行情数据包含以下字段:

名称          描述
ts_code         股票代码
trade_date  交易日期
open            开盘价
high            最高价
low         最低价
close           收盘价
pre_close   昨收价
change          涨跌额
pct_change  涨跌幅
vol         成交量(手)
amount          成交额(千元)

下面将以漫步者(股票代码为002351.SZ)为例,介绍如何在历史数据中,找出与漫步者2016年9月1日到2016年9月30日最为相似的10段历史k线。

首先,把漫步者2016年9月1日到2016年9月30日的日线行情数据加载到内存。

code="002351.SZ"//漫步者
edifier=select * from loadTable("dfs://daily_line","hushen_daily_line") where ts_code=code,date(trade_date) between 2016.09.01:2016.09.30

把股票数据加载到内存中。

num=exec count(*) from edifier
stock=select * from loadTable("dfs://daily_line","hushen_daily_line")

1.使用k线的距离衡量相似度

两段k线之间的距离可以用股票日回报的差的平方和来计算。距离越小表示k线的相似度越高。

def square_sum(x,y):sum2(x-y)
corrTable1=select ts_code,move(date(trade_date),num-1)as beginDate,date(trade_date) as endDate,moving(square_sum{edifier.pct_change},pct_change,num) as distance from stock context by ts_code

上面代码使用的moving是DolphinDB的模板函数,表示在大小为num,边界为beginDate和endDate的滚动窗口中计算两段k线之间的距离。square_sum{edifier.pct_change}是DolphinDB中的部分应用,用于固定函数的部分参数。

找出与漫步者2016年9月1日到2016年9月30日最为相似的10段历史k线。

mostCorrelated1=select * from corrTable1 where isValid(distance),rank(distance,true) between 0:10 order by distance
ts_code         beginDate   endDate         distance
300073.SZ   2016.08.02  2016.08.29  67.024
600995.SH   2017.07.06  2017.08.02  70.8713
600549.SH   2010.12.17  2011.01.14  73.514
600627.SH   2008.07.07  2008.08.07  73.59
600367.SH   2010.12.17  2011.01.14  76.447
600867.SH   2011.07.28  2011.08.24  76.5449
002253.SZ   2010.05.21  2010.06.22  79.2845
002382.SZ   2015.01.06  2015.02.02  79.5101
300266.SZ   2014.07.07  2014.09.17  80.1772
600706.SH   2017.06.05  2017.07.14  80.5079

定义一个函数getReturn,取出相似股票在beginDate和endDate之间的日回报。

def getReturn(t, row): exec pct_change/100 from t where ts_code= row.ts_code, date(trade_date) between row.beginDate : row.endDate

把每只相似股票的日回报数据保存到同一个回报矩阵中,每列表示一只股票在相应时间段中的日回报,并使用图表展示。

retMatrix1 = each(getReturn{stock}, mostCorrelated1).rename!(mostCorrelated1.ts_code)
plot(retMatrix1,,"使用最短k线距离找出相似历史k线") 

上面的代码通过each模板函数取出最相似的10只股票的日回报,并以股票代码来命名每一列。

使用最短k线距离计算出来的股票包含当升科技(30073.SZ)、文山电力(600995.SH)、厦门钨业(600549.SH)、上电股份(600627.SH)、红星发展(600367.SH)、通化东宝(600867.SH)、川大智胜(002253.SZ)、蓝帆医疗(002382.SZ)、兴源环境(300266.SZ)和曲江文旅(600706.SH)。

2.使用股票日回报相关性衡量相似度

股票日回报的相关性是衡量k线相似度很好的指标。

corrTable2=select ts_code,move(date(trade_date),num-1)as beginDate,date(trade_date) as endDate,moving(corr{edifier.pct_change},pct_change,num) as corr from stock context by ts_code

找出与漫步者2016年9月1日到2016年9月30日最为相似的10段历史k线。

mostCorrelated2=select * from corrTable2 where rank(corr,false) between 0:10 order by corr desc
ts_code         beginDate   endDate         corr
600367.SH   2010.12.17  2011.01.14  0.8824
600549.SH   2010.12.17  2011.01.14  0.8806
300073.SZ   2016.08.02  2016.08.29  0.8749
002294.SZ   2014.02.26  2014.03.25  0.8729
600995.SH   2017.07.06  2017.08.02  0.8723
600486.SH   2010.12.17  2011.01.14  0.8721
002382.SZ   2015.01.06  2015.02.02  0.8718
002253.SZ   2010.05.21  2010.06.22  0.8708
000939.SZ   2008.03.21  2008.04.18  0.8706
600627.SH   2008.07.07  2008.08.07  0.8692

同样地,把相似股票的日回报数据保存到回报矩阵中。

retMatrix2 = each(getReturn{stock}, mostCorrelated2).rename!(mostCorrelated2.ts_code)
plot(retMatrix,,"使用股票日回报相关性找出相似历史k线") 

使用股票日回报相关性计算出来的股票包含红星发展(600367.SH)、厦门钨业(600549.SH)、当升科技(300073.SZ)、信立泰(002294.SZ)、文山电力(600995.SH)、扬农化工(600486.SH)、蓝帆医疗(002382.SZ)、川大智胜(002253.SZ)、凯迪生态(000939.SZ)和上电股份(600627.SH)。

3.性能分析

我们使用的是沪深股票2008年到2017年的日线行情数据,共530万的数据。使用第一种方法仅需7秒,使用第二种方法仅需3秒,性能极佳。

欢迎访问官网下载 DolphinDB database

联系邮箱:info@dolphindb.com

ccxt k线数据_寻找相似的历史k线相关推荐

  1. ccxt k线数据_机器学习系列:深度探秘K线结构新维度

    标星★公众号,第一时间获取最新研究 来源:光大证券金工团队独家授权 作者:胡骥聪 近期原创文章: ♥ 基于无监督学习的期权定价异常检测(代码+数据) ♥ 5种机器学习算法在预测股价的应用(代码+数据) ...

  2. 海量数据寻找最频繁的数据_寻找数据科学家的“原因”

    海量数据寻找最频繁的数据 Start with "Why" - Why do we do the work we do? 从"为什么"开始-我们为什么要做我们所 ...

  3. 如何用数据库寻找相似的历史k线

    有网友提问应该用什么样的数据库/数据结构/算法来计算某支股票的相似K线?具体的问题描述是,假设给出某股某段行情K线(单位/日),从任何其他股票历史中匹配出与之最为相似的某段历史K线,并给出相似度值(单 ...

  4. 一分钟学会看k线图_一分钟学会看k线图(12种阳线阴线图解)

    第一,K线图是股票价格变化的表现形式 投资者关注一只股票,肯定是要了解这只股票过去一段时间的价格变化的,而K线图表现的就是股票价格的变化情况.所以K线图本质上是方便投资者了解股票价格变化的一种工具. ...

  5. fr4走线宽度_如何调整PCB中走线宽度的大小

    铜是一种具有高熔点的强导体,但您仍应尽力保持低温.在这里,您需要适当调整走线宽度的大小,以将温度保持在一定范围内.但是,这是您需要考虑给定走线中流动的电流的地方.当使用电源轨,高压组件以及电路板的其他 ...

  6. 上证指数30年k线图_寻找上证指数二十年K线图的规律

    打开上证指数二十年来的K线图可以发现如下规律性的走势: 1.1993年2月创第一新高后,调整下跌有三个低点,即三只脚.低点时间从1994年7月至1996年1月,期间虽有反弹,但高点一次比一次低,持续了 ...

  7. python获取币安k线数据_如何利用Python 爬取币乎的数据

    1LSGO软件技术团队 贡献人:李金原 如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习. If you like the content here, the gre ...

  8. python k线图_如何用python画K线图(成交量+MACD+KDJ)

    最近一直在研究股票的形态,一些量化的东西,虽然量化听起来很高大上,通寻找到一个策略,通过程序的手段去找到这样一批股票,避免了人为的因素在其中.这样有个问题就是,程序选出来的股票太机械了,某个参数或条件 ...

  9. ts获取服务器数据_基于Nginx的媒体服务器技术-线上公开课

    国内应用比较多的开源流媒体服务器nginx-rtmp-module一直存在功能少.集群化难度大等问题.在LiveVideoStack线上分享中,PingOS 开源项目组开发工程师.UCloud RTC ...

最新文章

  1. 使用VM虚拟机的一点小技巧
  2. dobbo 管理端端口_安装 Dubbo 管理控制台
  3. 谈C++求a+b(大神勿喷)
  4. python操作hbase配置记录-基于thrift2协议
  5. 设计师电脑推荐笔记本_笔记本电脑选购推荐全攻略
  6. Hibernate自动提交命令强制MySQL在过多的磁盘I / O中运行
  7. 大厂面试必问!50w字+的Java技术类校招面试题汇总
  8. Day 3 网络基础
  9. HDU 4786 生成树 并查集+极大极小值 黑白边 确定选择白边的数量
  10. 极大似然估计_一文理解机器学习中的极大似然估计(MLE)
  11. 犀牛6.0grasshopper翻译插件_Rhino 6.0犀牛三维建模 软件下载安装包教程(附下载方法)...
  12. 史上最通俗易懂的YOLOv2讲解
  13. html黑洞效果,HTML5+Canvas的黑洞特效
  14. 服务器2008系统设置密码,win2008服务器设置密码
  15. 《CSDN排行榜冲榜攻略》妙用Emoji表情符号读者提升阅读体验(编码表)
  16. php 邮件群发功能,php实现邮件群发
  17. 加速 SpringBoot 应用开发,官方热部署神器真带劲
  18. Java中的动态代理详解
  19. 使用 eBPF 和 XDP 高速处理数据包
  20. ECharts3 实现动态数据累积图

热门文章

  1. [渝粤教育] 西南科技大学 西方经济学 在线考试复习资料
  2. 1839行政领导学 (2)
  3. linux 下 storm环境搭建,Storm在Ubuntu环境下的单机部署
  4. echart 折线从左到右动画效果_echarts之自动切换折线图
  5. 控制计算机价格,本人对电脑不太懂。想十一买台笔记本电脑。价格控制在5000之内。请高手指点一下。谢谢!...
  6. c语言中系统函数设定像素,在imag中对每个像素应用自定义函数的快速方法
  7. java调用php session_php读取memcahed java session
  8. Java实现复数Complex的加减乘除运算、取模、求幅角角度
  9. 7 centos 查看程序文件数量_CentOS之使用Systemd添加自定义系统服务
  10. win7计算机管理找不到文件夹,Win7系统打开组策略提示找不到文件gpedit.msc怎么办...