隱馬爾可夫模型在金融領域應用前景如何?

最近在讀一些應用hmm到金融市場的論文。基本上有兩個思路:

第一個類似於擇時策略:通過訓練得到hmm,然後計算今天的likelihood值,再找出likelihood的值與今天最接近的過去某天,從而實現預測。這一思路的關鍵點事feature的選取。看的論文中有的是選(open,high,low,close)作為feature,有的是scale之後的。還有一篇更簡單,把漲和跌作為observation,(低,中,高)作為hidden state,然後訓練得到transition matrix和emission matrix,最後預測。

另一類是應用在統計套利上:用hmm來model價差序列。最簡單就是假設有兩個hidden state, 價差在這不同的state上遵循不同的分布(均值和方差不同)。然後開倉之前判斷一下今天處於哪個state,然後再計算開倉thrshold來判斷開不開倉。

我比較困惑的是:
1.看paper的時候總覺得paper的思路太簡單了,這樣的方法用在國內期貨或股票市場上真的會有效嗎?
2.在用hmm的時候需要注意些什麼?


HMM這樣一個發明至今已有50年的經典模型,已經實現的應用之深廣,無所謂前景不前景的了。但這不代表它沒有生命力,所以你們不可以嘲笑它。因為HMM能夠給你的不僅僅是幾套演算法,而更多地是一種研究問題的工具性視角,幫助你更加靈活自如地實現理論世界-現實世界的鏡像轉換。

其實HMM的應用除了題主所提到的兩個方面之外還有很多,尤其是當我們可以掌握的數據更加豐富多元的時候,更多的場景下我們可以拿來用HMM。我就簡要說一些相關的hypothesis,不會涉及到具體模型和策略,但我會儘可能地把框架講清楚。

  • 統計套利

就先拿題主提到的統計套利來說吧。我們都知道理論上你所構建出的「協整組合[注1]」形成的價差應服從OU過程,但即便價差服從OU過程,一個實際價差也可能存在若干個不同的理論價差,也就是若干個參數不同的OU過程。如果這些參數還是動態的,那麼用一個HMM很容易解決問題。

f{x_t} = f{Pi x_{t-1}}+f{upsilon  _t}, (1) hidden state process;
y_t = eta left( f{x_t} 
ight) y_{t-1} + zeta left( f{x_t} 
ight)+vartheta left( f{x_t} 
ight)varpi  _t, (2) state process;
z_t=y_t+varepsilon _t, (3) observation process

(2)是OU過程的離散形式,三個係數的具體表示請自行推導。注意這裡的y_t是服從OU過程的理論價差,可以拿來和你用你的仿射變換得到的實際價差z_t做比較,如果實際價差高於理論價差,就short你的協整組合;反之則long你的協整組合。當然為了減少交易成本,你也可以設置觸發交易信號的閾值。

當然還有一種思路,你也可以把假設放寬,不再假設理論價差服從OU過程,而是直接重新表示你的實際價差。比如在你看來,你的協整價差有兩個states,一個state代表隨機遊走(random walk),一個state代表均值回歸(mean reversion),也就是說你的價差並不是每時每刻都服從OU過程那麼乖乖地往均值上靠,相反,它有時候會翻臉變成隨機遊走攔也攔不住。這兩個過程的參數的狀態轉移過程就是hidden state process,實際價差就是observation process。這個時候你就要根據轉移矩陣的概率判斷當前的regime是否符合統計套利的環境。

第一種思路就是題主所提到的經典思路,但可以有多種多樣的擴展,比如將HMM和狀態空間模型結合,或者重新定義價差的hidden states(如上面提到的第二種思路)。其實用HMM做統計套利的建模過程並不難,但參數估計是個大坑。這裡常用的方法就是EM演算法了。說句題外話,我個人十分喜歡EM演算法,喜歡它在計算上的簡潔和魯棒。特別是牛頓方法廢掉的時候更顯EM的神采。但包括HMM的初始狀態和轉移矩陣等初始估計就是另外一個故事了,目前還真沒什麼好辦法,一般就用樣本內數據做MLE。加之模型裡面涉及的參數個數也不少,過擬合也是個大問題。

  • 量化擇時

簡單說一下題主提到的量化擇時。因為答主工作中研究趨勢交易不多,所以僅圍繞HMM的特點談其應用。其實學過Probabilistic Graphical Model的都知道,HMM就是Bayesian Network的一個特例,具體說是Dynamic Bayesian Network(DBN,不要跟深度神經網路裡面的DBN搞混)的一個特例,也有人稱之為Hierarchical HMM。就用DBN來說一下題主提到的量化擇時。我拍腦袋舉個栗子,我們可以在頭一層設置5個hidden states,大熊(strong bear)、弱熊(weak bear)、隨機遊走(random walk)、弱牛(weak bull, wu)、大牛(strong bull, su)。然後在每個市場趨勢下還可能有若干種features,可以是基本面消息也可以是技術指標,這就考驗市場直覺和特徵工程的功夫了。最後observation可以簡單地使用收益率來表示。根據預測出的收益率進行擇時判斷。

因為擇時交易歸根結底就是預測,而市場在不同的regime下一定有不同的走勢特點。HMM就正好可以用來描述和預測不同regime下的不同反應。這樣設計下來模型就呈現出這樣(其中白色單層圓圈就是hidden state,灰色圓圈就是observation):

像這種「拜占庭風格」的模型似乎有點令人啼笑皆非,至於它們到底好不好用、該怎麼用之類的問題純屬見仁見智,過擬合的可能性很大,但我還是建議有的人不要一上來就以一副「老子當年小米加步槍就能讓他老蔣的精銳部隊跪了你服不服」的樣子對待那些看上去複雜的模型。因為這些模型的思路其實很可能會給你提供新的視角和見解,讓你最終建立出簡潔的模型。就像你蓋房子的「腳手架」,腳手架搭建得繁複冗餘也沒有關係,隨時可以修改,但最後要蓋出線條優美又結構穩固的房子出來。

  • 市場微觀結構

如果真要說前景的話,HMM在演算法交易和高頻交易上的應用可以算得上,雖然以間接的方式。HMM主要是可以基於tick數據研究股票價格的日內動態變化,特別是在市場日內的不同狀態下的變化,比如接下來要說到的price revision、order arrival、duration等等,這屬於市場微觀結構的內容。計量經濟學家常用ACD模型研究tick data,但使用HMM可以得到具有state-dependent特點的比如price revision和duration的分布,從而根據這些市場微觀結構的觀察結果又將便於演算法交易和高頻交易策略的構建。

我們可以用一個有限狀態{1, ..., K}的離散馬爾科夫鏈S_t作為hidden state process,轉移矩陣為Pi 。時間t對應某一交易日內第t筆交易。至於observation process那邊則有price revision和duration,就像這樣:

其中X_t為第t筆交易發生的價格變動,	au_t為第t筆交易距離上一筆的duration。	au_t的計算可以根據由指數冪律分布擬合的order arrival rate來計算,X_t可以用一個結合了價格零變動的離散pdf和價格非零變動連續pdf的mixture model求積分來計算。

如果你帶入數據的話,通常可以得出一個stylized fact:在state 1,trade duration很短,價格變動也很小;在state 2,trade duration長,價格變動的方差也就很大。同時狀態轉回到state 1的速度比回到state 2要快得多。這與我們的直覺相符合。

單就這一方面,HMM的應用就可以很豐富。演算法交易的一個重要方面就是如何處理剛到來的信息,這寫信息既包括價格、成交量、duration、買壓賣壓等交易信息,也包括公司公告、行業動態和宏觀經濟等消息信息,如果你以一個機器學習的視角看的話,HMM可以作為一個在線學習(online learning)演算法,因為它可以online地學習市場狀態和得到與price revision、duration和狀態轉移概率等模型參數。所以HMM非常適合用來設計交易演算法。

比如基於限價單的演算法交易。

這個思路是從Avellaneda[注2]那裡得到的啟發。我們假設mid-price就是一個有若干regime的布朗運動,即dP_t=sigma _tdW_t,其中sigma _t=sigma^{(S_t)} S_t是個連續有限狀態的馬爾科夫鏈,決定著mid-price revision的波動率的regime switching。注意離散的HMM用在實證研究上沒問題,但演算法交易常常用到隨機最優控制或者動態規劃,所以要映射成連續的HMM。

限價買單指令價格(P_t-varrho_t ^{-})和限價賣單指令價格(P_t+varrho_t ^{+}),其中 varrho_{t}^{mp }  就是到mid-price的距離,我們費半天勁也就是為了得到varrho_{t}^{mp }  的最優解 。限價單的執行速率(rate of execution)就顯得格外關鍵,lambda_t = lambda^{(S_t)}代表rate of order arrival,但交易執行的問題是:order離mid-price越遠,指令的執行速率就越低,而且是以指數級下降。那麼我們就在order arrival的基礎上再乘以一個指數函數,Lambda_{t}^{mp}=lambda_t  e^{-kappa_{mp}^{S_t}varrho_{t}^{mp}  },其中kappa 是個常數,用來控制限價單到mid-price的距離的尺度,可以用個啟發式演算法計算。你也注意到了,這裡price revision和duration不是相互獨立的,因為S_t都對其有影響,至多算是條件獨立。另外,演算法交易里的限價單最怕的就是你的order遲遲得不到執行,得不到執行的原因不是regime發生的變化就是有更有利的order arrival。所以當你在regime發生轉換的概率較低的情況下發出一個immediate-or-cancel的指令,如果這時候突然regime變了或者有簡單粗暴的市價單闖進來,你這個指令就很難得以執行。換言之,rate of order arrival和price revision的波動率都是決定你的交易演算法選擇怎樣的varrho_{t}^{mp }  的因素。那麼剩下的工作就是在你的效用函數中求取關於varrho_{t}^{mp }  的最優解了。由此你可以決定最優的下單時機,或者賺取bid-ask spread,等等。

比如高頻交易中的返佣(rebate)。

先舉個例子說一下什麼是返佣:如果一個限價單filled,提供流動性的一方可以得到0.25分/每股的返佣,而吸收流動性的對手方要支付更高的交易費用。高頻交易者求返佣的其中一個方法就是觀察被拆分成若干小單的機構大買單的出現。如果某股票當前價格為10.00元/每股,高頻交易者利用速度優勢放出一個10.01元/每股的買單——這就是在提供流動性了,所以這個買單很快會被那些試圖以10.00元/每股賣給這家大機構的交易者hit。此時的股票價格就是10.01元/每股了,大機構的小買單也隨之跟進到這個價位。然後高頻交易者立馬調頭放出一個10.01元/每股的賣單——這同樣是在提供流動性。這樣一個來回,高頻交易者雖然沒有從股票價格中賺錢,但賺到了0.5分/每股的返佣,不亦快哉。

返佣策略當然不是無風險的空手套白狼,高頻交易者就怕價格朝著不利於自己的方向走。所以我們的HMM就派上用場了,它可以告訴我們一組返佣策略是不是能賺到錢。比如在state 1里,每筆交易之間的duration很短,價格變動的方差也很小,非常適合高頻交易者拿返佣。高頻交易者要考慮至少三個問題:1)這樣的state的持續性怎麼樣?(從轉移矩陣里可以看到);2)在這個state內,價格零變動的概率是多少?(從Xt的參數里可以看到);3)如果價格非零變動,那麼價格變動的波動率是多少?(從Xt的參數里可以看到)。所以說HMM放在這兒就是一個online learning algorithm,可以動態學習我們想要知道的市場微觀結構方面的當前狀態。

其實HMM可應用的範圍依然很廣,絕不僅限於我上面提到的這幾方面。只要你發現你的研究對象里清晰地呈現出不止一個regime的形態,並且能從邏輯上確定observation和hidden state的鏡像關係,那麼HMM就是一個比較好用的模型了。順便再舉個小栗子,就比如那些衡量市場信息不對稱特徵的指標,比如PIN(Probability of INformed trading)和PSOS(Probability of Symmetric Order-flow Shocks),也可以用上HMM。你可以拿HMM估計PIN和PSOS的值,以此觀察一個重大消息發布前後的市場信息環境或者市場情緒的變化,因為private information或者informed trader對市場的影響和public information或者noise trader對市場的影響完全會是兩種形態。經驗表明HMM演算法可以得到比經典的EHO法、EEOW法、DY法[注3] 更好的估計值。

但是,在沒有對所要解決的問題有深刻認識之前,甚至在尋找到合適的問題之前,不要有任何幻覺,不要強套任何模型或演算法,不要把自己像買彩票似的兩塊兩塊地消耗殆盡,那樣你不會有任何收穫。只有在對模型的深入探索和對市場的深刻洞察的時候,你才可以目不識丁而經綸滿腹,足不出戶而情滿江湖。

[注1] 這裡的協整不單單指的是大家所熟悉的時間序列教材里的協整檢驗,統計套利中的協整有更嚴格的內含,同時可以有更寬廣的外延。詳見「統計套利中的「協整」是什麼意思? - 郭小賢的回答」

[注2] M. Avellaneda and S. Stoikov, High-frequency trading in a limit order book. Quantitative Finance, Vol. 8, No. 3, April 2008, 217–224. https://www.math.nyu.edu/faculty/avellane/HighFrequencyTrading.pdf

[注3] 這三種方法分別以作者姓氏首字母組合命名的,EEOW為Easley, Engle, O"Hara and Wu,DY為Duarte and Young,EHO為Easley, Hvidkjaer, and O"Hara.


我沒有具體寫代碼實現過馬爾科夫或者隱馬爾科夫鏈條的計算和應用,就是因為這玩意兒太火自己在網上找資料做一般了解過。隱馬爾科夫過程是對隱藏狀態進行觀察的馬爾科夫過程,具有馬爾科夫過程的一般性質。
1) 馬爾科夫過程其實是不同狀態間的概率轉移關係的計算,但你算出狀態轉移矩陣之後,仍然需要一個初始狀態的概率,所以,這種計算就是初始條件敏感的。看的資料中,沒有談及這個問題的一般處理方法。
2) 馬爾科夫過程最顯著的假設是「無後效性」。即給定t0時初始狀態,那麼t&>t0狀態的條件分布只依賴於t0初始狀態,而與t0之前的狀態無關。這點提供可能性去對接有效市場理論或者基於有效市場理論的模型,即當前的價格或者某狀態已經完全反應了市場的所有信息,因而它的下一步是隨機的,無記憶的。但真實的市場情況通常是非充分有效的,由於信息不對稱和信息傳播速率問題,一個新的信息事件注入市場時,市場的反應是需要時間的,不能立即充分反應新的信息事件。

馬爾科夫的優點沒有去了解過,應該是有很成功的應用例子的,語音識別這個就被經常提到。上面兩個「問題」是很多其它模型也有的,理論模型有假設有簡化真的太常見了,不能因為這個就不去了解它,能夠代碼實現,然後再多嘗試多反思從而熟悉它的應用場景就好了,馬爾科夫就可以試試用到一些非消息非事件驅動的市場或者時間區段內。


思路簡單不是問題,問題是這些pp說有效就真的有效么?如果你認為無效又怎麼證明呢?有時候有效有時候無效的話又怎麼知道什麼時候有效什麼時候無效呢?是什麼pp呢?


HMM有點類似形態識別,重點在於特徵向量的選擇吧,Yichuan做過相應的研究。
基於HMM市場擇時策略
新版HMM市場擇時策略


自己做過一點hmm(不是股票),但不深入,所以說說自己的想法,相互交流,請指正!hmm有3個基本問題:
1.估值問題
2.解碼問題
3.學習問題
預測股票可以是估值問題已可以是解碼問題,這取決於你選擇的state和observation symbol分別是什麼。
但是無論它們怎麼選擇,training都是必須的。training時要考慮初始概率分布怎麼確定,這個可能要依據經驗。不同的初始pai,A,B對最後的模型參數影響很大。
訓練時的樣本選擇很重要,誤差太大訓練不容易收斂,樣本誤差太小,可能不夠魯棒。而且,如果預測時的觀察序列並不是在之前的樣本中訓練過,可能無法進行預測(對數概率負無窮)。
所以我覺得使用hmm股票預測中能否保證你所選擇的observation sequence是你在訓練中可能出現過,而且這個observation的likelihoood是否可求是重要的。比如說,以一段時間的下跌和上漲為觀察值建模,出現今年中國股市如此罕見的暴跌行情,這種是你之前沒有訓練過的,此時還可以進行預測嗎?
這些都是根據我自己用hmm的經驗總結,畢竟小透明,所以粗淺了些,希望有高手來聊聊哈!


已經被用膩了,還扯應用前景?
光讀paper,m沒用,自己多玩玩。


這是我們小夥伴們的三篇文章歡迎你來看看:
隱馬(HMM)在股票上的簡單應用 - 1 - Moneycode - 知乎專欄
隱馬(HMM)在股票上的簡單應用 - 2 - Moneycode - 知乎專欄
隱馬爾科夫鏈模型對於滬深300指數建模的進一步研究 - 金融量化分析 - 知乎專欄
同時在我們的平台上,提供了股票,期貨,基金等的日,分鐘行情數據和股票的財務數據。
Ricequant - Beta
你可以直接在瀏覽器里用python notebook 編碼嘗試。
別只看論文,動手做起來吧~


最近在在搞hmm用來識別外匯數據 有一些感受針對題主的問題

論文中計算likelyhood的方法 實際上這有個bug(或許是我打開方式不對?)似然度的計算是一條對數似然的累加式子 問題就出在累加上
1假設obeverse序列長度是80 即使最後的10%市場環境已發生變化 用viterbi演算法算出的似然度累加值並不會發生顯著變化 這就產生了誤判 意味著在一段時間內 interval不夠大的話 多次的似然度最大識別出來都會指向同一個歷史時期的交易趨勢
2實際操作中發現如果當前交易走勢在歷史上沒有與之十分匹配的走勢 hmm算出的錯誤的似然度數值都十分接近 舉例子 20個hmm代表20種不同走勢 當前observe序列算出20個likelyhood都是200左右 這要怎麼選 講道理起碼得有300才能認為走勢相似 若設定閾值的話 很多observe都識別不出來了

likelyhood方法感覺要三年不開張 開張吃半年

不知答主現在研究到什麼地步了 希望能交流一下


很多失效多年的策略在國內市場可能依然有效,自己回測一下試試


我是新人學徒,可能有說不對的地方。但我覺得有幾個關鍵問題就比較難解決。就如你要用隱馬爾可夫模型在市場做實際應用。首先要定義隱含狀態(至少個數)用鮑姆威爾士來訓練建模。但現實中很難定義這個隱含狀態。個數。和最根本的的一個要求(前一項和後一項有相關聯關係)。網上也有人試過定義6個數然後做了A股的模型。但是我覺得並不能讓人信服。就好像大獎章的西蒙斯雖然說過的確曾經嘗試用過「是否天晴」作為早開盤買進賣出的依據,但相鄰兩天天晴之間並沒有並沒有真正的關係啊。所以是不是還少了什麼?

不知我表達清楚我的質疑沒有。洗碗各位前輩解答我的疑惑。謝謝


求題主閱讀的paper~


據我經驗,結合其他模型和演算法,對於高頻數據的預測好一些,低頻數據則效果差。另外你所指的在金融領域的應用?我覺得太寬泛了。


狀態選取很關鍵, 回測有點大,收益尚可,還待優化。


推薦閱讀:

為什麼知乎上很少看到美國CS PhD找大學教職的?
目前人臉識別技術的挑戰是什麼?
研究者July在計算機和機器學習領域的水平怎麼樣?
機器學習該怎麼入門?
有哪些你看了以後大呼過癮的數據分析書?

TAG:寬客 (Quant) | 機器學習 | 統計學習 | 統計套利 | 量化交易 |