有网友提问应该用什么样的数据库/数据结构/算法来计算某支股票的相似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

如何用数据库寻找相似的历史k线相关推荐

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

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

  2. 如何用Python从IEX下载日内K线数据

    您是否正在寻找一种免费获取股票日内K线的方法?使用这些数据,可以在本地回测交易策略和训练机器学习模型. 本文将向您展示如何从IEX交易所下载免费的日内数据.IEX是美国的证券交易所,交易股票的数量超过 ...

  3. 股票历史K线行情接口数据获取资源分享

    •米筐:股票.ETF.可转债.指数.期货.期权.复权因子等非常齐全,基本可以满足日常研究使用 •掘金量化:支持1分钟整数倍的历史K线行情 •akshare:获取复权日K线数据后进行自加工计算复权因子 ...

  4. 基于历史K线数据比较的量化选股方法及其系统分享

    第0章 引言 最近量化交易火起来了. 前段时间看了一本书<乌合之众>,讲的是大众心理学.其实股市的本质就是大众心理博弈,通过买卖行为对外表现出股价的涨跌,股价波动反映的是一段时间内股市中的 ...

  5. 上证指数30年k线图_上证指数历史k线图_k线图24种经典图解

    上证指数季度k线图 400x296 - 90KB - JPEG 戴若顾比:上证指数寻找新的支撑_股市及时雨 550x341 - 25KB - JPEG 上证综指周K线图 300x232 - 16KB ...

  6. 如何用Python的pyecharts库绘制K线图

    01 K线图 一.概念 股市及期货市场中的K线图的画法包含四个数据,即开盘价.最高价.最低价.收盘价,所有的K线都是围绕这四个数据展开,反映大势的状况和价格信息.如果把每日的K线图放在一张纸上,就能得 ...

  7. 无限易量化快速获得历史K线数据 策略开发

    无限易快速获得30分钟K线的历史数据 # encoding: UTF-8""" 作者:leo 微信:470770753 """ from _ ...

  8. DDE简单实现动态数据交换 仅能获取实时tick数据,无法获取历史K线

    首先 MT4就运用DDE让自己成为服务端,程序可利用DDE获取MT4的外汇报价数据实现实时更新. 先下载MT4运行,设置工具-选项-勾选启用为DDE服务器 然后用C# 实现获取行情数据 static ...

  9. k线形态python_如何用Python量化“相似K线”实现形态选股?

    (文章转载自公众号 MindGo量化平台, 作者 陈城) 导读:"历史会重演"是技术分析的三大假设之一,市场行为与投资者心理有着千丝万缕的联系.比如价格形态,它们通过一些特定的价格 ...

最新文章

  1. ubuntu下配置华为交换机s2016
  2. 面向对象软件设计的“开—闭”原则
  3. oracle spa sta 使用,Oracle的SQL Tuning Advisor(STA) 到底做了什么?
  4. 使用过滤器模式,让客户关怀中的代码更加干净整洁
  5. IOS开发基础篇 -- 分类、类别
  6. 燕山大学数字通信计算机仿真代码,燕山大学数字通信计算机仿真课程设计模板.doc...
  7. ICCV2021 香港理工、阿里达摩院提出RealVSR:视频超分任务中的新数据集与损失方案...
  8. 最详细的SLAM综述
  9. Httpclient处理摘要认证
  10. c3p0-0.9.1.2.jar
  11. 模板引擎 Velocity
  12. java 状态常量_Java 变量和常量
  13. 详解-黑莓7290激活教程
  14. 《光剑文集》青玉案: 27首
  15. POJ1328(贪心)题解
  16. 冬日魔幻之旅-seata+dubbo+nacos+springboot解决分布式事务的全网段唯一实践之作(上)
  17. GGS-DDU(最小树形图)
  18. 怦然心动(Flipped)-5
  19. 1 人抵 1 万名黑客的阿里女守护神,私底下竟然是这个样子!
  20. 网易云音乐 2.1.0

热门文章

  1. 集电极开路漏极开路推挽输出
  2. 采用数据分析利用加速度计进行电梯速度估算之模型建立
  3. 隐私计算 — 区块链 — Overview
  4. zuul设置熔断、断路器
  5. unittest + HTMLTestRunner
  6. 【朴素贝叶斯】深入浅出讲解朴素贝叶斯算法(公式、原理)
  7. 内蒙古经贸学校计算机专业,内蒙古经贸学校招生专业|内蒙古经贸学校有哪些专业...
  8. 愚人节搞怪——突破IP限制刷票
  9. .pth转.weights/openCV-python + YOLO v3实现目标检测
  10. python爬虫之反爬虫情况下的煎蛋网图片爬取初步探索