有多位朋友不約而同的提到如何透過語法去描述兩個時間序列的”背離”,我試著用線性回歸的角度來跟大家分享我自己設計的”背離”腳本。
首先,XS內建函數中有一個叫作線性回歸斜率(linearregslope),如果您在腳本編輯器中按F1,會跳到函數的說明頁,您輸入linearregslope按enter,會看到以下的說明
什麼是線性迴歸呢?
就像上圖一樣,我們找出一條線, 這條線距離所有要計算的價位最近,就是所謂的線性迴歸,透過線性迴歸,我們可以找出價位群體的方向,這條線的斜率就是linearregslope。
當數據呈現上昇分佈時,線性迴歸的斜率是正的,下降分佈時,線性迴歸的斜率是負的。
我就是運用這個原理,寫出以下的背離函數
input:price(numericsimple),index1(numericsimple),length(numericsimple); if length<5 then raiseruntimeerror("計算期別請超過五期"); value1=linearregslope(price,length); value2=linearregslope(index1,length); if value1>0 and value2<0 then deviate=-1 else if value1<0 and value2>0 then deviate=1 else deviate=0;
透過這個函數,我們就可以比較兩個數列,看看他們是否出現背離的情況,這個函數的寫法是當第一個值下跌而第二個值上昇時,函數的回傳值是 1 ,相反的則是-1 ,若兩個值同方向則是傳回0。
假設我們想找出收盤價下跌,但跟10日RSI上昇的股票,我們就可以運用這個函數,寫出下面這樣的腳本
value1=rsi(close,10); if deviate(close,value1,10)=1 then ret=1;
透過這個函數,我們就可以隨時把兩個時間序列拿出來檢定是否有背離的現象了。