策略範例
股價創新高動能
本頁內容4
突破歷史區間高點的股票,短期內延續上漲的機率明顯高於市場平均,也就是「強者恆強」的動能效應。這一頁有兩個版本:創 200 日新高就買,以及要求新高持續出現的延續版,適合想追蹤強勢股、並用停損控制風險的人。
策略邏輯
- 選股範圍:上市與上櫃普通股(
data.universe(market='TSE_OTC')),排除興櫃、全額交割股與特殊證券。 - 進場:收盤價等於近 200 個交易日的最高價。200 日約等於台股一整年的交易日,對應「年度新高」。
- 延續版多一個條件:近 5 個交易日內至少 3 日創前 200 日新高,過濾只有單日觸及新高就回落的股票。
- 換股:每兩週一次。
- 風控:單檔最大持股比例 20%,個股下跌 20% 停損。
完整程式碼
new_high.py
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()new_high_sustain.py
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()report.display() 會畫出完整的回測報告。
怎麼調整
- 新高天數
rolling(200).max():取 200 個交易日的高點,只有股價觸及區間最高點時條件才成立。200 日相當於一年期新高,與美股 52 週高點突破的經典設定接近。 - 延續條件
sustain(5, 3):要求近 5 個交易日內至少 3 日創新高,可過濾只單日打到高點便回落的假突破,留下真正維持強勢的股票。這個版本更挑剔,通常持股檔數較少但品質較高。 - 換股頻率
resample='2W':每兩週換股。較長的持有期給突破部位發酵時間,也能降低換股頻率與交易成本。 - 單檔上限
position_limit=0.2:避免過度集中於少數強勢股。 - 停損
stop_loss=0.2:個股下跌 20% 時自動停損,避免假突破的回檔吃掉整體績效。
下一步
這一頁有幫到你嗎?