


傳統的「超趨勢 (SuperTrend)」指標僅依賴價格與波動率,容易在量能不足時產生假訊號。「超趨勢:AI 統計量能導航指標」 引入了資料科學中常用的 高斯核密度估計 (Gaussian KDE) 演算法,針對「成交量」進行深度建模,自動過濾掉那些虛有其表的假突破。
🧠 兩大核心技術解密
1. 「極限鎖定」SuperTrend 邏輯
此腳本採用了優化後的軌道演算法:
- 支撐線 (Up Band):使用 MaxList 確保線條在多頭期間「只會上升或持平」,絕不下降。這能有效鎖住利潤,防止因為小幅度回檔而過早出場。壓力線 (Down Band):使用 MinList 確保線條在空頭期間「只會下降或持平」,緊貼價格趨勢。
2. Gaussian KDE 成交量信心過濾
這是本指標最珍貴的地方。當趨勢發生翻轉(黃金交叉或死亡交叉)時,AI 會立即執行以下運算:
- 樣本回溯:掃描過去 200 根 K 棒(可自訂)中,所有發生過相同翻轉訊號的點。分佈比對:將當前的「相對成交量」與歷史成功翻轉時的量能分佈進行 Gaussian Kernel 權重計算。信心評分 (KDE %):如果當前量能符合歷史高機率成功的特徵,就會判定為「強勢訊號 (Strong)」。
📊 訊號與實戰策略
此指標將買賣點細分為「強勢」與「一般」,建議搭配 SMA 40 (40日均線) 進行波段操作。

💡 波段加分題:SMA 40 的妙用
建議搭配 SMA 40 使用:
- 多頭排列:股價 > SMA 40 時,僅參考「買入訊號」。
- 濾掉雜訊:若出現買入訊號但股價仍在 SMA 40 之下,視為跌深反彈,非波段起漲。
🛠️ 指標腳本原始碼
此腳本已符合 XQ 程式規範,請直接複製至「自訂指標」中。
// ============================================
// 腳本名稱: 超趨勢 KDE 量能指標
// 核心目的: 結合 SuperTrend 軌道與 Gaussian KDE 統計過濾量能
// 修正重點: 優化軌道收斂邏輯,加入強勢/一般訊號區分
// 日期: 2026/02/21
// ============================================
input:
_Len(10, "ATR 週期", Quickedit:=True),
_Multiplier(3, "ATR 倍數", Quickedit:=True),
_Vol_Len(20, "相對量均線期數", Quickedit:=True),
_KDE_Bandwidth(0.2, "KDE 頻寬", Quickedit:=True),
_KDE_Threshold(50, "KDE 信心閾值 (%)", Quickedit:=True),
_Lookback(200, "歷史樣本範圍", Quickedit:=True);
var:
_cnt(0), // K棒中點 (H+L)/2
_trend(1), // 趨勢方向: 1 往上, -1 往下
_up(0), // 支撐線 (動態下軌)
_dw(0), // 壓力線 (動態上軌)
_entry(0), // 進場基準價
_ATR_Val(0), // 當前 ATR 數值
_RelVol(0), // 相對成交量 (當前量 / 均量)
_AvgVol(0), // 平均成交量
_KDE_Percent(0), // KDE 信心評分
_KDE_Sum(0), // KDE 累加值
_KDE_Count(0), // 樣本計數
_LoopIdx(0), // 迴圈變數
_Diff(0); // 數值差異
// ------------------------------
// 1. 基礎數據計算
// ------------------------------
_cnt = (High + Low) / 2;
_ATR_Val = ATR(_Len);
_AvgVol = Average(GetField("成交量", "D"), _Vol_Len);
// 計算相對成交量:觀察當前量能是均量的幾倍
if _AvgVol <> 0 then
_RelVol = GetField("成交量", "D") / _AvgVol
else
_RelVol = 1;
// ------------------------------
// 2. SuperTrend 核心邏輯 (軌道收斂)
// ------------------------------
if currentBar <= _Len then begin
_up = _cnt;
_dw = _cnt;
end else begin
// 壓力線不上升 (MinList),支撐線不下降 (MaxList)
_dw = MinList(_dw[1], _cnt + _ATR_Val * _Multiplier);
_up = MaxList(_up[1], _cnt - _ATR_Val * _Multiplier);
end;
// ------------------------------
// 3. 趨勢反轉判斷與 KDE 運算
// ------------------------------
_KDE_Percent = 0;
// [情境:空翻多]
if Close cross over _dw and _trend = -1 then begin
_trend = 1;
_up = _cnt - _ATR_Val * _Multiplier; // 重置支撐起點
_entry = Close;
// AI 統計:比對過去樣本中,相同翻轉點的量能信心
_KDE_Sum = 0;
_KDE_Count = 0;
for _LoopIdx = 1 to _Lookback begin
if Close[_LoopIdx] cross over _dw[_LoopIdx] and _trend[_LoopIdx+1] = -1 then begin
_Diff = (_RelVol - _RelVol[_LoopIdx]) / _KDE_Bandwidth;
_KDE_Sum = _KDE_Sum + ExpValue(-0.5 * Square(_Diff)); // 高斯核計算
_KDE_Count = _KDE_Count + 1;
end;
end;
if _KDE_Count <> 0 then _KDE_Percent = (_KDE_Sum / _KDE_Count) * 100;
end;
// [情境:多翻空]
if Close cross below _up and _trend = 1 then begin
_trend = -1;
_dw = _cnt + _ATR_Val * _Multiplier; // 重置壓力起點
_entry = Close;
// AI 統計:比對過去樣本中的成交量分佈
_KDE_Sum = 0;
_KDE_Count = 0;
for _LoopIdx = 1 to _Lookback begin
if Close[_LoopIdx] cross below _up[_LoopIdx] and _trend[_LoopIdx+1] = 1 then begin
_Diff = (_RelVol - _RelVol[_LoopIdx]) / _KDE_Bandwidth;
_KDE_Sum = _KDE_Sum + ExpValue(-0.5 * Square(_Diff));
_KDE_Count = _KDE_Count + 1;
end;
end;
if _KDE_Count <> 0 then _KDE_Percent = (_KDE_Sum / _KDE_Count) * 100;
end;
// ------------------------------
// 4. 繪圖輸出
// ------------------------------
// 繪製動態軌道
if _trend = 1 then plot1(_up, "支撐線") else NoPlot(1);
if _trend = -1 then plot2(_dw, "壓力線") else NoPlot(2);
// 買入訊號輸出
if _trend cross over 0 then begin
if _KDE_Percent >= _KDE_Threshold then
plot3(_up, "強勢買入 (KDE)") // 推薦設定:紅色向上大箭頭
else
plot4(_up, "一般買入"); // 推薦設定:紅色向上小箭頭
end;
// 賣出訊號輸出
if _trend cross below 0 then begin
if _KDE_Percent >= _KDE_Threshold then
plot5(_dw, "強勢賣出 (KDE)") // 推薦設定:綠色向下大箭頭
else
plot6(_dw, "一般賣出"); // 推薦設定:綠色向下小箭頭
end;
// 進場參考水平線
if _trend = _trend[1] then
plot7(_entry, "進場基準價")
else
noPlot(7);
// 信心數值輔助 (可放入副圖觀察)
Plot8(_KDE_Percent, "KDE 信心度 (%)");
⚙️ 介面設定建議
為了發揮此指標最強的視覺效果,請在 XQ 繪圖設定中:
- Plot3 & Plot5 (強勢訊號):請將樣式改為 「點」,並選擇 「大箭頭」。
- Plot4 & Plot6 (一般訊號):將樣式改為 「點」,選擇 「小圓點」 或 「小箭頭」。
- 支撐/壓力線:建議將支撐線設為 紅色粗線,壓力線設為 綠色粗線。
💡 什麼是「KDE」?
「KDE」全名為 核密度估計 (Kernel Density Estimation),在統計學上是一種用來估計隨機變量機率密度函數的「非參數」方法。
簡單來說,KDE 的目標是根據過去發生的數據點,描繪出一條平滑的機率分佈曲線,讓我們知道某個數值出現的「機率密度」有多高。
在腳本中,KDE 被用來判斷:「當前這次突破時的成交量,是否與歷史上成功的突破特徵相似?」
以下是 KDE 邏輯的幾個核心要素說明:
1. 核心概念:從直方圖到平滑曲線
想像一下傳統的「直方圖 (Histogram)」,數據被切分成一個個死板的方格(區間)。KDE 則是將每一個觀測到的數據點(例如歷史上每次突破時的成交量),都看作是一個中心點,並在其上方放一個小的「鐘形曲線」(即核函數)。將所有這些小的鐘形曲線累加起來,就會得到一條平滑的波浪線。
2. 關鍵組件
在腳本中,我們主要用到以下兩個參數:
- 核函數 (Kernel): 最常用的是高斯核 (Gaussian Kernel)。它的特性是:如果當前數值與歷史數據非常接近,核函數輸出的值就接近 1;如果兩者距離很遠,輸出值就會迅速衰減趨近於 0。
- 邏輯: 當前相對成交量與歷史樣本越像,得分越高。
- 頻寬 (Bandwidth, h): 這是 KDE 最重要的參數。它決定了「鐘形曲線」的寬度。
- 頻寬太小: 曲線會變得很尖銳,對噪音過於敏感(過度擬合)。
- 頻寬太大: 曲線會變得很平緩,容易忽略細節(過於平滑)。
- XS 腳本中: _KDE_Bandwidth 預設 0.2,這是一個平衡點。
3. 在 XS 交易策略中的運作流程
當腳本偵測到 SuperTrend 發生反轉訊號(例如從空頭轉多頭)時,它會執行以下計算:
- 樣本蒐集:回溯過去 200 根 K 棒,找出所有同樣發生「空轉多」的時刻。
- 特徵提取:紀錄這些歷史時刻的「相對成交量」。
- 相似度比對 (KDE 計算):
- 拿「當前的相對成交量」去跟「歷史樣本」一個一個比對。
- 使用高斯公式計算距離:Exp(-0.5 * Square((當前量 - 歷史量) / 頻寬))。
4. 信心得分:將所有比對結果加總並平均。
- 如果得分很高(例如 > 50%),代表當前的成交量特徵在歷史上頻繁出現,屬於高品質訊號。
- 如果得分很低,代表當前的量能特徵與過去成功經驗不符,可能是虛假突破。
4. 為什麼要用 KDE 而非簡單的平均值?
簡單的平均值(如:成交量大於 20 日均量)只能告訴你量能「大不大」。 但 KDE 能告訴你量能「對不對」。
有些成功的突破並不一定需要極致天量,而是需要落在某個特定的量能區間。KDE 能夠識別出這種「統計上的相似性」,從而過濾掉那些雖然有量、但量能分佈異常的無效訊號。

總結
在指標中,KDE 扮演了「經驗過濾器」的角色。它不只是看指標有沒有黃金交叉,更是透過大數據分析,確認這次的量能變化是否符合歷史贏家的「長相」,進而大幅提升交易訊號的勝率。
💡高斯公式
這個公式其實就是統計學中常態分佈(高斯分佈)的簡化版。在 KDE(核密度估計)中,我們不需要計算複雜的機率絕對值,我們只需要一個「相似度分數」,而高斯函數是定義「相似度」最完美的工具之一。
我們可以把這個公式拆解成三個層次來理解:
1. 標準化距離:

這部分本質上就是統計學中的 Z-Score(標準分數)。
- 分子 (當前量 - 歷史量):計算兩者在數值上的絕對差距。
- 分母 (頻寬):這是你的「容忍度」。頻寬越大,分母越大,代表即使兩者差距不小,算出來的 z 還是很小,代表你覺得他們「長得很像」。
2. 平方與負號:

這一步是為了建立「距離越遠,分數掉越快」的邏輯:
- 平方 (z^2):確保無論差距是正還是負(成交量比歷史大或小),結果都是正數。同時,平方會放大較大的差距——距離增加 2 倍,懲罰會增加 4 倍。
- 負號 (-):因為我們希望「越近分數越高」,而 z^2 是越遠數值越大,所以加上負號讓它變成「越遠數值越小」。
- 0.5:這只是為了符合標準常態分佈的數學定義,讓函數在 z=1(差距剛好等於一個頻寬)時的下降速度符合數學美感。
3. 指數函數:exp(...)
這是最神奇的一步,它把「數值差距」轉換成了「相似度機率」:
- 當差距為 0 時:公式變成 exp(0),結果等於 1。代表 100% 相似。
- 當差距變大時:exp(-很大的數) 會迅速趨近於 0。代表完全不相似。
- 特性:指數函數的衰減非常平滑,這讓 KDE 算出來的分佈圖不會像直方圖那樣有鋸齒狀,而是一條優美的曲線。
為什麼不直接用「絕對值」就好?
你可能會問:「為什麼不直接用 1 - Abs(當前 - 歷史)?」
因為高斯公式提供了一個「緩衝區」。在差距很小時(靠近中心點),分數下降得比較慢;當差距超過一定範圍(頻寬)後,分數會像斷崖一樣迅速消失。這種特性非常符合金融市場的特性:量能稍微偏離一點點是可以接受的,但偏離太多就絕對不是同一種模式。
總結
這個公式在 XS 腳本裡的白話文就是:
「以歷史樣本為中心畫一顆鈴鐺,看看當前的成交量落在鈴鐺的哪個位置。越靠近鈴鐺頂端(分數越接近 1),代表這次突破的量能基因跟歷史贏家越吻合。」





















