揭開策略的波動面紗|MAE&MFE分析圖組使用指南

一般我們跑回測會取得報酬率曲線、最大回撤、夏普率等策略總體數值,但這些指標讓我們難以一窺策略下每筆交易的實際波動細節。交易就像跑步比賽,若只看總體數值結果,就像只看一個人跑步的結果,不看過程細節,但這些過程都是我們可以觀察、優化的階段,比如要觀察策略波動時序、標的勝敗手交易的波動分布是否明顯分群、策略的停損停利怎麼放比較好?藉由對交易過程中的波動特性做對應操作,不用每次都要堅持跑完煎熬的過程、可能讓我們在更佳點位出場,減少被洗掉、沒高歌離席的遺憾。

如何取得策略的交易清單資訊

Finlab的回測模組可以取得策略回測每筆交易歷史的資訊。
Report.get_trade_record(...)
如何使用函數?可參考函數庫文件連結 (搜尋get_trade_record)

如何顯示MAE&MFE分析圖組

Finlab的回測模組可以輕鬆將Report.get_trade_record(...) 的結果帶入Plotly.python做視覺化呈現。

函數名稱

Report.display_mae_mfe_analysis(…)

參數說明

  • atr_freq(int): edge_ratio使用的 ATR 時段週期參數。default為10。
  • violinmode(str): violin型態統計圖樣式,模式分為’overlay’與’group’兩種。預設為’overlay’採取全數統計,’group模式為將profit和loss的交易分開統計呈現’。

程式範例

from finlab import data
from finlab.backtest import sim

pb = data.get('price_earning_ratio:股價淨值比')
close = data.get('price:收盤價')

position = (1/(pb * close) * (close > close.average(60)) * (close > 5)).is_largest(20)
report = sim(position, resample='Q',mae_mfe_window=30,mae_mfe_window_step=2)
report.display_mae_mfe_analysis()

輸出圖組範例

如何解讀圖組

將交易分為獲利 (profit-藍點) 與虧損 (loss-紅點) 分別呈現,圖組右方的legend可以任一點選,只看profit或loss的呈現。

報酬率統計圖

最上方的圖表,呈現策略下每筆交易的報酬率分布,計算出勝率及平均每筆報酬。
分布曲線越平坦,代表報酬率範圍大,可能有較多的極端報酬率要處理,通常出現在波動大的策略。
若呈現右偏型態(右側的尾部更長,分布的主體集中在左側),代表多數交易為虧損,若整體策略為獲利,則獲利為少筆交易為主要貢獻。
若呈現左偏型態(左側的尾部更長,分布的主體集中在右側),代表多數交易為獲利。
若呈現鐘型曲線,代表分布較為平均。

波幅定義

再分析接下來的圖表前,要先認識一下波幅的分類。

  • AE(adverse excursion):不利方向幅度,做多的話,就是下跌的波段。
  • MAE:最大不利方向幅度。
  • FE(favorable excursion)有利方向幅度,做多的話,就是上漲的波段。
  • BMFE:MAE之前發生的最大有利方向幅度。若BMFE越高,越有可能在碰上MAE之前,先觸及停利出場。
  • GMFE(Global MFE):全域最大有利方向幅度。若在MAE之前,則BMFE等於GMFE。若在MAE之後,則代表要先承受MAE才可能吃到較高的獲利。

Edge ratio

來自海龜法則(見相關資源)的指標,中文稱優勢比率。
GMFE與MAE根據波動性做調整,將數據除以進場時的ATR以求市場標準化。
edge ratio為平均GMFE / 平均MAE,這可以藉此評估進場優勢,一個真正隨機性的訊號大致上會帶來相等的MFE與MAE。
若大於1,代表存在正優勢,潛在最大獲利空間比最大虧損多,在持有過程中保有優勢可以中途停利或做其他操作,也就是策略的容錯率較高。反之則為劣勢,可能要抗衡較多的虧損狀態。

時序設定

edge ratio的計算設定由回測函數 sim()裡的mae_mfe_window,mae_mfe_window_step控制。

  • mae_mfe_window(int): 計算mae_mfe於進場後於不同持有天數下的數據變化,主要應用為優勢比率計算。預設為0,只會產生出場階段的mae_mfe。
  • mae_mfe_window_step(int): 與mae_mfe_window參數做搭配,為時間間隔設定,預設為1。若mae_mfe_window設20,mae_mfe_window_step設定為2,相當於python的range(0,20,2),以2日為間距計算mae_mfe。


時序圖應用

範例第二張子圖的折線部分是策略edge ratio隨進場時間(x軸)的變化。

edge ratio若一直保持在橘線以上,持有都具有優勢,範例的柱狀變化開高走高,代表這個策略在一開始就拉出漂亮的獲利空間,且隨著時間走揚放大獲利空間。

edge ratio時序圖走勢有很多種,若是開低走高,一開始都低於1,代表策略可能太早進場,一開始都要先承受虧損,這時可以檢討進場時機點,考慮延遲進場。

edge ratio走勢保持在1以上,代表策略優勢明顯。若還隨著時間走高,獲利空間也上升,策略容錯率就較大,就算因一些因素延遲進場仍有較大機率有獲利範圍。
edge ratio走勢很常在1以下,代表策略經常被虧損壓著打,是策略負面訊號。

若隨持有時間變化,優勢漸漸流失,比率開始下降,代表MAE普遍變高,可能是策略催化劑褪色,該策略適合短線操作並考慮加上停利提早出場。
edge ratio走勢跳動,代表無明顯趨勢可判斷。
若策略週期是20天,發現time_scale大於20時,edge ratio趨勢持續走升,則透露策略可能太早出場,錯過後面更大的報酬,可以考慮修正持股週期,吃到更大的獲利。

MAE/BMFE分布圖

MAE/BMFE分布圖能幫助我們看出策略體質、優化設置停損停利。每一個點代表每一筆交易的MAE/BMFE分布,點越大代表報酬率絕對數值越高。
大原則是分布在第二象限的點越多越好, 第四象限的點越少越好。stop_loss過濾掉多數mae過大的標的,少過濾掉獲利的標的。take_profit盡量讓多數虧損的交易先觸及停利出場。

MAE/BMFE V.S. MAE/GMFE分布圖

這塊圖組可以觀察BMFE與GMFE的數據關係,由GMFE/MAE圖中圈圈處可以發現,策略內許多GMFE很大的標的,都比BMFE大。
從BMFE/Return的圖可知許多後來賺錢的標的(Return為原始出場點的報酬率),若想吃到後來的獲利,就要先熬過MAE的過程。
這也代表若為了避開虧損,在觸及MAE之前先設置停損,雖然能減低虧損,但也避開不少未來的潛在漲幅,若想保持更多獲利,勢必要將停損設寬一點(-20%),忍受震盪。

Violin Plot

將各種數據用提琴圖呈現統計結果,可藉由violinmode控制顯示模式。提琴圖hover過後能顯示數據的分位數資料,快速觀察所有數據的統計分佈。設定停損停利點能參考分位數的數值。
除了先前介紹的mae_mfe,這裡還有幾項統計數值:

  • volatility:GMFE+MAE的絕對值,持有標的的高低區間。
  • entry_volatility:進場點的10日真實波動率,若數值過大,則進場點不是穩定階段,可能容易在短期觸發停損。
  • pdays_ratio:獲利交易日數/交易持有日數,中位數數值若大於0.5,代表多數交易持有期間都是獲利,操作起來更有彈性。若mfe高,但pdays_ratio低,代表若沒把握到衝高的少數時期,則會錯過理想報酬。

相關學習資源

Edge ratio:海龜法則觀後感

若想更深入了解MAE/MFE最大幅度分析法。除了國外資源,中文內容推薦藍月記事,其對這方面的策略體質觀察、優化有全方位的影片教學內容,作者對量化分析與交易心理有獨道見解,推薦大家前往學習。

Ben

Python軟體工程師與內容編輯。 鑽研ETL、網頁後端、資料視覺化的程式應用。 投資主力在台股市場,量化策略為主、質化分析為輔,逐步將觸角延伸到美股、加密貨幣,朝更全面的交易人邁進。