Skip to content

quantbai/alpha158

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Alpha158 因子集

基於 Alpha158 的因子實現庫。使用開源模組 phandas

安裝

pip install phandas==0.13.0

使用

每個 Python 文件都是獨立的單因子回測腳本,可直接執行。

Alpha158因子詳解 [1]

一、kbar 因子(9 個):看單根 K 線的 "形態密碼"

核心用途:判斷當天股價的漲跌力道、支撐 / 壓力位,快速識別 K 線強弱(例如是大陽線還是十字星)。

源碼中,為了避免除0,分母會加一個特別小的數(1e-12),為了直觀,表中公式去除了,如原公式為(close-open)/(high-low+1e-12)改為(close-open)/(high-low)。

因子名稱 涵義 核心用途 公式
KMID - K 線實體漲跌比例 當天開盤到收盤漲了多少(正數 = 漲,負數 = 跌),用漲幅比例表示 快速判斷當天是陽線還是陰線,以及漲跌力道(數值越大,漲跌越猛) (close-open)/open
KLEN - K 線總波動幅度比例 當天最高價到最低價的波動幅度(例如波動 5% 還是 1%) 看當天股價 “折騰” 得厲害不厲害,波動大適合短線交易,波動小適合穩健持倉 (high-low)/open
KMID2 - K 線實體佔比 開盤到收盤的漲跌幅度,佔全天波動幅度的比例(例如漲跌佔比 80%= 趨勢強) 判斷當天趨勢是否集中(比例高 = 漲跌方向明確,比例低 = 橫盤震盪) (close-open)/(high-low)
KUP - K 線上影線長度比例 當天上影線的長度(例如最高價比收盤價高多少) 上影線越長,說明上方賣壓越重(例如漲到某個價位就被大量拋售),警惕回調 (high-Greater(open, close))/open
KUP2 - K 線上影線佔比 上影線長度佔全天波動的比例 精準判斷上方壓力大小(比例超 50%= 壓力極大,可能漲不動了) (high-Greater(open, close))/(high-low)
KLOW - K 線下影線長度比例 當天下影線的長度(例如最低價比收盤價低多少) 下影線越長,說明下方支撐越強(例如跌到某個價位就有人抄底),可以考慮買入 (Less(open, close)-low)/open
KLOW2 - K 線下影線佔比 下影線長度佔全天波動的比例 精準判斷下方支撐力道(比例超 50%= 支撐極強,可能跌不動了) (Less(open, close)-low)/(high-low)
KSFT - K 線重心偏移比例 當天股價重心偏上還是偏下(正數 = 重心在中間以上,負數 = 以下) 重心偏上 = 買盤強,重心偏下 = 賣盤強,輔助判斷當天主力資金方向 (2*close-high-low)/open
KSFT2 - K 線重心偏移程度 股價重心偏移的程度(例如偏上 30% 還是 10%) 偏移程度大 = 趨勢明確(例如偏上 30%= 全天強勢上漲),偏移小 = 震盪 (2*close-high-low)/(high-low)

二、price 因子(4 個):看當天價格的「相對位置」

核心用途:對比當天不同價格(開盤、最高、最低、主力均價)與收盤價的關係,判斷當天交易的合理性。

因子名稱 涵義 核心用途 公式
OPEN0 當日開盤價 / 收盤價 當天開盤價和收盤價的比值(大於 1 = 開盤高、收盤低;小於 1 = 開盤低、收盤高) 快速判斷當天「高開低走」還是「低開高走」(比如比值 1.03 = 高開低走,警惕下跌) open/close
HIGH0 當日最高價 / 收盤價 當天最高價和收盤價的比值(大於 1 = 最高價高於收盤價) 看當天有沒有「衝高回落」(比值越大,回落越明顯,比如漲到 10 元又跌回 9 元) high/close
LOW0 當日最低價 / 收盤價 當天最低價和收盤價的比值(小於 1 = 最低價低於收盤價) 看當天有沒有「探底回升」(比值越小,回升越明顯,比如跌到 8 元又漲到 9 元) low/close
VWAP0 當日主力均價 / 收盤價 當天主力資金成交的平均價(VWAP)和收盤價的比值 主力均價高於收盤價 = 主力在出貨(可能要跌);主力均價低於收盤價 = 主力在吸籌(可能要漲) vwap/close

三、rolling 因子(29 x 5個):看過去 N 天的 "趨勢 / 波動 / 量價規律"

核心用途:通過過去 5/10/20/30/60 天的歷史數據,判斷股價未來可能漲還是跌,N 越小(5/10 天)看短期,N 越大(30/60 天)看長期。

表中每個因子實際為5個,如ROC[N]表示ROC5、ROC10、ROC20、ROC30、ROC60。

1. 趨勢類因子(5 x 5個):判斷股價是「向上走」還是「向下走」

因子名稱 涵義 核心用途 公式
ROC[N] 價格變化率 過去 N 天的收盤價與當前收盤價的對比(比值 > 1 表示過去價格更高,比值 < 1 表示當前價格更高)。尋找超漲或超跌的機會。例如,當N=5時,比值為1.1可能意味著過去5天漲得過多(有回調風險),比值為0.9則可能意味著過去5天跌得過多(有反彈機會)。 Ref(close, N)/close
MA[N] 簡單移動平均比值 過去 N 天的平均股價(移動平均線)與當前股價的對比。用於經典的均線策略。當前股價高於均線(比值 < 1)通常被視為短期趨勢向上,可考慮持倉或買入;反之(比值 > 1)則可能趨勢向下,需警惕。 Mean(close, N)/close
BETA[N] 價格趨勢斜率 衡量過去 N 天內股價漲跌的速率或趨勢的斜率,數值正負代表方向,絕對值大小代表力度。捕捉強勢股或弱勢股。例如,N=10時,數值為0.05可能表示處於每天平均上漲5%的強勢趨勢中;數值為-0.03則可能表示處於弱勢下跌趨勢中。 Slope(close, N)/close
RSQR[N] 趨勢線性度 評估過去 N 天股價走勢接近線性趨勢(直線)的程度,取值範圍在0到1之間,越接近1表示線性關係越強,趨勢越穩定。過濾掉震盪無序的股票,選擇趨勢明朗的標的。例如,N=20時,數值為0.9表明走勢非常平穩,趨勢性很好;而數值為0.3則表明走勢反覆震盪,方向不明。 Rsquare(close, N)
RESI[N] 趨勢偏離度 衡量當前股價偏離過去 N 天整體趨勢線的程度,絕對值越大表示偏離越遠。尋找價格回歸趨勢的機會。當偏離度過大時,可能預示著股價「漲多會跌」或「跌多會漲」,有向趨勢線回歸的動力。 Resi(close, N)/close

2. 波動類因子(6 x 5個):判斷股價「波動大不大」,有沒有壓力 / 支撐

因子名稱 涵義 核心用途 公式
STD[N]
價格波動標準差
過去 N 天股價波動的「穩定程度」(數值越大 = 波動越亂) 選適合自己的股票:波動小(數值 0.02)= 適合新手穩健持倉,波動大(數值 0.1)= 適合高手短線套利 Std(close, N)/close
MAX[N]
歷史最高價比值
過去 N 天的最高價和現在股價的對比(比值越大 = 過去高位越高) 找壓力位:比如 N=60 時比值 1.2 = 現在股價離歷史高位還差 20%(漲到高位可能回調,可提前賣) Max(high, N)/close
MIN[N]
歷史最低價比值
過去 N 天的最低價和現在股價的對比(比值越小 = 過去低位越低) 找支撐位:比如 N=60 時比值 0.8 = 現在股價離歷史低位還有 20%(跌到低位可能反彈,可抄底) Min(low, N)/close
QTLU[N]
高價區間位置
過去 N 天股價「高位區間」(前 20% 的價格)和現在股價的對比 判斷是否在高位:比值 > 1 = 現在股價沒到高位(還有上漲空間),比值 < 1 = 現在在高位(要警惕) Quantile(close, N, 0.8)/close
QTLD[N]
低價區間位置
過去 N 天股價「低位區間」(後 20% 的價格)和現在股價的對比 判斷是否在低位:比值 < 1 = 現在股價沒到低位(可能還要跌),比值 > 1 = 現在在低位(可關注) Quantile(close, N, 0.2)/close
RSV[N]
相對強弱位置
現在股價在過去 N 天「高低價區間」的位置(0 = 最低,1 = 最高) 抓極端機會:接近 0 = 超跌(可以買),接近 1 = 超漲(可以賣),類似 KDJ 指標的核心邏輯 (close - Min(low, N)) / (Max(high, N) - Min(low, N))

3. 時間週期類因子(3 x 5個):看過去極值出現的「時間規律」

因子名稱 涵義 核心用途 公式
IMAX[N]
Aroon 上漲指標比例
過去 N 天里,最高價是幾天前出現的(比例越小 = 越近) 判斷上漲動能:比如 N=10 時比例 0.1=1 天前剛出最高價(上漲動能強,可能繼續漲) IdxMax(high, N)/N
IMIN[N]
Aroon 下跌指標比例
過去 N 天里,最低價是幾天前出現的(比例越小 = 越近) 判斷下跌動能:比如 N=10 時比例 0.1=1 天前剛出最低價(下跌動能強,可能繼續跌) IdxMin(low, N)/N
IMXD[N]
極值時間差比例
過去 N 天里,最高價和最低價出現的時間差(正數 = 最高價出現得晚) 看趨勢方向:正數 = 近期先跌後漲(上漲動量),負數 = 近期先漲後跌(下跌動量) (IdxMax(high, N) - IdxMin(low, N))/N

4. 量價關係類因子(8 x 5個):看「股價」和「成交量」的配合度(核心!)

因子名稱 涵義 核心用途 公式
CORR[N]
量價相關性
過去 N 天 “股價漲,成交量也漲” 的同步程度(正數 = 同步,負數 = 反向) 驗證趨勢真假:股價漲、成交量也漲(正數)= 趨勢靠譜(真漲);股價漲、成交量跌(負數)= 趨勢要破(假漲) Corr(close, Log(volume+1), N)
CORD[N]
量價變動配合度
過去 N 天 “股價漲多少,成交量放多少” 的配合度(正數 = 漲時放量) 找強勢上漲股:正數 = 漲的時候成交量放大(有資金進場,能繼續漲),負數 = 漲的時候成交量縮小(沒人買,要跌) Corr(close/Ref(close,1), Log(volume/Ref(volume,1)+1), N)
CNTP[N]
上漲天數佔比
過去 N 天裡,上漲天數的比例(比如 5 天漲 3 天 = 比例 0.6) 看上漲頻率:比例高(0.7)= 近期老漲(可以持有),比例低(0.3)= 近期老跌(趕緊賣) Mean(close>Ref(close,1), N)
CNTN[N]
下跌天數佔比
過去 N 天裡,下跌天數的比例(和 CNTP 互補,加起來接近 1) 看下跌頻率:比例高(0.7)= 近期老跌(避開),比例低(0.3)= 近期跌得少(可關注) Mean(close<Ref(close,1), N)
CNTD[N]
漲跌天數差佔比
過去 N 天 “上漲天數比例 - 下跌天數比例”(正數 = 漲得多,負數 = 跌得多) 快速判斷趨勢:正數 = 上漲佔優(持有),負數 = 下跌佔優(賣出),比單獨看 CNTP/CNTN 更直觀 Mean(close>Ref(close,1),N)-Mean(close<Ref(close,1),N)
SUMP[N]
上漲幅度佔比
過去 N 天總漲幅佔總漲跌的比例(類似 RSI 指標,越高 = 上漲越強) 抓上漲力度:比例 0.8 = 上漲佔絕對主導(強勢),比例 0.2 = 上漲很弱(要跌) Sum(Greater(close-Ref(close,1),0),N)/(Sum(Abs(close-Ref(close,1)),N))
SUMN[N]
下跌幅度佔比
過去 N 天總跌幅佔總漲跌的比例(和 SUMP 互補,1-SUMP) 抓下跌力度:比例 0.8 = 下跌佔絕對主導(弱勢),比例 0.2 = 下跌很弱(要漲) Sum(Greater(Ref(close,1)-close,0),N)/(Sum(Abs(close-Ref(close,1)),N))
SUMD[N]
漲跌幅度差佔比
過去 N 天 “總漲幅 - 總跌幅” 的比例(正數 = 漲主導,負數 = 跌主導) 找買賣點:正數且變大 = 上漲動能增強(買),負數且變大 = 下跌動能增強(賣) (Sum(Greater(close-Ref(close,1),0),N)-Sum(Greater(Ref(close,1)-close,0),N))/(Sum(Abs(close-Ref(close,1)),N))

5. 成交量波動類因子(2 x 5個):看「成交量」的趨勢和波動

因子名稱 涵義 核心用途 公式
VMA[N]
成交量移動平均比值
過去 N 天平均成交量和現在成交量的對比(大於 1 = 現在量比過去少) 判斷資金活躍度:現在量比過去多(比值 <1)= 資金進場(要漲),現在量比過去少(比值> 1)= 資金離場(要跌) Mean(volume, N)/(volume)
VSTD[N]
成交量波動標準差
過去 N 天成交量波動的 “穩定程度”(數值越大 = 量能越亂) 看資金穩定性:量能穩定(數值 0.1)= 資金進場有序(趨勢靠譜),量能混亂(數值 0.3)= 資金炒作(風險高) Std(volume, N)/(volume)

6. 成交量加權類因子(4 x 5個):看「量能」對股價的影響

因子名稱 涵義 核心用途 公式
WVMA[N]
量能加權波動穩定性
過去 N 天 “股價波動 × 成交量” 的穩定程度(數值越大 = 波動越亂) 過濾垃圾股:數值小 = 量價配合穩定(值得持有),數值大 = 量價混亂(容易暴漲暴跌) Std(Abs(close/Ref(close,1)-1)*volume, N)/(Mean(Abs(close/Ref(close,1)-1)*volume, N))
VSUMP[N]
成交量增長佔比
過去 N 天成交量增長的比例(越高 = 量能放大越明顯) 找資金進場信號:比例 0.7 = 近期成交量持續放大(資金在買,要漲) Sum(Greater(volume-Ref(volume,1),0),N)/(Sum(Abs(volume-Ref(volume,1)),N))
VSUMN[N]
成交量萎縮佔比
過去 N 天成交量減少的比例(越高 = 量能萎縮越明顯) 找資金離場信號:比例 0.7 = 近期成交量持續縮小(資金在賣,要跌) Sum(Greater(Ref(volume,1)-volume,0),N)/(Sum(Abs(volume-Ref(volume,1)),N))
VSUMD[N]
成交量漲跌差佔比
過去 N 天 “成交量增長 - 減少” 的比例(正數 = 放量主導) 驗證量能趨勢:正數 = 放量(資金進場,趨勢向上),負數 = 縮量(資金離場,趨勢向下) (Sum(Greater(volume-Ref(volume,1),0),N)-Sum(Greater(Ref(volume,1)-volume,0),N))/(Sum(Abs(volume-Ref(volume,1)),N))

參考文獻

[1] Qlib入门——Alpha158 和 Alpha360:量化投资的 "数字眼睛"

About

Factor implementation library based on Alpha158. Built with phandas.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages