首先看一下背離的定義
熊市背離函式(或稱空頭背離),指數創新高但指標卻未創新高,應該找點作空
牛市背離函式(或稱多頭背離),指數創新低但指標卻未創新低,應該找點做多
接著我們直接看程式碼
============================
Inputs: KSwingHength(14), Strength(1);
Vars : SK(0),SD(0), PriceH(0),PriceL(0), PSwingH(0), KSwingH(0), PSwingL(0), KSwingL(0), D1(0), T1(0), Price(0), PH(0), KH(0);
Value99 = Stochastic( H, L, C, KSwingHength, 3, 3, 1, value97, value98, SK, SD ) ;
Value1=SwingHigh(1, SK, Strength, Strength+1);
Value2=SwingHigh(1, High, Strength, Strength+1);
if value2<>-1 then PriceH=Value2;
if value1<>-1 then begin
PSwingH = PriceH;
KSwingH = value1;
END;
If KSwingH < KSwingH[1] and PSwingH > PSwingH[1] and SK > 50 and SK < 90 then Value3=arw_new(date,time,high,True);
Value11=SwingLow(1, SK, Strength, Strength+1);
Value12=SwingLow(1, Low, Strength, Strength+1);
if value12<>-1 then PriceL=Value12;
if value11<>-1 then begin
PSwingL = PriceL;
KSwingL = value11;
END;
If KSwingL > KSwingL[1] and PSwingL < PSwingL[1] and SK < 50 and SK > 10 then Value13=arw_new(date,time,high,false);
============================
解說如下:
1. Value99先計算KD指標,用Stochastic函式。
2. 先處理熊市背離。Value1取K值的轉折高點,Value2取商品的轉折高點,用SwingHigh(轉折高)函式。
3. 由於價格創新高指標卻未創新高同時發生在同一K棒的機率不大,我們要比的是近期兩者的前後期轉折高有沒有出現背離,程式碼必須處理這點。我們的做法是,由於商品價格領先KD指標,所以在定義背離時機點會是,當K值發確認轉折高低於前一個轉折高當根(註),再回頭找商品價格有沒有出現最近的轉折高高於前一個轉折高。下面這段程式碼就是在處理這部分。
if value2<>-1 then PriceH=Value2;
if value1<>-1 then begin
PSwingH = PriceH;
KSwingH = value1;
END;
If KSwingH< KSwingH[1] and PSwingH> PSwingH[1] and …
4. 由於單是這樣的條件會找出許多背離(才發現電腦比肉眼精準),所以加了兩個條件,一個是K值要在50以上,因為我們預期熊市背離應發生在高檔,另外,KD值上了90以上很容易鈍化走平,形成雜訊,因此過濾掉K值在90以上者。
5. arw_new函式則是畫箭頭。
6. 反之,牛市背離同理。
完成後,畫在圖上如下圖所示:
其實其實MultiCharts本身就有內建背離函式,BullishDivergence(牛市背離)、BearishDivergence(熊市背離),但定義稍有不同,有興趣的讀者可以自行研究。
結論
指標背離也可以形成交易策略,算是筆者看過比較優異且有邏輯的逆勢策略,如果各位讀者滿手順勢策略,卻缺少逆勢策略,建議可多加研究。
有關指標背離的學問,老前輩Parkson研究最透徹,讀者也可以參觀他的部落格,或是他的著作「機械化交易新解:技術指標進化論」也有深入討論。
備註:
請注意Swing、Pivot這類函式或指標都屬於事後觀點、事後指標,詳情一樣看這篇,所以有個觀念要釐清,確認SwingHigh成立那根K棒會在真正發生SwingHigh的那根K棒之後。
歡迎加入LINE@
(點擊上方圖示)
感謝分享!
回覆刪除想請問SwingHigh中的參數(1, SK, Strength, Strength+1)分別代表甚麼意思呢?(我只明白 SK 的部分qq)