潘和平,張承釗
(1.重慶金融學院,重慶 400067; 2.電子科技大學經濟與管理學院,四川 成都 611731;3. 成都職業技術學院,四川 成都 610041; 4. Swingtum Prediction,澳大利亞)
本文研究金融市場價格的非線性預測模型。原則上,這里所論及的原理、方法、模型和實施應該適用于股市(股指、股指期貨、個股價格等)、期貨(以商品期貨為主)與外匯等三大類主要金融市場。但作為實證研究的對象,本文只限于股票市場指數,簡稱股指。在具體選擇實證對象上,這里選取了中國的滬深300股指(HS300)和澳大利亞的大盤指數(AXJO)。在時間框架上,日線預測在中國股市T+1的制度下具有典型的意義。因而,本文研究的主要目標就是在日線框架下股指預測的非線性建模與實證。
股指作為一國股票市場代表性股票群的價格加權平均,比個股價格變化具有更為復雜的行為模式,具有非線性、混沌、長記憶等特點。就因果關系而言,股指水平的波動受到政治經濟、金融市場、社會情緒、自然環境等諸多因素的影響。這些影響因素之間有著復雜的交互過程,對市場波動的影響有著不同的時滯和強度。股票市場是現代市場經濟的主體,是一個風險和利益共存的復雜系統。鑒于股市周期一般領先于經濟周期幾個月的時間,股市總是扮演著經濟晴雨表的角色。股票市場的分析與預測建模研究有著多重重要意義:在宏觀層面,若能有效地預測股市的股指走勢和波動,對于國家層面制定宏觀經濟政策和國民經濟發展計劃具有重要的信息支持作用;在中觀層面,股指或股價的走勢與波動風險預測是企業管理資產風險和上下游供應鏈風險所不可或缺的;在微觀層面,股市投資者在決策投資股票時自然首先要考慮股市總體的走勢方向與漲跌空間、以及所關注行業和個股的走勢方向和波動風險。股票投資上最大的風險首先在于投資方向與市場方向的不一致。
然而,無論是股市大盤指數、還是標準行業或自定義板塊指數、還是個股價格,就數據形式而言都具有一般金融時間序列(FTS - Financial Time Series)的標準數據結構。因而,股指的預測本身也是金融時間序列預測的重要類型。關于金融時間序列預測問題,計量金融經濟學文獻中已經有大量的文章和資料。Box和Jenkins提出了自回歸移動平均模型(ARIMA)用于處理非平穩信號之間的線性相關性。Engle提出了自回歸條件異方差模型(ARCH)已經被許多金融分析師采用。Bollerslev提出了廣義自回歸條件異方差模型(GARCH)進一步預測誤差方差,該模型的分析對投資者的交易決策發揮了非常重要的作用。但應該說明,這些自回歸類型的金融時間序列模型主要是針對金融時間序列的波動率的。而金融學中長期占主導地位的“有效市場理論”主要表現為金融市場價格的幾何布朗運動模型,即認為市場價格是一種隨機游走,因而不具有可預測性。
自1980年代以來,由多學科交叉而形成的智能計算金融實證研究表明,金融市場具有一定的概率可預測性。其中包括有混沌理論模型、金融物理模型與計算智能金融模型等,Pan等[1-2]給出了較全面的文獻綜述,已經回答了金融市場的概率可預測性問題,這里不再贅述。
盡管有人工智能所產生的多種智能計算模型,如ANN,SVM, 以及決策樹與隨機森林等都是具有極強的非線性建模潛力的機器學習乃至深度學習模型,但建立真正有效的金融市場價格預測模型的關鍵點首先在于如何從金融時間序列數據中提取有信息負荷的特征。這一個步驟一般稱為特征提取。過去主要依賴對問題本身的經驗觀察和技術性理解來人工設計特征空間。現在有了深度學習的思路,我們當然也可以直接將原始數據作為輸入然后構建多隱蔽層的ANN來讓系統自學習出一種完全黑箱模型。但我們仍然不滿足于這種黑箱模型,而是試圖發展出一種基于信號分析的信息融合預測模型,因為這樣的模型有助于構建理性的預測模型。
綜合文獻中出現的各種時間序列預測模型,我們認識到,一般的金融市場預測模型的一般架構應該有三部分組成:第一部分是針對原始金融時間序列數據的信號分析,第二部分是在信號分析的基礎上進行特征提取,第三部分是以這些特征為輸入并以未來走勢為輸出建立預測計算模型。
針對一般時間序列的信號分析問題,1998年由來自美國NASA的信號處理專家Huang等[3]提出了Hilbert-Huang變換(簡稱HHT)。這是針對非線性非平穩數據的一種經驗性的、非參數化的、而又完備的、兼顧時域和頻域的分析方法。它包含經驗模態分解(EMD)算法和Hilbert變換兩個過程。通過EMD,任何復雜的信號都可以被分解成數目有限的且常常不太多的幾個本征模態函數(Intrinsic Mode Function, IMF),而這些IMF序列具有性能良好的Hilbert變換,能夠很好地刻畫原始數據在每一個局部的振蕩結構,以此為基礎得到的Hilbert譜具有很好的時頻特性。自EMD方法提出以來已被初步用于金融時間序列的預測,如原油[4-5]、外匯[6]、銅價[7]、房地產[8]和股票市場[9-12]等。然而, 幾乎所有這些文獻都沒有注意到EMD分解本身具有一個先天性的缺陷,那就是EMD分解的過程具有端點效應,也就是在時間序列的最右端所對應的分解結果是不穩定的,隨著新數據的加入,分解的結果要不斷更新。因而,絕大多數已經發表的基于EMD的金融預測模型在實證時都隱含了這種先天缺陷而變得并不可靠。另外,這些現有文獻對于EMD的算法表述也是完全基于原創作者Huang等的表述,其算法的表達仍然是流水式的順序算法,而沒有清晰的結構化,并且若干關鍵計算過程并未清楚表達。這兩點也是本文的重點關注問題。
對于預測建模中的特征提取問題,在大數據時代,這個問題也可以表述為數據降維問題。主成分分析(Principal Component Analysis,PCA)又稱主分量分析,是由皮爾遜(Pearson)于1901年首先引入,后來由霍特林(Hotelling)于1933年進行了發展。主成分分析是一種通過降維技術把多個變量轉化為少數幾個主成分(即綜合變量)的多元統計方法,這些主成分能夠反映原始變量的大部分信息,通常表示為原始變量的線性組合,為使得這些主成分所包含的信息互不重疊,要求各主成分之間互不相關。一般來說,當研究的問題涉及很多變量,并且變量間相關性明顯,即包含的信息有所重疊時,可以考慮用主成分分析,這樣更容易抓住事物的主要矛盾,使得問題得到簡化。對于基于EMD的預測模型而言,一個金融時間序列經過EMD分解后形成多級IMF序列, 這些IMF序列數據本身包含著冗余信息, 因而需要降維處理。使用PCA對EMD變換產生的IMF序列進行降維處理后再來構建非線性預測模型,是一條必由之路,目前文獻中還很少提及。
最近,在基于EMD的預測模型研究上有一些新的發展。Dragomiretskiy和Zosso[13]提出了一種變分模式分解VMD (Variational Mode Decomposition), 用來實現多分辨率的模式分解。Samiri[14]將VMD同回歸神經網絡相結合。 Wei Liangying[14]將EMD與模糊邏輯相結合。這些新發展同本文對于EMD的深化研究不再一個方向上。
從以上研究文獻可以看出,雖然各種非線性智能計算模型在不同的條件下具有較高的預測精度,但是目前的主流趨勢是利用各單一智能算法模型的優點構建組合預測模型來實現更好的預測可靠性。Krogh和Vedelsby[16]證明如下思想:當構成組合預測模型的單一模型足夠精確且足夠多樣化時,組合預測模型一定能獲得比單一模型更好的預測效果。當前智能計算模型的發展趨勢正是發展各種算法的組合方法,因為任何一種典型方法不能在所有場合都優于其他方法。雖然國內外學者已經意識到應該采用EMD方法研究股票市場、外匯市場和原油市場,但是他們大多采用長達幾年的窗口采集數據進行EMD分解。然而,股市預測的實時性要求很高,長達幾年的窗口采集數據會造成時延,而且在實證中大都忽視了EMD的端點效應,從而影響市場預測的實效性。本文提出了一種前向滑動的滑動窗口EMD技術,分解后得到很多具有重疊信息的IMF序列,必須對冗余的數據降維。本文提出用PCA算法降維,將降維后的幾個主成分輸入神經網絡以實現組合預測。本文提出了一種將EMD、PCA、ANN的組合預測模型,基于分解-擇優-綜合的信息融合思想構建了一個新的多尺度組合預測模型。在該模型的基本框架下分析滬深300指數和澳大利亞股指的波動特征及其走勢。
本文提出一類具有一般性的金融市場預測模型,稱作FEPA,由三部分組成:第一部分是基于EMD的信號分析,第二部分是通過PCA的特征提取,第三部分是基于ANN的信息融合預測建模。本文所報告的工作有四個創新點:1)在學術文獻上首次給出EMD算法的結構化表達,這種表達一方面明確了EMD算法的具體計算流程,另一方面提供了融合更多信息的算法接口;2)通過深入到更細時間框架來克服EMD的最大缺陷,即端點效應,并且探索兩個時間框架下預測效能;3)通過多步長預測來深入研究EMD的信息結構;4)FEPA模型展示了金融時間序列預測模型的一般性架構,具有可升級性與可擴展性。另外,采用滑動EMD分解使得實證更切近實際。為了便于闡明這些創新的具體內容和含義,我們需要綜述一下基于EMD的金融預測研究的文獻,并給出EMD結構化算法和整個預測模型的理論結構。然后我們再給出實證與分析,并得出結論。
在Huang等[3]首創了一般時間序列數據的經驗模式分解(EMD)算法之后,后來至今的所有的擴展和應用性研究文獻上在介紹EMD算法時都沿用了Huang等人的流水瀑布式(waterfall)的算法表述,我們這里將其稱為HuangEMD 算法(用類Matlab語言表達)具體如下:
HuangEMD算法:
{對于任一給定的實數時間序列數據x(t),首先找到其上全部的局部極值點(extrema),包括極大值點(maxima)與極小值點(minima);
(1)分別用三次樣條插值法將極大值點和極小值點連接成上包絡線u(t)與下包絡線l(t);
(2)找到上下包絡線的均線m(t)=(u(t)+l(t))/2;
(3)取其數據與均線的差h(t)=x(t)-m(t);這個從(1)~(4)的過程稱為一個篩濾過程(sifting)。
(4)檢查看h(t)是否滿足本征模態函數(IMF)的定義并且是否滿足篩濾停止標準;
(5)如果(4)的兩個條件有一個不滿足,就令x(t) =h(t);然后重復篩濾過程(1)~(4);
(6)如果(4)的兩個條件都滿足,這是h(t)就是一個IMF成分,并保存為c(t)=h(t),并且得到余差r(t)=x(t)-c(t)。
(7)令x(t)=r(t),重復(1)~(6)步整個過程。
(8)當余差r(t)中所包含的極值點個數小于2時,整個運算終止。
}
注意到Huang等[3]提出的EMD作為一種信號分解方法,不是一種參數化的解析方法,而是一種經驗性的、非參數的分解算法,因而也只能通過一個算法來表達。這個算法中涉及到兩個關鍵準則,一個是IMF的定義,另一個是篩濾過程的停止準則。關于這兩點,我們下面再詳述。
我們看到,文獻中大家都直接引用的這個HuangEMD 算法是典型的流水瀑布式的表達,看起來簡單好算,實際上許多細節并不清楚,也不便于擴展。下面我們將這個算法轉換成一種結構化的形式算法,由三個函數組成,PanEMD 作為主算法調用單級分解過程 PanEMD1,而后者又調用單一篩濾過程 PanEMD0。具體如下:
函數PanEMD0, 輸入x(t),輸出篩選細節 h(t) 及極值點 maxs 與 mins,即
[h(t),maxs, mins, zeros]=PanEMD0(x(t))
{
(1)檢測x(t)的全部極值點與過零點
maxs=Maxima(x(t));
mins=Minima(x(t));
zeros=ZeroCrossing(x(t));
這里Maxima()與Minima()是兩個具體的函數,檢測x(t)的極大值點與極小值點;ZeroCrossing( ) 檢測x(t)的過零點,細節不表。
(2)用這些極值點形成上下包絡線
u(t)=Interpolation(maxs, ‘spline’);
l(t)=Interpolation(mins, ‘spline’);;
注意到Interpolation( )作為一個插值函數,可以采用多種插值方式,’spline’表示三次樣條。
(1)計算上下包絡線的均線
m(t)=(u(t)+l(t))/2;
(2)計算細節時間序列(details)
h(t)=x(t)-m(t);
}
這個函數PanEMD0( ) 輸出的 h(t) 僅僅是一種包絡中的細節序列,至于是否滿足IMF的定義還未可知。
函數PanEMD1, 輸入 x(t),輸出 c(t),即
[c(t), nextrema]=PanEMD1(x(t))(其中c(t)是一個標準的IMF, nextrema 表示極值點的個數)
{令k表示篩選迭代的次數。
(1)運行篩選過程一次,計算細節函數
k=1;
[h(t),maxs, mins, zeros]k=PanEMD0(x(t));
(2)如果[h(t),maxs, mins, zeros]k不滿足IMF 的定義或者不滿足篩選停止的條件, 就重復篩選:
while ( ~(IsIMF(h(t),maxs, mins,zeros)
||~StopSifting(h(t),maxs, mins, zeros, k) )
repeat
[h(t),maxs, mins, zeros]=PanEMD0(h(t)) ;
(3)c(t) = h(t);
nextrema = #maxs + #mins;
}
這個函數PanEMD1( ) , 對于輸入x(t),輸出 c(t) 已經是一個標準的IMF了,這里我們之所以命名為PanEMD1是因為這個函數產生一個單一級別的IMF,當然,PanEMD1( ) 中需要調用兩個標準檢查的函數如下。
函數IsIMF(h(t),maxs, mins, zeros)輸出 true 或 false
{if|#maxs + #mins ― #zeros|< 2
return true;
elsereturn false;
}
這個函數判斷如果極值點的個數與過零點的個數相等或不超過1,細節序列 h(t) 就符合IMF的定義了。
然而,單一級別的IMF一般還不能滿足我們對于金融時間序列進行信號分解和特征提取的需要,所以,一般地,我們還進行多次迭代,產生多級IMF序列。另外,停止篩濾的判斷標準如下:
函數 StopSifting(h(t),maxs, mins,zeros, k) 輸出 true 或 false
{令envmean與envamp 表示包絡的均值和幅度,
envmean(t)=|u(t)+l(t))|/2;
envamp(t) = |u(t)- l(t)|/2;
if ( any(envmean>T1 )||mean(envmean/envamp > T2) >T3 )
&& all (#maxs+#mins >2)&& k < T4)
return false;
else
return true;
}
這里,T1, T2, T3 與T4 是四個提前給定的閾值:首先T4 是最多迭代的次數,一般地T4<10; T1 表示包絡均值的最小值,T2 表示包絡均值與包絡幅度的比例的最小值,T3 表示包絡均值與包絡幅度比例小于T2的百分比的最小值,一般地取 T1 = 0.05, T2=0.5, T3 = 0.05。關于篩選停止的條件,在EMD的實施中還是有不同的方案。這里我們采用的是 Rilling等[17]所提出的方案。同時,這里 any( ) 是指只要有其中一個點滿足設定的條件就是true, 而all( ) 則是要求所有的點都滿足設定的條件才是true. 另外,在mean( ) 中,若條件滿足就是 true =1,否則 false = 0,所以所有點上的條件判斷可以求均值。
在明確給出了篩選函數 PanEMD0( ) 和單級IMF函數 PanEMD1( ) 之后,我們就可以給出EMD分解的主函數 PanEMD( )。令K表示IMF級數的上限:
函數PanEMD, 輸入x(t),輸出C(t),即
C(t)=PanEMD(x(t),K)
{令k表示分解迭代的次數。
(1)運行篩選過程一次,計算細節函數
k=1;
[c1(t), nextrema]=PanEMD1(x(t));
r1(t) = x(t)-c1(t);
(2)while ( k
repeat
{[ck+1(t), nextrema]=PanEMD1(rk(t));
rk+1(t)=rk(t)-ck+1(t);
k=k+1;}
(3)C(t) ={c1(t), c2(t), …, ck(t) };
}
這里K 和 T是兩個閾值,一般取 K=10, T=2。
上面給出的EMD分級的結構化算法 PanEMD( ) 由單級IMF分解的 PanEMD1( ) 的多次迭代而成,而PanEMD1( ) 又由單次包絡算法 PanEMD0( ) 的多次迭代而成。這種兩層嵌套的多次迭代過程揭示了EMD的完整實施并不是一個簡單直觀的過程。因而這種結構化算法為EMD的進一步具體化或升級變化提供了可擴展的算法架構。目前已經有的擴展包括面向更高信噪比與可靠性的EMD集成 EEMD與更完備的CEEMD。另外,對于金融時間序列(FTS)的特殊結構而言,在定義Maxima( ) 與Minima( ) 兩個函數時應該分別使用當期的最高價與最低價。這些進一步擴展的內容目前我們超出本文的范圍。本文所報告的模型計算都是基于收盤價的,這樣便于公平地同其它基于收盤價的參考模型比較(見后面第5.5小節)。
有了EMD的結構化算法,我們就可以在此基礎上構建一個完整的金融時間序列預測模型,這里我們簡稱 FEPA 模型,表示 FTS-EMD+PCA+ANN 模型,即針對金融時間序列(FTS, Financial Time Series)經過經驗模態分解(EMD),再經過主成分分析(PCA)降維,提取特征作為輸入經過一個神經網絡(ANN)預測出下一個時間點的價格變化。所以說,這個FEPA模型由三部分組成:EMD、PCA、 ANN。
FEPA預測模型本身是一種計算智能模型, 模型需要不斷地根據市場演化而不斷學習進化。一般地,我們取一段足夠長的歷史數據。首先要確定數據的時間框架, 在本文中我們重點研究日數據。任一個時間t在日數據上對應于一天。價格時間序列數據X(t)包括四個價格分量和一個交易量:
X(t)=(X.O(t),X.H(t),X.L(t),X.C(t),X.V(t))
(1)
其中X.O(t)、X.H(t)、X.L(t)、X.C(t)分別代表市場在這個時間框架下在t時間(區間)的開盤價、最高價、最低價、收盤價;X.V(t) 代表交易量。 對于日線級別,這四個價格就代表了當日的開盤價、最高價、最低價、收盤價。一般而言,我們假設有足夠的歷史數據
DX(t,N)=(X(t-N+1),X(t-N+2),…,X(t))
(2)
在日線級別,t代表我們得到最新數據的那一天,N代表我們得到的全部數據的天數。在本文中,我們只考慮使用收盤價X.C(t)時間序列的預測問題,而且無論是預測模型的輸入和輸出只與收盤價有關。因而,在后面的論述中,我們用X(t)只代表X.C(t)。 本文的后續論文中會發表更全面的預測模型。
對于歷史數據DX(t,N)中的每一個數據點X(t), 我們都可以計算其當日的相對收益率
(3)
其中τ是要預測的步長,最基本的預測對應于τ=1。 若無其它說明,一般我們用R(t)=R(t,τ)。 因而針對所有歷史數據DX(t,N), 也有對應的歷史收益率數據
DR(t,N)=(R(t-N+1),R(t-N+2),…,R(t))
(4)
所以,一般的FEPA預測模型的輸入輸出可以表達為:
FEPA:F(t)?ANN(S,θ)?R(t+τ)
(5)
也可以用數學上函數的形式
FEPA:R(t+τ)=ANN(F(t),S,θ)
(6)
其中F(t)是從t時間起前面的價格時間序列中提取出來的特征信息集(一個一維數組),作為預測模型輸入;(S,θ)是預測模型的結構和參數(神經網絡的神經元之間的連接結構與連接權重參數等);R(t+τ)是預測模型的輸出。注意到FEPA模型使用EMD和PCA來生成輸入特征F(t), 所以,FEPA預測模型可以進一步具體化為:
FEPA:DX(t,m)?EMD?PCA?F(t)?
ANN(S,θ)?R(t+τ)
(7)
或者用數學函數的形式表示為:
R(t+τ)=ANN(FE(PCA(EMD(DX(t,m)))),S,θ)
(8)
其中FE( ) 表示在PCA之后還有一個特征提取的過程(FE, feature extraction)。這里m< 下面我們逐一說明FEPA模型的三個組成部分及計算流程。 在FEPA模型中,我們要首先準備選定的全部歷史訓練數據集。在應用PCA之前,我們要針對全部歷史數據DX(i-1,N)形成一個EMD分解產生IMF作為輸入與R(i),i=t,t-1, …,t-N+1,作為輸出,因而,預測模式訓練輸入輸出數據集DT(t,N-m): (9) 注意到這個訓練數據集中針對每一個時間點i=t,t-1, …,t-N+1,都是截取了該時間點起前面長度為m< 經過審慎觀察我們得知,EMD分解的IMF會隨著時間序列新數據的加入而不斷變化,這就是EMD的內在缺陷,稱作“端點效應”(end effect)。需要指出的是,在迄今發表的基于EMD的預測模型文獻中,絕大多數在實證時都沒有考慮EMD的這種端點效應,而直接對選取的全部歷史數據DX(t,N)進行一次性EMD分解,然后從分解的IMF中提取特征作為輸入經過ANN進行預測; 而這種實證方式是不切實際的。 在本文所提出的FEPA模型在實證時使用公式(9)所表達的前向滑動EMD分解,這樣實證結果更切近實際。同時,我們認識到,只有在靠近端點時深入到下面更細一級的時間框架才能克服EMD的點效應。對于當前時間框架為日線而言,更細一級的時間框架可以取H1(小時線)或M15(15分鐘線)。對于外匯和國際期貨市場而言,由于市場是每天24小時連續交易,可以取H1;而對于股指而言,每天股市只開4個小時,可以取M15,這樣一天就有16個M15數據點。 給定一個時間框架,如日線,注意到在EMD分解之后產生的是多層的IMF: (10) 一般地,我們令k≤5。 就將這些IMF串聯起來與R(t)構成一個輸入-輸出模式: (IMF1(t-1,m),IMF2(t-1,m),…,IMFk(t-1,m))→R(t) (11) 這樣訓練數據集(9)中的每一數據點(每一行)都取(11)的形式,這樣(9)式具體化為: DT(t,N-m)={D→R} (12) (13) R=(R(t)R(t-1)…R(t-N+m+1))′ (14) 注意到式(13)中的數據矩陣D中的每一項IMF都是一個IMF時間序列,因而在列的方向(每一行)都是一個高維數組,其中必然包含冗余信息。為了對IMF數據矩陣D進行降維處理,我們使用主成分分析(PCA)。 在式(12)中,由N-m個時間點上,每個點上k層長度為m的IMF時間序列所構成的數據集D是一個n×p矩陣, 其中n=N-m,p=k×m。 為了便于下面的討論, 令 (15) 矩陣D的列代表了預測模型輸入信息,維度為p;行代表這些輸入信息的觀測取樣。注意到這個維數p可以很大。 比如若EMD變換的窗口寬度為 300, 若僅僅只取3層IMF, 就是p=k×m=3×300=900,相當于900個變量的動態復雜系統。如此之多個自由度的復雜系統, 若在日線數據上, 至少需要10倍的數據點,即9000個日數據,每年只有250個交易日, 就相當于需要36年的日數據。而中國股市一共只有約25年的歷史, 且股市體制從2005年才開始正常化,因而只有約12年的可用日線數據。 顯然,我們認為這些輸入信息(列)必然包含有冗余信息, 因而, 我們希望能有一種變換將這p維輸入信息約簡到一個更小的的維度q?p。 在經典統計學和線性代數中有一個這樣的變換存在,即主成分分析(PCA, Principal Component Analysis),也叫主分量變換。 PCA是一種在數據挖掘領域被廣泛使用的降維技術。PCA試圖減少數據集的維數,將數據映射到低維空間,同時保持數據集中的對方差貢獻最大的特征,盡可能保留隱藏在數據中的固有信息。PCA作為一個強有力的技術用于提取高維度數據集的結構特征,在許多領域獲得廣泛的應用。 PCA計算的原理是建立在數據矩陣D的歸一化norm(D)之上的: (16) 其中 (17) 然后就可得到矩陣Z的奇異值分解為: Z=WΣVT (18) 其中p×pW是ZZT的特征向量矩陣,是正交矩陣;p×nΣ是非負矩形對角矩陣,其內部左邊p×p子矩陣就是由ZZT的p個特征值作為對角元素組成的對角矩陣;n×nV是ZTZ的特征向量矩陣。 據此,有: YT=ZTW=(WΣVT)TW=VΣTWTW=VΣT (19) 當p 在實際應用中, 一般地,數據矩陣Z的信息量主要集中在前面若干個特征維上。這樣我們就可以取p個特征值中的前q?p個, 組成新的非負矩形對角矩陣: q×nΣ*Σ*=Iq×pΣ (20) 其中Iq×p是q×p單位矩陣。 與Σ*對應地,我們將特征向量矩陣W約簡為只包含前q個特征矢量組成的低維矩陣W*,這樣我們就可以對數據矩陣Z進行降維處理得到新的數據矩陣: Y*=W*TZ=Σ*VT (21) 注意到, 實際計算中,ZZT就是原始數據矩陣D的相關系數矩陣。 關于PCA的具體計算過程,一般統計學軟件如 SPSS 或 Matlab 中都有,就不贅述。這里需要特別說明的是如何確定新的維度q。這里我們要求前q個主成分的累積貢獻率 CCR(Cumulative Contribution Rate)必須大于某個預設的閾值,如85%: (22) 在確定了q后,我們就可以得到降維后的數據矩陣Y*T,取代原始數據矩陣D,作為訓練數據的輸入部分。 上述FEPA預測模型最終歸結到輸入-輸出的一般映射問題。對于一個從n維實空間(輸入變量)x=(x1,x2,…,xn)到m維實空間(輸出變量)z=(z1,z2,…,zm)的一般映射,可以看成一個一般的非線性函數: z=(z1,z2,…zm)=F(x)=F(x1,x2,…xn) (23) 這個映射若通過一個含有h層隱含神經元的多層前饋神經網絡(MFNN, Multilayer Feedforward Neural Network)來實現,就可以表達成下列數學計算結構: (24) 其中Ψ和Φ是兩個激發函數,一般應該是非線性的,如S型函數;yl=(yl,1,yl,2,…,yl,nl)表示第l隱含層,共有nl個隱含神經元;w表示權重,b代表偏差,w和b的總體{({wl,j,i,i=1,2,…nl},bl,j)}就是整個MFNN的參數集。這些參數的最優取值就是MFNN學習或訓練的目標。當h=1時,MFNN就約簡為普通的只帶一個隱含層的前饋神經網絡(FNN),即: FNN=MFNN(h=1) (25) 有必要說明的是,在深度(學習)神經網絡(如智能圍棋AlphaGo)出現之前,這種多層前饋神經網絡的結構本身就已經存在了, 然而有三個原因導致了這種神經網絡進一步深入研究的停滯: 其一是由于Hornik等從數學上證明了只需要一個隱含層但包含足夠多個神經元的前饋神經網絡就能夠逼近任何連續函數,從而人們覺得不一定非要使用更多的隱含層就能夠解決問題;其二是若使用多層網絡,系統復雜性自然就會增大,訓練網絡就需要更多的數據,若數據不夠或訓練算法不強就會導致模型系統的不穩定或落在局部最優;其三,由Rumelhart 等所提出了反向誤差傳播(BP)算法針對淺層前饋網絡的訓練上還是足夠有效,但對于多層前饋網絡的訓練上,若直接用,就會出現梯度消失或梯度爆炸問題。普通多層神經網絡模型是高度非凸的,若直接用BP算法來訓練,由于存在大量的局部最優點而且收斂性差,很難獲得好的學習結果。實際應用時會出現嚴重的過度擬合現象。 在本文所報告的實證中,我們仍然使用的只包含一個隱含層的前饋神經網絡(FNN),并且仍然使用反向誤差傳播(BP)算法來訓練,由于目前FEPA模型仍然使用常規金融時間序列數據,還未用到大數據。今后,在擴展到多市場聯立預測模型時將會用到包含多層深度神經網絡,并且將會使用深度學習算法來訓練這類深度神經網絡模型。公式(24)給出了今后對接深度學習神經網絡的一般形式。 FEPA預測模型的實證測試使用兩個股票市場指數: 中國滬深300指數 HS300和澳大利亞股指(SP200) AXJO。滬深300指數是中國的基準股票指數。在世界股票市場生態系統中,美國股票市場具有最大影響力,其走勢不大受其他國家股市的影響。除美國之外的其他發達國家(如G7國家和澳大利亞)的股票市場屬于第二梯隊,受美國股票市場的影響較大,具有更好的可預測性。正因如此,澳大利亞股指具有更好的風險可控性和預測的經濟價值。本文的實證數據集樣本是2011年2月18日至2016年4月8日的滬深300指數HS300(圖1)和2011年4月20日至2016年3月24日的澳大利亞股指AXJO,剔除節假日等因素影響,共有1250組數據。數據集分為兩個子集:前4年的數據為樣本內訓練數據集,共1000個數據;最近一年的數據為樣本外測試數據集,共250個數據。樣本的時間跨度覆蓋了許多重要的經濟事件,因此我們認為這一時間跨度對訓練模型是足夠有代表性的。下面我們主要展示對于HS300預測模型的實證過程,并在最后表5中給出了AXJO的預測實證結果。 圖1 股指HS300收盤價 根據EMD算法的定義,原始信號經EMD算法分解后得到的各IMF序列相互正交,即線性無關。然而,正如Huang等[3]所述,正交性取決于分解方法,EMD算法是一個非線性的方法,這樣保證了經EMD分解后的各IMF序列相互正交。按照前述的研究思路,首先對滬深300指數和澳大利亞股指進行EMD分解。圖2為滑動窗口取300天時兩個股票指數的IMF分量和殘差圖。EMD分解的IMF序列層數越多,細節信號和近似信號平穩性就越好,預測值也越精確,但是同時分解過程本身存在計算誤差,誤差隨著分解層數增加而增大,這會降低預測精度。所以選擇適當的分解層數是非常重要的。從圖中可以看出,所有IMF的頻率和振幅都是隨時間變化的,IMF的振幅由高頻至低頻依次減小。IMF1捕獲了投資者情緒的高頻波動特征,IMF5反映了投資者情緒最低頻率的波動特征,殘差項R反映了投資者情緒的平均趨勢部分。EMD分解就是把一個非線性非平穩信號分解成若干個平穩的不同頻率的分量以及一個趨勢項的過程。 圖2 窗口長度為300天HS300收盤價的IMF分量 HS300的IMF序列經主成分分析后的前4個特征值對應的主成分的累計貢獻率就超過了85%,而AXJO的前5個特征值對應的主成分的累計貢獻率超過85%。為了取得更好的預測效果,本文將提取兩個市場的前22個主成分作為訓練數據輸入神經網絡。 對于上述FEPA預測模型的一般理論,我們實現了三個具體模型并進行了歷史數據實證。 下面我們首先給出具體FEPA預測模型的簡明表達及預測效能測度,然后給出三個具體模型及實證結果。 一個具體的FEPA預測模型有三個關鍵結構參數: 1)EMD分解的窗口長度(后視長度), 即公式(8)中的m; 2)要預測的步長,即公式(3)中的τ;3) PCA變換后降維后所選取的主分量的個數,即公式((21)中的q。這樣,一個具體的FEPA預測模型可以由一般公式(8)簡化為: FEPA:R(t+τ) =FNN{PCA*[EMD(DX(t,m)),q]} (26) 其中PCA*=FE(PCA)對應于PCA變換后特征提取(降維),FNN是只有一個隱含層的前饋神經網絡。 為了測度預測模型的有效性,我們自2004年以來就一直著重使用預測方向正確性的命中率(HR: Hit Rate)作為股指預測的主要測度,考慮到命中率對于市場風險管理和投資交易策略具有第一重要性。命中率HR的定義如下: (27) 其中X和Y分別表示樣本點上相對收益率的真實值和預測值;n是樣本點總數目。 當然我們也知道一般時間序列預測的其它效能指標,如平均絕對百分比誤差(MAPE),均方根誤差(RMSE),平均絕對誤差(MAD),用來測度實際值與預測值偏差。在本項研究中心,我們只使用命中率 HR, 因為對于量化投資而言,預測模型的命中率HR是最重要的效能指標。只有在預測方向正確率有了顯著性之后,其它效能指標才有意義。 這個預測模型針對滬深300股指日線收盤價數據,用日線數據的EMD分解然后經過PCA變換后降維處理作為輸入,預測日線收益率,該模型可從公式(26)具體化為: FEPA_HS300D1:R(t+τ) =FNN{PCA*[EMD(HS300D1_DX(t,m)), q]} (28) 該模型在用歷史數據訓練后在樣本外檢驗數據上的命中率在后視窗口長度m取不同值時的命中率見表1,其中最好的命中率 78.57% 出現在m=300。在m=300條件下,預測未來不同步長τ上的命中率見表2,其中最好的命中率出現在τ=1,即t+1;而5步之后基本上就不具有可預測性了。 表1 FEPA_HS300D1 預測t+1在不同后視窗口長度m上的命中率(q=22) 表2 FEPA_HS300D1 預測未來不同步長τ上的命中率 (q=22) 為了進一步消減EMD端點效應,除了使用滑動窗口EMD變換外,這個預測模型深入到更細一級的時間框架M15,即15分鐘線,考慮到中國股市每天開場時間只有4個小時,股指期貨也僅開場4個半小時。(若針對G8股指期貨,可以考慮使用H1時間框架(一小時線))。這個預測模型針對滬深300股指M15收盤價數據,用M15數據的EMD分解然后經過PCA變換后降維處理作為輸入,預測M15收益率,該模型可從公式(26)具體化為: FEPA_HS300M15:R(t+τ)= FNN{PCA*[EMD(HS300M15_DX(t,m)),q]} (29) 該模型在用歷史數據訓練后在樣本外檢驗數據上的命中率在后視窗口長度m取不同值時的命中率見表3,其中最好的命中率 82.14% 出現在m=300。在m=300條件下,預測未來不同步長τ上的命中率見表4,其中最好的命中率出現在τ=1,即t+1;而5步之后仍然具有可預測性。這里針對HS300在M15(15分鐘線上)預測命中率和多步長上的表現與HS300在D1(日線)比較, 可以看出,M15可預測性更高, 也可能解釋為中國特有的T+1交易制度,使得日間市場比日內市場具有更好的效率; 因而內日股票市場具有更好的可預測性。 表3 FEPA_HS300M15 預測t+1在不同后視窗口長度m上的命中率(q=22) 表4 FEPA_HS300M15 預測未來不同步長τ上的命中率 (q=22) 關于三種FEPA具體模型的參數取值: (1)EMD窗口長度;從150到400,每10遞增一次。三個模型經過實證都是300最優; (2)主成分特征值個數;主成分特征值個數從3到22,后來三個模型都用22個。 (3)神經網絡隱含層神經元個數從2至10個遍歷實證,最后由程序自動選擇最優個數。 為了比較本文所提出的FEPA預測模型同文獻中現有的代表性預測模型,我們也選擇了五種常見的預測模型,做了軟件實現,并用同一數據集(樣本內和樣本外)進行了歷史數據實證,包括: 1)ARIMA-自回歸移動平均模型, 2)GARCH-廣義自回歸條件異方差模型 3)BPNN-經典單隱含層神經網絡(用BP算法訓練), 4)EMD-BPNN-用EMD分解作為輸入的BPNN, 5)WD-BPNN-用小波分解作為輸入的BPNN。 用這些模型得到的樣本外預測命中率和FEPA的比較見表5。這五種參考模型的參數取值都是在同樣的訓練數據集上各自優化確定,然后應用在后面的樣本外檢驗數據集上。 這五種從這個表中可以看出, FEPA模型對于無論中國股指HS300還是澳大利亞股指AXJO在日線上的預測命中率都是遠遠高于這些現有模型。當然不排除文獻中還有其它更復雜的模型會有優異的表現,但我們無法掌握其軟件實現。 表5 FEPA與其它預測模型的命中率實證比較 本文給出了FEPA預測模型的理論基礎、模型架構、與計算過程,并在中國股指HS300的日線(D1)和15分鐘線(M15)和澳大利亞股指AXJO日線上作了全面的軟件實現和歷史數據檢驗,并同5種文獻中現有的預測模型進行了比較。實證結果表明FEPA模型在股指日線上實現了74%-78%的命中率,在15分鐘線上達到82%,這些結果本身就是明顯遠離了有效市場假設的命中率(50%上下),因而可以說中國股指和澳大利亞股指在日線上具有概率可預測性。當然這種概率可預測性具體如何用于股市投資中的風險管理和量化投資,還需要進入到主動投資組合理論和智能交易策略技術的研究之中。 FEPA模型同5種現有模型的實證比較結果也表明FEPA模型目前具有更好的預測能力。 從本文所提出的FEPA預測模型的理論創新上講,這里首次給出了EMD分解的結構化算法,這一方面有利于精確理解現有的EMD的算法計算過程,也有利于今后進一步擴展到金融時間序列分解的更特殊或更全面的信息融合可能性,比如將最高價和最低價納入到EMD分解當中以確定更有代表性的金融時間序列上下包絡,將交易量和資金流納入到EMD分解當中得出更可靠的信息,將相關市場和財經指標時間序列數據融合到目標市場價格時間序列EMD分解當中,實現多市場多數據流的EMD分解與信息融合。同時對于EEMD(加載噪音的EMD分解),也可以擴展到加載隨機游走噪音而不僅僅是白噪音。總而言之,EMD分解的結構化為金融時間序列的更可靠的信號分解與更多源信息融合提供了一個算法架構。 考慮到EMD分解的端點效應,FEPA模型在實證時使用了滑動窗口,這樣更切近實際。同時我們在日線預測的同時還測試了更細時間框架(15分鐘線)的EMD分解。這事實上就是應對EMD端點效應的主要措施。當然,如何將多個時間框架的EMD分解融合起來建立統一的預測模型,這里也僅僅是一個開端,今后還有更大的研究空間。 在EMD分解后,FEPA模型用PCA來降維,已經表現出明顯的效果。但是,我們也知道PCA是一種線形變換,對于非線性非穩態金融時間序列而言,我們仍然需要探索非線性的降維方法。目前一種可能有效的非線性降維方法就是深度學習中的‘自編碼器’,屬于深度學習多層前饋神經網絡。另外一種可能會很有效的非線性預測模型是從決策樹到模糊決策樹發展而來的‘隨機森林’。所以,狹義的FEPA模型中的‘A’代表‘ANN’,而廣義的FEPA模型中的‘A’代表‘AI’。這個FEPA模型構成了深度智能投資理論的重要組成部分[18]。3.2 前向滑動EMD分解


3.3 主成分分析(PCA)
3.4 多層前饋神經網絡及后向傳播訓練算法
4 歷史數據及EMD分解圖示
4.1 數據來源及說明

4.2 滬深300股指的IMF分量

4.3 主成分分析后的特征值和累積貢獻率
5 具體FEPA預測模型實證與討論
5.1 具體FEPA預測模型的簡明表達
5.2 具體FEPA預測模型的效能測度
5.3 具體模型FEPA_HS300D1 預測滬深300股指日線收益率


5.4 具體模型FEPA_HS300M15 預測滬深300股指15分鐘線收益率


5.5 與其它現有模型的預測效能比較

6 結語