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