基於 Alpha158 的因子實現庫。使用開源模組 phandas。
pip install phandas==0.13.0每個 Python 文件都是獨立的單因子回測腳本,可直接執行。
核心用途:判斷當天股價的漲跌力道、支撐 / 壓力位,快速識別 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) |
核心用途:對比當天不同價格(開盤、最高、最低、主力均價)與收盤價的關係,判斷當天交易的合理性。
| 因子名稱 | 涵義 | 核心用途 | 公式 |
|---|---|---|---|
| OPEN0 當日開盤價 / 收盤價 | 當天開盤價和收盤價的比值(大於 1 = 開盤高、收盤低;小於 1 = 開盤低、收盤高) | 快速判斷當天「高開低走」還是「低開高走」(比如比值 1.03 = 高開低走,警惕下跌) | open/close |
| HIGH0 當日最高價 / 收盤價 | 當天最高價和收盤價的比值(大於 1 = 最高價高於收盤價) | 看當天有沒有「衝高回落」(比值越大,回落越明顯,比如漲到 10 元又跌回 9 元) | high/close |
| LOW0 當日最低價 / 收盤價 | 當天最低價和收盤價的比值(小於 1 = 最低價低於收盤價) | 看當天有沒有「探底回升」(比值越小,回升越明顯,比如跌到 8 元又漲到 9 元) | low/close |
| VWAP0 當日主力均價 / 收盤價 | 當天主力資金成交的平均價(VWAP)和收盤價的比值 | 主力均價高於收盤價 = 主力在出貨(可能要跌);主力均價低於收盤價 = 主力在吸籌(可能要漲) | vwap/close |
核心用途:通過過去 5/10/20/30/60 天的歷史數據,判斷股價未來可能漲還是跌,N 越小(5/10 天)看短期,N 越大(30/60 天)看長期。
表中每個因子實際為5個,如ROC[N]表示ROC5、ROC10、ROC20、ROC30、ROC60。
| 因子名稱 | 涵義 | 核心用途 | 公式 |
|---|---|---|---|
| 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 |
| 因子名稱 | 涵義 | 核心用途 | 公式 |
|---|---|---|---|
| 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)) |
| 因子名稱 | 涵義 | 核心用途 | 公式 |
|---|---|---|---|
| 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 |
| 因子名稱 | 涵義 | 核心用途 | 公式 |
|---|---|---|---|
| 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)) |
| 因子名稱 | 涵義 | 核心用途 | 公式 |
|---|---|---|---|
| VMA[N] 成交量移動平均比值 |
過去 N 天平均成交量和現在成交量的對比(大於 1 = 現在量比過去少) | 判斷資金活躍度:現在量比過去多(比值 <1)= 資金進場(要漲),現在量比過去少(比值> 1)= 資金離場(要跌) | Mean(volume, N)/(volume) |
| VSTD[N] 成交量波動標準差 |
過去 N 天成交量波動的 “穩定程度”(數值越大 = 量能越亂) | 看資金穩定性:量能穩定(數值 0.1)= 資金進場有序(趨勢靠譜),量能混亂(數值 0.3)= 資金炒作(風險高) | Std(volume, N)/(volume) |
| 因子名稱 | 涵義 | 核心用途 | 公式 |
|---|---|---|---|
| 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)) |