計算風險指標:最大回撤、計算風險收益指標:夏普比率、利用最大回撤和夏普比篩選基金、比較3只股票的夏普指數


接着上一次https://www.cnblogs.com/webor2006/p/15240950.html的量化交易往下學習。

計算風險指標:最大回撤

什么是最大回撤?

在前幾天跟一朋友聊股票時,剛好就聊到了“最大回撤”這個話題:

從這字面意思就可以大概知道應該是指一段周期股票的最大跌幅是多少吧,下面看一下它專業的定義:

最大回撤是指在選定周期內任一歷史時點往后推,產品凈值走到最低點時的收益率回撤幅度最大值,是一個非常重要的風險指標。

如何計算最大回撤?

上面的定義是不是有點抽象?下面則來看下如何來計算最大回撤這個指標的值,這里先來看Corporate Finance Institute(反正是一家國外的專業金融機構)對於最大回撤在這篇【https://corporatefinanceinstitute.com/resources/knowledge/trading-investing/maximum-drawdown/】文章中所定義的一張圖:

 

它可以作為一支基金、股票大盤、個股的表現,根據上面的定義,需要“選定周期”對吧:

好,這里在圖中來選定一下:

指定周期之后,咱們就可以來計算在這周期內最大的回撤值了,那如何計算呢?根據這篇https://www.investopedia.com/terms/m/maximum-drawdown-mdd.asp的說明,最大回撤的公式如下:

而Trough Value是指周期內最低的值,Peak Value是指周期內最高的值,那有了這個公式之后,咱們就可以基於此圖進行一下最大回撤的計算了,先來確定最高值和最低值,如下:

所以,此時這個周期的最大回撤就是:

實際計算出來應該是-50%,但是實際說到最大回撤時是不會把這個負號給說進去的,其實就像我們說股票跌了多少一樣。從實際含義來看,最大回撤描述的就是你購買一款理財產品之后虧損最糟糕的一個比例情況。

最大回撤的價值?

那。。對於最大回撤這個風險指標在實際我們理財中能發揮啥價值呢?這里舉個粟子:

假設這里有兩款理財產品【可以想像成是基金、債券、股票等】,它們兩者從收益率來看都差不多:

但是!!!它們兩者在最大回撤數據上是不一樣的,比如:

那很明顯產品B的最大回撤比產品A的要少,那是不是說產品B最大的跌幅是要比產品A要少的,也就是它更加抗跌對吧?那當你知道最大加撤的意義之后,對於這兩款理解產品你會選擇哪一款呢?很明顯選擇產品B!!!因為大家都在跌時,產品B跌得最少,那對於我們來說是不是風險也更小一些,投資不是賭博,永遠需要盡可能規避風險,所以最大回撤這個指標是一個風險指標。

實踐:

接下來則回到python工程中來增加最大回撤的計算功能。

新建函數:

其計算思路這里用注釋先標明一下:

選擇時間周期:

也叫時間窗口,這里選擇一年時間吧:

選擇時間周期中的最大凈值:

這里則需要使用到python的rolling函數了,關於它的介紹可以參考https://baijiahao.baidu.com/s?id=1622798772654712959&wfr=spider&for=pc,下面先來獲取時間周期收盤價的最高值:

其中關於rolling函數的參數含義可以參考下圖:

計算當天的回撤比:

現在已經有了峰值了,也就是:

接下來則就把時間窗口每一天的回撤比計算出來,然后最終再從這每天的回撤比中拿出最大的那個則為最終咱們要計算的最大回撤比了,所以先來計算每天的回撤比如下:

也就是我把每一天的收盤價當成是谷值,另外對於這樣的公式可以簡化一下: 

選擇時間周期內最大的回撤比,既最大回撤

這里又得要用到rolling函數了,如下:

為啥這里是用的min()呢?其實也很好理解,因為回撤比算出來是一個負數:

而負數最小,代表回撤的幅度越大對吧?比如-10%,-50%,那最大回撤比肯定是50%了,而-50肯定是小於-10的,所以這里需要明確一下。

不過,這里為了在之后的運行中看到各個計算詳細,這里改一下目前的實現如下:

調用運行:

接下來則來調用運行一下,這里還是用平安銀行股票為例,查看一下它指定周期的最大回撤情況:

 

這里為了便於觀看,將字段過濾一下,都折行了:

為了來觀察咱們計算的正確性,咱們將時間窗口改小一點,改為7天吧:

另外更改一下查詢的起止時間:

 

運行,你會發現一個詭異的現象:

這是為啥呢?因為有個時間窗口,咱們現在不是定義的時間窗口是7天么?那么計算只會算7天內的最大凈值,所以:

然后再來看一下最大回撤兩列的數據:

貌似數據都一切正常,接下來咱們將時間窗口還是改為1年,然后使用可視化的方式展示出來,如下:

然后將統計的起始時間也加大幾年:

 

運行如下:

所以利用這個最大回撤比數據可以讓你對某一款的理財產品的風險有一個心里預期,其實像支付寶里面的每支基金都有最大回撤指標,比如:

 

點擊進入在它的詳情頁面看這塊:

 

再點進去就可以看到了:

計算風險收益指標:夏普比率

什么是夏普比率?

英文又叫Sharpe ratio,它衡量的是一項投資在對其調整風險后,相對於無風險資產的收益表現。在1996年,由威廉·F·夏普提出,美國金融經濟學學者,曾在1990年獲得過諾貝爾經濟學獎。

如何計算夏普比率?

它的計算公式可以參考https://www.investopedia.com/terms/s/sharperatio.asp

而各項因子的含義如下:

啥意思?這里分別來解讀一下:

"return of portfolio" :投資回報率,也就是我們所期望投資回報率。

"risk-free rate": 無風險利率,它是指當你買入一個沒有風險的資產所獲得的回報,那啥叫“沒有風險的資產”呢?最常見的就是國債,你咱們國內的它的年化回報在3%左右。

"standard deviation of the portfolio's excess return": 投資回報率標准差,它是一種離散指標,體現數據樣本內部的差異性,它的計算公式如下:

比如說一支股票的收盤價,每個數據項就是指每天的收盤價, 然后用它減去所有收盤價的均值,得到每天收盤價絕對值的平方,再將所有這些值加起來,然后最后用總和除以整個數據項的個數,最后再開根號,關於標准差的數學概念這塊百度百科:

 

其中用到了根號運算,關於這塊也來復習一下:

 

可能對於怎么求根號有點忘了,沒關系,看一下例子就明白了:

那既然這個是一個標准差,那如果一支股票或一個基金它的標准差非常大,代表啥意思呢?

標准差大,也就意味着股價的波動大,波動一大,那是不是意味着這個投資標的的風險也大,因為很不穩定。

意義:

那對於夏普比率整個式子計算出來的結果有啥含義呢?其實它代表的是“投資者額外承受的每一個單位風險所獲得的額外收益”, 所以,夏普比率肯定是越大越好,因為越大越能說明該理財產品的收益是大於風險的,其實也很理解:

當夏普比率如果是大於1的情況下,是不是收益就大於風險了? 

實踐:

在了解了概念之后,接下來則回到python的代碼中來看下如何計算一支股票的夏普值。

思路整理:

計算回報率均值:

對於標紅的這兩個函數比較陌生對吧,下面來理解一下,先來看第一下pct_change(),點擊看它函數的定義,發現是在:

其實pct的計算咱們在之前https://www.cnblogs.com/webor2006/p/15240950.html已經自己實現過:

也就是pct_change()是pandas庫為咱們封裝好的計算收益的函數:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.pct_change.html

而mean()它就是求取平均值的,同樣是來自於pandas:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.mean.html

這里不必過多深究,知道調用的這些函數來自於哪就成。

計算回報率的標准差:

它的實現,也是先來獲取收盤價的收益率:

其中std也是pandas的函數:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.std.html

代碼可以優化一下,發現這塊:

可以將它提到一個變量上來:

計算夏普:

目前咱們獲取的是每天收益率的夏普率,那如果想獲得年化收益率的夏普率咋搞呢?那不很簡單:

錯!!!這里應該是它:

因為夏普率的公式是:

而回報率的標准差是開根號了:

所以,對於年化收益率的夏普率公式應該是它:

而此時分子分母可以進行消分,252/根號252不就是根號252么?所以這里就是為啥是需要乘它的原因了:

運行:

接下來調用一下:

 

利用最大回撤和夏普比篩選基金

現在咱們已經學習了兩大風險指標:最大回撤、夏普比,那學習的目的肯定是為了咱們投資所用的,而作為小白基金是最好的投資產品,因為風險相比於股票要小一些,只要選好標的耐心持有既可,所以,接下來打算用指標來看如何用來篩選基金,當然這里只是泛泛而談,擴展下知識,畢竟投資理財是自己的事,有用沒用需要自己心中有一把稱。

篩選基金標准:

篩選基金最基本的3個維度為:

1、3-5年的業績(收益)。

2、基金經理,他手里的基金管得好不好,就能說明基金經理及他背后的團隊公司的經驗能力。

3、風險指標(最大回撤、夏普、波動)。 

篩選並比較:

1、上天天基金網:

這里選用天天基金網來進行基金篩選:

先來了解一下它的背景:

 

還是非常老牌的,通常我們買基金可能就是直接上微信或支付寶【支付寶更多一點】對吧,這個網站跟它們的區別就是數據更全,而且還有很多一些對比篩選的工具可用。

2、篩選思路:

對於篩選基金每個人有每個人的思路,通常都會有一個組合的概念,畢竟吊死在一棵樹上的風險還是非常高的,比如在去年我在一個技術群中看到一大佬它是這么篩選出心儀的組合的:

1、消費基金配置20%倉位;

2、醫療配置20%~25%倉位;

3、新能源配置15%倉位;

4、納斯達克配置15%~20%倉位;

不過從今年看醫療行業不是太行的,肯定每年的組合得自己進行更改,對於這倉位可能得要資金量多一點,對於純小白來說也不可能投太多錢,所以通常選一支花一點錢小量投一點試試錯,所以這里主要是以下面的思路來進行篩選,總共先選四支,分別為:

1、熱門行業選兩支【你能看得懂或者比較看好的】;

2、混合基金選一支;

3、指數基金選一支【滬深300、上證50】;

把這四支選好之后呢,然后進行進一步篩選【這里就會用到咱們所學的回轍率和夏普率指標啦】,最終可以選一個你所中意的買入等待。

3、開始初步篩選:

熱門行業選兩支:

1、確定行業:

進入網站主頁,先從熱門主題中進行行業的挑選:

點擊進入,就會看到目前為止哪些行業漲幅比較多,目前是2021年12月25,可以瞅見:

然后化肥行業和化工原料漲得最好,如果你感興趣那就可以選這個行業去挑選相應的基金,不過通常選在自己認知范圍的行業比較好,這里打算挑鋰電池和新能源吧:

2、從行業中找出最優的一支基金:

接下來則從行業中選出最優的一支,先從鋰電池來選起,點擊進去,你會看到無數據。。

好吧,那還是先來看一下新能源吧,這個最近一直很火,如下:

你會看到有很多支,那怎么選呢?比較粗暴的一種方式就是按這個排序:

然后點進去簡單看一下這支基金的詳情,首先先確定它確實是新能源相關的基金:

嗯,差不多,接下來看一下它最近的走勢:

關於這個行業的走勢如不放心,可以多從這個行業中挑幾個對比下,通常一個行業一年的走勢都差不多吧,然后再看一下階段漲幅表現:

最近一季度表現不佳,本身下半年股市就不是太好,也如市場行情所示,那既然同一行業的基金趨勢差不多,那還看啥呢?隨便買一支就不完了,當然要看,每支表現肯定有好有壞呀,要買肯定得選相對而言更加優秀的嘛,最后看一下基金經理:

通常選任執時間長一點,而且回報率又相對比較高的,這樣說明該基金經理經驗豐富,好,那對於新能源行業咱們就選農銀研究精選混合(000336)了。

另外再選一個行業,這里打算選:

然后同樣的方式排序找到第一支:

再看一下是否是這個行業的基金:

嗯,沒問題,那就選它了,這里主要是學習如何進行組合選股,就不過多說明了。

混合基金選一支:

接下來再來選混合型的基金,這里可以上基金排行中進行挑選:

 

就選它吧:

指數基金選一支:

這里同樣到基金排行中來進行挑選:

 

4、進行進一步比對:

方式一:通過天天基金網加對比功能:

在每一支基金詳情里都可以看到有一個“加對比”的功能:

點擊之后,會進入如下頁面:

此時則將自己挑選的四支基金都加入到對比列表中,如下:

 

當然,具體你選哪支,得根據自己的一個判斷,這里只是演示這個網站有這么一個加對比基金的功能。 

方式二:手動通過風險收益指標來篩選:

在上面的天天基金網比較中,貌似完全木有用到咱們已經學過的最大回撤和夏普率指標呀,關於這個可以使用手機軟件,這里可以使用天天基金的app端,打開基金管理頁,然后輸入其中的一個基金,找到它進行詳情,你會看到咱們想要關注的指標了:

好,這里以表格的形式將咱們上面已經挑選的四支基金的指標數據列一下,以便進行一個對比:

很明顯,夏普比率最高的是前海,也就收益最高,而在關注收益的同時還得關注風險抗跌,此時就得看波動率和最大回撤了,這兩個指標當然是越小越好,從中可以發現指數基金的博道是最抗跌的,而它的夏普比率也是四支中第二高的,可以看一下這支這一年的收益情況:

其實收益也相當高了,從小白投資角度,我覺得風險反而比收益還要重要,畢竟投資不是賭博,一年能拿了30個點的收益是存銀行可遇不可求的,投資中最好的心態就是“知足常樂”。

比較3只股票的夏普指數

接下來回到python代碼中來對比三支股票的夏普指數。

新建文件:

此時回到example包中進行文件新建:

思路整理:

整體的實現思路也比較簡單:

1、獲取3只股票的數據;

2、計算每只股票的夏普比率;

3、可視化3只股票並比較:

調整工程代碼:

在繼續往下實現之前,這里先對咱們的工程代碼進行一個小調整,就是關於這個文件:

所以,改動如下:

另外對於strategy.py需要改動一下:

獲取三支股票的數據:

接下來就可以在咱們新建的文件中調用base.py中的方法來獲取三支股票的數據了,如下:

計算每只股票的夏普比率:

也比較簡單,有了函數封裝之后:

 

可視化三支股票並比較:

要想可視化三支股票,很明顯咱們先要把每支計算的夏普數據保存到一個容器中,所以:

但是這樣存貌似就不知道哪支股票對應的夏普值了,所以需要存放與之對應的股票對應關系,如下:

好,接下來就可以將它可視化了,如下:

咱們先運行看一下數據正不正常:

接下來咱們將其可視化一下,比較簡單:

你會發現報錯了。。

其實原因是由於咱們的sharpe輸出了兩個值導致:

而可視化它就無法確定你要輸出啥,所以對於咱們其實只需要年化的夏普率既可,所以將數據源更改一下:

再運行:

這個比較好解決,調整一下:

 

再運行:

另外咱們可以給這報表加一個標題:

 

另外對於寧德時代這支股由於是2018/9才上市,所以咱們需要將起始時間改一下:

可以看到,隆基這支的夏普率是最高的,當然收益也最高。

總結:

這次主要是學習了最大回撤和夏普率兩個在投資標的選擇時經常會用到的概念,當然這些僅僅是概念的學習,並非用它們就真正能選擇好理財產品,但是要建立起一套屬於自己的投資體系也是建立在這些看似不怎么起眼的概念基礎之上滴,總之在沒學習這篇之前我是對於這倆概念完全不了解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM