創高動能選股策略
以藏敖策略進行延深探討,主條件為股價創新高的股票,
配合營收的打底作為濾網,撰寫動能選股策略。
藏敖策略初步評估就是不可行,最終選股訊號使用vol_ma*buy.smallest,
且vol只限制200張,就可以知道這個策略胃納量太低,流動性非常差,
很容易被使用策略的人買進/賣出大滑價,甚至鎖住漲跌停。
所以從頭開始討論這個策略怎麼調整。
一、主條件撰寫
1.主條件篩選突破幾日高的個股(close == close.rolling(X).max()),
但基本的條件必須要有,我不想買到雞蛋水餃股:
(1)成交量MA10 > 500張,至少有基本的成交量。
(2)Close > 10,避開雞蛋水餃股,易大起大落被炒作。
(3)ROE > 0,簡單的濾掉超級爛公司。
回測結果這個主條件績效正向往上,證實是有效果的。初步結果為突破的天數越多越佳,
後續應該會控制在200~300進行評估,不然符合條件的個股數量可能會太少。
二、其他條件探討 條件2:排除營收yoy連3月衰退10%以上 ,導入後daily mean 沒明顯提升,MDD有降一點。 條件3:排除月營收成長趨勢過高(yoy>40%),近12個月發生8次,怕動能已經多次發動而失效,
導入這個條件幾乎是反效果。
條件4:近一年營收最低/本月營收 <0.8,持續3個月,想像為圓弧底,目前營收在右上,
導入這個條件有效提升daily mean,而且有稍為降低MDD。 條件5:營收mom連續3個月不衰退20% (條件5),導入也是降低MDD。
小結:條件4是比較有效的條件、條件2&5只是限制營收不能太爛,從初步optimize分析, 條件1&2&4也是return的第一名,但因為optimize不能限制買smallest的標的,我還是多條
件5往下延伸探討。
三、主條件+c2+c4+c5,先回測評估績效(每月換股,停損先抓10%),daily mean 42.5、sharpe ratio 1.3、
MDD -28.6%、win ratio 50.4%,算是不錯的績效,後續先從降低MDD的方向調整。
1.此策略使用很多營收條件,原本寫resample:'M'是不恰當,這樣是月底換調整為營收公布後
換股reindex(rev.index_str_to_date().index, method='ffill'整體回測數據都改善,
sharpe ratio 提升到1.7。
2.評估加入多頭排列才買進,導入後雖然有效降低MDD,但daily mean降低20%無法採用,
多頭排列濾網看起來比較適合持有短天數策略。
3.評估加入總經指標(score>=4)才買進,回測結果可以keep住daily mean,並且非常有效的降
低MDD,總經指標使用在月週期以上的策略很有效。
備註:發現細部問題,因為score是從2014所以加入後會因為2020 2021績效太好,提高return。
4.使用二次創高寫法,避免被騙進場close.rolling(x).max()).sustain(5,2),結果出乎意料的不
好,daily mean下降,MDD也沒下降,不導入此條件。
5.將原條件再進行細部回測評估:
(1) 回測突破天數x,分別回測200~320,以daily mean來探討天數越高越好,但其實差距很小
(<5%),以MDD來探討天數<240比較好(差距也<5%),採用240天做為最終條件。
(2)
近一年營收最低/本月營收 <x,分別回測0.4~0.9,結果以0.85最佳,這個結果可以發現 0.8和0.9的績效次之,表示有個高原平台,不是單一點好績效。
五、調整持股比例、停損、停利
1.從report.display()觀察,除了總經分數<4以外,大多都持有3-5檔股票,
所以沒有選股數量問題,避免一檔重壓設定position_limit=1/2(雖然不限制結果最佳)。 2.從display_mae_mfe_analysis觀察: (1)持有天數return高點剛好在20天,完全符合我們的週期。 (2)較佳的停損範圍在3.4-13.4%,回測6-12%,結果>8%差異都不大,雖然不停損績效好一點點,
但實際上線心理層面應該不容易過,最終選用停損10%。
(3)分別測試20~50%停利,看起來這種動能選股,子彈飛起來就會飛超遠,不停利結果最佳。
六、結論
1.創高動能選股策略daily mean 76.6、sharpe ratio 2.1、MDD -17.9%、win ratio 62.3%, 算是績效非常好,追蹤一段時間應該就可以上線測試。
2.2021的年績效太好,大多頭年短期很難再發生一次,不過至少其他年分績效也很不錯。
3.從月報酬觀察,一年當中少數幾個月績效很好(>20%),但其他的月份就小打小鬧, 甚至負的機會比較大,上線後心理層面會是一種考量。(可能上線5個月都小虧小賺,
這筆錢卡著沒績效就先放掉去別的策略,然後就噴了) 。
4.流動性測試沒問題。
備註:目前這隻策略寫法,必須要公布營收完才會選股,如果像本月禮拜五是12/9,12/10是假日他會遞延變成要到12/12號晚上才選股,看起來會稍為慢了一拍,
我手動在12/10選符合需求的股票,今日12/12表現如下 (加權指數下跌92點)
用index_str_to_date() 卻沒辦法配合公佈營收就選股,反而變成deadline的效果,
但如果用resample='M+10',回測跑起來也怪怪的
0 留言