FinLab

月營收選股:動能策略的完整介紹與回測

January 12, 2026

你以為股價是因為月營收表現好才上漲嗎?

其實,現實可能完全相反——主力炒股根本不需要月營收數據!

真正厲害的投資人,不會等到數據公布才下手,而是抓住「月營收前後的股價動能」這個關鍵訊號,提前找到飆股機會。有時候,這些動能強的股票甚至飆得更兇!

本文將帶領您深入了解一段程式碼背後的邏輯,並分析使用的數據來源與選股策略,幫助您理解如何利用 Python 和量化技術來挖掘投資機會。


程式碼簡介

這段程式碼來自量化交易的回測工具庫 finlab.backtest,它旨在根據動能和月營收的特性來選出潛在的飆股,並進行回測模擬,驗證策略的有效性。

核心程式碼:

顯示程式碼
from finlab.backtest import sim
 
close = data.get('price:收盤價')
pct_change = (close / close.shift() - 1).rolling(5).mean()
當月營收 = data.get('monthly_revenue:當月營收')
 
pos = pct_change[(close > close.average(60)) & (close > close.average(20)) & (close > close.average(120)) & (當月營收.average(3) > 當月營收.average(12))].is_largest(10)
 
r = sim(pos, resample='M', resample_offset='11D', upload=False, stop_loss=0.1)
r.display()

月營收與動能策略回測結果圖表

月營收選股的數據來源與處理

1. 收盤價 (Closing Price)

  • 使用的數據:price:收盤價
  • 處理方式:
    • 計算每日收盤價的五日平均漲跌幅:pct_change = (close / close.shift() - 1).rolling(5).mean()
    • 這樣的計算能平滑日間波動,突顯短期動能。

2. 當月營收 (Monthly Revenue)

  • 使用的數據:monthly_revenue:當月營收
  • 處理方式:
    • 比較三個月平均營收與十二個月平均營收:當月營收.average(3) > 當月營收.average(12)
    • 這樣的條件確保選出的公司近期營收增長良好,具有基本面支持。

條件篩選邏輯

1. 技術面條件

  • 近 60 日、20 日及 120 日均線以上的股價:close > close.average(60) & close > close.average(20) & close > close.average(120)
    • 這些條件用於確認股價處於多頭趨勢。

2. 基本面條件

  • 當月營收三個月平均值高於十二個月平均值:當月營收.average(3) > 當月營收.average(12)
    • 表示公司短期營收增長快於長期趨勢,顯示業績改善。

3. 選出前 10 強股票

  • 利用 .is_largest(10) 選出動能最強的 10 檔股票。

策略回測 (Backtesting)

回測設定

  • 使用 sim 函數進行模擬:r = sim(pos, resample='M', resample_offset='11D', upload=False, stop_loss=0.1)
    • resample='M':以每月為單位進行再平衡。
    • resample_offset='11D':回測的基準日期設為每月的第 11 天,對應月營收數據發布後的市場反應。
    • stop_loss=0.1:設定 10% 的停損機制,控制風險。

結果展示

最後以 r.display() 顯示回測結果,圖表呈現策略的績效數據與曲線。


策略優勢與限制

1. 策略的主要優勢

  • 多層次篩選:結合技術面與基本面條件,增強策略的穩健性。
  • 動能增強:動能指標幫助捕捉短期市場熱點。
  • 基本面支持:營收增長確保選股具有實質業績基礎,降低投資風險。

2. 策略的潛在限制

  • 數據延遲風險:月營收數據發布有一定滯後性,可能影響市場反應的及時性。
  • 適用性限制:此策略在極端市場條件(如金融危機)中可能效果不佳。
  • 流動性問題:策略可能不適合流動性較差的股票。

想建立自己的策略?

用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案

免費開始