FinLab

AI 量化研究:5 個提示詞打造年化 48% 的選股系統

January 7, 2026

AI 真的能幫你做量化研究?

這不是噱頭,是事實。

在這次實驗中,我用 5 個提示詞,讓 AI 完成了從「選股」到「回測」到「優化」的完整流程。最終策略達到:

  • 年化報酬率 48.17%
  • 夏普比率 1.69
  • 最大回撤 -30.38%

這篇文章,我會展示 AI 能做到的 5 種量化研究任務,並分享最終策略的優化過程。

提醒:以下為歷史回測結果,不代表未來表現。


Skill 1:營收創新高選股

第一個任務:找出營收創新高的股票。

幫我找出近 3 個月平均營收創 12 個月新高的股票, 要有足夠的流動性(20 日平均成交量 > 500 張)

顯示程式碼
from finlab import data
from finlab.backtest import sim
 
# 取得營收和成交量數據
rev = data.get("monthly_revenue:當月營收")
vol = data.get("price:成交股數") / 1000  # 轉換為張
 
# 計算條件
rev_ma3 = rev.average(3)
rev_high = (rev_ma3 == rev_ma3.rolling(12).max())  # 3個月均營收創12個月新高
vol_filter = vol.average(20) > 500  # 流動性篩選
 
# 選出符合條件的股票
position = rev_high & vol_filter
 
# 回測
report = sim(position.loc['2015':], resample='M', position_limit=0.1, upload=False)
report.to_html('skill1_revenue_high.html')

單純營收創新高,年化報酬約 19.77%。不錯的開始,但還不夠好。


Skill 2:法人籌碼分析

第二個任務:找出投信連續買超的股票。

找出投信連續 5 天買超的股票,並用連續買超量排序選前 10 檔

顯示程式碼
from finlab import data
from finlab.backtest import sim
 
# 取得投信買賣超數據
trust_net = data.get("institutional_investors_trading_summary:投信買賣超股數")
vol = data.get("price:成交股數") / 1000
 
# 投信連續5天買超
trust_buy_5d = (trust_net > 0).sustain(5)
 
# 流動性篩選
vol_filter = vol.average(20) > 300
 
# 組合條件
cond = trust_buy_5d & vol_filter
position = trust_net[cond].is_largest(10)
 
# 回測
report = sim(position.loc['2015':], resample='M', upload=False)
report.to_html('skill2_trust_buy.html')

投信策略需要配合其他條件才能發揮效果。


Skill 3:技術指標策略

第三個任務:用 RSI 和 MACD 建立動能策略。

用 RSI 和 MACD 建立一個動能策略:

  • RSI > 50 表示多頭
  • MACD 黃金交叉
  • 價格在 60 日均線之上
顯示程式碼
from finlab import data
from finlab.backtest import sim
 
close = data.get("price:收盤價")
vol = data.get("price:成交股數") / 1000
 
# 技術指標
rsi = data.indicator("RSI", timeperiod=14)
macd, macd_signal, macd_hist = data.indicator("MACD", fastperiod=12, slowperiod=26, signalperiod=9)
sma60 = close.average(60)
 
# 條件組合
cond_rsi = rsi > 50  # RSI 多頭
cond_macd = (macd > macd_signal) & (macd.shift() < macd_signal.shift())  # MACD 黃金交叉
cond_trend = close > sma60  # 價格在均線上
vol_filter = vol.average(20) > 300
 
# 進場訊號
cond = cond_rsi & cond_macd & cond_trend & vol_filter
position = close[cond].is_largest(20)
 
# 回測
report = sim(position.loc['2015':], resample='W', upload=False)
report.to_html('skill3_technical.html')

純技術指標策略表現不穩定,需要基本面配合。


Skill 4:價值投資篩選

第四個任務:找出低估值的好公司。

找出低估值的股票:本益比 < 15、殖利率 > 5%、ROE > 10%

顯示程式碼
from finlab import data
from finlab.backtest import sim
 
# 取得估值數據
pe = data.get("price_earning_ratio:本益比")
div_yield = data.get("price_earning_ratio:殖利率(%)")
roe = data.get("fundamental_features:ROE稅後")
vol = data.get("price:成交股數") / 1000
 
# 價值篩選條件
cond_pe = (pe > 0) & (pe < 15)  # 本益比 < 15
cond_yield = div_yield > 5  # 殖利率 > 5%
cond_roe = roe > 10  # ROE > 10%
cond_vol = vol.average(20) > 300  # 流動性
 
# 組合條件並選股
cond = cond_pe & cond_yield & cond_roe & cond_vol
position = div_yield[cond].is_largest(15)  # 選殖利率最高的 15 檔
 
# 回測
report = sim(position.loc['2015':], resample='M', upload=False)
report.to_html('skill4_value.html')

價值投資策略,年化約 13.19%。穩定但不驚艷。


Skill 5:連續性條件 sustain()

這是 FinLab 的獨特功能:sustain() 可以檢測條件是否連續成立。

顯示程式碼
# 營收連續 3 個月年增 > 10%
rev_growth = data.get("monthly_revenue:去年同月增減(%)")
consecutive_growth = (rev_growth > 10).sustain(3)
 
# 這比單次條件更嚴格,能過濾掉偶發性的成長

這個功能在後面的終極策略中發揮關鍵作用。


問題來了:單一策略都不夠好

看完四個技能,你發現了什麼?

策略 年化報酬 問題
營收創新高 ~20% 沒過濾假突破
投信買超 不穩定 需配合基本面
技術指標 不穩定 太多雜訊
價值投資 ~13% 動能不足

沒有一個策略能達到 30%+ 的目標。

這時候,AI 真正的價值才要開始...

想建立自己的策略?

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

免費開始