基於奇異譜分析的均線擇時研究
奇異譜分析提取的趨勢線單點構成項更豐富、權重時變,其相對移動平均線受異常值影響更小,並且其末端點在上漲中對回調敏感性更強,下跌中對反彈更謹慎。原文鏈接:基於奇異譜分析的均線擇時研究
1.1 什麼是奇異譜分析
奇異譜分析是近年來興起的一種研究非線性時間序列數據的強大的方法。它根據所觀測到的時間序列構造出軌跡矩陣,並對軌跡矩陣進行分解、重構,從而提取出代表原時間序列不同成分的信號。如長期趨勢信號、周期信號、雜訊信號等,從而對時間序列的結構進行分析,並可進一步預測。
奇異譜分析(SSA)方法最早由colebrook於1978年首先在海洋學研究中提出並使用。Fracrich用一維時間序列在延遲相空間中做EOF展開,再通過顯著性檢驗研究確定有意義的特徵成分的個數,據此估計氣候吸引子的維數。這個工作被認為是SSA在氣象學中的最早應用。Hassani將這種方法引人到社會問題研究中來,並用其預測了美國交通事故的月時間序列數據。N.Golyandina給出了奇異譜分析的擴展形式一多通道奇異譜分析的演算法,並由Hossein Hassani用來對英鎊/美元匯率進行了分析預測,取得了較好的效果。
奇異譜分析的基本思想是,將所觀測到的一維時間序列數據:Y(T)=(y(1),?,y(T))
轉化為其軌跡矩陣
1.2 奇異譜分析的演算法
1.嵌入
選擇適當的窗口長度:m(2≤m≤T),將所觀測到的一維金融時間序列數據轉化為多維序列:X1,?,Xn,(Xi=(yi,?,yi+m?1),n=T?m+1),得到軌跡矩陣:X=[X1,?,Xn]=(xij)n,mi,j=1
這裡m的選取不宜超過整個數據長度的1/3,如可根據事先經驗大致確定數據的周期特徵,則m的選取最好為周期的整數倍。
2.svd分解(奇異值分解)
(1)在理解svd分解之前,我們先來了解下特徵值分解:
如果說一個向量v是方陣A的特徵向量,將一定可以表示成下面的形式:這時候λ就被稱為特徵向量v對應的特徵值,一個矩陣的一組特徵向量是一組正交向量。特徵值分解是將一個矩陣分解成下面的形式:
其中Q是這個矩陣A的特徵向量組成的矩陣,Σ是一個對角陣,每一個對角線上的元素就是一個特徵值。
首先,要明確的是,一個矩陣其實就是一個線性變換,因為一個矩陣乘以一個向量後得到的向量,其實就相當於將這個向量進行了線性變換。比如說下面的一個矩陣:
它其實對應的線性變換是下面的形式:
因為這個矩陣M乘以一個向量(x,y)的結果是:
上面的矩陣是對稱的,所以這個變換是一個對x,y軸的方向一個拉伸變換(每一個對角線上的元素將會對一個維度進行拉伸變換,當值大於1時,是拉長,當值小於1時時縮短),當矩陣不是對稱的時候,假如說矩陣是下面的樣子:
它所描述的變換是下面的樣子:
這其實是在平面上對一個軸進行的拉伸變換(如藍色的箭頭所示),在圖中,藍色的箭頭是一個最主要的變化方向(變化方向可能不止一個),如果我們想要描述好一個變換,那我們就描述好這個變換主要的變化方向就好了。反過來看之前特徵值分解的式子,分解得到的Σ矩陣是一個對角陣,裡面的特徵值是由大到小排列的,這些特徵值所對應的特徵向量就是描述這個矩陣變化方向(從主要的變化到次要的變化排列)
當矩陣是高維,那麼這個矩陣就是高維空間下的一個線性變換,線性變化可能無法通過圖來表示,但是可以想像,這個變換同樣也有很多變換方向。通過特徵值我們分解得到前N個特徵向量,那麼就對應了這個矩陣最主要的N個變化方向。我們利用這前N個變化方向,就可以近似這個矩陣(變換)。也就是之前說的:提取這個矩陣最重要的特徵。
總結:特徵值分解可以得到特徵值與特徵向量,特徵值表示的是這個特徵的重要性,而特徵向量表示這個特徵是什麼,可以將每一個特徵向量理解為一個線性的子空間,我們可以利用這些線性的子空間干很多的事情。不過,特徵值分解也有很多的局限,比如說變換的矩陣必須是方陣。
(2)奇異值分解
特徵值分解是一個提取矩陣特徵很不錯的方法,但是它適用於方陣。現實生活中,我們看到的大部分矩陣都不是方陣。比如有N個學生,每個學生有M科成績,這樣形成的一個N * M的矩陣就不可能是方陣,我們怎樣才能描述這樣普通的矩陣呢的重要特徵呢?奇異值分解可以用來干這個事情,奇異值分解是一個能適用於任意的矩陣的一種分解的方法:
V是n*n的正交陣,U是m*m的正交陣,Σ是m*n的對角陣。
那麼奇異值和特徵值如何對應呢?首先,我們將一個矩陣A的轉置 * A,將會得到一個方陣,我們用這個方陣求特徵值可以得到:
這裡得到的v,就是我們上面的右奇異向量。此外我們還可以得到:
σ就是奇異值,u就是左奇異向量。奇異值σ跟特徵值類似,在矩陣Σ中也是從大到小排列,而且σ的減少特別的快。在很多情況下,前10%甚至1%的奇異值的和就佔了全部的奇異值之和的99%以上了。也就是說,我們也可以用前r大的奇異值來近似描述矩陣:
r是一個遠小於m、n的數, 右邊的三個矩陣相乘的結果將會是一個接近於A的矩陣,在這兒,r越接近於n,則相乘的結果越接近於A。
了解了svd分解,我們在第二步將嵌入所得的矩陣進行svd分解,得到m個奇異值及對應左奇異向量、右奇異向量。
3.分組首先了解下奇異值的貢獻率:
假設有N個奇異值a1,a2...aN。定義第i個奇異之的貢獻率為:ai/∑Ni=1ai我們選擇前(從大到小排)r個奇異值 ,使他們的貢獻率之和大於一定閾值 (例如80%)
(研報《基於奇異譜分析的均線擇時研究》中只使用了第一個奇異值。)
4.重構
按照上面的公式完成對矩陣的重構,再對原序列重構,在下一節再介紹。
1.3 對角平均法重構原序列
假設經過svd分解重構後的矩陣為:
則重構序列,寫成公式:
1.4代碼實現SSA的計算
代碼中按照研報內容,取第一奇異向量。(點擊閱讀原文,查看源碼)
1.5 不同窗口m下SSA的效果
經過奇異譜分析的時間序列按照窗口長度m不同,考察的趨勢周期不同,同MA一樣,短窗口SSA考察短期趨勢,長窗口SSA考察長期趨勢。
註:限制m<= t/2一般取 t= 2*m,使得矩陣在列滿秩的情況下盡量小,因為若 t 取的過長,不僅計算速度變慢,趨勢線靈敏度也會下降。(但是這裡比較m的不同的效果,t我們直接取全數據長度)
如下圖所示,m取得越大,丟棄的信息越多。因為m越大,svd分的奇異值越多,第一奇異向量的信息也相對減少。
1.6 SSA各成分分量的重構
觀察下圖可以發現,第一成分的重構圖保留了原序列的主要趨勢,為趨勢分量,這也是為什麼只選用第一成分的原因。
2.1 對末段點刻畫的比較
以窗口參數為3的SSA為例,假設有價格序列[x1,x2,x3,x4,x5],對應移動窗口矩陣如下:
假設對其協方差陣奇異值分解得到的第一主成分方向為:
則重構矩陣為:
從而對角平均求出趨勢線為:
從擇時策略的角度來說,最關心的是趨勢線末端的形態和變化,要及時準確的抓住市場的趨勢離不開對趨勢線末端的精準判斷。SSA趨勢線的末端與MA趨勢線的末端不同。從以窗口參數為3的MA和SSA示例中可看到MA末端點由價格序列末3項等權平均組成,SSA末端點同樣由價格序列末3項構成,但權重大小和參數 a1,a2,a3 的大小對應,具有時變特徵。
奇異譜分析趨勢線的特點在於,在上漲趨勢中,第一主成分方向參數大小關係為a1 < a2 < a3 ,下跌趨勢中,參數大小關係為 a1 > a2 > a3,從而對應的趨勢線末端點
各個構成項權重大小表現出在上漲趨勢中新數據比舊數據權重大(權重遞增),下跌趨勢中舊數據比新數據權重大(權重遞減)的特點。簡而言之,由於MA對窗口內參數是等權重的,權重時變的SSA末端點在上漲趨勢中對回調的敏感性相對MA更強,下跌趨勢中對反彈的確認相對MA更謹慎。
在研報《基於奇異譜分析的均線擇時研究》中,對SSA序列和MA序列作了模擬測試,在疊加服從高斯分布的白雜訊序列後,模擬10000次,對於先增後減序列,MA5末端有2411例呈下跌趨勢,SSA5末端有7204例呈下跌趨勢,對於先減後增序列,MA5末端有7583例呈上漲趨勢,SSA5端有1734例呈上漲趨勢。表明在雜訊影響下,SSA相比MA仍能反映出對回調的高敏感性和對反彈的謹慎性。然後我們簡單測試下效果:
從上圖中我們發現: 價格序列有4次下降,其中有3次下穿SSA早於MA,而另一次則兩條均線都失效; 價格序列有3次反彈,其中3次上穿SSA均早於MA。(怎麼跟說好的反彈謹慎不一樣??)不過可以看出,SSA比MA確認趨勢更快!當然,這裡樣本比較少,也許沒什麼說服力,下面就比較下SSA、MA均線策略的效果!
2.2 MA、SSA單均線策略比較
MA單均線:收盤價上穿MA(n=5)做多,下穿MA(n=5)做空
SSA單均線:收盤價上穿SSA(m=5)做多,下穿SSA(m=5)做空
測試標的滬深300指數日線,測試時間2007年1月至2016年4月
從凈值曲線可以看出,SSA單均線策略是完爆MA均線的,具體的,我們可以看看策略的表現:MA單均線策略最終凈值132.57%,年化收益率3.17%,最大回撤-52.05%,SSA單均線策略最終凈值211.70%,年化收益率8.66%,最大回撤-39.09%。在2011年到2014年上半年的震蕩市中,明顯可以看到SSA替代MA提高了策略效果。由於SSA在震蕩市中能夠更快速的確認趨勢結束,因此由小優勢慢慢累積可形成較大的相對優勢。但是對趨勢結束的高敏感性同樣會導致策略在市場有大趨勢的情況下會因為一些趨勢結束的偽信號而被提早震出、反向操作,因此在2015年後半年SSA策略凈值波動劇烈。
2.3多窗口SSA趨勢線組
利用SSA相對MA更不易受到極端值影響的優勢,同時為了最大程度緊跟市場趨勢,我們以趨勢線末端點的相對漲跌來判斷趨勢。具體的在T時刻 SSAm(T)若大於(小於)SSAm(T-1) ,就認為依據此趨勢線判斷市場處於上漲(下跌)趨勢。
單一SSA趨勢線僅考察單一周期下的市場趨勢,判斷不夠全面。本報告的擇時策略採用多窗口SSA趨勢線組末端趨勢共同判斷市場方向。不同窗口長度的SSA考量的是價格序列在不同周期長度下的趨勢變化,我們希望在大部分趨勢線判斷統一的情況下進行操作,從而相當於給趨勢的判斷增加一個過濾。
我們以五趨勢線組(m=15,20,25,30,35)為例來對趨勢進行判斷,這裡我們按照多數原則形成交易信號,即趨勢線多數末端上漲即認為上漲,多數末端下跌即認為下跌。
圖中紅色表示趨勢線看漲信號,綠色表示看跌信號。 從上到下依次為 SSA15,SSA20,SSA25,SSA30,SSA35
多數原則處理後的看漲看跌信號
然後計算多數原則的判斷,與各條均線判斷的重疊率(即看漲看跌相同)。
最終的判斷結果在93.86%的時間裡和中樞趨勢線(SSA25)相同,高於其他趨勢線(SSA15:85.66%,SSA20:90.53%,SSA30:92.39%,SSA35:89.07%)。因此對於趨勢線組來說,最終的判斷結果主要由其中樞趨勢線決定,但由於其他趨勢線信號的過濾作用,結果並不完全一樣。
基於奇異譜分析的擇時策略
均線擇時策略屬於動量策略,其策略構造往往涉及趨勢的確認,趨勢的跟隨,趨勢結束的確認和離場等過程,一般只適應趨勢市而不適應震蕩市。一個良好的均線擇時策略應當能夠在趨勢市中抓住主要趨勢,並在震蕩市中保持穩定,避免過多的回撤。本節考察多窗口SSA趨勢線組的擇時效果。
3.1 參數選擇
多窗口SSA趨勢線組作為一個趨勢判斷系統,其變數包含:
1、趨勢線的數量
2、趨勢線窗口參數選擇
由於趨勢線組對趨勢的判斷採用多數規則,因此趨勢線組數量要求為奇數,從而方便策略設計。我們分別採用單趨勢線,3趨勢線組,5趨勢線組進行回測。
為了減小計算量,備選的趨勢線窗口參數按等間隔取[5,10,15,20,25,30,35]。回測標的為滬深300指數,回測尺度為日線,回測區間為2005年1月到2016年4月,交易費用雙邊0.2%。
先確定參數的所有組合(排列組合問題),單均線的有7種策略;3均線的有35種策略;5均線的有21種策略,總計63種。 (原文中選取最多7均線,被選為[5,10,15,20,25,30,35,40,45,50],總計502組參數,計算量太大,有興趣的小夥伴可以試試)
3.2 整合回測函數及回測表現計算函數
先自行測試一組想測的組合~ 如[5,10,20]
3.3 所有參數組合回測
3.3.1 單趨勢線回測表現
如下表:效果最佳的策略中樞趨勢線窗口參數為35,可以看到單SSA趨勢線作為趨勢判斷系統最大回撤非常高,單SSA趨勢線整體在震蕩行情中考察的周期單薄,無法有效跟隨趨勢。
3.3.2 三趨勢線回測表現如下表:我們取出凈值最高的10組進行觀察。我們發現,表現靠前的組合帶有25,30,35趨勢線的情況較多,且輔以10,5這樣的短窗口線,可以更好的過濾偽信號。
然而,在研報中也是含中樞線30的組合表現的最好,但是在這裡30並不是中樞線。因此,難道是30這條趨勢線本身就有一定的trick?
3.3.3 三趨勢線回測表現如下表:我們取出凈值最高的10組進行觀察。5趨勢線最佳參數組與3趨勢線最佳參數組相比夏普率更高,但總體來看策略效果較3趨勢線組有所降低,但最大回撤有所減小。
總結
本文致力復現了研報《基於奇異譜分析的均線擇時研究》中大部分內容,不過內容上還是有很多出入,例如策略回測效果不如文中寫的那麼好(最高凈值40.95)。不過還是可以看出,相比MA,SSA在趨勢確認方面是明顯優於MA的,可以更有效的提取趨勢。
多窗口SSA趨勢線組有兩個可變維度,一個是趨勢線的數量,一個是窗口參數的選擇,本文回測了單趨勢線,3趨勢線組,5趨勢線組的策略結果,發現從趨勢線數量的角度來說,單趨勢線判斷考察的周期單一,容易在震蕩市中有較大虧損,隨著趨勢線的增加,判斷穩定性增強,策略的收益有較大提高,最大回撤減小。但是過多的趨勢線會導致系統受到短期波動和長期趨勢雙方共同影響,判斷無法有效統一,因此利用3條趨勢線共同判斷是較好的選擇。
參考文獻
1.國泰君安研報:《基於奇異譜分析的均線擇時研究》劉富兵
2.機器學習中的數學(5)-強大的矩陣奇異值分解(SVD)及其應用3.奇異值分解(SVD)原理詳解及推導 4.奇異譜分析-MBA智庫百科歡迎到社區探討交流
推薦閱讀:
※TDA 導向的深度學習架構
※目前的時間序列預測的state of the art 方法?
※小白學數據 | 除了計算大姨媽周期,時間序列分析還有什麼用
※時間序列數據的聚類有什麼好方法?
※如何判斷時間序列是否是白雜訊?