跳轉到

股價創新高動能(台股)

美股版本

本策略的美股版本請見 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) 版本更挑剔,通常持股檔數較少但品質較高。兩種設定在多頭或強勢類股輪動時表現最佳;在大盤盤整或下跌行情中,假突破的比例會明顯上升,此時停損與部位上限便是關鍵的保護機制。