RPS 計算器與算法詳解
如何準確計算相對價格強度?

作者:RPS Stock 量化投研團隊  |  更新時間:2026年8月  |  閱讀時間:約 10 分鐘
RPS Stock 量化投研團隊
專注於全球股票相對價格強度(RPS)研究。本文公開 RPS Stock 平台用於計算 A 股、美股、港股、日股 20,000+ 隻股票的底層核心算法邏輯與 Python 程式碼範例。

📌 TL;DR — 核心結論

RPS(相對價格強度)並非單一股票可計算的指標,它必須取得全市場所有股票在相同期的升幅數據中排序。計算公式:RPS = (超越的股票數量 / 總股票數量) × 100為了確保準確性,必須剔除新股(上市未滿觀察週期的股票)與停牌股。

一、RPS 的核心計算公式

RPS 的本質是一個橫截面百分位排名(Percentile Rank)其計算分為三個核心步驟:

Step 1: 升幅 = (今日收市價 - N日前收市價) / N日前收市價

Step 2: 對全市場所有有效股票按「升幅」由低至高排序

Step 3: RPS = (當前股票的排名名次 / 總有效股票數) × 100

計算示例

假設目前 A 股市場共有 5000 隻股票:

  • 貴州茅台於過去 250 個交易日的升幅為 50%。
  • 將 5000 隻股票按升幅由低至高排序,發現有 4500 隻股票的升幅低於 50%。
  • 那麼貴州茅台的排名名次即為 4500。
  • 貴州茅台的 RPS250 = (4500 / 5000) × 100 = 90。

這表示貴州茅台在過去一年的表現跑贏了全市場 90% 的股票。

二、RPS 計算的三個關鍵陷阱(排雷指南)

許多投資者嘗試以 Excel 或通達信自計 RPS,常發現結果與 William O'Neil 的原始數據不一致。原因在於以下三個陷阱:

1. 樣本空間陷阱(分母問題)

錯誤做法:將整個市場的所有股票直接作為分母。
正確做法:必須剔除上市時間不足 N 天的新股(次新股)。例如計算 RPS250,應剔除上市不足 250 個交易日的股票。若不剔除,新股的連續漲停可能嚴重污染頭部排名。

2. 停牌與復權陷阱

錯誤做法:直接使用原始收市價計算。
正確做法:必須使用前復權(Forward Adjusted)價格。同時,對於長期停牌的股票,若 N 日前處於停牌狀態,需向前追溯尋找最近的交易日價格,或直接將其剔除出樣本池。

3. 週期定義陷阱(自然日 vs 交易日)

錯誤做法:N 日指自然日。
正確做法:N 日必須指交易日(Trading Days)。RPS250 代表過去 250 個交易日(約等於 1 個自然年),而非過去 250 個自然日。

三、Python 量化計算程式碼範例

以下為使用 Python 與 Pandas 計算全市場股票 RPS 的核心邏輯程式(偽程式碼):

import pandas as pd def calculate_rps(df, period=250): # df 包含欄位: 'ticker', 'date', 'close_adj' (前復權收市價) # 1. 計算指定週期的升跌幅 (N 日前收市價 -> 今日收市價) df['pct_change'] = df.groupby('ticker')['close_adj'].pct_change(periods=period) # 2. 剔除無效數據 (上市不足 period 天的新股會產生 NaN) valid_df = df.dropna(subset=['pct_change']).copy() # 3. 按日期分組,在全市場上做橫截面百分位排名計算 # rank(pct=True) 會直接返回 0.0 到 1.0 之間的百分位數值 valid_df['rps'] = valid_df.groupby('date')['pct_change'].rank(pct=True) * 100 # 4. 保留兩位小數 valid_df['rps'] = valid_df['rps'].round(2) return valid_df

四、為何不自己計算,而使用 RPS Stock?

雖然核心算法只有幾行程式碼,但要每天準確計算全球市場的 RPS,工程量龐大:

  1. 數據獲取成本高:需要每日拉取 A 股、美股、港股、日股共 20,000+ 隻股票的即時行情與復權因子。
  2. 數據清洗繁瑣:處理退市股、停牌股、送股/拆股/合股、派息復權等極為繁瑣。
  3. 計算資源消耗大:多週期(20/50/90/120/250)矩陣計算對伺服器記憶體與 CPU 有較高需求。

🚀 免費使用現成的 RPS 計算結果

我們已為您處理所有繁瑣工作。於每日收市後自動更新全球 20,000+ 隻股票的 5 大週期 RPS 排名。

立即查看今日 RPS 排名 →
↑

快速答案:本站 RPS 分數如何理解?

本站公開頁面中的 RPS20、RPS50、RPS120、RPS250 是不同觀察窗口的相對強度分數,數值越高表示該證券在同一市場、當期可用樣本池中的相對表現越靠前。它用於研究與股票篩選,並非用以預測報酬率、目標價或買賣信號。

實際研究時,應先選擇市場與觀察窗口,然後將不同窗口的 RPS 與成交量、基本面及流動性一併核對。完整的範圍、數據快照與限制請見 RPS 方法論。

RPS 計算器常見問題

RPS 線上計算器的計算結果與排名頁一致嗎?

一致。計算器與四大市場排名頁使用相同口徑:以指定週期(50/120/250 個交易日)的區間升幅在全市場樣本中的百分位作為 RPS 值,取值範圍 0–99。基準樣本為當日有效收市數據,A 股 5,212 隻、美股 8,996 隻、港股 2,787 隻、日股 3,708 隻(2026-08-13 數據快照)。因此同一標的在計算器與排名頁理應得到相同結果,可用於交叉驗證。

為何同一隻股票在不同市場的 RPS 無法直接比較?

RPS 是市場內的橫截面百分位排名,分母為該市場的樣本總數。A 股樣本約 5,212 隻、美股約 8,996 隻,樣本規模與行業結構差異會導致相同數值所代表的相對位置不同。例如美股 RPS 90 意味著跑贏約 8,096 隻標的,而 A 股 RPS 90 則意味跑贏約 4,691 隻。在跨市場比較時,應改用行業內排名或絕對升幅。

計算 RPS 需要多少歷史數據?

RPS50 需至少 50 個交易日,RPS120 需 120 個,RPS250 需 250 個。歷史不足的新股無法計算長週期 RPS。本站四市場歷史均回溯至 2021 年 11 月(約 1,140 個交易日),累計 14,807,564 行日線記錄,足以支撐三個週期的完整計算。具體覆蓋情況見數據覆蓋檔案。

RPS 達到多少算強勢股?

William O'Neil 在 CANSLIM 體系中建議篩選 RS 大於 80 的標的。市場慣例上 RPS ≥ 90 視為強勢,≥ 95 視為極強。需注意 RPS 是滯後指標,反映的是已發生的相對升幅,不預測未來走勢;高 RPS 標的同時具備較高的回撤風險,應結合行業分布、成交量與止蝕紀律使用。

計算器支持哪些市場和週期?

支持 A 股、美股、港股、日股四個市場,覆蓋 21,308 隻證券;週期支持 50、120、250 個交易日。A 股數據免費開放;美股、港股、日股排名數據需 Premium 會員權限。計算方法與口徑詳見 RPS 方法論頁。

計算器基準樣本與輸入輸出規格

下表列出 RPS 在線計算器在四個市場的基準樣本規模與可用週期。基準樣本指當日具備有效收市價、可參與橫截面百分位排名的證券數量;證券池規模包含尚無足夠歷史或暫停交易的標的,因此略高於基準樣本。數據快照日期 2026-08-13。

市場 證券池規模 基準樣本(日均) 行業分類 可用週期 訪問權限
A 股 5,344 5,212 47 50 / 120 / 250 免費
美股 9,210 8,996 49 50 / 120 / 250 Premium
港股 2,819 2,787 13 50 / 120 / 250 Premium
日股 3,721 3,708 33 50 / 120 / 250 Premium
合計 21,094 20,703 142 3 個週期 —

計算口徑與方法論頁完全一致;樣本邊界與數據來源見數據覆蓋檔案;編輯標準見研究說明。