Author Archives: 發財橘子

考夫曼自適應均線 (Kaufman’s Adaptive Moving Average, KAMA)

考夫曼自適應均線 (Kaufman’s Adaptive Moving Average, KAMA) 由 傳奇量化大師Perry Kaufman ,在其著作《Smarter Trading》中所發明的經典指標,專門用來解決「均線在盤整期被打臉」的問題。 

跟傳統均線的差異在於KAMA 引入了一個「效率係數 (Efficiency Ratio, ER)」。

這個系數的計算公式如下

  • 趨勢盤: 價格直直衝,位移 跟 路徑很接近,ER趨近於 1。KAMA 會變得非常靈敏(像短期均線)。
  • 震盪盤: 價格上下刷,位移很小但路徑很長,ER 趨近於 0。KAMA 會自動停滯」**,變成一條水平線。

過濾假突破的邏輯:
當市場出現假突破(瞬間暴漲但隨即拉回)時,雖然價格動了,但「路徑」變長了,導致 ER 下降。KAMA 會判定這是「噪音」而拒絕跟隨。只有當價格「穩定且有效率」地移動時,KAMA 才會轉向。

以下是 KAMA 的完整數學解析、應用邏輯與 XScript 腳本。

 

1. KAMA 的核心意義:訊號與雜訊

KAMA 的核心哲學是:「當市場充滿雜訊(盤整)時,均線應該停止移動;當訊號明確(趨勢)時,均線應該加速追趕。」

 

 

2. 計算公式詳解

KAMA 的計算分為三個步驟,邏輯非常嚴謹:

Step 1: 計算效率係數 (ER)

這是 KAMA 的大腦,用來判斷現在是趨勢還是盤整。

Step 2: 計算平滑常數 (Smoothing Constant, SC)

3. XScript (XQ 語法) 完整腳本

這段代碼您可以直接用於 XQ。

// 指標名稱:Kaufman's Adaptive Moving Average (KAMA)
// -----------------------------------------------------------
Input: 
Period(10, "計算週期 (ER)"), 
FastEnd(2, "最快EMA週期"), 
SlowEnd(30, "最慢EMA週期");

Variable: Direction(0), Volatility1(0), ER(0);
Variable: FastSC(0), SlowSC(0), SC(0);
Variable: KAMA_Val(0);

// 1. 初始化平滑常數 (將 EMA 週期轉換為權重常數)
// EMA權重公式 = 2 / (N + 1)
Once begin
FastSC = 2 / (FastEnd + 1);
SlowSC = 2 / (SlowEnd + 1);
end;

// 2. 計算效率係數 (Efficiency Ratio, ER)
// Direction: 價格淨位移 (直線距離)
Direction = AbsValue(Close - Close[Period]);

// Volatility: 價格總路徑 (每日波動總和)
// 使用 Summation 函數累加過去 Period 天的每日波動
Volatility1 = Summation(AbsValue(Close - Close[1]), Period);

// 防呆機制:避免分母為 0
if Volatility1 > 0 then 
ER = Direction / Volatility1
else 
ER = 0;

// 3. 計算平滑常數 (SC)
// 這是 KAMA 的核心:將 ER 對映到 FastSC 與 SlowSC 之間,並平方以壓抑雜訊
SC = Power(ER * (FastSC - SlowSC) + SlowSC, 2);

// 4. 計算 KAMA
// 第一根 Bar 直接用收盤價,之後用遞歸公式
if CurrentBar = 1 then
KAMA_Val = Close
else
KAMA_Val = KAMA_Val[1] + SC * (Close - KAMA_Val[1]);

// 5. 繪圖輸出
Plot1(KAMA_Val, "KAMA");

 

 

 

4. 產品應用:如何利用 KAMA 過濾假突破?

這正是 KAMA 最強大的地方。對於 Moneydj 的用戶,您可以這樣設計策略教學或功能提示:

情境:假突破 (False Breakout)

  1. 現象: 股價瞬間大漲,突破了前波高點。
  2. 傳統均線反應: 因為價格大漲,傳統 MA (如 5MA) 會立刻勾頭向上,發出買進訊號 -> 結果買在最高點,隔天大跌(假突破)。
  3. KAMA 的反應:
    • 雖然價格位移(分子)變大了,但如果這次突破是伴隨著劇烈的上下刷洗(分母 Volatility 更大),ER 值反而會很低。
    • 結果: KAMA 線會保持水平,甚至幾乎不動。
    • 策略意義: 這告訴交易者:「價格雖然動了,但效率很低,這不是穩健的趨勢,不要追價!

情境:真趨勢 (True Trend)

  1. 現象: 股價穩步推升,每天都漲一點點,回檔很淺。
  2. KAMA 的反應:
    • 位移大,但總路徑也短(因為沒有多餘的震盪)。
    • ER 值接近 1。
    • 結果: KAMA 會突然加速,緊緊貼著價格上揚。
    • 策略意義: 這是高效率趨勢,大膽買進!

以下是用這個均線及均線與股價價差作的指標應用圖

 

總結

KAMA 就像是一個「有潔癖」的均線。它痛恨雜訊,只有在趨勢非常乾淨時才會進場。

 

 

 

漩渦指標

漩渦指標 (Vortex Indicator, VI) 是由 Etienne Botes 和 Douglas Siepman 於 2010 年一月發表在《Technical Analysis of Stocks & Commodities》雜誌上的指標。 靈感來自於流體力學中的「漩渦流」。

  • 核心原理:
    大多數指標只看收盤價,但漩渦指標關注「波幅的連續性」。它測量價格向上移動的能量 VI+與向下移動的能量 VI-之間的距離。

    • 當正向漩渦流 VI+強勢穿過負向漩渦流 VI- 時,代表一股強大的上升氣流已經形成,這通常不是假突破,而是真實的趨勢結構改變。
  • 為什麼能過濾假突破?
    它對「盤整」非常敏感。在沒有明確趨勢時,VI+ 與 VI- 會糾纏在一起(像 DNA 雙螺旋)。只有當兩者**「開口顯著擴大」**時,才視為有效訊號。這比單純的均線交叉更難造假。

VI 的價值在於它不僅僅是「趨勢指標」,它更是一個 能量流向指標 。它解決了傳統均線(MA)最大的痛點:均線只能告訴你「過去」發生了什麼,但 VI 試圖告訴你目前的趨勢能量是否足以延續。

 

1. 漩渦指標 (VI) 的核心意義

VI 的靈感來自於奧地利自然學家 Viktor Schauberger 對水流漩渦的研究。他發現水流的能量是透過螺旋運動產生的。

在金融市場中,VI 將這種概念轉化為兩股力量的博弈:

  1. 正向漩渦VI+: 買方力量。試圖將價格推向比昨天更高的高點。
    • 計算:今日最高價昨日最低價 的距離。
  2. 負向漩渦 VI-: 賣方力量。試圖將價格推向比昨天更低的低點。
    • 計算:今日最低價昨日最高價 的距離。

 

2. XScript (XQ 語法) 完整腳本

// 指標名稱:Vortex Indicator (VI)
// 發表年份:2010
// -----------------------------------------------------------
Input: Length(14, "計算週期");
Variable: VM_Plus(0), VM_Minus(0);
Variable: Sum_VM_Plus(0), Sum_VM_Minus(0), Sum_TR(0);
Variable: VI_Plus(0), VI_Minus(0);
Variable: TR(0);

// 1. 計算單根 K 線的漩渦移動量 (Vortex Movement)
// 邏輯:今天的高點離昨天的低點有多遠 (多頭力道)
VM_Plus = AbsValue(High - Low[1]);

// 邏輯:今天的低點離昨天的高點有多遠 (空頭力道)
VM_Minus = AbsValue(Low - High[1]);

// 2. 計算真實波幅 (True Range)
// 這是為了將波動率標準化,讓不同價位的股票可以比較
TR = TrueRange; 
// 註:若 XQ 版本較舊不支援 TrueRange,可用以下公式取代:
// TR = MaxList(High - Low, AbsValue(High - Close[1]), AbsValue(Low - Close[1]));

// 3. 進行週期累加 (Summation)
// 這裡將過去 N 天的力道總和起來
Sum_VM_Plus = Summation(VM_Plus, Length);
Sum_VM_Minus = Summation(VM_Minus, Length);
Sum_TR = Summation(TR, Length);

// 4. 計算最終指標數值 (歸一化)
if Sum_TR <> 0 then begin
VI_Plus = Sum_VM_Plus / Sum_TR;
VI_Minus = Sum_VM_Minus / Sum_TR;
end;

// 5. 繪圖輸出
Plot1(VI_Plus, "VI+ (多頭)");
Plot2(VI_Minus, "VI- (空頭)");
Plot3(VI_Plus-VI_Minus,"差額");

 

3.實戰應用

A. 標準用法:交叉訊號 (Crossover)

  • 買進: 紅線 (VI+) 由下往上穿過 綠線 (VI-)。
  • 賣出: 紅線 (VI+) 由上往下穿過 綠線 (VI-)。
  • 缺點: 在盤整時會頻繁交叉(假訊號)。

B. 進階用法:閾值確認 (Threshold Confirmation) —— 這是您最需要的

為了過濾假突破,您可以設定一個**「有效區間」**:

  • 邏輯: 只有當 VI+ 大於 1.1 且 VI-小於 0.9 時,才認定多頭趨勢正式展開。
  • 意義: 這代表買方力道不僅僅是贏過賣方,而且是「壓倒性」的勝利。

 

C. 與 MACD 的差異

  • MACD 是基於均線的收斂發散,反應較慢。
  • VI 是基於價格的高低點幾何關係,反應通常比 MACD 快,且對「轉折」更敏感。

4. 針對「假突破」的特別觀察

當價格創新高,但 VI+ 沒有同步創新高(甚至開始下滑),這就是著名的頂部背離 (Bearish Divergence)

這通常是主力在拉高出貨的徵兆,是過濾「假突破真拉回」最強力的訊號之一。

 5.參考的圖形

 

Ehlers 相關性趨勢指標

 Ehlers 相關性趨勢指標 (Correlation Trend Indicator, CTI) 是 John Ehlers 在其著作《Cycle Analytics for Traders》(2013) 及後續發表中提出的概念。

 CTI 是一個「含金量」極高的指標。因為它解決了一個傳統技術分析無法量化的問題:「這個趨勢到底有多『明確』?」

1. CTI 的核心哲學:尋找「完美的 45 度線」

大多數趨勢指標(如 MACD、均線)測量的是價格變化的幅度。但幅度大不代表趨勢好,有可能是暴漲暴跌。

CTI 測量的不是幅度,而是 「型態的完美度」 。

  • 概念模型: 想像一條從左下角筆直畫到右上角的直線(理想的上升趨勢)。
  • 計算邏輯: CTI 計算實際股價走勢與這條「理想直線」之間的相關係數 (Correlation Coefficient)
  • 數值解讀:
    • +1.0: 完美的上升趨勢(股價沿著直線穩定上漲,無雜訊)。
    • -1.0: 完美的下降趨勢。
    • 0.0: 完全的隨機漫步或橫盤整理。

2. 為什麼 CTI 優於 ADX 或 RSI?

在設計選股策略或儀表板時,CTI 提供了傳統指標無法提供的視角:

特性 ADX (平均方向指數) RSI (相對強弱指標) CTI (相關性趨勢)
方向性 無 (只知有趨勢,不知方向) 有 (+/- 分明)
鈍化問題 會滯後 強勢時會卡在 80 以上鈍化 不會鈍化,它會穩定維持在 0.9 以上
雜訊敏感度 易受單日大漲跌影響 易受波動率影響 ,只關注整體結構的線性度
PM 應用 判斷趨勢強度 判斷超買超賣 篩選「穩健飆股」 (Sleep-well stocks)

 

如果你想挑選出「抱得住」的股票,CTI 是比 RSI 更好的過濾器。因為 CTI 高的股票,回檔幅度小,走勢呈現階梯式上漲,投資人的心理壓力最小。

3. 數學原理與計算步驟

CTI 使用的是統計學標準的皮爾森積矩相關係數 (Pearson Product-Moment Correlation Coefficient),或是更進階的史皮爾曼等級相關 (Spearman Rank Correlation)

在標準算法中,我們將兩個變數進行比較:

  1. 變數 X: 價格序列 (Price)。
  2. 變數 Y: 時間序列 (Time Index),即 1, 2, 3… N (代表一條完美的斜線)。

這個公式看起來複雜,但本質上就是在問:「目前的價格走勢,跟一條穩定向上的直線,相似度有幾成?」

用Xscript寫的腳本如下

// 指標名稱:Ehlers Correlation Trend Indicator
// -----------------------------------------------------------
Input: Length(20, "計算週期");
Variable: SX(0), SY(0), SXX(0), SYY(0), SXY(0), i(0);
Variable: Corr(0);

// 初始化累加變數
SX = 0; SY = 0; SXX = 0; SYY = 0; SXY = 0;

// 計算價格與「時間序列(1, 2, 3...)」的相關性
for i = 0 to Length - 1 begin
Value1 = Close[i]; // Y: 價格
Value2 = Length - i; // X: 時間序 (越近數值越大,模擬上升直線)

SX = SX + Value2;
SY = SY + Value1;
SXY = SXY + (Value2 * Value1);
SXX = SXX + (Value2 * Value2);
SYY = SYY + (Value1 * Value1);
end;

// 相關係數公式
Value3 = (Length * SXX) - (SX * SX);
Value4 = (Length * SYY) - (SY * SY);

if Value3 > 0 and Value4 > 0 then
Corr = ((Length * SXY) - (SX * SY)) / SquareRoot(Value3 * Value4)
else
Corr = 0;

Plot1(Corr, "Trend Correlation");
Plot2(0, "Zero");
Plot3(0.5, "Strong Trend");

 

 

以下是其用在台積電上的對照圖

 

總結

Ehlers CTI 是一個將 「美學」(圖形漂亮程度)轉化為「數學 的優雅指標。它不求快,但求「穩」。 

內行人指數

現在產業輪動的這麼快,作為散戶,當特定類股開始上漲時,我們經常是

 

當類股下跌時,我們最怕的是

 

我一直在思考要如何避開這兩個煩惱

說到底,就是要儘量因為資訊落差而成為韭菜

在這市場上,

法人跟大股東是最可能擁有資訊落差的內行人

所以撰寫以下的腳本,計算有多少種不同的內行人在買超,而散戶還在放空或賣股票的

我寫的腳本如下

value1=getfield("外資買賣超", "D");
value2=getField("投信買賣超", "D");
value3=getField("自營商買賣超", "D");
value4=getField("關鍵券商買賣超張數", "D");
value5=getField("關聯券商買賣超張數", "D");
value6=getField("地緣券商買賣超張數", "D");
value7=getField("融資增減張數", "D");
value8=getField("融券增減張數", "D");
var:count(0);
count=0;
if value1>0 then count=count+1;
if value2>0 then count=count+1;
if value3>0 then count=count+1;
if value4>0 then count=count+1;
if value5>0 then count=count+1;
if value6>0 then count=count+1;
if value7<0 then count=count+1;
if value8>0 then count=count+1;
value9=average(count,40);
value10=count-value9;
plot1(average(count,3),"內行人參與係數");
plot2(value10,"差額");

這份腳本的核心概念是透過量化 「籌碼面」的共識程度 ,來判斷一檔股票是否正在被「聰明錢(Smart Money)」集中佈局。

畫出來的圖如下圖

以下是AI寫的這個指標的分析報告,包含計算公式指標意義實戰應用

1. 指標計算公式:內行人的共識分數

這個指標的運作邏輯是「計分制」。它每天會檢查 8 個籌碼變數,只要符合條件就加 1 分,滿分為 8 分。分數越高,代表越多不同路數的內行主力正在同步買進 。

加分條件(符合一項得 1 分):

這 8 個變數涵蓋了三大法人、主力券商與散戶指標:

類別 變數名稱 加分條件 背後邏輯
三大法人 1. 外資 買超 > 0 外資籌碼進駐,通常代表基本面或波段看好
2. 投信 買超 > 0 本土法人作帳或看好中短期爆發力
3. 自營商 買超 > 0 短線操作敏銳的券商自有資金進場
特殊主力 4. 關鍵券商 買超 > 0 過去操作該股勝率高或具影響力的券商
5. 關聯券商 買超 > 0 與公司派、大股東有地緣或人脈關係的券商
6. 地緣券商 買超 > 0 位於公司總部附近的券商,常被視為公司派動向
散戶與反向 7. 融資 減少 (< 0) 散戶(融資)退場,籌碼流向穩定(籌碼沉澱)
8. 融券 增加 (> 0) 可能是主力避險,或醞釀「軋空」行情的燃料

最終輸出數值:

  1. 內行人參與係數 (Plot1):將每日的得分取 3 日平均。這是為了平滑單日的波動,看出一週內的短期趨勢 。
  2. 差額 (Plot2):當日得分減去 40 日平均得分。用來判斷目前的熱度是否高於長期平均 。

2. 指標意義:資訊落差的具象化

這份腳本的作者開宗明義提到:「法人跟大股東是最可能擁有資訊落差的內行人」。

對於一般投資人來說,這個指標的意義在於解決單一看法的不確定性:

  • 消除雜訊:單看外資買,可能是假外資;單看投信買,可能是追高。但如果外資、投信、地緣券商、關鍵券商同時都在買,這就不太可能是巧合。
  • 確認共識:當這個係數很高(例如接近 6~8 分),代表市場上擁有「資訊優勢」的各路人馬都在做多,這時候跟單的勝率通常較高 。
  • 籌碼流向確認:特別加入了「融資減少」與「融券增加」的濾網,意味著它喜歡「散戶下車、主力上車」的籌碼結構。

3. 應用方式:如何用來操作?

根據腳本的邏輯,建議投資人可以採用以下三種應用策略:

A. 趨勢發動點 (Momentum Strategy)

  • 觀察重點:看 內行人參與係數 (Plot1)。
  • 操作:當係數從低檔(例如 1~2 分)快速攀升並突破 5 分以上,且維持在高檔。
  • 解讀:代表多方主力開始集結,股價可能即將發動攻擊。

B. 異常熱度偵測 (Divergence/Oscillator Strategy)

  • 觀察重點:看 差額 (Plot2,即當前分數 – 40日均值)。
  • 操作
    • 正向訊號:當 差額 轉為正數且持續擴大。這代表最近幾天的內行人買盤遠比過去兩個月(40天)還要積極,是主力表態的訊號。
    • 警示訊號:若股價創新高,但 內行人參與係數 卻開始下降(背離),代表雖然股價在漲,但聰明錢已經開始由於或撤退,這時應考慮停利。

C. 底部佈局 (Bottom Fishing)

  • 觀察重點:股價盤整時,內行人參與係數 是否悄悄墊高。
  • 解讀:如果股價還沒漲,但係數長期維持在 4~5 分以上,且融資持續減少(變數 7),這通常是主力在底部「吸籌」的特徵。

總結

這個指標不是單純的「買賣超張數」加總,而是一個 「多方訊號計數器」。它不看誰買得多,而是看有多少種不同的內行人 一致看好。

給一般投資人的建議:

不要只看指標分數高就買進,最好搭配 K線型態(如突破盤整區)一同觀察。當「內行人係數」高漲且股價剛突破關鍵壓力位時,就是勝率最高的進場點。

 

 

Points and Line (P&L) Chart

Points and Line (P&L) Chart 是 2025 年底在量化交易界與高階圖表軟體中興起的一種「雜訊過濾」圖表。它本質上是點數圖 (Point and Figure)折線圖 (Line Chart) 的混合體,旨在解決傳統 K 線圖在盤整期噪音過多,以及傳統點數圖「時間軸扭曲」的痛點。

這對於需要處理大量金融數據、並希望 「清爽趨勢感」的使用者來說,是一個極具潛力的視覺化工具。

1. 核心邏輯:價格變化決定繪圖,而非時間

傳統 K 線無論價格有無變動,每分鐘/每天都會畫出一根;而 P&L Chart 遵循以下原則:

  1. 設定閾值 (Box Size / Reversal): 只有當價格變動超過預設的幅度(例如 1% 或特定的 ATR 倍數)時,圖表才會畫出下一個點。
  2. 連接點與線: 當滿足變動條件時,在新的價格位階畫一個點,並與前一個點連線。
  3. 橫軸同步: 不同於傳統點數圖(會把時間擠壓),P&L Chart 保持了線性時間軸。如果價格在一段時間內沒有顯著變動,圖表會呈現一條水平線,直到突破發生。

2. P&L Chart 的三大優點

  • 自動過濾噪音: 在波動率極低的橫盤區間,P&L Chart 會呈現一條筆直的水平線。這能幫助投資人忍受震盪,直到真正的「趨勢點」出現。
  • 支撐壓力位極度清晰: 由於水平線代表價格在該區間停留且未突破,這些「平台區」自動成為了視覺上最直觀的強大支撐與壓力帶。
  • 保持時間參考: 它解決了點數圖最大的問題——無法判斷這段價格波動花了多久。在 P&L Chart 上,水平線越長,代表盤整時間越久,突破後的爆發力通常也越強。

3. 與傳統圖表對比

特性 K 線圖 (Candlestick) 點數圖 (P&F) P&L Chart
時間軸 穩定 (線性) 扭曲 (非線性) 穩定 (線性)
雜訊處理 無 (顯示所有跳動) 極佳 (完全過濾) 優異 (局部平滑)
視覺焦點 價格開高低收 價格反轉模式 趨勢發動與平台區
適合對象 當沖、短線交易 老派量化分析師 中長線波段、產業趨勢分析

4. XScript 實作思考

在 XQ 系統中,要完全改變「繪圖引擎」去畫 P&L Chart 較難,但我們可以透過「指標」的形式,利用 Plot 函數模擬出這種效果:

// 模擬 P&L Chart 的邏輯 (簡化版)
// -----------------------------------------------------------
Input: BoxSizePct(1, "變動閾值%");
Variable: LastPoint(0), TargetChange(0);

if CurrentBar = 1 then LastPoint = Close;

// 計算變動幅度
TargetChange = LastPoint * (BoxSizePct / 100);

// 只有當收盤價偏離上一個點超過門檻時,才更新點位
if AbsValue(Close - LastPoint) >= TargetChange then begin
LastPoint = Close;
end;

// 繪製點與連線
Plot1(LastPoint, "P&L Line");


  P&L Chart是一個掌握長期趨勢的工具,除了用來研判個股的長期趨勢之外,也可以 應用在以下使用場景中:

1.「產業多因子儀表板」: 針對您關注的細產業指標,使用 P&L Chart來對照。

這能讓用戶一眼看出產業是處於「長期平台築底」還是「突破發動期」,避免被短期的漲跌假動作誘騙。

2.ETF 趨勢掃描: 許多 ETF(如高股息系列)波動較小,K 線圖看起來很雜亂。改用 P&L Chart 可以讓用戶更專注於長線趨勢。

以下是一個參考的圖表

Super trend

超級趨勢指標 (SuperTrend) 是近年來在程式交易與波段操作中極受歡迎的趨勢追隨(Trend Following)工具。它的設計初衷是為了在波動的市場中,提供一個明確的「多空分界線」與「移動止損點」。

與傳統均線相比,SuperTrend 最大的特色在於它結合了價格波動率(ATR),這讓它在趨勢啟動時能緊貼價格,而在震盪時能保持一定的安全距離。

1. 核心計算邏輯

SuperTrend 的構造基於兩個主要參數:

  1. ATR 週期 (Period): 通常設定為 10,用來衡量近期市場的平均波動。
  2. 倍數 (Multiplier): 通常設定為 3,用來決定指標與價格間的距離(容錯空間)。

計算公式:

首先計算基礎的上軌與下軌:

  • 基礎上軌 (Basic Upperbound)

 

  • 基礎下軌 (Basic Lowerbound)  

「階梯式」修正(關鍵之處):

為了避免指標隨便反轉,SuperTrend 加入了邏輯判斷:

  • 下軌(支撐線): 只有當新的計算值比前一根 K 線的下軌「更高」時,才會上移;否則維持平盤。它絕不向下移動,除非趨勢翻空。
  • 上軌(壓力線): 只有當新的計算值比前一根 K 線的上軌「更低」時,才會下移;否則維持平盤。它絕不向上移動,除非趨勢翻多。

2. SuperTrend 的三大特性

A. 自動過濾雜訊

由於 SuperTrend 使用了 ATR,當市場波動放大時,指標線會自動推遠,避免因為隨機的「小跳動」而誤觸出場訊號。這比固定百分比的停損更符合市場現狀。

B. 明確的多空轉折

  • 翻多訊號: 當收盤價「突破」上軌,指標由紅轉綠,並跳到價格下方。
  • 翻空訊號: 當收盤價「跌破」下軌,指標由綠轉紅,並跳到價格上方。

C. 理想的移動止損 (Trailing Stop)

對於波段交易者來說,SuperTrend 那條「階梯線」就是最完美的移動止損位。只要趨勢沒破,就一直持有,能有效地解決「賺一點就跑」而錯失大波段的問題。

3. XScript 實作代碼

這是為您準備的 XScript 版本,您可以直接在 XQ 系統中建立指標:

 

// 指標名稱: SuperTrend
input: _atrLength(10, "ATR週期"), _multiplier(3, "倍數");

variable: _avgPrice(0), _atr(0), _up(0), _dn(0), _trend(1), _st(0);

// 1. 計算典型價格與 ATR
_avgPrice = (High + Low) / 2;
_atr = average(TrueRange,_atrlength);

// 2. 計算基礎上下軌
value1 = _avgPrice + (_multiplier * _atr); // Basic Upper
value2 = _avgPrice - (_multiplier * _atr); // Basic Lower

// 3. 處理「階梯式」邏輯
// 下軌 (支撐) 不向下掉
if value2 > _dn[1] or Close[1] < _dn[1] then 
_dn = value2 
else 
_dn = _dn[1];

// 上軌 (壓力) 不向上升
if value1 < _up[1] or Close[1] > _up[1] then 
_up = value1 
else 
_up = _up[1];

// 4. 判斷多空趨勢
if Close > _up[1] then
_trend = 1
else if Close < _dn[1] then
_trend = -1
else
_trend = _trend[1];

// 5. 決定 SuperTrend 的數值
if _trend = 1 then _st = _dn else _st = _up;

// 6. 繪圖
Plot1(_st, "SuperTrend" );

把這指標跟台積電做搭配的參考圖形如下

總結

SuperTrend 是目前**「性價比最高」的趨勢工具之一:它邏輯簡單、視覺直觀,且在 XScript 中極易實現。它唯一的缺點是在橫盤整理(Sideways Market)**時會出現頻繁的「假訊號(Whipsaw)」,因此建議搭配 ADX(趨勢強度指標) 或您之前提到的 CMF(資金流向) 來過濾掉沒有動能的震盪期。

Anchored VWAP

 Anchored VWAP (AVWAP) 是我過去十年來,技術分析領域從「純幾何數學(如均線)」轉向「市場心理與籌碼結構」的最重要橋樑。 它不僅是一個指標,更是一種互動式(Interactive)的圖表功能

 

1. 什麼是 Anchored VWAP?

傳統的 VWAP(成交量加權平均價) 是一個僅限於「當日(Intraday)」的指標,每天開盤就會歸零重算。這限制了它在波段交易或中長線分析的用途。

Anchored VWAP 則打破了時間限制。它允許使用者自由選擇一個特定的起始點(Anchor,錨點),從那個時間點開始計算至今的成交量加權平均價。

2. 計算公式與邏輯

它的計算邏輯與 VWAP 完全相同,差別僅在於 Start_Index(起始點)。

  • Price_i: 第 i 根 K 線的典型價格(通常是 (High + Low + Close) / 3)。
  • Volume_i: 第 i 根 K 線的成交量。
  • Start: 使用者指定的「錨點」K 線(例如:某個低點、財報日)。

為什麼這比移動平均線(MA)更優越?

  • MA(時間加權): 每一天的價格權重一樣。但對於市場來說,成交量 100 張的日子與成交量 10,000 張的日子,其重要性絕對不同。
  • AVWAP(資金加權): 它考慮了成交量。如果某一天爆大量,那一天的價格就會對這條線的走向產生巨大影響。

3. 核心精神:平均成本與市場心理

AVWAP 解決了一個核心問題:「從這一天進場的人,現在平均是賺錢還是賠錢?」

這也是為什麼 Brian Shannon 稱之為「情緒的絕對真理(The absolute truth of sentiment)」。

  • AVWAP 之上(Above the Line):
    • 從錨點日進場的平均持有者處於獲利狀態
    • 心理狀態: 持有者有信心,拉回時傾向加碼(Buy the dip)。
    • 技術意義: AVWAP 成為強力的支撐(Support)
  • AVWAP 之下(Below the Line):
    • 從錨點日進場的平均持有者處於虧損狀態
    • 心理狀態: 持有者感到焦慮,價格反彈回成本區時傾向解套賣出(Sell to break even)。
    • 技術意義: AVWAP 成為強力的壓力(Resistance)

4. 實戰應用:錨點該設在哪裡?

這是 AVWAP 最具「藝術性」也最具「互動性」的地方。作為 PM,若要在軟體中實作此功能,通常會允許使用者點擊 K 線來設定錨點。

以下是四個最有效的錨點設定位置:

A. 重要的高點與低點 (Significant Highs/Lows)

  • 邏輯: 當趨勢反轉時(例如波段最低點),市場主力開始進場。錨定最低點,可以追蹤這波多頭趨勢的「平均成本上升軌跡」。
  • 用法: 只要股價維持在「最低點 AVWAP」之上,趨勢就是多頭,這條線是絕佳的移動停利點。

B. 財報發布日 (Earnings Date) / 重大新聞日

  • 邏輯: 財報公佈通常伴隨巨大的跳空缺口(Gap)和爆量。這代表市場對該股票重新定價(Repricing)。
  • 用法: 錨定財報日的開盤 K 線。這條線代表了「認同新基本面」的資金成本。如果不跌破,代表市場持續看好該公司的基本面變化。

C. IPO 上市日 (IPO Launch)

  • 邏輯: 這是該股票歷史上所有參與者的原始成本起點。
  • 用法: 對於新上市股票,錨定 IPO 第一天,可以判斷這檔股票自上市以來是處於機構吸籌階段(由下往上穿過 AVWAP)還是倒貨階段。

D. 政策或總經事件 (e.g., Fed Meeting)

  • 邏輯: 例如聯準會宣布降息當日,市場邏輯改變。錨定該日,可以看出市場對該政策的持續反應。

用Xscript寫的函數腳本如下

// 函數名稱:  AnchoredVWAP

// 傳回值: 數值序列

// 參數:

// Price: 通常傳入 (High + Low + Close) / 3

// Vol: 傳入成交量 Volume

// TargetDate: 錨定日期,格式為 YYYYMMDD (例如 20231026)




input: Price(numeric), Vol(numeric), TargetDate(numeric);

variable: sumPV(0), sumV(0), avwapValue(0);




// 當目前的 K 線日期大於或等於我們設定的錨定日期時開始計算

if Date >= TargetDate then

begin

// 如果是剛到達錨定日的第一根 K 線 (或是從未開始計算轉為開始計算)

// 我們需要將之前的累加值重置

if Date[1] < TargetDate then

begin

sumPV = Price * Vol;

sumV = Vol;

end

else

begin

// 否則持續累加 價格*成交量 與 成交量

sumPV = sumPV + (Price * Vol);

sumV = sumV + Vol;

end;




// 避免除以 0 的錯誤

if sumV <> 0 then

avwapValue = sumPV / sumV

else

avwapValue = Price;

end

else

avwapValue = 0; // 尚未到達錨定日,回傳 0

AnchoredVWAP=avwapvalue;


 


把這個函數應用到繪圖的腳本可以這麼寫

input:targetdate(20260108);
value1=AnchoredVWAP(close,volume,targetdate);

if value1<>0  then  plot1(value1,"AnchoredVWAP")

else noplot(1);

以特斯拉為例,它在2025年7月2日宣佈Robotaxi在德州上路,從那天之後的AnchoredVWAP與其股價的對照圖如下

變成重要的支撐區,因著這個原因買入特斯拉的投資者,當股價跌到這附近時等於是跌到從那天起買進股票投資者的成本附近

 

總結

AVWAP 是一個將「價格」、「成交量」與「時間」完美結合的指標。它比均線更客觀,因為它反映了真實的資金成本。 

 

Cybernetic Oscillator

Cybernetic Oscillator 是由技術分析大師 John Ehlers 於 2004 年提出(並在 2024-2025 年進行了現代化優化)的一項指標。它的核心思想源自於「自動控制理論」中的控制論(Cybernetics),旨在透過數位訊號處理(DSP)技術,從混沌的價格數據中精確提取出市場的「週期成分」。

不同於 RSI 或隨機指標(Stochastic),Cybernetic Oscillator 試圖解決「市場趨勢」與「市場週期」相互干擾的問題。

1. 核心處理流程:訊號處理流水線

Cybernetic Oscillator 的運作像是一個精密的過濾器,其處理步驟如下:

  1. 二階高通濾波 (2nd-order High-Pass Filter):
    去除價格中的「直流漂移」(即慢速的趨勢成分),只保留波動訊號。
  2. 二階超級平滑濾波 (2nd-order Super Smoother):
    去除高頻率的雜訊(毛刺),保留平滑的波動曲線,且幾乎不產生延遲。

2. 數學邏輯分析

該指標的核心在於其遞歸係數的設計,利用 alpha係數來精確控制截止頻率(Cutoff Frequency):

  • 高通濾波係數 alpha:


透過調整週期 P(通常設為 20),可以決定要過濾掉多長的趨勢。

  • 超級平滑係數:
    利用指數與三角函數計算出 c1, c2, c3,使得濾波器在頻域內具有 12 dB/octave 的衰減率。這比傳統 RSI 的 6 dB/octave 強大得多,能更乾淨地分離出週期。

3. 與傳統指標的效能對比

特性 RSI / Stochastic Cybernetic Oscillator
延遲度 (Lag) 較高,受窗口期影響大 極低,歸功於 SuperSmoother 技術
訊號穩定度 容易在強趨勢中「鈍化」 極佳,透過高通濾波預先剔除趨勢干擾
振幅一致性 0-100,但波動不一 能量標準化,數值在 正負 1 之間波動
雜訊過濾 依賴簡單平均 雙極濾波器,可精確定義頻譜範圍

4. XScript (XQ 語法) 實作代碼

以下是根據 John Ehlers 2025 年最新優化版本撰寫的 XScript 腳本: 

// 名稱:Cybernetic Oscillator (Ehlers 2025)
// -----------------------------------------------------------
Input: HPLen(30, "高通週期"), LPLen(20, "平滑週期"), RMSLen(50, "標準化窗口");
Variable: a1(0), b1(0), c1(0), c2(0), c3(0), x1(0);
Variable: HP(0), LP(0), RMS(0), CyberOsc(0);

// 1. 初始化高通濾波係數
Once begin
a1 = Expvalue(-1.414 * 3.14159 / HPLen);
b1 = 2 * a1 * Cos(1.414 * 3.14159 / HPLen);
c1 = -a1 * a1;
x1 = (1 + b1 - c1) / 4;
end;

// 2. 高通濾波 (去除趨勢)
if CurrentBar > 2 then
HP = x1 * (Close - 2 * Close[1] + Close[2]) + b1 * HP[1] + c1 * HP[2]
else
HP = 0;

// 3. 超級平滑濾波 (去除噪音 - 係數複用)
// 這裡使用簡化的二階平滑邏輯
LP = Average(HP, LPLen);

// 4. RMS 歸一化
RMS = SquareRoot(Summation(Power(LP, 2), RMSLen) / RMSLen);

if RMS <> 0 then 
CyberOsc = LP / RMS
else 
CyberOsc = 0;

// 5. 繪圖
Plot1(CyberOsc, "Cybernetic Oscillator");
Plot2(0, "零軸");


5. 實戰解讀 

  • 零軸交叉 (Zero-Crossing): 當指標由下往上穿過 0,代表週期性動能轉正,是一個極佳的波段買點。
  •  Cybernetic Oscillator 值進行排序,數值最高的即為當前「週期動能」最強的標的,這對尋找強勢股的用戶極具吸引力。

Understanding the Two-Pole Oscillator Mechanism

這段影片詳細解釋了二階(Two-pole)濾波器在震盪指標中的運作邏輯,能幫助您理解為什麼 Cybernetic 系列指標在過濾雜訊的同時能保持極低的延遲。

 下面是這個腳本應用在Tesla日線上的對照圖

 

BBTrend

BBTrend (Bollinger Band Trend) 是由布林通道創始人 John Bollinger 於 2023-2024 年間正式推廣的新一代指標。

可以將其視為「布林通道的進階版」或是「ADX 指標的強效替代品」。傳統的布林通道主要反映波動率(Volatility),而 BBTrend 則進一步量化了趨勢的方向與強度。

  1. 核心邏輯:為什麼需要 BBTrend?

傳統布林通道在「擠壓(Squeeze)」發生時,只能告訴投資人「即將有大行情」,但無法預測「方向」。BBTrend 的出現解決了這個痛點。

它基於一個深刻的市場觀察:

 * 多頭趨勢: 短期下軌與長期下軌的距離會拉開(發散),而上軌則相對接近(收斂)。

 * 空頭趨勢: 短期上軌與長期上軌的距離會拉開(發散),而下軌則相對接近(收斂)。

  1. 數學公式分析

BBTrend 同時使用了兩套不同週期的布林通道 :

 * 計算下軌差: LowerDiff = |LowerBB_{短天期} – LowerBB_{長天期}|

 * 計算上軌差: UpperDiff = |UpperBB_{短天期} – UpperBB_{長天期}|

 * 計算指標值: 

 

 * 大於 0: 代表下軌發散程度大於上軌,市場處於多頭。

 * 小於 0: 代表上軌發散程度大於下軌,市場處於空頭。

 * 數值大小: 遠離 0 軸的距離代表趨勢的動能(Momentum)。

  1. XScript (XQ 語法) 實作代碼
// 指標名稱:BBTrend (John Bollinger)
// -----------------------------------------------------------
Input: ShortLen(10, "短期週期"), LongLen(20, "長期週期"), Dev(2, "標準差");
Variable: sUp(0), sLow(0), sMid(0), lUp(0), lLow(0), lMid(0);
Variable: LowerDiff(0), UpperDiff(0), BBT(0);

// 1. 計算短期布林通道 (10, 2)
sMid = Average(Close, ShortLen);
sUp = sMid + Dev * StandardDev(Close, ShortLen, 1);
sLow = sMid - Dev * StandardDev(Close, ShortLen, 1);

// 2. 計算長期布林通道 (20, 2)
lMid = Average(Close, LongLen);
lUp = lMid + Dev * StandardDev(Close, LongLen, 1);
lLow = lMid - Dev * StandardDev(Close, LongLen, 1);

// 3. BBTrend 核心運算
LowerDiff = AbsValue(sLow - lLow);
UpperDiff = AbsValue(sUp - lUp);

// 進行歸一化 (Normalization)
if sMid <> 0 then 
BBT = (LowerDiff - UpperDiff) / sMid * 100
else 
BBT = 0;

// 4. 繪製柱狀圖
Plot1(BBT, "BBTrend");
Plot2(0, "零軸");

 

以下是用這個BBTrend指標搭配BBand及BBandwith一起看的圖

 

納達拉亞-沃森包絡線 (Nadaraya-Watson Envelope)

納達拉亞-沃森包絡線 (Nadaraya-Watson Envelope) 是近年來在量化交易界(特別是 TradingView 社群)極其熱門的指標。它與傳統布林通道(Bollinger Bands)最大的不同在於,它不依賴簡單的算術平均,而是利用Kernel Regression技術來擬合價格曲線。

 

1. 核心技術原理:核回歸 (Kernel Regression)

傳統均線(SMA/EMA)是給予過去數據不同權重;而納達拉亞-沃森(NW)則是一種非參數(Non-parametric)的估計方法。

  • 數學邏輯: 它在每一個點上,都會觀察全域或局部窗口內的數據,並根據「時間距離」使用一個核函數(Kernel Function)(通常是高斯核 Gaussian Kernel 或有理二次核 Rational Quadratic Kernel)來分配權重。
  • 權重公式概念:

其中 h是頻寬 (Bandwidth),它決定了曲線的平滑程度。頻寬越大,曲線越平滑但反應越慢。

 

NW 包絡線由三條線組成:

  1. 中心回歸線: 透過 NW 核回歸計算出的平滑價格曲線。
  2. 上下軌道: 通常是中心線加上或減去「平均絕對偏差 (MAD)」或「平均真實範圍 (ATR)」的倍數。

這使得它在視覺上非常緊貼價格,且在識別極端超買/超賣區域時,比布林通道更具適應性,因為它能捕捉非線性的趨勢變化。

 

2.納達拉亞-沃森 vs. 布林通道

特性 布林通道 (Bollinger Bands) NW 包絡線 (NW Envelope)
數學基礎 標準差、簡單移動平均 核回歸 (非線性統計)
靈敏度 對波動率敏感,但有延遲 極其靈敏,能捕捉細微轉折
形狀 較為僵硬 非常流暢、有機的曲線
主要用途 波動率擠壓、趨勢突破 逆勢操作 (Mean Reversion)、波段頂部底部分析

3.XScript (XQ 語法) 實作參考

底下是AI寫的Sample code,我只修改了內建函數及變數的名稱,AI係使用迴圈來模擬高斯核的加權計算:

// 名稱:Nadaraya-Watson Envelope (簡化版)
// -----------------------------------------------------------
Input: h1(8, "Bandwidth 頻寬"), Mult(2, "Multiplier 倍數"), Window(50, "計算窗口");
Variable: i(0), weight(0), sumWeight(0), sumPrice(0), NW_Center(0), MAD(0);

// 1. 計算核回歸中心線
sumPrice = 0;
sumWeight = 0;

for i = 0 to Window begin
// 高斯核權重公式:exp(-(距離^2) / (2 * h^2))
weight = Expvalue(-1 * Power(i, 2) / (2 * Power(h1, 2)));
sumPrice = sumPrice + Close[i] * weight;
sumWeight = sumWeight + weight;
end;

if sumWeight <> 0 then NW_Center = sumPrice / sumWeight;

// 2. 計算平均絕對偏差 (MAD) 作為軌道寬度
MAD = Average(AbsValue(Close - NW_Center), Window);

// 3. 繪製結果
Plot1(NW_Center, "NW 中心線");
Plot2(NW_Center + Mult * MAD, "上軌");
Plot3(NW_Center - Mult * MAD, "下軌");

根據這個腳本計算出來的指標,它的呈現方式如下圖