王煒鵬
(同濟大學電子與信息工程學院計算機技術系,上海201804)
隨著智能科技與經濟的發展,人工智能也在各行各業中得到應用,尤其是在量化交易相關的領域中。在量化交易的預測研究中,對股市的預測一直是一個熱門的課題,也產生了許多關于股價預測的算法。量化交易是指以先進的數學模型替代人為的主觀判斷,利用計算機技術從大量的歷史數據中選出能帶來超額收益的“大概率”事件以制定策略,減少投資者因情緒波動帶來的影響,避免在市場極度狂熱或悲觀的情況下做出非理性的投資決策。
長久以來,對于金融市場的經濟學分析已經有了比較成熟的理論,自從有效性市場假說[1-2]提出之后,該假說就被奉為經典金融理論。隨著時間的推移,與有效市場假說相背離的金融現象相繼被發現,由此形成了關注人類交易心理和行為的行為金融學。但由于實際環境中的金融市場并不像行為金融學所說的持續無效,相反,很多金融現象在被公眾熟知后出現了減少或消失的跡象。由此產生了適應性市場假說[3-4],該假說的提出表明金融市場是一個不斷進化的環境,回報和收益之間的關系不會是一直穩定的。
隨著大數據和人工智能相關技術的發展,量化交易也迎來了飛速的發展,和當下流行的神經網絡模型,深度學習模型[5]和強化學習[6-7]等模型相結合,對交易數據的特征挖掘,成本控制效果有了十分顯著的提升。神經網絡作為一種大規模并行處理的非線性系統,依據數據本身的內在聯系建模,具有良好的適應性與自學習能力、較強的抗干擾能力,但是由于股票市場的有效性理論和適應性理論的影響,傳統的神經網絡模型并不能有一個比較好的預測表現,同時由于市場風格的變化,傳統的靜態參數模型需要不斷訓練才能適應不同的市場風格。然而,長時間的模型訓練時間會使投資者錯失入場時機,進而帶來不可避免的投資風險。由于量化交易市場的風險對于最終收益的影響更大,也是投資者更加關注的方面,深度強化學習[8]的探索和利用機制以及即時回報函數的確定可以優雅地解決這一方面的問題,在策略函數和收益函數中加入風險收益平衡因子可以在執行交易策略的同時,權衡風險與收益,使得在交易過程中,同時兼顧風險與收益,保持兩者的平衡。
本文設計了一個基于深度強化學習的交易模型風險控制算法,并首次將其應用于中國股票市場的日內高頻交易中。該算法在基于值函數的深度強化學習模型DQN[9]中,利用網格交易算法的思想構建動作集合和即時收益函數,為了進一步控制風險,本文設計的模型在即時收益函數中加入了風險和收益因子,使智能體在學習過程中綜合考慮風險和收益,進而達到在交易過程中控制風險、降低最大回撤的效果。
中國股市大部分時間都處于震蕩趨勢,而在日內高頻交易中,由于受到大環境的影響較小,股價的震蕩趨勢更加明顯。網格交易算法由量化交易鼻祖西蒙斯發明,是常見的量化交易算法之一,也是一種可以被設計成純自動化機器交易的算法。網格交易算法適用于在股市震蕩的行情中交易,其主要思想是“追跌,殺漲”,反復高賣低買賺取震蕩行情差價,少量多次地進行股票買賣,讓利潤積少成多。因此,網格交易可以在保證有一定收益的前提下,降低股票價格波動帶來的風險,從而使投資者盡可能獲得最大收益,實現資產保值。
網格交易算法的具體流程:首先,規定網格數量和網格間隔,每個網格代表一個價格區間,接著,當股票價格跌至價格區間中的買入點時買入股票,如果股價繼續下跌,則在每個網格的買入點分別進行加倉,每次買入時的股價呈等差數列遞減的趨勢,同時保證每次買入的份額相同或每次買入所使用的資金相同,以此逐步降低持倉成本,然后,當股價開始回升,若股價高于價格區間中的賣出點時,逐步賣出持倉,賣出股票的數量分別是分次加倉時每次買入股票的數量,賣出時的股價呈等差數列遞增的趨勢,同時保證每次賣出時的股價分別比每次買入時的股價高,做到分檔賣出且每次賣出都有收益。

表1 網格交易算法模擬交易記錄
表1 是根據網格交易算法,在某一時期對某一支股票的進行交易的模擬交易記錄。其中,最左側的操作列表示,根據網格交易算法,以當前價格對股票進行的相應操作;當股價在1.1 元到1.7 元之間波動時,規定網格數量為3,網格間隔為0.2 元,即,每個網格的價格區間長度是0.2 元,每次買入或賣出的股票數量是2000 股。當股價從1.7 元跌到1.1 元時,分次加倉,買入股票,每次以網格區間內的交易價格買入2000 股;當股價開始回升,逐步賣出持倉,每次以網格內的交易價格賣出2000 股,直至回到初始持倉量。最后,每個網格的盈利為400 元,網格交易算法的總盈利為1200元。雖然上述模擬交易記錄省略了交易手續費的計算,但是其盈利率依然較為可觀。
由上可見,網格交易算法的優點十分明顯,在低買高賣的原則下,分次買入,然后按照收益情況分次賣出,雖然每一次買賣的收益比較有限,但是在一個完整的股價波動周期中,整體的收益依然較為可觀。同時,由于每次的買賣量都相同,這樣的操作降低了由于股價波動帶來的交易風險。
但是,傳統網格交易算法依然有其局限性。在股市出現較長時間單邊市場的時候,投資收益率受到的影響較大。當股價長期單邊下跌時,會出現跌破最低價和爆倉的情況,這種現象被稱為“破網”;當股票價格單邊上漲時會出現提前止盈和空倉的情況,當這兩種情況出現時,傳統網格交易算法往往并不能取得較好的收益。
強化學習是機器學習的重要分支之一,和監督學習與無監督學習不同,強化學習無需依賴專家系統,也不需要對訓練環境進行預先建模,并能在訓練過程中保持實時學習和終生學習的特性。強化學習模型以馬爾可夫決策理論為基礎構建,適用于處理連續決策的問題。如圖1 所示,強化學習模型主要包含四大要素:智能體、環境、動作和即時獎勵,在一個基本的強化學習模型中,智能體通過執行相應的動作和環境進行交互,在執行動作之后,智能體會獲得即時回報并積累經驗,通過不斷地訓練,智能體最終會學習到一個能盡可能獲得最大總回報的動作策略。

圖1 強化學習模型
但是,當傳統強化學習模型應用在高維狀態空間或動作空間連續的情境時,需要將所有狀態都存在內存中,就會出現“維度災難”的問題。深度學習的快速發展為這一問題的解決提供了方案。DeepMind 提出的深度強化學習模型DQN 將卷積神經網絡模型(CNN)和傳統的強化學習模型Q-learning 相結合,解決了Q-learning 在處理高維數據時出現的“維度災難”的問題[9]。
在Q-learning 模型中,將動作價值函數,即,Q 值函數的更新公式定義為:

其中Q(st,at)表示在第t 個時間步的狀態st下執行動作at的Q 值,α表示學習率,γ表示折價系數。將公式(1)不斷迭代,可以求得最終的迭代公式:

根據公式(2),可以構造深度強化學習模型DQN來對Q 值函數進行擬合。如圖2 所示,DQN 模型構建了經驗池,動作生成網絡和目標網絡,將動作生成網絡與環境交互產生的樣本存入經驗池,在經驗池中,每個樣本都是
由上,在DQN 模型中,第i 次迭代的動作目標值函數為:

其中,θ" 表示目標網絡的參數,At+1表示在狀態st+1下,可以執行的動作集合,Rt表示在第t 步下。此時,動作生成網絡擬合出的Q 值函數為q(st,At,θ),其中θ表示動作生成網絡的參數,使用Li(θ)=(yiq(st,At,θ))2作為損失函數,并利用梯度下降法不斷更新θ,并在一定的迭代次數之后,用θ替代目標網絡中的參數θ" ,再繼續進行迭代訓練,得到最終的動作生成網絡。

圖2 DQN模型
由上可見,深度強化學習模型同時擁有深度學習模型強大的特征提取能力和強化學習模型的環境適應能力,可在較為復雜的應用環境中有較好的表現。本文使用的就是上述DQN 模型,并將該模型與網格交易算法相結合,構建了一個基于深度強化學習的交易模型風險控制算法。
本文借鑒了網格交易算法中的等份額買入賣出法構建深度強化學習中的動作集合,每次買入和賣出的股票數量都是相同的,同時,為了使模型能在交易中進一步控制風險,在單邊下跌市場中能及時止損,還加入了清倉動作,即賣出當前所有的股票多頭頭寸,以此來控制單邊下跌帶來的風險和最大回撤。由上,本文設計的深度強化學習的動作集合為<買入100 股,持有,賣出100 股,清倉>,使用0 至3 一共4 個標簽來分別表示這4 個動作。
在即時回報函數reward 的設計中,本文設計的深度強化學習模型加入了風險和收益因子的影響,使用了夏普比率和最大回撤率。夏普比率的計算公式為:

其中,Rf表示無風險收益率,本文使用的是短期國債利率,選取Rf=2%;E(Rt) 表示投資策略的收益期望,S(Rt)表示策略的收益標準差。由公式(4)可知,夏普比率綜合考慮了收益和風險,表示在承擔一個單位風險的情況下,投資策略可以獲得的超額收益,是量化交易領域常見的風險收益因子。
最大會回撤率的計算公式如下:

其中,netWorthi表示第i 時刻的賬戶總資產,j 表示在第i 時刻之后的某一時刻。由公式(5)可知,最大回撤率可以用來表示投資策略的抗風險能力,其實際意義可以理解為該投資策略可能帶來的最大虧損。
為了使得智能體能在交易中利用網格交易“追跌,殺漲”的思想進行交易,本文在即時回報reward 函數的設計中,采用了對各個動作分別設計即時回報reward函數的方法。對于買入100 股動作,reward 為執行買入動作后平均每股的買入成本下降的價格,若股價下跌,買入加倉,平均每股買入成本下降,reward 為正數,反之,股價上漲時買入,平均每股買入成本上升,reward為負數。對于賣出100 股動作,reward 為執行賣出動作后賬戶總資產相對于上一時刻的增長量,若賬戶總資產增長,則reward 為正數,反之為負數。對于持有動作,reward 為當前時刻下賬戶總資產的二階差分,賬戶總資產的二階差分可以用來表示賬戶總資產增長或下跌速度的變化量,當賬戶總資產的增長速度在增加或是下跌速度在減少時,reward 為正數,當總資產的增長速度減少或是下跌速度增加時,reward 為負數。對于清倉動作,reward 為清倉后資產總市值和賬戶初始資金的差值,即賬戶的最終盈利。最后,將計算出的re?ward 值與當前時刻下賬戶總資產最大回撤率和夏普比率的一階差分求和作為最終的reward 值。同時,為了減少網格交易中由于爆倉而出現的“破網”現象和由于過早止盈產生的空倉現象,在reward 的計算中,也對這兩種情況設置了較大的懲罰值。
本文設計的基于深度強化學習的交易模型風險控制算法中,動作生成網格和目標網絡的網絡結構相同,其網絡結構如圖3 所示,該網絡將環境和自身狀態的觀察值作為輸入,經過兩層卷積神經網絡和池化層,最后是兩層全連接層,最后一層輸出層為4 個節點,輸出在該狀態下各個動作的Q 值。

圖3 網絡結構
由于股票日內交易數據的震蕩趨勢與股市大環境和行業的關聯性并不明顯,因此,本文使用的是中國股市券商板塊個股的高頻交易數據,股票選取的是中信證券,股票代碼為600030,時間間隔選取1 分鐘,即在一天內有240 條交易數據,每條交易數據包含開盤價、收盤價、最高價、最低價、成交量和成交金額一共6 項指標,時間跨度為從2017 年1 月4 日至2020 年3 月1日。目的是判斷本文設計的基于深度強化學習的交易模型風險控制算法在股價處于震蕩趨勢的環境中是否能有較好的收益。本文將2017 年1 月4 日至2019 年11 月30 日的數據作為訓練集,2019 年12 月2 日至2020 年3 月1 日的數據作為測試集。在實驗過程中,智能體的觀察值包括最近5 分鐘的日內交易數據和賬戶狀態數據。賬戶狀態數據包含賬戶余額,賬戶資產總值,持倉成本,當前持倉量,賬戶交易總量和歷史最高資產總值這6 項數據。因此,智能體每次的觀察值為一個大小為6×6 的二維矩陣。在數據預處理過程中,首先,將每日集合競價時間段內的交易數據去除;然后,將交易數據和賬戶狀態數據分別做歸一化,歸一化都采用除以最大值的方法進行歸一化;最后,將滑動窗口的步長設為1,可以得到每一秒的智能體觀察值。
本文在實驗過程中將賬戶的初始資金設置為十萬元人民幣,并與策略梯度法中的PPO2 算法買入持有策略進行對比,為了更加貼近實際情況,本文在實驗過程中,將每一次買賣的手續費設置為萬分之2.5,當手續費不滿5 元時,按5 元計算。
將三種方法在測試集上的結果繪制成如圖5 所示的資產凈值曲線圖,由圖可知,使用本文設計的基于深度強化學習的交易模型風險控制算法的投資收益率為22.27%,夏普比率是0.69,最大回撤率是2.3%;使用PPO2 算法的投資收益率為1.5%,夏普比率是0.02,最大回撤率是6.4%;使用買入持有策略的投資收益率為8.4%,夏普比率是0.12,最大回撤率是17%。
分析結果可知,本文設計的基于深度強化學習的交易模型風險控制算法相比于PPO2 算法和買入持有策略具有更高的夏普比率和更低的最大回撤率,證明了該算法在股價震蕩趨勢中能夠做到在保證有一定收益的情況下盡可能降低最大回撤率。策略梯度法雖然相對于買入持有策略有更小的最大回撤率,但是在股價震蕩趨勢中沒有明顯優勢,會出現在判斷失誤時重倉買入的情況,進而影響了整體的收益率。
本文設計了一個基于深度強化學習的交易模型風險控制算法,將深度強化學習模型和網格交易算法相結合,利用網格交易算法的思想構建深度強化學習模型中的動作集合與即時回報函數,并首次將該算法應用于中國股市的日內交易數據,以此來測試該算法在日內交易價格波動情況下的適應性,最后取得了較好的效果。本文提出的算法以5 分鐘的日內交易數據和賬戶狀態數據作為輸入,直接輸出各個動作的Q 值,并選取Q 值最大的動作進行交易。本文提出的方法適用于賬戶底倉充足的情況下,并且未考慮日內借券做空的操作,因此在實驗效果上依然具有提升空間。本文將該算法和策略梯度方法中的PPO2 方法進行了比較,并在夏普比率和最大回撤方面都有較好的表現。

圖4 資產凈值曲線
本文工作的局限性在于只能通過歷史數據進行回測,未能在實盤中測試算法的收益情況。未來可以在股票交易數據和特征選擇上做出進一步的改進,例如添加盤口報單信息的特征數據和金融市場整體環境的特征信息等。