護國神山抄底策略

  • Post author:
  • Reading time:4 mins read

俄烏戰地風雲讓資本市場遍地烽火,股市逆風吹,世局紛擾,通膨被火上加油。今年以來多數市場指數都呈現下跌,還有再漲的多是原物料大國如巴西、阿根廷、印尼…俄羅斯封盤墊底,歐元區國家即將跌入20%熊市,美國科技股也被k了-15%,台股在去年高基期下的跌幅還算輕,表現贏過亞股裡的中港日韓。

在這樣淒風苦雨的環境下,也是左側交易者或是抄底搶反彈投機客大展身手的時候!有沒有什麼標的平常貴鬆鬆買不下手,現在難得打折了?

newplot 19
2022主要股市表現回顧

護國神山抄底抄起來?

台積電這類法人機構影響力大的標的,擁有高效率市場特性,很難從已知的基本面佔到優勢,還記得1月初台積電法說會前後,當時外資紛紛樂觀調高目標價到千元,股價攻高到680波段高點,若當時見到法說利多攻進去,現在就面臨套牢的窘況,雖然台積電的基本面仍很好。

高效率市場特性的標的最好的買點就是大環境全面崩壞、投資人紛紛逃出的時候。近日戰爭與通膨剛堅強的護國神山也扛不住了,一週被外資狂賣30萬張,跌破600元,外資報告跟著調低目標價 (仍有800多元),而本土投顧、法人則喊600元以下台積電是天上掉下來的禮物,趕快買就對了。
如今台積電已從高點回檔18%,今天看到新聞標題:「台積電大跌狂撿甜甜價,他一路抄底4次「綠到發慌」。」

你也抄底抄到手軟了嗎?若買在600,短短幾天賬損也到6%,若你攤平前沒有做過數據分析,那你很難先對「抄到沒錢時,股價繼續下跌。」有所準備,只是憑直覺去猜。

布林通道逆勢策略

抄底就是所謂的逆勢策略,能不能用量化的方式實測呢?
布林通道是最廣為人知的逆勢方法,原理是運用均線和標準差,大部分 K 線都涵蓋在 d日 MA 上下 n 個標準差的範圍之內操作。
d數值越大,價格曲線越平滑,能減少波動雜訊。
n數值越大,能產生越極端的訊號,一般n值範圍依據68–95–99.7法則(68–95–99.7 rule),設定在1-3,在常態分布中,距平均值小於一個標準差、二個標準差、三個標準差以內的百分比。當股價跌破下軌通道,可能出現超賣訊號,會在之後均值回歸,產生反彈到中軌通道附近。

策略實作

finlab套件能很輕易讓我們實作上述的策略來驗證想法,如果你還沒裝過finlab量化回測套件,可以參考我們的文檔,快速安裝來體驗。這邊以2.5個標準差、40日平均線週期設定布林通道,讀者可自行使用其他數值做簡單實驗。

from finlab import data
from finlab.backtest import sim

from finlab import data
from finlab.backtest import sim

close=data.get('price:收盤價')
upperband, middleband, lowerband = data.indicator('BBANDS', resample='D', nbdevup=float(2.5), nbdevdn=float(2.5), timeperiod=40)
entries = lowerband > close
exits = close > middleband

position = entries.hold_until(exits)['2330']
report=sim(position, upload=True, mae_mfe_window=40, name='護國神山救難隊')
trade_record=report.trades
report.display_mae_mfe_analysis().show()
report.display()

回測數據分析

截圖 2022 03 09 上午7.40.40
  • win ratio: 86.96 %
  • return_mean: 4.73 %
  • mae_mean: -3.88 %
  • bmfe_mean: 2.46 %
  • gmfe_mean: 6.1 %
  • mdd_mean: -6.55 %


台積電歷往出現的訊號次數不多,要讓護國神山山崩不太容易,每次都發生在大環境崩壞的時刻,2007年後共出現過23次,平均持有20日,每筆平均搶到4.9%獲利,勝率87%。
不過要注意的是MAE (最大不利方向幅度)、MDD (最大回撤)都有一定的數值,代表抄底買進後往往都還有回檔、持有過程震盪不小,難有抄在最低點這回事。
gmfe_mean比return_mean大,代表持股歷程中的最大平均漲幅比最終平均報酬還高,我們可能有停利空間可以操作。俗話說搶反彈如搶銀行,行動要快狠準,不求多,可以設獲利10%時就出場,有機會取得比平均報酬5%以上更高的獲利。只要在hold_until的function就可以設置停利 (takeprofit),是不是很簡單呢?

from finlab import data
from finlab import data
from finlab.backtest import sim

close=data.get('price:收盤價')
upperband, middleband, lowerband = data.indicator('BBANDS', resample='D', nbdevup=float(2.5), nbdevdn=float(2.5), timeperiod=40)
entries = lowerband > close
exits = close > middleband

position = entries.hold_until(exits,take_profit=0.1)['2330']
report=sim(position, upload=True, mae_mfe_window=40, name='護國神山救難隊')
trade_record=report.trades
report.display_mae_mfe_analysis().show()
report.display()

加入停利後,可以發現報酬率提升一點點到5.1%,MAE從 -3.88 %縮小到 -3.58 %,MDD也從 -6.55 %縮小到 -5.5 %,持股歷程更舒服了。

newplot 22

結論

拜外資瘋狂倒貨所致,這個少見的抄底訊號在昨日出現,神山要倒也只有這個時候,3/8以563元買入,最終會如何呢?
藉由布林通道,我們能知道何時會有相對低點的極端反轉機會,藉由report.trades,我們可以取得回測結果的波動分析,了解反彈報酬目標、可能回檔範圍、停損停利空間的輪廓,進而知道應對進退,而不是跟投顧老師一樣”避著眼睛買”!
如果你對台積電很有愛,可以複習另一篇台積電均線策略的範例。也許你能夠有更多想法,開發出更棒的策略!

程式碼範例

檔案連結

Ben

Python 軟體工程師與量化策略研究員。 鑽研資料工程、網頁後端、資料視覺化、量化交易策略開發。 投資主力在台股市場,量化策略為主、質化分析為輔,追求人機攜做最佳化。逐步將觸角延伸到總經、美股、加密貨幣,朝更全方位的交易人邁進。