王煒鵬
(同濟(jì)大學(xué)電子與信息工程學(xué)院計(jì)算機(jī)技術(shù)系,上海201804)
隨著智能科技與經(jīng)濟(jì)的發(fā)展,人工智能也在各行各業(yè)中得到應(yīng)用,尤其是在量化交易相關(guān)的領(lǐng)域中。在量化交易的預(yù)測研究中,對股市的預(yù)測一直是一個熱門的課題,也產(chǎn)生了許多關(guān)于股價預(yù)測的算法。量化交易是指以先進(jìn)的數(shù)學(xué)模型替代人為的主觀判斷,利用計(jì)算機(jī)技術(shù)從大量的歷史數(shù)據(jù)中選出能帶來超額收益的“大概率”事件以制定策略,減少投資者因情緒波動帶來的影響,避免在市場極度狂熱或悲觀的情況下做出非理性的投資決策。
長久以來,對于金融市場的經(jīng)濟(jì)學(xué)分析已經(jīng)有了比較成熟的理論,自從有效性市場假說[1-2]提出之后,該假說就被奉為經(jīng)典金融理論。隨著時間的推移,與有效市場假說相背離的金融現(xiàn)象相繼被發(fā)現(xiàn),由此形成了關(guān)注人類交易心理和行為的行為金融學(xué)。但由于實(shí)際環(huán)境中的金融市場并不像行為金融學(xué)所說的持續(xù)無效,相反,很多金融現(xiàn)象在被公眾熟知后出現(xiàn)了減少或消失的跡象。由此產(chǎn)生了適應(yīng)性市場假說[3-4],該假說的提出表明金融市場是一個不斷進(jìn)化的環(huán)境,回報(bào)和收益之間的關(guān)系不會是一直穩(wěn)定的。
隨著大數(shù)據(jù)和人工智能相關(guān)技術(shù)的發(fā)展,量化交易也迎來了飛速的發(fā)展,和當(dāng)下流行的神經(jīng)網(wǎng)絡(luò)模型,深度學(xué)習(xí)模型[5]和強(qiáng)化學(xué)習(xí)[6-7]等模型相結(jié)合,對交易數(shù)據(jù)的特征挖掘,成本控制效果有了十分顯著的提升。神經(jīng)網(wǎng)絡(luò)作為一種大規(guī)模并行處理的非線性系統(tǒng),依據(jù)數(shù)據(jù)本身的內(nèi)在聯(lián)系建模,具有良好的適應(yīng)性與自學(xué)習(xí)能力、較強(qiáng)的抗干擾能力,但是由于股票市場的有效性理論和適應(yīng)性理論的影響,傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)模型并不能有一個比較好的預(yù)測表現(xiàn),同時由于市場風(fēng)格的變化,傳統(tǒng)的靜態(tài)參數(shù)模型需要不斷訓(xùn)練才能適應(yīng)不同的市場風(fēng)格。然而,長時間的模型訓(xùn)練時間會使投資者錯失入場時機(jī),進(jìn)而帶來不可避免的投資風(fēng)險。由于量化交易市場的風(fēng)險對于最終收益的影響更大,也是投資者更加關(guān)注的方面,深度強(qiáng)化學(xué)習(xí)[8]的探索和利用機(jī)制以及即時回報(bào)函數(shù)的確定可以優(yōu)雅地解決這一方面的問題,在策略函數(shù)和收益函數(shù)中加入風(fēng)險收益平衡因子可以在執(zhí)行交易策略的同時,權(quán)衡風(fēng)險與收益,使得在交易過程中,同時兼顧風(fēng)險與收益,保持兩者的平衡。
本文設(shè)計(jì)了一個基于深度強(qiáng)化學(xué)習(xí)的交易模型風(fēng)險控制算法,并首次將其應(yīng)用于中國股票市場的日內(nèi)高頻交易中。該算法在基于值函數(shù)的深度強(qiáng)化學(xué)習(xí)模型DQN[9]中,利用網(wǎng)格交易算法的思想構(gòu)建動作集合和即時收益函數(shù),為了進(jìn)一步控制風(fēng)險,本文設(shè)計(jì)的模型在即時收益函數(shù)中加入了風(fēng)險和收益因子,使智能體在學(xué)習(xí)過程中綜合考慮風(fēng)險和收益,進(jìn)而達(dá)到在交易過程中控制風(fēng)險、降低最大回撤的效果。
中國股市大部分時間都處于震蕩趨勢,而在日內(nèi)高頻交易中,由于受到大環(huán)境的影響較小,股價的震蕩趨勢更加明顯。網(wǎng)格交易算法由量化交易鼻祖西蒙斯發(fā)明,是常見的量化交易算法之一,也是一種可以被設(shè)計(jì)成純自動化機(jī)器交易的算法。網(wǎng)格交易算法適用于在股市震蕩的行情中交易,其主要思想是“追跌,殺漲”,反復(fù)高賣低買賺取震蕩行情差價,少量多次地進(jìn)行股票買賣,讓利潤積少成多。因此,網(wǎng)格交易可以在保證有一定收益的前提下,降低股票價格波動帶來的風(fēng)險,從而使投資者盡可能獲得最大收益,實(shí)現(xiàn)資產(chǎn)保值。
網(wǎng)格交易算法的具體流程:首先,規(guī)定網(wǎng)格數(shù)量和網(wǎng)格間隔,每個網(wǎng)格代表一個價格區(qū)間,接著,當(dāng)股票價格跌至價格區(qū)間中的買入點(diǎn)時買入股票,如果股價繼續(xù)下跌,則在每個網(wǎng)格的買入點(diǎn)分別進(jìn)行加倉,每次買入時的股價呈等差數(shù)列遞減的趨勢,同時保證每次買入的份額相同或每次買入所使用的資金相同,以此逐步降低持倉成本,然后,當(dāng)股價開始回升,若股價高于價格區(qū)間中的賣出點(diǎn)時,逐步賣出持倉,賣出股票的數(shù)量分別是分次加倉時每次買入股票的數(shù)量,賣出時的股價呈等差數(shù)列遞增的趨勢,同時保證每次賣出時的股價分別比每次買入時的股價高,做到分檔賣出且每次賣出都有收益。
表1 網(wǎng)格交易算法模擬交易記錄
表1 是根據(jù)網(wǎng)格交易算法,在某一時期對某一支股票的進(jìn)行交易的模擬交易記錄。其中,最左側(cè)的操作列表示,根據(jù)網(wǎng)格交易算法,以當(dāng)前價格對股票進(jìn)行的相應(yīng)操作;當(dāng)股價在1.1 元到1.7 元之間波動時,規(guī)定網(wǎng)格數(shù)量為3,網(wǎng)格間隔為0.2 元,即,每個網(wǎng)格的價格區(qū)間長度是0.2 元,每次買入或賣出的股票數(shù)量是2000 股。當(dāng)股價從1.7 元跌到1.1 元時,分次加倉,買入股票,每次以網(wǎng)格區(qū)間內(nèi)的交易價格買入2000 股;當(dāng)股價開始回升,逐步賣出持倉,每次以網(wǎng)格內(nèi)的交易價格賣出2000 股,直至回到初始持倉量。最后,每個網(wǎng)格的盈利為400 元,網(wǎng)格交易算法的總盈利為1200元。雖然上述模擬交易記錄省略了交易手續(xù)費(fèi)的計(jì)算,但是其盈利率依然較為可觀。
由上可見,網(wǎng)格交易算法的優(yōu)點(diǎn)十分明顯,在低買高賣的原則下,分次買入,然后按照收益情況分次賣出,雖然每一次買賣的收益比較有限,但是在一個完整的股價波動周期中,整體的收益依然較為可觀。同時,由于每次的買賣量都相同,這樣的操作降低了由于股價波動帶來的交易風(fēng)險。
但是,傳統(tǒng)網(wǎng)格交易算法依然有其局限性。在股市出現(xiàn)較長時間單邊市場的時候,投資收益率受到的影響較大。當(dāng)股價長期單邊下跌時,會出現(xiàn)跌破最低價和爆倉的情況,這種現(xiàn)象被稱為“破網(wǎng)”;當(dāng)股票價格單邊上漲時會出現(xiàn)提前止盈和空倉的情況,當(dāng)這兩種情況出現(xiàn)時,傳統(tǒng)網(wǎng)格交易算法往往并不能取得較好的收益。
強(qiáng)化學(xué)習(xí)是機(jī)器學(xué)習(xí)的重要分支之一,和監(jiān)督學(xué)習(xí)與無監(jiān)督學(xué)習(xí)不同,強(qiáng)化學(xué)習(xí)無需依賴專家系統(tǒng),也不需要對訓(xùn)練環(huán)境進(jìn)行預(yù)先建模,并能在訓(xùn)練過程中保持實(shí)時學(xué)習(xí)和終生學(xué)習(xí)的特性。強(qiáng)化學(xué)習(xí)模型以馬爾可夫決策理論為基礎(chǔ)構(gòu)建,適用于處理連續(xù)決策的問題。如圖1 所示,強(qiáng)化學(xué)習(xí)模型主要包含四大要素:智能體、環(huán)境、動作和即時獎勵,在一個基本的強(qiáng)化學(xué)習(xí)模型中,智能體通過執(zhí)行相應(yīng)的動作和環(huán)境進(jìn)行交互,在執(zhí)行動作之后,智能體會獲得即時回報(bào)并積累經(jīng)驗(yàn),通過不斷地訓(xùn)練,智能體最終會學(xué)習(xí)到一個能盡可能獲得最大總回報(bào)的動作策略。
圖1 強(qiáng)化學(xué)習(xí)模型
但是,當(dāng)傳統(tǒng)強(qiáng)化學(xué)習(xí)模型應(yīng)用在高維狀態(tài)空間或動作空間連續(xù)的情境時,需要將所有狀態(tài)都存在內(nèi)存中,就會出現(xiàn)“維度災(zāi)難”的問題。深度學(xué)習(xí)的快速發(fā)展為這一問題的解決提供了方案。DeepMind 提出的深度強(qiáng)化學(xué)習(xí)模型DQN 將卷積神經(jīng)網(wǎng)絡(luò)模型(CNN)和傳統(tǒng)的強(qiáng)化學(xué)習(xí)模型Q-learning 相結(jié)合,解決了Q-learning 在處理高維數(shù)據(jù)時出現(xiàn)的“維度災(zāi)難”的問題[9]。
在Q-learning 模型中,將動作價值函數(shù),即,Q 值函數(shù)的更新公式定義為:
其中Q(st,at)表示在第t 個時間步的狀態(tài)st下執(zhí)行動作at的Q 值,α表示學(xué)習(xí)率,γ表示折價系數(shù)。將公式(1)不斷迭代,可以求得最終的迭代公式:
根據(jù)公式(2),可以構(gòu)造深度強(qiáng)化學(xué)習(xí)模型DQN來對Q 值函數(shù)進(jìn)行擬合。如圖2 所示,DQN 模型構(gòu)建了經(jīng)驗(yàn)池,動作生成網(wǎng)絡(luò)和目標(biāo)網(wǎng)絡(luò),將動作生成網(wǎng)絡(luò)與環(huán)境交互產(chǎn)生的樣本存入經(jīng)驗(yàn)池,在經(jīng)驗(yàn)池中,每個樣本都是
由上,在DQN 模型中,第i 次迭代的動作目標(biāo)值函數(shù)為:
其中,θ" 表示目標(biāo)網(wǎng)絡(luò)的參數(shù),At+1表示在狀態(tài)st+1下,可以執(zhí)行的動作集合,Rt表示在第t 步下。此時,動作生成網(wǎng)絡(luò)擬合出的Q 值函數(shù)為q(st,At,θ),其中θ表示動作生成網(wǎng)絡(luò)的參數(shù),使用Li(θ)=(yiq(st,At,θ))2作為損失函數(shù),并利用梯度下降法不斷更新θ,并在一定的迭代次數(shù)之后,用θ替代目標(biāo)網(wǎng)絡(luò)中的參數(shù)θ" ,再繼續(xù)進(jìn)行迭代訓(xùn)練,得到最終的動作生成網(wǎng)絡(luò)。
圖2 DQN模型
由上可見,深度強(qiáng)化學(xué)習(xí)模型同時擁有深度學(xué)習(xí)模型強(qiáng)大的特征提取能力和強(qiáng)化學(xué)習(xí)模型的環(huán)境適應(yīng)能力,可在較為復(fù)雜的應(yīng)用環(huán)境中有較好的表現(xiàn)。本文使用的就是上述DQN 模型,并將該模型與網(wǎng)格交易算法相結(jié)合,構(gòu)建了一個基于深度強(qiáng)化學(xué)習(xí)的交易模型風(fēng)險控制算法。
本文借鑒了網(wǎng)格交易算法中的等份額買入賣出法構(gòu)建深度強(qiáng)化學(xué)習(xí)中的動作集合,每次買入和賣出的股票數(shù)量都是相同的,同時,為了使模型能在交易中進(jìn)一步控制風(fēng)險,在單邊下跌市場中能及時止損,還加入了清倉動作,即賣出當(dāng)前所有的股票多頭頭寸,以此來控制單邊下跌帶來的風(fēng)險和最大回撤。由上,本文設(shè)計(jì)的深度強(qiáng)化學(xué)習(xí)的動作集合為<買入100 股,持有,賣出100 股,清倉>,使用0 至3 一共4 個標(biāo)簽來分別表示這4 個動作。
在即時回報(bào)函數(shù)reward 的設(shè)計(jì)中,本文設(shè)計(jì)的深度強(qiáng)化學(xué)習(xí)模型加入了風(fēng)險和收益因子的影響,使用了夏普比率和最大回撤率。夏普比率的計(jì)算公式為:
其中,Rf表示無風(fēng)險收益率,本文使用的是短期國債利率,選取Rf=2%;E(Rt) 表示投資策略的收益期望,S(Rt)表示策略的收益標(biāo)準(zhǔn)差。由公式(4)可知,夏普比率綜合考慮了收益和風(fēng)險,表示在承擔(dān)一個單位風(fēng)險的情況下,投資策略可以獲得的超額收益,是量化交易領(lǐng)域常見的風(fēng)險收益因子。
最大會回撤率的計(jì)算公式如下:
其中,netWorthi表示第i 時刻的賬戶總資產(chǎn),j 表示在第i 時刻之后的某一時刻。由公式(5)可知,最大回撤率可以用來表示投資策略的抗風(fēng)險能力,其實(shí)際意義可以理解為該投資策略可能帶來的最大虧損。
為了使得智能體能在交易中利用網(wǎng)格交易“追跌,殺漲”的思想進(jìn)行交易,本文在即時回報(bào)reward 函數(shù)的設(shè)計(jì)中,采用了對各個動作分別設(shè)計(jì)即時回報(bào)reward函數(shù)的方法。對于買入100 股動作,reward 為執(zhí)行買入動作后平均每股的買入成本下降的價格,若股價下跌,買入加倉,平均每股買入成本下降,reward 為正數(shù),反之,股價上漲時買入,平均每股買入成本上升,reward為負(fù)數(shù)。對于賣出100 股動作,reward 為執(zhí)行賣出動作后賬戶總資產(chǎn)相對于上一時刻的增長量,若賬戶總資產(chǎn)增長,則reward 為正數(shù),反之為負(fù)數(shù)。對于持有動作,reward 為當(dāng)前時刻下賬戶總資產(chǎn)的二階差分,賬戶總資產(chǎn)的二階差分可以用來表示賬戶總資產(chǎn)增長或下跌速度的變化量,當(dāng)賬戶總資產(chǎn)的增長速度在增加或是下跌速度在減少時,reward 為正數(shù),當(dāng)總資產(chǎn)的增長速度減少或是下跌速度增加時,reward 為負(fù)數(shù)。對于清倉動作,reward 為清倉后資產(chǎn)總市值和賬戶初始資金的差值,即賬戶的最終盈利。最后,將計(jì)算出的re?ward 值與當(dāng)前時刻下賬戶總資產(chǎn)最大回撤率和夏普比率的一階差分求和作為最終的reward 值。同時,為了減少網(wǎng)格交易中由于爆倉而出現(xiàn)的“破網(wǎng)”現(xiàn)象和由于過早止盈產(chǎn)生的空倉現(xiàn)象,在reward 的計(jì)算中,也對這兩種情況設(shè)置了較大的懲罰值。
本文設(shè)計(jì)的基于深度強(qiáng)化學(xué)習(xí)的交易模型風(fēng)險控制算法中,動作生成網(wǎng)格和目標(biāo)網(wǎng)絡(luò)的網(wǎng)絡(luò)結(jié)構(gòu)相同,其網(wǎng)絡(luò)結(jié)構(gòu)如圖3 所示,該網(wǎng)絡(luò)將環(huán)境和自身狀態(tài)的觀察值作為輸入,經(jīng)過兩層卷積神經(jīng)網(wǎng)絡(luò)和池化層,最后是兩層全連接層,最后一層輸出層為4 個節(jié)點(diǎn),輸出在該狀態(tài)下各個動作的Q 值。
圖3 網(wǎng)絡(luò)結(jié)構(gòu)
由于股票日內(nèi)交易數(shù)據(jù)的震蕩趨勢與股市大環(huán)境和行業(yè)的關(guān)聯(lián)性并不明顯,因此,本文使用的是中國股市券商板塊個股的高頻交易數(shù)據(jù),股票選取的是中信證券,股票代碼為600030,時間間隔選取1 分鐘,即在一天內(nèi)有240 條交易數(shù)據(jù),每條交易數(shù)據(jù)包含開盤價、收盤價、最高價、最低價、成交量和成交金額一共6 項(xiàng)指標(biāo),時間跨度為從2017 年1 月4 日至2020 年3 月1日。目的是判斷本文設(shè)計(jì)的基于深度強(qiáng)化學(xué)習(xí)的交易模型風(fēng)險控制算法在股價處于震蕩趨勢的環(huán)境中是否能有較好的收益。本文將2017 年1 月4 日至2019 年11 月30 日的數(shù)據(jù)作為訓(xùn)練集,2019 年12 月2 日至2020 年3 月1 日的數(shù)據(jù)作為測試集。在實(shí)驗(yàn)過程中,智能體的觀察值包括最近5 分鐘的日內(nèi)交易數(shù)據(jù)和賬戶狀態(tài)數(shù)據(jù)。賬戶狀態(tài)數(shù)據(jù)包含賬戶余額,賬戶資產(chǎn)總值,持倉成本,當(dāng)前持倉量,賬戶交易總量和歷史最高資產(chǎn)總值這6 項(xiàng)數(shù)據(jù)。因此,智能體每次的觀察值為一個大小為6×6 的二維矩陣。在數(shù)據(jù)預(yù)處理過程中,首先,將每日集合競價時間段內(nèi)的交易數(shù)據(jù)去除;然后,將交易數(shù)據(jù)和賬戶狀態(tài)數(shù)據(jù)分別做歸一化,歸一化都采用除以最大值的方法進(jìn)行歸一化;最后,將滑動窗口的步長設(shè)為1,可以得到每一秒的智能體觀察值。
本文在實(shí)驗(yàn)過程中將賬戶的初始資金設(shè)置為十萬元人民幣,并與策略梯度法中的PPO2 算法買入持有策略進(jìn)行對比,為了更加貼近實(shí)際情況,本文在實(shí)驗(yàn)過程中,將每一次買賣的手續(xù)費(fèi)設(shè)置為萬分之2.5,當(dāng)手續(xù)費(fèi)不滿5 元時,按5 元計(jì)算。
將三種方法在測試集上的結(jié)果繪制成如圖5 所示的資產(chǎn)凈值曲線圖,由圖可知,使用本文設(shè)計(jì)的基于深度強(qiáng)化學(xué)習(xí)的交易模型風(fēng)險控制算法的投資收益率為22.27%,夏普比率是0.69,最大回撤率是2.3%;使用PPO2 算法的投資收益率為1.5%,夏普比率是0.02,最大回撤率是6.4%;使用買入持有策略的投資收益率為8.4%,夏普比率是0.12,最大回撤率是17%。
分析結(jié)果可知,本文設(shè)計(jì)的基于深度強(qiáng)化學(xué)習(xí)的交易模型風(fēng)險控制算法相比于PPO2 算法和買入持有策略具有更高的夏普比率和更低的最大回撤率,證明了該算法在股價震蕩趨勢中能夠做到在保證有一定收益的情況下盡可能降低最大回撤率。策略梯度法雖然相對于買入持有策略有更小的最大回撤率,但是在股價震蕩趨勢中沒有明顯優(yōu)勢,會出現(xiàn)在判斷失誤時重倉買入的情況,進(jìn)而影響了整體的收益率。
本文設(shè)計(jì)了一個基于深度強(qiáng)化學(xué)習(xí)的交易模型風(fēng)險控制算法,將深度強(qiáng)化學(xué)習(xí)模型和網(wǎng)格交易算法相結(jié)合,利用網(wǎng)格交易算法的思想構(gòu)建深度強(qiáng)化學(xué)習(xí)模型中的動作集合與即時回報(bào)函數(shù),并首次將該算法應(yīng)用于中國股市的日內(nèi)交易數(shù)據(jù),以此來測試該算法在日內(nèi)交易價格波動情況下的適應(yīng)性,最后取得了較好的效果。本文提出的算法以5 分鐘的日內(nèi)交易數(shù)據(jù)和賬戶狀態(tài)數(shù)據(jù)作為輸入,直接輸出各個動作的Q 值,并選取Q 值最大的動作進(jìn)行交易。本文提出的方法適用于賬戶底倉充足的情況下,并且未考慮日內(nèi)借券做空的操作,因此在實(shí)驗(yàn)效果上依然具有提升空間。本文將該算法和策略梯度方法中的PPO2 方法進(jìn)行了比較,并在夏普比率和最大回撤方面都有較好的表現(xiàn)。
圖4 資產(chǎn)凈值曲線
本文工作的局限性在于只能通過歷史數(shù)據(jù)進(jìn)行回測,未能在實(shí)盤中測試算法的收益情況。未來可以在股票交易數(shù)據(jù)和特征選擇上做出進(jìn)一步的改進(jìn),例如添加盤口報(bào)單信息的特征數(shù)據(jù)和金融市場整體環(huán)境的特征信息等。