假设给出某股某段行情K线(单位/日),从任何其他股票历史中匹配出与之最为相似的某段历史K线,并给出相似度值(单位/%),并以此排序,获取最为相似的N个结果。
我们可以使用k线的距离以及股票日回报的相关性来衡量k线相似度,使用
Tushare提供的沪深股票2008年到2017年的日线行情数据来做实验。如何把Tushare数据导入到DolphinDB可以参考教程
如何使用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日的日线行情数据加载到内存。
把股票数据加载到内存中。
1.使用k线的距离衡量相似度
两段k线之间的距离可以用股票日回报的差的平方和来计算。距离越小表示k线的相似度越高。
上面代码使用的moving是DolphinDB的模板函数,表示在大小为num,边界为beginDate和endDate的滚动窗口中计算两段k线之间的距离。square_sum{edifier.pct_change}是DolphinDB中的部分应用,用于固定函数的部分参数。找出与漫步者2016年9月1日到2016年9月30日最为相似的10段历史k线。
定义一个函数getReturn,取出相似股票在beginDate和endDate之间的日回报。
把每只相似股票的日回报数据保存到同一个回报矩阵中,每列表示一只股票在相应时间段中的日回报,并使用图表展示。
上面的代码通过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线相似度很好的指标。
找出与漫步者2016年9月1日到2016年9月30日最为相似的10段历史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