股價創新高動能(台股)
美股版本
本策略的美股版本請見 English page。
本篇介紹兩種基於股價創新高的動能策略,透過 data.universe(market='TSE_OTC') 限定標的範圍為上市櫃普通股。
股價創新高動能
選出股價創近 200 日新高的股票,每兩週再平衡,單檔最大持股比例限制 20%,並設定 20% 停損。
from finlab.backtest import sim
from finlab import data
# 標的範圍為上市櫃普通股
with data.universe(market='TSE_OTC'):
# 取得收盤價
close = data.get("price:收盤價")
# 股價創近 200 日新高
position = (close == close.rolling(200).max())
# 每兩週再平衡,單檔最大持股比例限制 20%,停損 20%
report = sim(position, resample="2W", position_limit=0.2, stop_loss=0.2, name="股價創新高策略", upload=False)
report.display()
創新高延續動能策略
在上一個策略的基礎上加入 sustain(5, 3) 條件:近 5 日內有 3 日以上的股價創前 200 日新高。這個條件可以過濾掉只有單日觸及新高就回落的標的,篩選出持續維持在高檔的強勢股。
from finlab.backtest import sim
from finlab import data
with data.universe(market='TSE_OTC'):
close = data.get("price:收盤價")
# 近 5 日內有 3 日以上的股價創前 200 日新高
position = (close == close.rolling(200).max()).sustain(5, 3)
report = sim(position, resample="2W", position_limit=0.2, stop_loss=0.2, name="創新高延續動能策略", upload=False)
report.display()
關鍵參數
rolling(200).max():計算 200 個交易日的高點,只有股價觸及區間最高點時條件才為真。200 日約等於台股一整年的交易日,對應「年度新高」概念。sustain(5, 3):要求近 5 個交易日內至少有 3 日滿足新高條件。可過濾出只單日打到高點便回落的假突破,留下真正維持強勢的個股。data.universe(market='TSE_OTC'):限定選股池為上市與上櫃普通股,排除興櫃、全額交割股與特殊證券。resample='2W':每兩週換股一次。較長的持有期給突破部位發酵時間,也能降低換股頻率與交易成本。position_limit=0.2:單檔部位上限 20%,避免過度集中於少數強勢股。stop_loss=0.2:個股下跌 20% 時自動停損,避免假突破的回檔吃掉整體績效。
預期行為
股價創新高策略利用的是「強者恆強」的動能效應:突破歷史區間高點的個股,短期內延續上漲的機率明顯高於市場平均。200 日高點相當於一年期新高,與美股 52 週高點突破的經典設定接近。sustain(5, 3) 版本更挑剔,通常持股檔數較少但品質較高。兩種設定在多頭或強勢類股輪動時表現最佳;在大盤盤整或下跌行情中,假突破的比例會明顯上升,此時停損與部位上限便是關鍵的保護機制。