諾貝爾獎得主教你如何分配炒股倉位 | python量化系列
本系列「量化小講堂」,通過實際案例教初學者使用python、pandas進行金融數據處理,希望能對大家有幫助。詳盡教學內容盡在量化小講堂,歡迎交流指教。
文中用到的A股數據可在www.yucezhe.com下載,這裡可以下載到所有股票、從上市日起的交易數據、財務數據、分鐘數據、分筆數據、逐筆數據等
假設你有一筆錢準備投資股票,你從A股三千多隻股票中挑選了50隻,準備作為一個投資組合購買。
那麼在這50隻股票之間應該如何分配倉位呢?是將資金均分成50份然後每個股票各買20萬,還是有的股票多買點有的股票少配點呢?
如何在這些股票之間分配倉位,這個問題就是馬克維茨(Harry Markowitz)在1952年用數學解決的問題。他也因此而拿到了諾貝爾經濟學獎。
馬克維茨提出的解決方案被後世稱為資產組合理論,開創了近代金融學。 本文嘗試:
- 理論:盡量淺顯的闡述該理論,目標是高中生都能看懂。
- 實戰:用實際數據進行驗證,看看這個方法到底是否能掙錢。
理論:從三個股票說起
假設有3隻股票A、B、C。其中股票A,在一年後有一半概率上漲20%,一半的概率上漲10%,那麼它的期望收益是15%(20% * 0.5 + 10% * 0.5 = 15%)。
股票B、股票C的漲跌概率以及期望收益,如下圖所示:
若在這3個股票中選擇1個股票買入,你會選擇哪個呢?
選擇股票A的人偏保守,雖然賺的少一點,但畢竟風險低,任何情況下都是穩賺。
選擇股票B,差的情況只虧20%,好得情況卻可賺60%,相當不錯的選擇。
選擇股票C就是富貴險中求,雖然風險高,可能虧去一半,但是翻倍的誘惑也是巨大的。
汝之蜜糖彼之砒霜,其實選擇哪個股票都是正常的。
理論:收益和風險
在這3個股票中進行選擇,其實我們是在權衡收益和風險。我們希望收益越高越好,風險越低越好。
然而金融領域自打有宇宙以來的第一定律就是高收益和低風險不可兼得。收益高,往往風險也高,風險低往往收益也就低了。
所以我們只能根據自己的偏好在收益和風險之間進行權衡,做出最優選擇。要進行權衡,必然要先將收益和風險進行量化。
前文中我們用期望收益來量化收益,那用什麼方式來量化風險呢?
用方差!
對,就是初中學習過的方差。方差用來描述一組數據的離散程度,而收益的離散程度就是風險。
比如對於股票A,它的方差就是[(0.2 - 0.15)^2 + (0.1 - 0.15)^2] / 2 = 0.0025。同理,股票B和股票C的方差是0.16和0.5625。股票的風險越大,它的方差也就越大,反之,方差大說明這個股票的風險也大。
理論:將股票進行組合?
知道如何量化收益和方差後,我們回到A、B、C三個股票上來。如果做一個投票,可能很多人會選擇方案B,賺得多賠的少。
但是B真的是最好的選擇嗎?其實還有更好的選擇,比如:將所有錢中的一半買股票A,另一半買C,形成一個組合。這個組合一年後的收益情況如下圖:
該組合的期望收益是20%,跟B一樣。但是組合的方差約為0.14,比B的0.16要小。
也就是說我們通過構建一個組合,得到了一個和B收益一樣,但是風險比B小的投資。
那麼很顯然,相比於這個組合,只買B就是一個愚蠢的選擇。
這就是投資組合的威力。
這時候聰明的你一定會問:剛剛平分倉位於A、C構建組合,那麼是否存在另外的分配方式,使得該組合在20%的期望收益下,風險(方差)可以更小呢?
或者說我能接受方差為0.1的風險,怎麼在3隻股票裡面分配倉位,可以保證期望收益最大呢?
感興趣的話可以動筆算算,真的很有意思。
理論:我也能拿諾獎?
其實以上這些問題就是馬克維茨當年想要解決的問題。
如何在一堆股票當中通過分配倉位,來使整個組合的期望收益儘可能的高,風險(方差)儘可能的低。或者說,在一定的期望收益下,風險儘可能的低;在一定的風險下,期望收益儘可能的高。
這時候有的朋友可能會說,這看上去也沒什麼難度嘛,就算是離諾獎無窮遠的我,多花點時間也能算來。
是的,以上的計算確實並不複雜。那是因為我們在計算當中想當然的多增加了一個條件——
我們假設這些股票之間的收益是相互獨立的,也就是股票和股票之間的收益不會相互影響。
然而現實中所有股票之間都是相關的啊!
有過投資經驗的人都知道,工商銀行股票上漲的時候,農業銀行大概率也會上漲吧?因為互為競爭關係,京東股票上漲,阿里的股票傾向於下跌吧?這些都說明股票之間存在相關性。
所以上面A、B、C三隻股票的問題,可能會變成股票A上漲的時候,股票B也有80%的概率上漲;股票A上漲的時候,股票C卻有60%的概率下跌。這個時候想要算出最優倉位比例,就比較麻煩了吧?
而人家馬克維茨牛就牛在,即使考慮了股票之間的相關性,他也找到了計算的方法。
馬克維茨使用相關係數來衡量股票之間的相關性,再結合之前的期望收益、方差,僅僅知道這些,就可以計算出最優的倉位比例,來保證我們的投資組合獲得儘可能高的收益以及相應儘可能低的風險。
具體怎麼計算這裡就不細說了,歸根到底是一個標準凸二次規劃問題。
接下來我們就用歷史數據和python,來驗證下拿了諾貝爾獎的理論,在實際投資中是否有用。
實戰:全球投資
馬克維茨的理論在實際投資當中最經典的應用就是資產的全球化配置。
假設我們有一筆資產想要在全球眾多投資品種之間進行投資,例如股票、債券、大宗商品等。目標是希望在保值的前提下,獲取比簡單理財產品高的收益。
那此時就可以使用馬克維茨的理論來進行倉位分配了。為了方便起見,我們選取股票、債券、大宗商品這三類資產,並用其對應的指數作為代表,來進行實驗。
即假設我們是要投資這些指數,並在這些指數之間分配倉位。具體的資產以及對應指數見下圖:
實戰:具體策略
用馬克維茨的模型,最大的難點就是要確定模型的輸入參數。必須知道這些資產未來的期望收益、方差及相關係數才能計算最終的倉位,可是未來發生的事情,我們現在怎麼可能知道呢?實戰中一般的做法就是拿過去一段時間的數據來估計這些參數。落實到具體的策略,我們採用如下方法。
在每月的最後一個交易日,根據過去12個月的歷史數據計算出每個指數的收益、方差、相關係數。將這些數據作為參數,套入模型中,計算出每個指數的倉位。
按計算出來的倉位買入這些指數並持有整個下個月。在下月末再按照該方法進行調整,如此往複。
其中在計算最優倉位的時候,我們對原始模型進行了微調。優化目標是在組合每月最大跌幅不超過2%(95%置信區間)的條件下,最大化組合的預期收益。
實戰:結果
若從2014年開始,我們按照上述的策略進行投資,可以得到如下的結果。
資金曲線
策略評價指標
由圖中可以看到,假設我們初始持有1元錢,到2016年末,它會變成1.34元。累計增長了34%,年化收益10.19%,遠高於一般的理財收益。
更加關鍵的是,整個策略的資金曲線非常的平穩,說明策略的風險很低。其中單月最大的跌幅是2.23%,幾乎可以忽略不計。
較高的收益,較低的風險,這確實是一個相當好的投資策略。
掃描下圖二維碼,或直接添加微信號:xbx_laoshi,加我私人微信,獲取文中附件、代碼、數據的下載鏈接,討論《量化小講堂》之後的內容。
我每天會在知識星球(原小密圈)分享我關於量化的所見、所聞、所思,歡迎點擊加入:小密圈 - 量化小講堂
想要快速、系統的學習量化知識,可以參與我的課程,一邊看視頻,一邊做作業,有問題隨時諮詢,點擊查看詳情::Python量化入門課程 - 量化小講堂
推薦閱讀:
※學習筆記四:改善Python程序的91個建議
※Python面向對象編程從零開始(5)—— 小姐姐要買房
※0x2:反向shell
※Python如何寫函數給別人調用?
※0x0:入門