新年伊始,很榮幸筆者的《教你用 Python 進階量化交易》專欄在慕課專欄板塊上線了,歡迎你們訂閱!爲了可以提供給你們更輕鬆的學習過程,筆者在專欄內容以外會陸續推出一些手記來輔助同窗們學習本專欄內容,所以同窗們無需擔憂專欄內容在學習上的困難,更多的是明確本身學習的目的便可。固然筆者也歡迎同窗們踊躍留言,說出本身想擴展的知識點,筆者會根據同窗們的意願選擇性的推出一些內容。python
本次場外篇筆者在專欄《1八、股票交易數據可視化:買賣區間下策略收益繪製》的基礎上對策略的最大回撤指標作必定的擴展介紹。最大回撤屬於判斷策略風險高低的指標,用來描述買入股票後,在策略出現最糟糕的狀況下會損失多少錢,這也直接關係到《2一、股票交易策略開發:ATR止盈止損風險策略》小節中對於風險策略停止盈止損因子的設定。微信
咱們知道投資是有風險的,那麼如何去衡量這個風險呢?最大回撤率就是一種直觀的將風險切實量化的指標。最大回撤率計算公式:max(1-當日收盤價/當日以前最高價)*100%【(最高價-最低價)/最高價】。舉個例子,在股票最高價2元買入,近半年內,股價下跌到最低點1.6元,最大虧損0.4元,那麼這近半年最大回撤率=1-1.6/2×100%,結果是20%。顯而易見,最大回撤率越小越好,由於回撤與風險成正比,回撤越大,風險也就越高。最大回撤的概念雖然直觀,但在程序中到底應該怎麼實現計算呢?學習
咱們延續專欄《1八、股票交易數據可視化:買賣區間下策略收益繪製》的內容,計算浙大網新股價的最大回撤率和應用策略後資金曲線的最大回撤率。以計算資金曲線最大回撤率爲例,首先使用expanding() 計算資金曲線的滾動最大值,也就是截至當前時間,資金曲線的最大值,圖中的橙色曲線所示。spa
接着,將資金曲線與資金曲線滾動最大值矢量相除,即獲得回撤後資金剩餘的百分比,也就是資金曲線在滾動最大值以後剩餘資金的百分比,對剩餘資金百分比從小到大排序,那麼第一行就包含了回撤後資金剩餘百分比的最小值,1-資金剩餘百分比最小值即爲資金曲線最大回撤率。code
如下爲計算資金曲線最大回撤率實現代碼,同理計算股價曲線最大回撤率與此類同:blog
#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
歡迎訂閱量化交易課程:[連接地址]