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

有网友提问应该用什么样的数据库/数据结构/算法来计算某支股票的相似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只股票的日回报,并以股票代码来命名每一列。

08de4ef6f78f85fbf286995f48a957c1.png

使用最短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线") 

87079df5a4664c3f5b64999841c301e6.png

使用股票日回报相关性计算出来的股票包含红星发展(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k均值例子 数据挖掘_数据挖掘的技术有很多种,常用的数据挖掘技术就这13种...

数据挖掘就是从大量的、不完全的、有噪声的、模糊的、随机的数据中,提取隐含在其中的、人们事先不知道的但又是潜在有用的信息和知识的过程。数据挖掘的任务是从数据集中发现模式,可以发现的模式有很多种,按功能可以分为两大类:预…

【TypeScript系列教程05】保留关键字

目录 TypeScript 保留关键字 TypeScript 保留关键字 TypeScript 保留关键字如下表所示:

中国剩余定理 互质与非互质版本

中国剩余定理互质版 设m1,m2,m3,...,mk是两两互素的正整数,即gcd(mi,mj)1,i!j,i,j1,2,3,...,k. 则同余方程组: x a1 (mod n1) x a2 (mod n2) ... x ak (mod nk) 模[n1,n2,...nk]有…

aix 的c库为什么都是静态库_卢卡库:若梅罗、莱万都在努力突破极限,为什么我不能做到呢...

直播吧12月8日讯 北京时间周四凌晨的欧冠小组赛末轮比赛,国米将在主场迎战顿涅茨克矿工。目前,蓝黑军团依然保留着些许出线希望。在这场比赛之前,国米射手卢卡库接受了《法国足球》的采访,他谈论了和孔蒂的关系、和劳塔罗的搭档以…

便携式不锈钢管道焊接机器人_304不锈钢管居然可以发黑?

大家好,我是圣联达不锈钢管材管件孙立成。今天有伙伴们问我,自己使用的304不锈钢管表面怎么发黑了。带着这个问题,今天我特意去梳理了有关304发黑的缘故及其解决方法。304不锈钢管实际上按照正常生产流程,好的304不锈钢管加工制做…

jrockit_Java堆空间– JRockit和IBM VM

jrockit本文将为您提供JRockit Java堆空间与HotSpot VM的概述。 它还将为您提供有关JRockit和HotSpot的Oracle未来计划的一些背景知识。 Oracle JRockit VM Java堆:2个不同的内存空间 -Java堆(YoungGen和OldGen) -本机内存空间(…

检验例题_高考必考|化学工艺流程之物质的分离提纯及检验鉴别,轻松拿分

嗨,小器来喽!今天给大家带来的资料依旧是化学的工艺流程的相关知识,因为小器知道在这部分内容中大家是很容易丢分的,都是基础知识不扎实的原因,所以给大家的资料都是从易到难的安排还有专属高考相关例题,简…

三态门三个状态vhdl_温故知新,高阻态和三态门

欢迎FPGA工程师加入官方微信技术群高阻态高阻态这是一个数字电路里常见的术语,指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果…

口译员设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查看 ! 目录 …

「Unity」UGUI的Text实现首行缩进的办法

我的Unity版本:5.3.5f1 直接说正事 Unity的Text组件,想实现代码拿到一段话,在前面加个缩进,让之后的字符依次后移。 有人觉得很简单,然后就这样写了: 但是尝试过的人就会发现,如果用代码在最前…

在Eclipse中配置Tomcat7.0

为了在Eclipse中进行struts2的测试,才发现自己机器上的Eclipse没有集成Tomcat,在网上找了半天,不是这个插件没有下载地址,就是那个有好多注意事项或者版本问题。结果,自己到tomcatforEclipse的插件的网上直接下载了一个,按照提供的…

Datepicker

本文翻译自官网: https://angular-ui.github.io/bootstrap 目录: 1. DatePicker 2. DatePicker popup 一、DatePicker https://angular-ui.github.io/bootstrap/#/datepicker 1. 三种模式 Datepicker是灵活,完全可定制的。它有3种模式&#…

cobertura 使用_使用Cobertura,JUnit,HSQLDB,JPA涵盖您的测试

cobertura 使用你好!你好吗? 今天让我们谈谈一个非常有用的工具,名为“ Cobertura”。 该框架与我们在另一篇文章中看到的Emma框架具有相同的功能。 Cobertura和Emma之间的主要区别在于Cobertura显示带有图形的简历页面。 如果要查看有关此…

摇杆控制方向原理_图文全面讲解多种方向控制阀的原理和区别....

液压阀是用来控制液压系统中油液的流动方向或调节其流量和压力的。方向控制阀作为液压阀的一种,利用流道的更换控制着油液的流动方向单向型方向控制阀是只允许气流沿一个方向流动的方向控制阀,如单向阀、梭阀、双压阀等换向型方向控制阀是可以改变气流流…

原型设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查看 ! 目录 …

laravel 控制器中使用中间件_在 Laravel 中使用 Slack 进行异常通知

php中文网最新课程每日17点准时技术干货分享异常处理是软件开发过程中无法逃避的问题。对于一套设计良好代码高效的程序,出现异常的可能性会比较低,但这并不意味着不会出现异常,有些异常甚至会引起严重的后果,所以如何及时的发现程序中的异常…

[转]ListView学习笔记(一)——缓存机制

要想优化ListView首先要了解它的工作原理,列表的显示需要三个元素:ListView、Adapter、显示的数据; 这里的Adapter就是用到了适配器模式,不管传入的是什么View在ListView中都能显示出来。 下面简单说下上图的原理: 1、…

golang反编译_【Golang】脱胎换骨的defer(一)

Go语言的defer是一个很方便的机制,能够把某些函数调用推迟到当前函数返回前才实际执行。我们可以很方便的用defer关闭一个打开的文件、释放一个Redis连接,或者解锁一个Mutex。而且Go语言在设计上保证,即使发生panic,所有的defer调…

cad填充图案乱理石_CAD软件中如何自定义CAD填充图案?

在使用浩辰CAD软件绘制完成图纸后,发现自己绘制的CAD图纸没有做好区域分割,显得特别乱。这个时候该怎么办呢?快试试CAD填充图案吧!接下来就由小编来给大家介绍一下浩辰CAD软件中自定义CAD填充图案的操作教程吧!浩辰CAD…

单例设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查看 ! 目录 …