一、設(shè)計(jì)背景
隨著越來越多的人投資于股市,股票價(jià)格預(yù)測(cè)已經(jīng)成為一個(gè)研究熱點(diǎn)。關(guān)于股票價(jià)格預(yù)測(cè)的技術(shù)分析方法有很多,其中應(yīng)用最為廣泛的是K線技術(shù)分析法。如果將每天的K線按時(shí)間順序排列在一起,就組成了反映股票價(jià)格歷史變化情況的數(shù)列稱為K線序列。它能夠全面透徹地觀察到市場(chǎng)的真正變化,看到股價(jià)的趨勢(shì)、了解到每日市況的波動(dòng)情形。
經(jīng)過研究發(fā)現(xiàn),時(shí)間序列具有兩個(gè)重要特征:一是“歷史信息會(huì)影響未來走勢(shì)”,即時(shí)間序列的過去值會(huì)影響到將來;二是“歷史經(jīng)常會(huì)重現(xiàn)”即一些特殊的時(shí)間序列在整個(gè)時(shí)間序列中會(huì)反復(fù)出現(xiàn)。這些特征使得時(shí)間序列相似性搜索預(yù)測(cè)成為可能,從歷史數(shù)據(jù)中尋找與指定股票近期走勢(shì)相似的數(shù)據(jù)段,以期通過相似數(shù)據(jù)段的未來走勢(shì)來預(yù)測(cè)指定股票的未來走勢(shì)。由于K線序列也是一種時(shí)間序列,因此用股票K線圖相似性來預(yù)測(cè)便成為股票預(yù)測(cè)首選方法。
二、系統(tǒng)架構(gòu)
假定K線走勢(shì)相近的股票,未來也可能會(huì)發(fā)生近似的走勢(shì)。因此根據(jù)標(biāo)的股票當(dāng)前走勢(shì)與滬深市場(chǎng)所有股票的歷史K線形態(tài)進(jìn)行匹配,并且加入成交量趨勢(shì)分析找出相似特征的股票,統(tǒng)計(jì)這些樣本后續(xù)的走勢(shì)供投資者分析參考。

三、算法說明
在統(tǒng)計(jì)學(xué)中皮爾遜相關(guān)系數(shù)( Pearson correlation coefficient),又稱皮爾遜積矩相關(guān)系數(shù),是用于度量兩個(gè)變量X和Y之間的線性相關(guān),我們可以利用numpy.corrcoef()函數(shù),來計(jì)算兩個(gè)矩陣之間的相關(guān)性。
選擇出相似數(shù)據(jù)段的算法主要分為兩步:
第一步:根據(jù)限制條件(具體包括股票范圍、時(shí)間),劃分出用于搜索的歷史數(shù)據(jù)范圍;第二步:在劃分出的歷史數(shù)據(jù)范圍中,通過相似性算法,獲得相似數(shù)據(jù)段及對(duì)應(yīng)相似度。
1)劃分歷史數(shù)據(jù)范圍
a.根據(jù)輸入?yún)?shù)時(shí)間,在時(shí)間序列上切割歷史數(shù)據(jù);
b.根據(jù)輸入?yún)?shù)范圍,在橫截面上切割歷史數(shù)據(jù),其中市值檔位分為大市值、中市值、小市值。在每個(gè)截面上市值前1/3大的個(gè)股為大市值,在每個(gè)截面上市值前1/3小的個(gè)股為小市值,剩余為中市值。股票的行業(yè)屬性較為穩(wěn)定,而市值屬性可能不穩(wěn)定。如現(xiàn)在小市值的某股票,歷史某短時(shí)間可能為中市值。對(duì)于市值屬性的處理方案,以現(xiàn)在的市值檔位來篩選股票。
注意:
為了保證可以根據(jù)歷史數(shù)據(jù)預(yù)測(cè)未來,歷史數(shù)據(jù)從20日前開始計(jì)算,即保留20日作為收益統(tǒng)計(jì)。
2)相似性算法
從用戶的使用體驗(yàn)考慮,價(jià)量的形似是最關(guān)鍵的相似性度量指標(biāo), 利用價(jià)格相似度和成交量相似度以不同權(quán)重來進(jìn)行計(jì)算。三維股池添加的趨勢(shì)層面、四維股池添加的趨勢(shì)層面與主力資金層面的匹配,應(yīng)是在價(jià)量形似的基礎(chǔ)上的次級(jí)匹配目標(biāo)。且這樣設(shè)計(jì)可以大幅降低計(jì)算成本。

四、預(yù)測(cè)方法
從用戶的使用體驗(yàn)考慮,價(jià)量的形似是最關(guān)鍵的相似性度量指標(biāo)。三維股池添加的趨勢(shì)層面、四維股池添加的趨勢(shì)層面與主力資金層面的匹配,在價(jià)量形似的基礎(chǔ)上進(jìn)行次級(jí)匹配這樣設(shè)計(jì)可以大幅降低計(jì)算成本。
每天收盤后對(duì)于每支股票在劃分的歷史數(shù)據(jù)范圍中計(jì)算每個(gè)數(shù)據(jù)段的價(jià)量相似度,排序得到最匹配的N個(gè)數(shù)據(jù)段(如N=500)及其對(duì)應(yīng)的股票、起止時(shí)間。若用戶輸入?yún)?shù)模型為二維股池,則按預(yù)定展示數(shù)(如10)直接展示前幾名。若用戶輸入?yún)?shù)模型為三維股池、四維股池,則僅在此N個(gè)數(shù)據(jù)段中進(jìn)一步進(jìn)行篩選,并展示篩選后數(shù)據(jù)段的前M名。
1)價(jià)量
a.價(jià)格相似度計(jì)算:
記close_01為指定股票的近期前復(fù)權(quán)收盤價(jià)序列,close_02為當(dāng)前對(duì)比相似度的數(shù)據(jù)段的前復(fù)權(quán)收盤價(jià)序列,close_01與close_02長度相等。
第一步對(duì)c1、c2進(jìn)行歸一化,得到c1_s, c2_s。
c1_s = [(x-min(c1))/(max(c1)-min(c1)) for x in c1]
c2_s = [(x-min(c2))/(max(c2)-min(c2)) for x in c2]
第二步計(jì)算歐式距離。
similarity_close = sqrt(sum([x ** 2 for x in (c1_s - c2_s)]))
公式:

b.成交量相似度計(jì)算與價(jià)格相似度計(jì)算步驟類似。
c.價(jià)量相似度=0.7價(jià)格相似度計(jì)算+ 0.3成交量相似度。
價(jià)量相似度越小表示兩個(gè)序列越相關(guān),升序排序保存前M名繼續(xù)進(jìn)行下面模型篩選。如果用戶選擇二維模型,則直接輸出前M名,但如果結(jié)果出現(xiàn)一只股票有多段數(shù)據(jù)相似,只保留排名靠前的一段數(shù)據(jù),增加候選數(shù)據(jù)段保證總的輸出有M段相似數(shù)據(jù) ,即輸出的相似數(shù)據(jù)段來自M只不同股票的歷史數(shù)據(jù)。
2)三維股池
使用多參數(shù)動(dòng)量來刻畫趨勢(shì)。動(dòng)量即為平均收益率(收盤價(jià)斜率)。記m_n為n日動(dòng)量,即往前數(shù)n個(gè)交易日收益率的均值。考慮使用3種參數(shù)的動(dòng)量,分別對(duì)應(yīng)總趨勢(shì)、近1/2周期趨勢(shì)、近1/4周期趨勢(shì)。
趨勢(shì)相似度越小越相似,升序排列保存前M名繼續(xù)進(jìn)行下面模型篩選,若用戶輸入?yún)?shù)模型為三維股池,取前M名作為輸出。
3)四維股池
使用大單凈流入額日頻指標(biāo)衡量主力資金動(dòng)向。記指定股票的大單凈流入額序列為BI1,對(duì)比數(shù)據(jù)段的大單凈流入額序列為BI2。計(jì)算correlation(BI1,BI2),對(duì)主力相似度降序排列保存前M名,若用戶輸入?yún)?shù)模型為四維股池,輸出前M名。
五、評(píng)價(jià)標(biāo)準(zhǔn)
使用預(yù)測(cè)準(zhǔn)確率和預(yù)測(cè)誤差來評(píng)價(jià)股票的預(yù)測(cè)效果。取標(biāo)的股票每天收益率(默認(rèn)最近20個(gè)交易日)作為一組時(shí)間序列,與所有股票的歷史數(shù)據(jù)(從2011年1月1日至今)任意長度為20的連續(xù)時(shí)間序列計(jì)算相似系數(shù),相似系數(shù)越高表示K線越相似,從而根據(jù)相似股票的后期走勢(shì)進(jìn)行統(tǒng)計(jì)分析。
采用多次預(yù)測(cè)求平均值的方法來計(jì)算最終的預(yù)測(cè)準(zhǔn)確率和誤差。具體步驟如下 :
1)構(gòu)建預(yù)測(cè)樣本。首先隨機(jī)選擇一個(gè)時(shí)間段,接著從預(yù)測(cè)樣本數(shù)據(jù)源中選擇每只股票在該時(shí)間段內(nèi)的K線序列作為一個(gè)預(yù)測(cè)序列,最后將這些預(yù)測(cè)序列組合在一起便可以構(gòu)成一組預(yù)測(cè)樣本?;谶@種方法最終按照時(shí)間順序隨機(jī)構(gòu)建15組預(yù)測(cè)樣本進(jìn)行實(shí)驗(yàn)。
2)使用普通序列預(yù)測(cè)法或模式序列預(yù)測(cè)法對(duì)所有的預(yù)測(cè)樣本進(jìn)行預(yù)測(cè)并計(jì)算每個(gè)預(yù)測(cè)樣本的預(yù)測(cè)準(zhǔn)確率和誤差。
3)對(duì)所有預(yù)測(cè)樣本的預(yù)測(cè)準(zhǔn)確率和誤差進(jìn)行平均就可以得到該預(yù)測(cè)方法最終的預(yù)測(cè)準(zhǔn)確率和誤差。
六、總結(jié)
技術(shù)分析者認(rèn)為K線包容了一切市場(chǎng)行為,價(jià)格將以趨勢(shì)方式演變,相似K線是驗(yàn)證“歷史總會(huì)重演”的一個(gè)經(jīng)典產(chǎn)品。投資者可以根據(jù)相似K線展示的結(jié)果來觀察個(gè)股可能的未來走勢(shì),從而對(duì)投資起到一定的指導(dǎo)作用。