低波動本益成長比策略|MAE/MFE 機器學習選股優化教學
有時我們有了初始策略輪廓,寫出來發現年化報酬率不錯,但夏普率不高、最大回撤率過大,若拿去實戰,持有歷程會遇上信心考驗,績效跳動範圍也大。有沒有辦法讓策略能夠報酬率更高、波動更低? 但選股條件那麼多,單因子策略不停去 try error 組合很沒效率,這時就是"機器學習選股"的優勢,高效分析影響性大的特徵。 很多人對如何將機器學習應用到投資領域很有興趣,但實作要怎麼設計?用報酬率當Label真的好嗎?太難的演算法又看不懂或難消化,到底怎麼辦? 本篇範例會利用基礎的機器學習演算法 Kmeans 分群 mae_mfe 指標,製作決策樹使用的 Labels,優化原本的"本益成長比"策略,示範 scikit-learn 搭配 finlab 模組是多麼強大又簡單!
選定待優化的策略
進化後的本益比|本益成長比選股策略 一文中用簡單的單因子回歸產生一個簡潔卻有效的選股策略。為了製造比較多的回測樣本,我們將之前的策略調成每月選取20檔標的。 留意本篇的測試資料結果可能隨著資料集增長而產生差異,回測僅供參考。 回測年化報酬率23%是不錯的水準,夏普率勉強優於大盤的0.9,但最大回撤率蠻高的,報酬率曲線震盪有點劇烈,好幾次回檔30%,實戰的持有過程肯定會備受考驗,可以加上哪些條件解決波動的問題呢?
顯示程式碼
from finlab import data
from finlab.backtest import sim
pe = data.get('price_earning_ratio:本益比')
rev = data.get('monthly_revenue:當月營收')
rev_ma3 = rev.average(3)
rev_ma12 = rev.average(12)
營業利益成長率 = data.get('fundamental_features:營業利益成長率').deadline()
peg = (pe/營業利益成長率)
cond1 = rev_ma3/rev_ma12 > 1.1
cond2 = rev/rev.shift(1) > 0.9
cond_all = cond1 & cond2
result = peg*(cond_all)
position = result[result>0].is_smallest(20).reindex(rev.index_str_to_date().index, method='ffill')
report = sim(position=position,name="本益成長比", fee_ratio=1.425/1000/3,upload=True,mae_mfe_window=30,position_limit=0.05)
report.display()
還有更多
登入以閱讀完整內容