本發(fā)明涉及股票數(shù)據(jù)挖掘技術(shù)領(lǐng)域,尤其是涉及一種基于同匹配日期相似走勢的股票預(yù)測方法。
背景技術(shù):
股票市場是證券業(yè)和金融業(yè)必不可少的重要組成部分,受到投資者的普遍關(guān)注。有效的股票預(yù)測在金融投資領(lǐng)域占有重要地位,因此對股票價格進行分析和預(yù)測有著非常重大的理論意義和實踐價值。
股票價格呈波動狀態(tài),在短期內(nèi)看似無序,但其波動在長時間序列中卻有著一定的規(guī)律,即一定的趨勢性。股票價格變化受到政治、金融狀況、用戶心理等多種因素的影響,其變化具有非線性、突變性、隨機性等特點,是一種復(fù)雜的非線性系統(tǒng)。
隨著股市的發(fā)展,以及對于股市規(guī)律認識的加深,人們提出各種各樣的股市預(yù)測方法,比較常用的方法有回歸分析、灰色系統(tǒng)分析、時間序列分析, 神經(jīng)網(wǎng)絡(luò)、支持向量機等,這些預(yù)測方法都在一定程度上揭示了股市的運行規(guī)律,但應(yīng)用效果并不理想。
技術(shù)實現(xiàn)要素:
本發(fā)明公開了一種基于同匹配日期相似走勢的股票預(yù)測方法。其主要思想是:對于待預(yù)測的股票,取其近期一段時間的漲跌幅走勢,將該走勢與所有股票的歷史數(shù)據(jù)走勢進行逐一匹配,首先得到與每只股票最相似趨勢匹配的交易日期;其次對所有的匹配交易日期進行次數(shù)的統(tǒng)計,獲取次數(shù)最多的同匹配日期;然后在具有同匹配日期的相似的股票走勢里,獲取相似度最高的前幾只股票走勢;最后以最相似股票在同匹配日期之后的走勢進行統(tǒng)計和還原計算出預(yù)測的走勢。方法即可用于近期的預(yù)測,也可用于短期的預(yù)測,可為股票短線操作提供決策支持。
這里近期預(yù)測是指1~5個交易日的預(yù)測,如1日預(yù)測、2日預(yù)測、3日預(yù)測;短期預(yù)測是指20~60個交易日的預(yù)測,如20日預(yù)測,30日預(yù)測,60日預(yù)測等。
本發(fā)明方法的步驟如下:
(1) 對所有股票數(shù)據(jù)進行預(yù)處理;
(2) 加載待預(yù)測股票的數(shù)據(jù)和所有股票的待匹配歷史數(shù)據(jù);
(3) 將待預(yù)測股票與所有的股票進行移動加權(quán)匹配;
(4) 根據(jù)與每只股票的匹配日期進行分類統(tǒng)計并排序,得到次數(shù)統(tǒng)計值最大的同匹配日期;
(5) 在同匹配日期的相似股票里面,獲取最相似的前幾只股票的匹配段;
(6) 以最相似股票在同匹配日期之后的走勢進行統(tǒng)計和還原計算出待預(yù)測股票的后期走勢。
其中,步驟(1)中的預(yù)處理包括兩類:一是對所有股票的每日的開盤價、最高價、最低價相對于當(dāng)天收盤價計算增減幅度;二是對所有股票當(dāng)日的成交量、換手率等計算相對于前一交易日的增減幅度。
其中,步驟(2)中的待預(yù)測股票的數(shù)據(jù)加載,是指獲取待預(yù)測股票的近L個交易日的漲跌幅數(shù)據(jù),一般L的取值要求大于20;所有股票待匹配歷史數(shù)據(jù)的加載是指獲取每只股票某個時間點以來(如2005年1月1日),到當(dāng)前交易日的前L個交易日的數(shù)據(jù),包括漲跌幅和對應(yīng)的交易日期。
其中,步驟(3)中,待預(yù)測股票與所有的股票進行移動加權(quán)匹配是指將待預(yù)測股票長度L的漲跌幅數(shù)據(jù)段與每只股票的歷史數(shù)據(jù)等長的走勢片段逐一進行移動匹配。匹配過程考慮各種因素,包括對位置加權(quán)和對同向性進行加權(quán)。與每只股票移動匹配后,獲取最小的匹配值和對應(yīng)位置的匹配日期。
其中,步驟(4)中,根據(jù)待預(yù)測股票與每只股票的匹配日期進行分類統(tǒng)計,目的在于獲取與待預(yù)測股票匹配在同一日期的股票數(shù)量。對日期統(tǒng)計量進行排序后,獲取次數(shù)統(tǒng)計值最大的同匹配日期。
其中,步驟(5)中,在同匹配日期的前提下,提取出相似的股票段,在這些相似的股票段里面,根據(jù)原先已經(jīng)計算好的匹配值進行從小到大排序后,獲取最相似的前幾只股票的匹配段。
其中,步驟(6)中,基于相似匹配段和同匹配日期,進行待預(yù)測股票后期走勢的生成。首先需要獲取同匹配日期的相似股票之后的后期走勢數(shù)據(jù),包括漲跌幅和步驟1已經(jīng)計算的增減幅度各變量。其次需要獲取待預(yù)測股票當(dāng)前交易日的數(shù)據(jù),包括當(dāng)日的收盤價,以及在步驟1中有計算相對量的原始字段。最后以待預(yù)測股票的當(dāng)前交易日的數(shù)據(jù)作為“前一交易日”基準數(shù)據(jù),嫁接相似股票匹配日期后的走勢數(shù)據(jù),計算還原成待預(yù)測股票的走勢數(shù)據(jù)。
附圖說明
圖1 是本發(fā)明基于同匹配日期相似走勢股票預(yù)測方法的流程圖。
圖2 是基于本發(fā)明方法輸出的某一股票短期走勢的預(yù)測結(jié)果。
圖3 是基于本發(fā)明方法輸出的某一股票近期預(yù)測結(jié)果。
圖2和圖3結(jié)果的參數(shù)取值為:待匹配股票段的長度L=30;短期預(yù)測交易日數(shù)N=30;近期預(yù)測交易日數(shù)R=3。圖2虛線之后為預(yù)測結(jié)果,包括每日收盤價、開盤價、最高價、最低價、漲跌幅、成交量等方面的預(yù)測。圖3預(yù)測結(jié)果包括近3天的可能漲跌幅和可能漲跌概率。
具體實施方式
下面結(jié)合附圖和實例,對本發(fā)明進行詳細的描述。
假設(shè)股票列表為S,S=[S1, S2,…,Si,…,Sn],n為股票池中股票的數(shù)量,如中國上市股票的數(shù)量或美國上市股票的數(shù)量。對于每只股票,假設(shè)待預(yù)測的股票為Sm,m=1,…,n 具體預(yù)測步驟如下。
一、股票數(shù)據(jù)預(yù)處理。
假設(shè)對于股票列表S中的每只股票有如下數(shù)據(jù)字段:開盤價Open,收盤價Close, 最高價High,最低價Low,漲跌幅Change,成交量Volume,換手率Turnover等,其中收盤價Close為前復(fù)權(quán)價格。
1.1計算相對于當(dāng)天收盤價Close的增減幅度,并添加新字段。需要計算的字段包括開盤價Open、最高價High和最低價Low,具體如下:
開盤價增減幅度StdOpen= 100*(Open-Close)/Close;
最高價增減幅度StdHigh= 100*(High-Close)/Close;
最低價增減幅度StdLow= 100*(Low-Close)/Close。
1.2計算相對前一交易日的增減幅度,并添加新字段。需要計算的字段包括成交量Volume和換手率Turnover, 具體如下:
成交量增減幅度StdVolume= 100*(Volume- lastVolume)/ lastVolume, 其中, lastVolume代表前一交易日的成交量;
換手率增減幅度StdTurnover= 100*(Turnover- lastTurnover)/ lastTurnover, 其中, lastTurnover代表前一交易日的換手率。
如果有其他字段需要預(yù)測,如成交筆數(shù)、成交金額等,可類似計算出對應(yīng)的相對值,添加相應(yīng)的字段。計算所得相對值將在本方法的最后一步中使用。
二、股票數(shù)據(jù)的加載。
該步驟主要完成數(shù)據(jù)的準備過程,從原始股票數(shù)據(jù)庫中獲取待預(yù)測股票的近期交易日數(shù)據(jù)和待匹配的股票的歷史交易日數(shù)據(jù)。
2.1 獲取待預(yù)測股票Sm的近L個交易日的漲跌幅數(shù)據(jù),形成一個數(shù)組,記為A,
A=[a1,a2,…,ai,…aL]
其中,ai代表近L-i的交易日的漲跌幅。a0代表當(dāng)前交易日的漲跌幅。L的取值至少得符合短期預(yù)測交易日的要求,如>=20。
2.2 對S中的每只股票,獲取某個時間點以來(如2005年1月1日),到當(dāng)前交易日的前L個交易日的數(shù)據(jù),形成另一個數(shù)組,記為Bi,i=[1,n],
Bi=[bi1,bi2,…,bij,…bik]
其中,bij代表第i只股票的j位置對應(yīng)交易日的漲跌幅。每個Bi的長度k是不一定相等的,因為股票中間有停牌等因素的影響。
同時記錄bij的交易日期,記為另一數(shù)組Ci,i=[1,n],
Ci=[ci1,ci2,…,cij,…cik]
其中,cij代表第i只股票的j位置對應(yīng)交易日期。
三、股票間移動加權(quán)匹配。
該步驟主要完成待預(yù)測股票與某只待匹配股票之間的匹配過程,并獲取得到與待匹配股票匹配的最小值和對應(yīng)匹配日期。
匹配過程在A和Bi展開,A的長度為L, Bi的長度為K, K>=L,具體匹配過程如下:
3.1 以步長為1,循環(huán)從Bi中獲取長度L的漲跌幅數(shù)據(jù),記為B,
3.2 A與B進行比較,得到匹配值。A、B的比較過程可以靈活進行,組合以下多種方式進行比較,
(1)A、B相應(yīng)位置的漲跌幅直接相減取絕對值;
(2) 對位置加權(quán),越靠近當(dāng)前交易日權(quán)值越高;
(3) 考慮A、B漲跌幅的同向性加權(quán),同漲或同跌的位置賦予較大的權(quán)重;
最后將三種因素相乘作為最終的比較距離。
3.3 記錄所有比較的匹配值的最小值和其對應(yīng)的匹配日期,作為A與Bi匹配的最終結(jié)果,記為Pi, i=[1,n],
Pi=[Vi,Di]
其中,Vi代表A與Bi的最小匹配值,Di代表最小匹配值對應(yīng)的匹配日期。
四、根據(jù)匹配日期進行分類統(tǒng)計并排序。
在上一步驟中,當(dāng)待預(yù)測股票完成與所有待匹配股票的匹配后,得到數(shù)組P,其中Pi=[Vi,Di], i=[1,n]。接下來根據(jù)匹配日期進行分類統(tǒng)計,目的在于獲取與待預(yù)測股票匹配在同一日期的股票數(shù)量,具體步驟如下。
4.1 根據(jù)匹配日期分類統(tǒng)計。遍歷數(shù)組P,當(dāng)出現(xiàn)新的Di時,Di對應(yīng)的日期統(tǒng)計量Counti初始值為1,即Counti=1;當(dāng)Di已經(jīng)出現(xiàn)過時,對應(yīng)的日期統(tǒng)計量Counti加1,即Counti=Counti+1。
4.2 對日期統(tǒng)計量進行排序。根據(jù)日期統(tǒng)計量Counti的大小,從大到小進行排序,最后得到一個匹配日期對應(yīng)的匹配數(shù)量的數(shù)組M=[D,Count],其中,D代表匹配日期列,Count代表匹配數(shù)量列。
五、基于同匹配日期和匹配值得到前幾只相似的股票。
該步驟的目的在于獲取T只最相似股票。具體過程為:
5.1 基于M數(shù)組,取得第一條記錄,即具有最多匹配數(shù)量的匹配日期,記為Dt;
5.2 根據(jù)Dt對P數(shù)組的D列進行過濾,過濾后根據(jù)V列值從小到大排序后,獲取數(shù)值最小的前T只股票作為待預(yù)測股票的最相似的股票。
這里T的取值不宜太大,因為T的取值代表著有T種的短期預(yù)測結(jié)果;也不宜太小,因為T的取值也應(yīng)用于近期預(yù)測的統(tǒng)計。一般T取10左右。
六、獲取同匹配日期的相似股票之后的后期走勢數(shù)據(jù)。
該步驟獲取相似股票匹配日期后的N個交易日(N一般取為20-30)數(shù)據(jù),獲取的數(shù)據(jù)包括漲跌幅Change,以及步驟1中新增的各增減幅度字段,這里即為StdOpen、StdHigh、StdLow、StdVolume、StdTurnover等。
由于相似的T只股票都具有同樣的匹配日期,因此直接從股票數(shù)據(jù)庫中獲取該匹配日期后的N個交易日(N一般取為20-30)數(shù)據(jù)。
具體相同匹配日期的相似股票,其后期的走勢顯得比較一致。
七、獲取待預(yù)測股票當(dāng)前交易日的數(shù)據(jù)。
該步驟獲取待預(yù)測股票當(dāng)前交易日數(shù)據(jù),獲取的數(shù)據(jù)包括收盤價Close(已前復(fù)權(quán)),以及步驟1中有計算相對前一交易日增加幅度的原始字段,這里即為Volume,Turnover。
八、股票預(yù)測結(jié)果生成。
該步驟基于前幾個步驟已經(jīng)準備好的數(shù)據(jù)生成預(yù)測結(jié)果?;舅枷胧?,以待預(yù)測股票的當(dāng)前交易日的數(shù)據(jù)作為“前一交易日”基準數(shù)據(jù),結(jié)合相似股票匹配日期后的走勢數(shù)據(jù),計算還原成待預(yù)測股票的走勢數(shù)據(jù)。前面步驟獲得的每一只相似股票的走勢都將還原成一種預(yù)測結(jié)果,具體過程如下。
8.1 將待預(yù)測股票當(dāng)前交易日的數(shù)據(jù)Close, Volume, Turnover置為前一交易日lastClose, lastVolume, lastTurnover結(jié)果;獲取某一只相似股票匹配日期后的走勢數(shù)據(jù)。
8.2還原下一交易日的預(yù)測數(shù)據(jù),還原過程為:
下一交易日收盤價Close = lastClose + lastClose*Change/100;
下一交易日開盤價Open = Close + Close*StdOpen/100;
下一交易日最高價High = Close + Close*StdHigh/100;
下一交易日最低價Low = Close + Close*StdLow/100;
下一交易日成交量Volume = lastVolume + lastVolume *StdVolume/100;
下一交易日換手率Turnover = lastTurnover + lastTurnover *StdTurnover/100。
8.3 將當(dāng)前交易日的收盤價Close,成交量Volume,換手率Turnover置為前一交易日lastClose, lastVolume, lastTurnover結(jié)果。
8.4 重復(fù)執(zhí)行8.2,8.3步驟,直至還原出期望的全部交易日預(yù)測數(shù)據(jù)。
8.5 上述8.1~8.4步驟將得到基于某一只相似股票走勢的預(yù)測結(jié)果。將步驟5得到的T只最相似股票運用上述步驟計算后,將可得到待預(yù)測股票的T個走勢預(yù)測結(jié)果。這些結(jié)果可作為一種短期的預(yù)測。
8.6 取出T個走勢預(yù)測結(jié)果的前R天數(shù)據(jù),形成二維數(shù)組Ftr, t=[1,…T],r=[1,…R],對Ftr的每一列取平均值,該平均值作為近期對漲跌幅的預(yù)測。另外對T個列的數(shù)值分別統(tǒng)計大于0、小于0、近似等于0(如-0.2到0.2區(qū)間)的個數(shù),計算占總數(shù)T的比例,該比例值作為近期對漲跌概率的預(yù)測。
綜上所述,本發(fā)明提出了一種基于同匹配日期相似走勢的股票預(yù)測方法。方法既可用于近期的預(yù)測(如1,2,3個交易日),也可用于短期的預(yù)測(如10,20,30個交易日)。方法在不同匹配基礎(chǔ)上的預(yù)測結(jié)果之間較為一致。
本發(fā)明方法同樣可應(yīng)用于證券類具有時間序列特征的數(shù)據(jù),如基金、期貨等。因此,盡管為說明目的公開了本發(fā)明的具體實施例和附圖,其目的在于幫助理解本發(fā)明的內(nèi)容并據(jù)以實施,但是本領(lǐng)域的技術(shù)人員可以理解:在不脫離本發(fā)明及所附的權(quán)力要求的精神和范圍內(nèi),各種替換、變化和修改都是不可能的。因此,本發(fā)明不應(yīng)局限于最佳實施例和附圖所公開的內(nèi)容。當(dāng)前公開的實施例在所有方面應(yīng)被理解為說明性的而非對其請求保護的范圍的限制。