李 兵,高波涌,孫建明,余 翠
(1.中國計量大學 信息工程學院,浙江 杭州 310018;2.中國計量大學 經濟與管理學院,浙江 杭州 310018)
隨著我國金融創(chuàng)新的推進和計算機技術的飛速發(fā)展,量化交易這一證券投資方式已經具備了較成熟的發(fā)展條件。近年來,配對交易作為套利算法的一種,在我國股市投資中嶄露頭角。套利算法中的配對交易是一種經典的量化交易策略,屬市場中性策略。配對交易的具體思想是從市場上找出歷史股價走勢相接近的股票進行配對,當配對的股票價差偏離歷史均值時,則做空高股價股票的同時做多低股價股票,等待它們恢復到之前的均衡關系,并由此賺取兩只股票價格收斂過程中的收益。國外的配對交易通常建立在股市可以做空的機制下,而在我國目前股票還不能賣空,但我國融資融券和股指期貨的推出使得配對交易成為了可行且有效的證券投資策略。
盡管套利算法中的配對交易思想非常簡單,但由于其收益波動性小、穩(wěn)定且與市場無關等特性,在投資界被廣泛應用。配對交易的核心點在于找到高度相關的股票對以及股票對股價之間存在著的數量關系,同時這也是配對交易的困難所在。目前,傳統(tǒng)的配對交易主要有四種方法,包括相關系數、協(xié)整法[1]、隨機價差法[2]以及最小距離法[3]。在國內的研究中,王春峰等[4]基于一個衡量股票間價格差異的指標進行了股票組合配對。王春麗等[5]以相對價差代替絕對價差作為交易標的進行統(tǒng)計套利配對交易。但這些股票配對方法都假定股票對滿足特定的模式,這是一個很大的限制。實際中股票對之間的價格關系存在多種可能,不能以偏概全,這些方法尋找到的股票對可能只是其中的一部分。而且通常的配對交易方法只能用于尋找兩只股票之間的線性關系,而對于多只股票之間的復雜關系往往無能為力。多股票之間的配對交易研究在國內寥寥無幾。殷蕾等[6]將配對交易推廣到多股票上,提出了一種基于協(xié)整的多股票配對交易方法,相較于一直持有股票組合可以獲得超額收益。葉映彤等[7]使用棧式自動編碼器構建一個能夠根據股票價格相關性預測股票價格的模型,并生成一個完整的量化交易算法。
針對上述問題,本文將股票的基本面與量化方法結合,引入聚類的思想,使用K-means++算法在套利配對交易選擇股票對時打破行業(yè)的限制,從而發(fā)現被忽略的但可能存在配對機會的股票。然后在聚類的結果簇內,本文提出使用AdaBoost-ElasticNet算法來替換傳統(tǒng)的配對交易方法,來挖掘多只股票股價之間存在著的套利機會,形成一種新的套利算法。此外,本文使用同花順MindGo量化平臺進行回測來驗證這種套利算法的有效性和實戰(zhàn)價值。
在聚類問題中,K-means算法是將數據集劃分為K個簇,每個簇Cj的中心為cj(j=1,2,…,K)。在劃分的過程中,K-means算法的目的是找到K個簇中心使得聚類所得的劃分簇最小化平方誤差
(1)
K-means算法的初始簇中心是在數據集中隨機選取的,它只能找到局部最優(yōu)。K-means++算法[8]是針對這一問題的改進算法,K-means++算法在選取第n+1(0 Elastic-net算法[9]是一種聯合Lasso的L1正則化項和Ridge的L2正則化項作為懲罰項的線性回歸模型,起到了平衡模型稀疏性和非稀疏性的作用——減少了由于稀疏性所帶來的模型泛化能力不足與信息丟失的情況,同時緩解了非稀疏性模型的解釋性差和信息冗余的情況。 Elastic-net回歸系數可以表達為 (2) 式(2)中,Pα(w)是Elastic-net懲罰項,并且 (3) λ和α均是非負正則化參數.當α為0時,式(2)是Ridge回歸;當α為1時,式(2)是Lasso回歸。 AdaBoost算法[10]是最具代表性的提升算法。AdaBoost算法的主要思想是通過迭代每次學習一個基學習器,每次迭代中,提高那些被前一輪學習器預測相對誤差較大數據的權重,而降低那些相對誤差較小數據的權重。 對于回歸任務,根據第m次迭代的每個樣本相對誤差emi計算基學習器的權重系數αm,同時對訓練樣本的權重分布進行更新,如式(4)和(5): (4) (5) 式(5)中,Zm是規(guī)范化因子,wmi是第m次迭代時每個樣本的權重,N是數據集樣本數。 最后,根據迭代完以后的基學習器權重系數對基學習器進行線性組合,得到最終的強學習器G(x)如式(6): (6) 式(6)中,g(x)是所有αm·Gm(x),m=1,2,…,M的中位數,Gm(x)是每輪迭代學到的基學習器。 傳統(tǒng)套利算法中配對交易大多是在證券市場從同行業(yè)中找出歷史股價走勢相近的兩只股票進行配對,當配對股票的價差偏離歷史均值時,預期價差會恢復正常,所以對這兩只股票進行多空建倉,買入價格較低的股票,賣出價格較高的股票,等待兩只股票的價差恢復歷史均值時反向平倉,由此賺取股票價差收斂的收益。 本文基于AdaBoost-ElasticNet的套利算法思想如圖1。首先,選取滬深300成分股作為股票池,獲取估值、利潤、成長和運營這四大類財務因子數據作為股票的量化指標。同時,為避免偶然性,選取多年的財務數據。再通過股票財務數據對股票進行K-means++聚類。然后,在經過K-means++聚類得到的某個簇內選擇一只股票作為目標股票,假設其股價序列為Y,簇內除了目標股票以外所有其他股票的股價序列為(X1,X2,…,Xn),如果能找到一個函數f使得Y≈f(X1,X2,…,Xn),那么可以將f(X1,X2,…,Xn)視作一只與目標股票Y組成一個股票對的虛擬股票Y′。最后,參考配對交易的思想對該股票對進行套利。 圖1 基于AdaBoost-ElasticNet的套利算法Figure 1 An arbitrage algorithm based on AdaBoost-ElasticNet 在這里,經分析和實驗后本文提出使用AdaBoost-ElasticNet算法來描述Y與(X1,X2,…,Xn)之間的映射關系。AdaBoost-ElasticNet算法的主要思路是選擇Elastic-net算法作為AdaBoost的基學習器,通過一系列的提升迭代,反復學習得到大量基于Elastic-net算法的基學習器,最后通過對學到的基學習器進行線性組合得到最終的強學習器。 本文選取了2010年4月16日的滬深300成分股作為研究對象,剔除了在2008年4月16日后上市和在2018年4月16日前退市的18只股票,獲取這些股票2010年4月16日至2016年4月16日這7年的財務數據作為聚類原始數據集,獲取2010年4月16日至2018年4月16日每個交易日的股票收盤價來發(fā)掘股票股價之間的數量關系。其中2010年4月16日至2016年4月16日的股價數據為訓練數據,2016年4月17日至2018年4月16日的股價數據為測試數據。本文上市公司財務數據和股票價格數據來源于同花順。 由于披露出來的上市公司財務數據存在缺失,因此,本文剔除了缺失超過三分之二的財務因子,用平均值填補缺失少1/3的財務因子,得到的數據集中特征共297個。 另外,各財務因子數據的量綱不同以及不同股票股價范圍不同,因此需要對數據進行標準化處理。本文使用確保每個特征均值為0、標準差為1的z-score標準化處理: (7) 式(7)中,x為原始數據,x*為標準化后的數據,μ是原始數據的均值,δ是原始數據的標準差。 在傳統(tǒng)的套利配對交易中,開倉時會買入股票對中股價較低的,賣出股價較高的股票,平倉時反向操作。但在本文套利算法中,我們會得到一個關于目標股票Y的虛擬股票Y′,不存在一種方法可以在實際交易中構建出Y′,更無法買賣Y′,因此需要采用不同于傳統(tǒng)配對交易的交易手段。以下是一些可行的交易方法。 1)當Y和Y′價格出現偏差時,若Y 2)可以根據Y′的趨勢來交易Y來獲取盈利。當預測Y′上漲時,買入目標股票;當預測Y′下跌時,賣出目標股票。如果未來Y與Y′向同一個方向變化,那么就會盈利。 本文在對篩選后的282只股票進行K-means++聚類時采用的是自從2010年4月16日到2016年4月16日共7年的財務數據,數據中特征維相較于樣本維較大。因此,本文在對股票進行K-Means++聚類分析前使用主成分分析(Principal component analysis, PCA)來剔除數據中的冗余信息,降低聚類分析對異常點的敏感度,從而提高聚類的準確率和效率。本文在做主成分分析時保留了原始數據集85%的信息,數據特征維度從297降到45,經此方法有效降低了聚類數據集的維度。 在確定K-Means++聚類的K值時,本文參考了申銀萬國行業(yè)(以下簡稱申萬)分類標準。282只股票共被劃分為22個申萬一級行業(yè),59個申萬二級行業(yè),因此本文在15~70范圍內通過Elbow method[11]確定K值為42,即282只股票被分為42個簇。 本文提出的套利算法有效且能盈利的關鍵點在于預測得到的Y′是否與目標股票Y呈現類似的變動趨勢。本文采用均方根誤差(Root mean square error, RMSE)和平均絕對百分比誤差(Mean absolute percentage error, MAPE)來衡量算法預測得到的Y′與Y的變動趨勢差異.RMSE和MAPE的值均是越小越好。 (8) (9) 在聚類得到的42個簇中,有38個簇內的股票數量較少,經實驗,這些簇不適用本文策略。在剩余的4個簇中,實驗發(fā)現,在簇中選取一只股票作為目標股票的可行方法是,該簇內要有半數以上的股票與該股票的股價序列相關性大于0.8。 本文選取含有股票數量最多的一個聚類結果簇來挖掘該簇內股票股價中蘊含的套利機會。被選擇的簇內有88只股票,本文在簇內選取的符合條件的目標股票Y是深圳能源(000027),該簇內有46只股票與目標股票相關性在0.8以上。 為了挖掘多股票股價之間的數量關系,證明本文算法的性能可行性,本文嘗試了多種機器學習算法與本文算法對比。本文涉及到的算法參數均通過網格搜索來調節(jié)。 決策樹以及其他所有基于樹的回歸模型都不能外推(extrapolate),也不能超過訓練數據范圍之外,而本文的套利算法研究基于歷史數據,這其中隱含了時序關系,因此一旦未來某種股票的股價一直上漲或下降偏離了該股票歷史數據范圍且不再恢復,那么該套利算法將會失效。所以決策樹以及其他所有基于樹的模型均不能挖掘其中的數量關系。 將本文AdaBoost-ElasticNet算法分別與基于協(xié)整的傳統(tǒng)配對交易中使用的普通最小二乘法(OLS)、沒有經過提升的Elastic-net算法和支持向量機(SVM)算法進行了對比分析,預測能力如圖2所示。這四種算法的預測評價指標如表1。 圖2 四種算法的預測曲線Figure 2 Forecast curves of four algorithms 算法RMSEMAPEOLS7.057 2108.918 6SVR0.649 18.167 0Elastic net0.257 93.403 5本文算法0.198 02.590 7 實驗結果表明基于協(xié)整的傳統(tǒng)配對交易策略中使用的OLS算法并不能挖掘出本文套利算法中多只股票之間的數量關系。對于本文的問題,SVM算法的預測能力較差,Elastic-net算法有一定的預測能力,但也劣于本文算法。 結合本文套利算法思想和傳統(tǒng)方法策略思想上述預測結果存在差異的原因在于:第一,本文套利算法源于傳統(tǒng)配對交易策略,但又與之不同,這也正是OLS算法完全不適用而經過正則化的Elastic-net線性回歸模型具有預測能力的主要原因;第二,提升方法是進一步提升算法性能的有效手段。 前文給出了針對本文套利算法的交易方法,結合本文算法的預測能力,顯然第二種方法是比較適合的,即根據的Y′變動趨勢來交易目標股票Y。本文算法在回測中,若預測Y′的上漲幅度超過1%,則買入目標股票Y;若預測Y′下跌,則賣出目標股票Y。 為了了解本文套利算法的收益情況,本文使用了同花順MindGo中高效快捷的回測環(huán)境。同花順MindGo是一個AI量化交易平臺,擁有高質海量的金融數據,最接近真實市場環(huán)境的仿真交易平臺。在2016年4月16日至2018年4月16日,以10萬元為初始資金,對比目標是大盤滬深300指數和一直持有該目標股票。收益率變化曲線如圖3。另外,本文套利算法的最大回撤為2.05%,夏普比率為3.13。 圖3 收益率曲線Figure 3 Return curves 交易次數是一個可以衡量策略回測結果是否可靠的指標,過少的交易次數往往意味著回測結果不可靠。在圖3中,策略收益率曲線中的每一次轉折都代表著一次交易。在兩年的回測過程中,本文套利算法共觸發(fā)了78次交易,買入賣出股票各39次。這較好地證明了本文套利算法的有效性,說明了本文套利算法取得的高收益低回撤并不是一次屬于運氣好的偶然情況。 通過回測結果可以發(fā)現本文套利算法的收益不受大盤變化的影響——不管大盤趨勢是上漲還是下跌,本文套利算法均可獲得非??捎^的收益,這顯然符合配對交易是市場中性的這一特性。而且本文套利算法在獲得顯著收益的同時,大大地降低了最大回撤,提高了夏普比率。這表明本文套利算法在提高收益的同時,還可以降低承擔的風險,具有較強的實際應用價值。 本文提出了一種基于AdaBoost-ElasticNet的套利算法,其主貢獻在于使用K-means++聚類方法來打破傳統(tǒng)股票配對交易過程中備選股票對選取時的行業(yè)限制,而且運用機器學習算法代替?zhèn)鹘y(tǒng)配對交易中選擇股票對的方法,來尋找更多復雜、隱晦的套利機會。本文的套利算法為配對交易、套利提供了新的思路。從實驗結果來看,本文套利算法相較于跟隨大盤和一直持有個股可以獲得顯著的收益,2.05%的低最大回撤和3.13的高夏普比率說明了本文套利方法可以降低風險,這些表明了本文套利算法具有較強的實戰(zhàn)價值。 當然,本文套利算法還存在著值得研究和改進的地方,具體如下。 首先,本文套利算法是通過發(fā)掘歷史數據的數量關系來對股票進行交易的,這種模式會受到股價劇烈波動的影響。一旦某只股票的股價受到宏觀因素等的影響上漲或下跌且不再恢復,那么多只股票之間的數量關系可能不復存在,策略因此失效,需重新挖掘。而且數據波動的干擾會導致算法的預測能力不夠。在以后我們通過在線學習(Online learning)來捕捉多只股票之間最新的數量關系,或者使用高頻數據來減少時間的跨度,來保證這種套利算法的實時性和有效性。 其次,并不是所有的股票都可以挖掘出這種數量關系,而且滿足條件的股票并不是一直處于盈利狀態(tài),可能存在虧損。因此,在實際中,我們需要找出所有滿足條件的股票進行資產組合,通過持有資產的合理搭配,使得在保證收益的同時,又可以進一步降低投資風險。 最后,由于我國股市的T+1制度,當日買進的股票需要等到下一個交易日才能賣出,因此該套利算法在運行的過程中會錯失一些交易機會導致收益減少。而期貨市場是T+0制度,因此在以后的工作中,我們會通過遷移學習(Transfer learning)將本文套利算法思想應用到股指期貨中。1.2 Elastic-net算法
1.3 AdaBoost算法
2 基于AdaBoost-ElasticNet的多股票配對交易策略
2.1 基本思想
2.2 數據處理
2.3 交易方法
3 實驗與回測
3.1 聚類分析
3.2 預測能力
3.3 策略評價
4 結 論