我们可以使用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日的日线行情数据加载到内存。
- 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
- mostCorrelated1=select * from corrTable1 where isValid(distance),rank(distance,true) between 0:10 order by distance 1:10
- 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
- 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线")
使用最短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
- 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


雷达卡


京公网安备 11010802022788号







