選股因子分析:用數據說話,打造高勝率選股策略

2025-12-30 19:43:54

前言

您是否常聽到「本益比低比較好」、「動能強才會漲」這些說法? 這些用來描述股票特徵的指標,我們稱為「因子」。 但問題是這些因子在過去的市場中,真的具備獲利能力嗎? XS 功能「選股因子分析」可以讓我們不再憑感覺投資,而是用歷史數據來說話。 本文將帶您了解因子的概念,並透過一個實戰案例,教您如何使用「選股因子分析」工具優化選股策略。

什麼是選股因子分析?

在進入工具之前,我們先釐清兩個核心觀念:
  • 選股因子:簡單來說就是「描述股票特徵的數據」。
    • 基本面因子:如本益比 ( P/E ) 、股東權益報酬率 ( ROE ) 。
    • 技術面因子:如 RSI 強弱、股價動能。
    • 籌碼面因子:如外資買賣超、大戶持股比例。
  • 因子分析:這是一個「驗證」的過程。 我們透過歷史回測,觀察當某個因子數值高 ( 或低 ) 時,股票未來的漲跌幅表現,藉此判斷該因子是否具有預測股價的能力。

XS 選股因子分析流程

在「 XS 選股因子分析」工具中,完成一次標準的分析只需要五個步驟:
  1. 建立函數:定義您的選股邏輯 ( 因子 ) 。
  2. 參數設定:設定回測時間與樣本範圍等參數。
  3. 執行分析:每日計算因子,分組統計報酬。
  4. 觀察報表:解讀數據,確認因子是否有效。
  5. 優化策略:根據結果應用於選股策略。

範例演練 ( 52 週動能因子 )

因子概念

「強者恆強」,股價越接近過去的高點,代表上漲力道越強。
  • 越接近 1 → 股價接近 52 週新高,動能越強。
  • 越接近 0 → 股價遠離 52 週新高,動能越弱。

建立函數腳本

我們需要撰寫一個 XS 函數腳本來計算這個指標。 衡量當日收盤價相對於過去 52 週 ( 約 252 個交易日 ) 最高價的強弱位置。 XS 函數腳本範例:
// 52週動能_最高價


// 設定

Var:moment(0);

settotalBar(750);


// 因子

moment = close / highest(high, 252);

Value99 = moment;

If Value99<>0 Then retVal = Value99;

功能入口

完成函數腳本編譯後,可在 XScript 中以下列三種方式開啟因子分析設定:
  1. 在左側目錄中,右鍵點選函數腳本,點擊「因子分析」。
  2. 開啟函數腳本分頁,在上方工具列中點選「因子分析」。
  3. 開啟函數腳本分頁,右鍵點選函數分頁頁籤,點擊「因子分析」。

參數設定

因子分析的參數設定與選股回測大致相同,以下針對不同點說明:
  • 進場腳本 此處顯示的是要作為因子的函數腳本,點擊右側放大鏡會調出函數目錄視窗。
  • 樣本設定 為了避免極端數據扭曲分析結果,可以在設定中選擇如何處理「離群值」。
    • 原始值:不做任何調整,使用最原始的計算數據。
    • ZScore ( 標準化分數法 ):透過統計學的標準差來過濾,系統會自動踢除 ZScore 大於 3 或小於 -3 的數值。
    • IQR ( 四分位距法 ):利用數據排列的四分位數 ( Q1 、 Q3 ) 來判斷,系統會踢除超過「 Q3 + 1.5 倍 IQR 」或低於「 Q1 - 1.5 倍 IQR 」的數值。

報表分析

執行分析後,系統會跑出因子分析報表,報表分為五個部分:
  • 等分報酬率圖 是驗證因子是否有效的核心。 圖表中分 10 組 ( D1 至 D10 ) 的平均報酬率及勝率,理想的因子,我們應該看到第 1 組報酬率最低 ( 最高 ) ,第 10 組報酬率最高 ( 最低 ) ,且中間組別依序排列,代表因子有區分優劣股票的潛力。
  • 數據結構 「因子分布圖」用來診斷因子數值是否含有極端離群值,可透過此統計圖選擇合適的樣本調整方法;而「報酬率分布圖」則顯示各組報酬的集中度,幫助觀察獲利的穩定性與風險。
  • 數據完整性 「樣本數分析圖」追蹤每日的有效股票數量,確保回測結果並非建立在極少數樣本上,以此觀察數據的代表性與回測的穩健性。
  • 報酬穩定性 「分組表現概況圖」總結了各組的最終表現,而「年度表現趨勢圖」則從時間維度檢視因子是否在不同年度持續有效。
  • 因子指標評分
    • 報酬率:衡量因子的獲利能力。
    • 風險報酬比:衡量每承受一單位風險所獲得的回報。
    • 勝率:產生正報酬的股票比例,評估是否整體股票普遍都有獲利能力。
    • 年度勝率:產生正報酬的年份比例,評估因子在不同年度中,是否普遍都有獲利能力。

優化選股策略

經過上述分析,假設我們確認「 52 週動能」是一個有效因子,接下來該怎麼應用? 可以在您的選股腳本中,呼叫因子函數 ( 52 週動能_最高價 ) 來排行,並篩選出指定排行區間 ( 例如因子值最大的 10% ) 。 這樣就能選出市場上相對動能最強勢的一批股票,以此將經數據驗證的高效條件,整合進您的選股策略。 XS 選股腳本範例:
// 將「52週動能_最高價」加入選股策略

// 使用因子的數值來排行

rank myfactor begin

    retval = CallFunction("52週動能_最高價");

end;

// 選擇D10,也就是pr 90以上的股票

if myfactor.pr >= 90 Then ret = 1;

結語

選股因子分析是量化交易的基石。 一個穩健的策略並非來自單一的直覺,而是來自於對大量歷史數據的科學驗證與不斷優化。 透過 XS 的工具,您可以將腦中的投資靈感轉化為可被驗證的數據。 現在,試著寫下您感興趣的因子,開始您的第一次分析吧!

附錄: XS 預設系統因子

  • 【大小單】
    • 大單20日買賣超金額
    • 小單20日買賣超金額
    • 中單5日買賣超金額
    • 特大單5日買賣超金額
 
  • 【技術指標】
    • 120日賣出動能(Kiosotto)
    • 150日買進動能(Kiosotto)
    • Andean Oscillator多頭(20)
    • Andean Oscillator空頭(120)
    • ATR_10日
    • Empty_line指標_20d
    • OBV MACD_OSC柱狀體
    • StochRSI_K
    • Wave Smoother
    • YZVolatility(14)
    • 人氣指標AR_250
    • 海龜20日潛在波動性
    • 築底指標(ZDZB)
 
  • 【基本】
    • P_CFV
    • QMJ_safe
    • ROA_P
    • ROA_PB
    • ROE_P
    • ROE_PB
    • ROS_P
    • 本益比5日變異
    • 企業價值EV
    • 自由現金流量_P
    • 股價毛利比_3
    • 股價營收比_3
    • 股價營利比_12
 
  • 【價量】
    • 10日內破低次數
    • 10日內跌幅超過5%天數
    • 20日內破低次數
    • 52週動能
    • 52週動能_最高價
    • calmar_ratio_250d
    • dd_ma_250d
    • 流動性因子(成交值)
    • 高低動能_5日
    • 跌破5年線
    • 價量動能_20日
    • 最高價均價幅度
 
  • 【籌碼】
    • 主力10日內買超天數
    • 主力20日籌碼區間買超賣超比
    • 外資10日內賣超天數
    • 外資10日買張佔股本比
    • 自自20日內買超天數
    • 自自20日籌碼區間買超賣超比
    • 法人10日內賣超天數
    • 借券賣出餘額張數
    • 綜十10日內買超天數