康納相對強弱指數 (Connors RSI, CRSI) 在量化交易界享有極高的聲譽,被譽為「均值回歸 (Mean Reversion) 的勝率之王」。傳統的 RSI 常常在 30 附近來回洗盤,讓摸底的投資人受盡折磨;而 CRSI 的發明者 Larry Connors 透過疊加三個不同維度的因子,將「超賣」定義的更精細,努力創造出極高勝率的左側買點。
一、 核心數學意義與三大動能支柱
CRSI 的數值範圍與傳統 RSI 一樣是 0 到 100,但它的底層公式是由三個完全獨立的動能元件取算術平均而成:

這三個元件分別負責測量市場的短、中、長線極端情緒:
- 第一支柱:價格的極短線動能 RSI price
- 計算方式: 對收盤價取 3 週期的 RSI。
- 意義: 傳統 RSI 用 14 天,反應太慢。3 天的 RSI 非常神經質,只要股價連續跌個兩三天,數值就會迅速掉到 10 以下,這能第一時間反映極短線的價格恐慌。
- 第二支柱:連漲連跌的心理折磨 RSI price
- 計算方式: 這是 CRSI 最天才的設計。首先,把 K 線轉化為「連勝/連敗」的整數序列。
- 今天收紅,數值為 +1;明天繼續收紅,數值為 +2。
- 今天收黑,數值為 -1;明天繼續收黑,數值為 -2。
- 平盤為 0。
接著,對這組「整數序列」取 2 週期的 RSI。
- 意義: 跌 5 天每天跌 1%,跟 1 天暴跌 5%,在心理上的折磨是不同的。連跌 5 天會讓散戶的絕望感達到頂峰。這個元件量化了「連跌天數帶來的恐懼」。
- 計算方式: 這是 CRSI 最天才的設計。首先,把 K 線轉化為「連勝/連敗」的整數序列。
- 第三支柱:相對跌幅的歷史位階 PercentRank
- 計算方式: 將今天的「單日漲跌幅」拿去跟過去 100 天的單日漲跌幅做比較,看看今天的表現贏過過去 100 天裡多少百分比的日子。
- 意義: 這是一個橫向的相對強弱比較。如果今天跌了 3%,且在過去 100 天內從來沒有單日跌這麼重過,這個數值就會趨近於 0。這代表今天的拋售力道是近期極為罕見的極端事件。
二、 實戰應用指南 (波段操作戰略)
CRSI 不是用來順勢追高的,它是純粹的逆勢抄底(Pullback Trading)」武器。
- 大環境濾網 (極重要): 均值回歸的前提是「趨勢向上」。因此,在掃描 CRSI 之前,必須確保股價處於長期多頭(例如:收盤價 > 200 日均線)。不要在空頭市場抄底,那不叫均值回歸,叫接刀。
- 極端買點觸發: 當股價在 200 日均線之上,且 CRSI < 10(甚至設定嚴格一點為 5)。這代表一檔長期向上的好股票,剛經歷了罕見的短線暴跌與連續收黑。此時進場,隔日或幾日內反彈的機率極高。
- 靈活停利: 均值回歸的獲利時間極短,通常不超過 5 天。當股價反彈,收盤價突破 5 日均線,或是 CRSI 回升至 70 以上,即刻獲利了結。
三、 XScript 完整指標腳本
在 XScript 中實作 CRSI,最複雜的地方在於處理連跌序列與計算百分位排名。以下是 Gemini寫的腳本,我最後為了判讀方便,把CRSI再做了5日平均
// 指標名稱:Connors RSI (CRSI 康納相對強弱指數) // 理論基礎:Larry Connors // ----------------------------------------------------------- Input: RSI_Len(5, "價格 RSI 週期"), Streak_Len(10, "連勝/連敗 RSI 週期"), Rank_Len(100, "百分位排名週期"); Variable: RSI_Price(0), Streak(0), RSI_Streak(0), TodayRet(0), HistoryRet(0), RankCount(0), PctRank(0), i(0), CRSI(0); // 1. 計算第一支柱:極短線價格 RSI RSI_Price = RSI(Close, RSI_Len); // 2. 計算第二支柱:連勝/連敗序列的 RSI // 記錄連續漲跌天數 if Close > Close[1] then begin if Streak < 0 then Streak = 1 else Streak = Streak + 1; end else if Close < Close[1] then begin if Streak > 0 then Streak = -1 else Streak = Streak - 1; end else begin Streak = 0; end; // 對連勝連敗序列計算 RSI (XQ 的 RSI 函數可接受數值變數) RSI_Streak = RSI(Streak, Streak_Len); // 3. 計算第三支柱:單日漲跌幅的歷史百分位 (PercentRank) // 確保有足夠的 K 線數據 if CurrentBar > Rank_Len then begin TodayRet = (Close - Close[1]) / Close[1]; RankCount = 0; // 迴圈比對過去 N 天的單日報酬率 for i = 1 to Rank_Len - 1 begin HistoryRet = (Close[i] - Close[i+1]) / Close[i+1]; if HistoryRet < TodayRet then RankCount = RankCount + 1; end; // 算出百分比 (0 ~ 100) PctRank = (RankCount / Rank_Len) * 100; end else begin PctRank = 50; // 數據不足時給予中性值 end; // 4. 計算最終 CRSI (三者算術平均) CRSI = (RSI_Price + RSI_Streak + PctRank) / 3; value1=average(CRSI,5); // 5. 繪圖輸出 Plot1(value1, "Connors RSI"); Plot2(30, "極度超賣(黃金買點)");
下圖是這個指標對應台積電的圖

