Python進階量化交易場外篇3——最大回撤評價策略風險
新年伊始,很榮幸筆者的 《教你用 Python 進階量化交易》 專欄在慕課專欄板塊上線了,歡迎大家訂閱!為了能夠提供給大家更輕鬆的學習過程,筆者在專欄內容之外會陸續推出一些手記來輔助同學們學習本專欄內容,因此同學們無需擔心專欄內容在學習上的困難,更多的是明確自己學習的目的即可。當然筆者也歡迎同學們踴躍留言,說出自己想擴充套件的知識點,筆者會根據同學們的意願選擇性的推出一些內容。
本次場外篇筆者在專欄《18、股票交易資料視覺化:買賣區間下策略收益繪製》的基礎上對策略的最大回撤指標做一定的擴充套件介紹。最大回撤屬於判斷策略風險高低的指標,用來描述買入股票後,在策略出現最糟糕的情況下會損失多少錢,這也直接關係到《21、股票交易策略開發:ATR止盈止損風險策略》小節中對於風險策略中止盈止損因子的設定。
我們知道投資是有風險的,那麼如何去衡量這個風險呢?最大回撤率就是一種直觀的將風險切實量化的指標。最大回撤率計算公式:max(1-當日收盤價/當日之前最高價)*100%【(最高價-最低價)/最高價】。舉個例子,在股票最高價2元買入,近半年內,股價下跌到最低點1.6元,最大虧損0.4元,那麼這近半年最大回撤率=1-1.6/2×100%,結果是20%。顯而易見,最大回撤率越小越好,因為回撤與風險成正比,回撤越大,風險也就越高。最大回撤的概念雖然直觀,但在程式中到底應該怎麼實現計算呢?
我們延續專欄《18、股票交易資料視覺化:買賣區間下策略收益繪製》的內容,計算浙大網新股價的最大回撤率和應用策略後資金曲線的最大回撤率。以計算資金曲線最大回撤率為例,首先使用expanding() 計算資金曲線的滾動最大值,也就是截至當前時間,資金曲線的最大值,圖中的橙色曲線所示。
接著,將資金曲線與資金曲線滾動最大值向量相除,即得到回撤後資金剩餘的百分比,也就是資金曲線在滾動最大值之後剩餘資金的百分比,對剩餘資金百分比從小到大排序,那麼第一行就包含了回撤後資金剩餘百分比的最小值,1-資金剩餘百分比最小值即為資金曲線最大回撤率。
以下為計算資金曲線最大回撤率實現程式碼,同理計算股價曲線最大回撤率與此類同:
#expanding()計算資金曲線當前的滾動最高值 stock_df['max_total'] = stock_df['total'].expanding().max() #計算資金曲線在滾動最高值之後所回撤的百分比 stock_df['per_total'] = stock_df['total']/stock_df['max_total'] min_point_total = stock_df.sort_values(by=['per_total']).iloc[[0], stock_df.columns.get_loc('per_total')] max_point_total = stock_df[stock_df.index <= min_point_total.index[0]].sort_values\ (by=['total'],ascending=False).iloc[[0],stock_df.columns.get_loc('total')] print("最大資金回撤%5.2f%%從%s開始至%s結束"%((1-min_point_total.values),\ max_point_total.index[0],min_point_total.index[0]))
最後分別打印出浙大網新股價和資金曲線最大回撤率,以及時間點,並且在圖形上標註。更多的量化交易內容歡迎大家訂閱專欄閱讀!!
最大股價回撤 0.53%從2018-04-24 00:00:00開始至2018-10-16 00:00:00結束
最大資金回撤 0.15%從2018-05-23 00:00:00開始至2018-10-08 00:00:00結束
更多python量化交易內容互動請加微信公眾號:PythonQT-YuanXiao