ccxt k线数据_寻找相似的历史k线
有網(wǎng)友提問應(yīng)該用什么樣的數(shù)據(jù)庫/數(shù)據(jù)結(jié)構(gòu)/算法來計算某支股票的相似K線? 具體的問題描述是,假設(shè)給出某股某段行情K線(單位/日),從任何其他股票歷史中匹配出與之最為相似的某段歷史K線,并給出相似度值(單位/%),并以此排序,獲取最為相似的N個結(jié)果。
我們可以使用k線的距離以及股票日回報的相關(guān)性來衡量k線相似度,使用Tushare提供的滬深股票2008年到2017年的日線行情數(shù)據(jù)來做實驗。如何把Tushare數(shù)據(jù)導(dǎo)入到 DolphinDB database 可以參考教程如何使用DolphinDB處理Tushare金融數(shù)據(jù)。
Tushare提供的滬深股票日線行情數(shù)據(jù)包含以下字段:
名稱 描述 ts_code 股票代碼 trade_date 交易日期 open 開盤價 high 最高價 low 最低價 close 收盤價 pre_close 昨收價 change 漲跌額 pct_change 漲跌幅 vol 成交量(手) amount 成交額(千元)下面將以漫步者(股票代碼為002351.SZ)為例,介紹如何在歷史數(shù)據(jù)中,找出與漫步者2016年9月1日到2016年9月30日最為相似的10段歷史k線。
首先,把漫步者2016年9月1日到2016年9月30日的日線行情數(shù)據(jù)加載到內(nèi)存。
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把股票數(shù)據(jù)加載到內(nèi)存中。
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的模板函數(shù),表示在大小為num,邊界為beginDate和endDate的滾動窗口中計算兩段k線之間的距離。square_sum{edifier.pct_change}是DolphinDB中的部分應(yīng)用,用于固定函數(shù)的部分參數(shù)。
找出與漫步者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定義一個函數(shù)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把每只相似股票的日回報數(shù)據(jù)保存到同一個回報矩陣中,每列表示一只股票在相應(yīng)時間段中的日回報,并使用圖表展示。
retMatrix1 = each(getReturn{stock}, mostCorrelated1).rename!(mostCorrelated1.ts_code) plot(retMatrix1,,"使用最短k線距離找出相似歷史k線")上面的代碼通過each模板函數(shù)取出最相似的10只股票的日回報,并以股票代碼來命名每一列。
使用最短k線距離計算出來的股票包含當升科技(30073.SZ)、文山電力(600995.SH)、廈門鎢業(yè)(600549.SH)、上電股份(600627.SH)、紅星發(fā)展(600367.SH)、通化東寶(600867.SH)、川大智勝(002253.SZ)、藍帆醫(yī)療(002382.SZ)、興源環(huán)境(300266.SZ)和曲江文旅(600706.SH)。
2.使用股票日回報相關(guān)性衡量相似度
股票日回報的相關(guān)性是衡量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同樣地,把相似股票的日回報數(shù)據(jù)保存到回報矩陣中。
retMatrix2 = each(getReturn{stock}, mostCorrelated2).rename!(mostCorrelated2.ts_code) plot(retMatrix,,"使用股票日回報相關(guān)性找出相似歷史k線")使用股票日回報相關(guān)性計算出來的股票包含紅星發(fā)展(600367.SH)、廈門鎢業(yè)(600549.SH)、當升科技(300073.SZ)、信立泰(002294.SZ)、文山電力(600995.SH)、揚農(nóng)化工(600486.SH)、藍帆醫(yī)療(002382.SZ)、川大智勝(002253.SZ)、凱迪生態(tài)(000939.SZ)和上電股份(600627.SH)。
3.性能分析
我們使用的是滬深股票2008年到2017年的日線行情數(shù)據(jù),共530萬的數(shù)據(jù)。使用第一種方法僅需7秒,使用第二種方法僅需3秒,性能極佳。
歡迎訪問官網(wǎng)下載 DolphinDB database
聯(lián)系郵箱:info@dolphindb.com
總結(jié)
以上是生活随笔為你收集整理的ccxt k线数据_寻找相似的历史k线的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【TypeScript系列教程14】Ar
- 下一篇: k均值例子 数据挖掘_数据挖掘的技术有很