2019年8月20日

MultiCharts如何寫KD、RSI或MACD指標背離

背離也算型態的一種,只要是型態屬性,在程式交易上就不太好處理,一方面程式碼不好寫,再者型態定義有主觀成分,看圖說故事,會有很多版本。不過背離在技術分析上算是很重要的一門,也是開發逆勢策略可以參考的方向,本文以KD指標為例(商品價格與K值背離),示範如何寫背離指標及相關策略。


首先看一下背離的定義

熊市背離函式(或稱空頭背離),指數創新高但指標卻未創新高,應該找點作空

牛市背離函式(或稱多頭背離),指數創新低但指標卻未創新低,應該找點做多

接著我們直接看程式碼

============================
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@
加入好友

(點擊上方圖示)

1 則留言:

  1. 感謝分享!
    想請問SwingHigh中的參數(1, SK, Strength, Strength+1)分別代表甚麼意思呢?(我只明白 SK 的部分qq)

    回覆刪除

歡迎留言討論!