程式交易在基金投資上的應用之13~尋找剛轉彎才剛開始加速的市場

By | 2017-08-14

在尋找基金波段操作策略時,從賽車來的靈感是,如果剛轉彎後開始加速,根據慣性定律,只要沒有踫到更大的阻礙,車子會開始沿著這個方向飆一陣子。所以如果去尋找跌勢終止,漲勢剛開始加速的市場,應該也是一個可行的方向。根據這個原理,寫出來的腳本,回測的效果不差。

漲勢加速是什麼概念?

就像下面這張圖

漲勢加速

要怎麼在股價從粉紅色變成橘色時被能夠讓電腦通知我們呢? 最簡單的作法就是算出上漲的角度,當角度愈來愈陡時就代表漲勢加速。

angle的說明

上漲的角度怎麼算?

XS裡有個內建函數Angle,它的語法如下:

計算任意二個日期的走勢角度。
回傳數值=Angle(日期1,日期2)
傳入二個參數:
– 第一個參數是日期1。
– 第二個參數是日期2,需大於日期1。

我們來看一下這個函數的語法

input:Date1(numeric),Date2(numeric);
variable:Date1Bar(0),Date2Bar(0),Date1Price(0),Date2Price(0),_Slope(0);
Date1Bar = getbaroffset(date1); Date1Price =Open[Date1Bar];
Date2Bar = getbaroffset(date2); Date2Price =Close[Date2Bar];
if Date1Bar > Date2Bar then
 _Slope = (Date2Price/Date1Price-1)*100 / (Date1Bar-Date2Bar);
Angle = arcTangent(_Slope);

如果用圖形來看,可以參考下圖

從這個算法來看,angle是正的代表上漲,是負的代表下跌,絕對值愈大表示上漲跌的角度愈大,愈接近零代表處於橫向盤整。

接下來就可以把這個函數應用到漲勢加速上

我寫了一個腳本如下

value1=angle(date[7],date);
value2=average(value1,5);
value3=average(value1,20);
if value2[4]<10
and value2[4]>0
and value2>20
and value2<50
and tselsindex(10,6)=1
and value3<10
then ret=1;

這個腳本的概念就是價位從原本的下跌或盤整變成上漲且上漲的角度在變陡中,我拿它來回測加權指數,雖然出現的次數不多,但勝率超過八成

081101

拿這個腳本,把過濾條件改成以下的腳本,

value1=angle(date[7],date);
value2=average(value1,5);
value3=average(value1,20);
if value2[4]<10
and value2[4]>0
and value2>20
and value2<50
and value3<10
and GetSymbolField("tse.tw","收盤價","W")
>average(GetSymbolField("tse.tw","收盤價","W"),13)
then ret=1;

去操作32個全球產業及單一國家ETF,進場後持有四十天,回測的勝率也接近65%。

081102