VALYNOXSTRATEGY RESEARCH TECHNOLOGY
AlphaPrimeAlphaPrime
策略學院 / 指標與訊號

希爾伯特振盪器:它衡量什麼、落後多少,以及循環規則的檢驗

希爾伯特振盪器判讀價格位於目前循環的哪個位置(相位),以及這個循環要花多少根K棒(週期)。它只有在價格真的循環時才有用;趨勢中,週期估計會在上下限之間跳動,訊號就變成雜訊,因此以它為基礎的規則必須先經過樣本外測試,才值得信任。

作者 · 發佈 · 更新於 · 編輯原則

目錄
  1. 希爾伯特振盪器衡量什麼?
  2. 希爾伯特轉換如何運作?它的公式是什麼?
  3. 相位與循環週期告訴你什麼?
  4. 希爾伯特振盪器常見的訊號有哪些?
  5. 它與Ehlers循環指標有何不同?參數該怎麼設?
  6. 為什麼希爾伯特振盪器會落後,而且變得不穩定?
  7. 以NQ日K棒測試一個替代的循環振盪器規則,結果如何?
  8. 你自己該如何測試希爾伯特振盪器規則?
  9. 常見問題
  10. 參考文獻

希爾伯特振盪器衡量什麼?

希爾伯特振盪器衡量價格位於目前循環的哪個位置,以及這個循環有多長。它把去趨勢後的價格當成一道波,產生一條往後平移四分之一週期的副本,再由兩者算出一個角度,也就是相位。這個指標只有在價格真的循環時才實用;在趨勢中,它的讀數會變成雜訊。

希爾伯特振盪器是一種指標,它對去趨勢價格套用希爾伯特轉換,輸出目前循環的相位,以及以K棒數計的循環長度。去趨勢價格是把價格序列中緩慢的漂移移除後的結果,使剩下的部分會在零線上下擺動。它的想法是不再把價格看成一條上升或下降的線,而是看成一道會上升、見頂、下跌、築底、然後不斷重複的波。

這使它與技術分析工具與指標指南中的多數工具不同。隨機震盪指標及其%K與%D設定判讀價格位於近期高低區間的哪個位置。希爾伯特振盪器判讀價格位於估計循環的哪個位置:剛過底部、接近頂部,或正在下跌途中。區間和循環不是同一回事,而且循環比區間更難估計。

讀取週期,而非趨勢:去趨勢價格畫成由底到頂再到底的波浪,目前K棒位於週期的90度位置 讀取週期,而非趨勢 去趨勢價格呈現為波浪 現在:90° 頂部 底部 底部 相位=在擺盪中的位置。 因此:僅在價格循環時使用。
把價格看成一道波:振盪器讀取的是它在循環中的位置,而不是趨勢的方向。

希爾伯特轉換如何運作?它的公式是什麼?

希爾伯特轉換會產生一條往後平移四分之一週期的價格副本,原始序列加上這條平移後的副本,會形成一根旋轉的指針,指針的角度就是相位。希爾伯特轉換是一種計算,對於一道波,它產生同一道波延遲四分之一週期後的版本。原始序列稱為同相分量,平移後的副本稱為正交分量。可以把它想成時鐘的指針:指針離中心的水平距離和垂直距離合起來,就能告訴你指針的角度。這裡同相值是水平距離,正交值是垂直距離,角度就是相位。

需要知道的公式只有一條:

相位 = arctan(Q ÷ I)

其中I是目前這根K棒上的同相值(去趨勢價格),Q是同一根K棒上的正交值(平移四分之一週期後的副本),arctan則是把垂直與水平距離的比值換回角度的函數。I與Q的正負號會告訴你指針位於圓周的哪一個象限,因此角度能走完整整的360度。

假設性範例

某根K棒上,去趨勢價格為+3,平移後的副本也是+3,所以Q ÷ I = 1,相位為45度:循環已走完從底到頂的八分之一。之後某根K棒上,I為−4、Q為0,相位為180度,也就是循環的頂部。再之後,I為+2、Q為−3.5,指針落在圓的右下方,約300度:循環已走完六分之五,下一個底部很接近了。

實務上,四分之一週期的副本無法精確算出,因為確切的循環長度並不知道。指標會用過去一小段K棒來近似,而這個近似正是後面所談落後與不穩定的根源。

兩條序列,一個角度:原始序列 I 是水平距離,其四分之一週期平移後的副本 Q 是垂直距離,合成指針的角度即為相位,等於 Q 除以 I 的反正切 兩條序列,一個角度 原始序列加上其 ¼ 週期副本 I Q 原始序列(I) 平移副本(Q) 角度 = 相位 角度顯示擺動所在位置。 因此:相位 = arctan(Q ÷ I)。
原始序列與平移四分之一週期後的副本,組成一根指針,指針的角度就是相位。

相位與循環週期告訴你什麼?

相位在每個循環中從0度走到360度,走完一圈所需的K棒數就是循環週期,因此轉得快表示循環短,轉得慢表示循環長。相位是目前循環中的位置,以距離上一個底部的度數衡量。循環週期則是一個底部到下一個底部之間的K棒數,也等於相位從0爬升到360所需的K棒數。

兩個數字合起來回答兩個問題。相位回答「這一段擺動走到哪裡了?」:90度表示上升段走完一半,270度表示下跌段走完一半。週期回答「整段擺動應該要花多久?」:週期為12根K棒,表示下一個底部預計在上一個底部後約12根K棒出現;週期為30根K棒,表示這段擺動很慢。指標也用週期來決定下一根K棒的四分之一週期平移量,因此週期的誤差會直接傳回相位。

有一個重要特性:相位會持續轉動。與KD或RSI不同,它們在強勢走勢中可能連續很多根K棒停留在80以上,相位不會停在極端值;它在趨勢中做的是不規則地轉動,這是後面要談的問題。KD或RSI停在超買區究竟代表什麼,與此有相同的根源:指標假設價格會擺回來,而市場不一定同意。

週期等於每完整一圈的K棒數:相位從0到360度後重新開始,本圖示中每完整一圈需要12根K棒,即為循環週期 週期 = 每完整一圈的K棒數 相位0–360°,然後重新開始 360° 0° 12根K棒 12根K棒 一完整圈 = 一個循環 所以:週期錯誤會使相位偏移。
循環週期就是相位從0度轉到360度所需的K棒數。

希爾伯特振盪器常見的訊號有哪些?

常用的訊號有三種:振盪器穿越零線、相位從360回到0的瞬間,以及正弦線與領先線的交叉。三者會在同一循環的不同位置觸發,因此不可能同時都正確。正弦線是相位的正弦值,是介於−1與+1之間的平滑波;領先線則是同一道波向前推進45度,也就是循環的八分之一。

  1. 相位回繞。相位越過360並重新從0開始時,指標表示剛形成一個底部。這個訊號在谷底本身觸發,因此相對於轉折點來說是三者中最早的。
  2. 正弦線與領先正弦線交叉。領先線走在正弦線前面,所以兩者會在振盪器到達零線之前稍早交叉。這是多數圖表軟體會畫出的訊號,形式上類似KD指標的公式與意義中%K與%D的交叉,只是第二條線是同一條線在循環中向前移動,而不是經過平滑的副本。
  3. 穿越零線。振盪器在底部約四分之一週期後向上穿越零線,在頂部約四分之一週期後向下穿越零線。它是三者中最晚的,對週期的小誤差也最不敏感。

由於三種訊號是依序觸發的,若規則要等三者都同意才進場,每一段擺動都會進場得很晚;若規則只根據最早的那個訊號行動,則會接受最多的假轉折。哪一種取捨適合某個市場,不是口味問題,而是要靠最後兩節的測試來決定。

三個訊號,三個時點:在一個週期的上升段,相位繞回先在谷底觸發,正弦與領先交叉其次在接近零軸前觸發,零軸穿越最後在谷底過後四分之一週期觸發 三個訊號,三個時點 一段上升段,依序出現的訊號 1 2 3 1 2 3 繞回 交叉 零軸穿越 最早的訊號,假轉折最多。 所以:選一個訊號來測試。
三種常見訊號在同一循環的不同位置觸發:相位回繞在谷底,交叉在穿越零線之前,穿越零線則晚約四分之一週期。

它與Ehlers循環指標有何不同?參數該怎麼設?

Ehlers循環指標是一個家族,它們使用同一種轉換,但平滑方式、週期上下限與輸出不同,因此真正影響結果的設定是平滑長度,以及指標被允許找到的最短與最長週期。Ehlers循環指標是一組指標的通稱,它們都從去趨勢價格出發、都套用希爾伯特轉換,然後呈現不同的輸出:希爾伯特振盪器畫出相位或其正弦值,主循環線畫出以K棒數表示的估計週期,正弦波指標則畫出正弦線與領先線。計算引擎是共用的,前面的旋鈕則不同。

因為引擎是共用的,有三個設定控制所有指標,而且它們會以可預測的方向改變輸出:

設定數值較低或較短數值較高或較長
平滑長度(轉換前用來清理去趨勢價格的K棒數)訊號較早,假轉折較多,相位逐根抖動訊號較晚,假轉折較少,相位轉動較均勻
最小週期(指標可回報的最短循環)允許極短的循環;訊號變多,其中很多是雜訊忽略短小的波動;在震盪的K棒中訊號較少
最大週期(指標可回報的最長循環)把週期上限壓低;趨勢中估計會撞到上限並停在那裡允許較長的循環;估計可能往上漂,訊號間隔拉長
最小與最大週期之間的差距區間窄:週期較穩定,但真正的循環可能落在區間之外區間寬:能跟上變動的循環,但在上下限之間跳動的次數較多

一個實用的選法是先看市場自己的擺動。在你要測試的歷史中挑一段平靜的期間,數出從底到底的K棒數,記下最短與最長的數字,再把週期上下限設在這個範圍略外側。然後在任何執行之前先把這些數字固定下來,讓測試衡量的是規則本身,而不是你在看到結果後調整上下限的能力。

同一引擎,不同旋鈕:希爾伯特振盪器與 Ehlers 週期系列共用同一去趨勢價格輸入與同一希爾伯特轉換,再輸出不同線條:相位、週期,或正弦線加領先線 同一引擎,不同旋鈕 去趨勢價格輸入,三線輸出 共用 價格 希爾伯特 相位 週期 正弦+領先 同樣輸入,同樣轉換。 所以:同樣三個參數最重要。
希爾伯特振盪器與Ehlers循環指標家族的共同點與差異:相同的輸入與轉換,不同的輸出線。

為什麼希爾伯特振盪器會落後,而且變得不穩定?

轉換需要一段過去的K棒視窗來估計相位,因此它會落後一部分循環;而當價格改為趨勢走勢時,週期估計會在上下限之間跳動,訊號也會變成雜訊。落後是指價格出現轉折到指標回報這個轉折之間相隔的K棒數。目前這根K棒上的四分之一週期副本,是由已收盤的K棒所建構,因此指標描述的永遠是比你所看的這根K棒略為陳舊的循環。平滑長度越長,落後越多;平滑長度越短,落後越少,但雜訊也越多。

不穩定才是更大的問題。轉換假設存在一道波。如果價格上漲40根K棒都沒有出現底部,就沒有可以測量的波,但指標仍必須回報一個介於最小與最大週期之間的週期。它會像任何在沒有訊號時的估計器一樣去追逐雜訊:週期讀數從接近最小值跳到接近最大值再跳回來,相位也隨之忽快忽慢,正弦線與領先線會在毫無意義的K棒上交叉。當市場最容易用簡單的趨勢規則交易時,看圖的交易者反而會看到一堆訊號。

這是本文的核心論點,也是有爭議的地方:指標的好壞取決於它所拿到的循環,而三個參數的任何設定都無法事先告訴你接下來的一百根K棒會循環還是會趨勢。那是測試要回答的問題,不是指標能回答的。

在趨勢中,週期會跳動:此示意圖中,價格循環時週期估計值穩定在最小與最大值之間,價格趨勢時則在兩個極限間來回跳動 趨勢中,週期會跳動 週期估計值,示意圖 循環 趨勢 最大 最小 沒有循環,卻仍回報一個週期。 所以:應由測試來判斷,而非圖表。
在趨勢中,週期估計會在上下限之間跳動,相位也不再平順地轉動。

以NQ日K棒測試一個替代的循環振盪器規則,結果如何?

一個趨勢循環振盪器(Trend Cycle Oscillator)規則,被用來替代希爾伯特振盪器本身。在NQ日K棒上,從2019年到2025年中約試了一千個候選,最後依報酬對回撤保留了這一個。事後挑選保留的那一個會美化結果,因此以下數字只描述這一次的執行,而非讀者可以期待的結果。這次執行並未測試希爾伯特轉換;它測試的是以標準指標組成的循環型振盪器,因為搜尋能用的就是這些。結果應當被視為一個循環規則如何被評斷的例子,而不是對希爾伯特振盪器的定論。

這次執行測試的內容:NQ日K棒,期間為2019-01-02至2025-06-30,多空皆做,一口,以趨勢循環振盪器規則作為唯一的進場與出場,沒有停損或停利,也沒有任何過濾條件,每筆交易收取20美元手續費與10美元滑價。AlphaPrime(Valynox)的搜尋在方框中的候選策略中進行嘗試,並依報酬對回撤保留了這一個。

來源:AlphaPrime 產品引擎(CPU),2026-10-31 執行。NQ 日線,2019-01-02 至 2025-06-30,多空都做,1 口,每筆手續費 $20、滑價 $10。

項目結果
淨利(已平倉)$251,455
最大回撤$114,205
交易筆數60
勝率63.33%
獲利因子1.864
平均每筆$4,190.92
在場時間85.7%

方框中有三件事比淨損益$251,455更值得留意。第一,六年半只有60筆交易,樣本很小,由60筆交易算出的平均每筆損益$4,190.92,只要其中少數幾筆改變,就可能大幅移動。第二,持倉時間比例為85.7%,表示這個規則幾乎總是持有部位,因此它的行為更像慢速的趨勢追蹤規則,而不像循環計時器,而這段期間NQ的終點遠高於起點。第三,最大回撤$114,205接近淨損益的一半,對於一個沒有停損的規則而言,這是很大的波動。Bailey、Borwein、López de Prado與Zhu(2014)說明了為什麼許多候選中最好的那一個看起來比實際更好;Sullivan、Timmermann與White(1999)則在大量技術交易規則中發現了同樣的效應。其理由詳述於為什麼搜尋中最好的回測通常被高估。

產品自己的績效報表所顯示的保留候選策略之權益、回撤與交易摘要。
產品自己的績效報表所顯示的保留候選策略之權益、回撤與交易摘要。 NQ・日線・2019-01-02 至 2025-06-30・CPU 引擎回測

你自己該如何測試希爾伯特振盪器規則?

在執行之前先固定週期上下限與平滑長度,從第一次測試起就納入手續費與滑價,以從未見過的樣本外K棒來評斷規則,並在信任任何單一結果之前,先檢查相鄰設定的表現是否相近。循環規則比多數規則更容易自我美化,因為週期上下限可以被微調,直到指標「找到」恰好賺錢的擺動。下面的步驟順序會排除這個選項。

  1. 寫下設定與通過標準。平滑長度、最小週期、最大週期、要交易三種訊號中的哪一種,以及樣本外要達到的數字(例如,至少100筆交易且扣除成本後平均每筆損益為正)。這份清單在第3步之後不再更動。
  2. 加入手續費與滑價。短週期上的循環訊號很頻繁,而手續費與滑價相對於平均每筆損益,正是把那些只抓到雜訊的訊號去除的關鍵。
  3. 在樣本內K棒上執行。這次執行可以在幾組候選設定之間做選擇,它就是研究期間。
  4. 在樣本外K棒上原封不動地執行。這次執行就是考試,它必須保持不變的理由,詳見如何切分樣本內與樣本外資料。Harvey與Liu(2015)說明了為何一個結果也應依其之前嘗試過的候選數目來打折扣。
  5. 檢查相鄰設定。把週期上下限移動幾根K棒、把平滑長度調整一兩根K棒。如果結果只在某一個精確的設定下成立,那麼這個規則描述的是那段歷史,而不是循環。AlphaPrime會把你在策略檢驗中設定的門檻,依相同順序套用到每一個候選,並在某個候選未通過較早的檢查時停止後續檢查,如此一來,循環規則就無法靠對同一段K棒再看一次而被挽救。

如果第5步未通過,正確的做法是提出新的候選策略,並在第1步寫下新的設定,而不是帶著同一個候選和放寬的門檻回到第3步。

依固定順序測試:先寫下設定,加入成本,執行樣本內,接著原封不動執行樣本外,再檢查鄰近設定;樣本外考試無法回到樣本內研究 依固定順序測試 先定設定,不可回頭 設定 成本 樣本內 樣本外 鄰近設定 考試只跑一次,不改動。 所以:若失敗,就另訂新規則。
讓循環規則測試保持誠實的步驟順序:先設定後看資料、先扣成本後看結果,而且從考試回到研究期間沒有任何退路。

今天可以先做的一件事:打開你所交易市場的日線圖,數出過去兩年從底到底的K棒數,記下最短與最長的數字。這兩個數字就是第1步的週期上下限,是在指標有機會替你選擇之前,由你自己決定的。

常見問題

用簡單的話說,什麼是希爾伯特振盪器?

希爾伯特振盪器是一種把價格當成波來看待的指標,它回報兩件事:目前這一段擺動走了多遠(相位,從0到360度),以及這段擺動花了多少根K棒(循環週期)。它會建立一條平移四分之一週期後的去趨勢價格副本,並以原始序列與副本之間的夾角來讀取相位。價格循環時它有效;價格趨勢時,它的讀數則不可靠。

希爾伯特振盪器的公式是什麼?

相位為arctan(Q ÷ I),其中I是目前K棒上的去趨勢價格,Q是同一序列平移四分之一週期後的值。arctan函數會把比值換回角度,而I與Q的正負號則把這個角度放在正確的象限。循環週期則是相位轉完整整360度所需的K棒數。

希爾伯特振盪器與Ehlers循環指標有何不同?

兩者共用同樣的輸入與核心計算。Ehlers循環指標是建立在希爾伯特轉換之上的一個指標家族的名稱;希爾伯特振盪器顯示相位或其正弦值,主循環線顯示以K棒數表示的週期,正弦波指標則顯示正弦線與向前推進45度的領先線。平滑長度與最小、最大週期以相同方式控制所有這些指標。

希爾伯特振盪器的參數該怎麼設?

在你要測試的市場中數出從底到底的K棒數,把最小與最大週期設在最短與最長數字的略外側,並選擇一個平滑長度,使相位在平靜的K棒上轉動得均勻,同時又不會掩蓋轉折。在第一次執行之前寫下這三個數字,並在樣本外測試中保持固定。平滑長度越短,訊號越早但也越雜;週期上下限之間的差距越寬,估計就越容易跳動。

希爾伯特振盪器實際用於交易是否可行?

在價格以相當穩定的長度循環的市場與期間,它是可行的;在趨勢中則不可行,因為週期估計會在上下限之間跳動,訊號會變成雜訊。由於無法事先得知接下來幾個月會是哪種市場,應把它當成一條需要測試的規則,而不是一個值得信任的工具:固定設定、納入成本、以樣本外評斷,並檢查相鄰設定。

參考文獻

  • Bailey, D. H., Borwein, J., López de Prado, M., & Zhu, Q. J. (2014). Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance. Notices of the American Mathematical Society, 61(5), 458–471.
  • Sullivan, R., Timmermann, A., & White, H. (1999). Data-Snooping, Technical Trading Rule Performance, and the Bootstrap. The Journal of Finance, 54(5), 1647–1691.
  • Harvey, C. R., & Liu, Y. (2015). Backtesting. The Journal of Portfolio Management, 42(1), 13–28.