如何使用跨頻率技術指標來建構策略雷達

By | 2019-07-31

有網友想要了解如何同時用不同頻率的指標來建構一個策略雷達,我今天舉例來跟大家說明。

 

目前XS內建有28個跨頻率的函數,依序如下,大家可以在函數頁籤下的系統選單中找到

運用這些函數,可以直接在一個警示腳本中使用不同頻率的指標。

舉個例子,如果我希望電腦可以在個股週RSI小於20且日KD低檔黃金交叉時發出訊號,那麼就可以使用像下面這樣的腳本

1input: Length_D(9,"日KD期間");
2
3variable:rsv_d(0),kk_d(0),dd_d(0),c5(0);
4
5stochastic(Length_D, 3, 3, rsv_d, kk_d, dd_d);
6
7if xf_RSI("w",close,5)<=20 and kk_d <=30 
8and kk_d crosses over dd_d
9
10then ret=1;

用這個腳本去跑過去兩年的權值股加中型100指數成份股,KD死亡交叉後出場,其回測報告如下

這個腳本轉門尋找那些大跌後的中大型股

 

這當中的xf_RSI就是在日線底下使用的跨頻率函數,大家也可以看一下這種跨頻率函數的寫法

1SetBarMode(2);
2
3// 跨頻率RSI函數
4//
5// FreqType是預期要引用的頻率, 支援"D", "W", "M"
6// 輸入: FreqType, Series, Length
7//
8input:
9FreqType(string), //引用頻率
10Series(numericseries), //價格序列
11Length(numericsimple); //計算期間
12
13variable: 
14SumUp(0), SumDown(0), 
15LastSumUp(0), LastSumDown(0),LastRefSeries(Series), 
16up(0), down(0),
17closePeriod(0);
18
19condition1 = xf_getdtvalue(FreqType, Date) <> xf_getdtvalue(FreqType, Date[1]);
20if condition1 then
21begin
22LastSumUp = SumUp[1];
23LastSumDown = SumDown[1];
24LastRefSeries = Series[1];
25end;
26
27if xf_GetCurrentBar(FreqType) = 1 then
28begin
29SumUp = Average(maxlist(Series - LastRefSeries, 0), Length); 
30SumDown = Average(maxlist(LastRefSeries - Series, 0), Length); 
31end
32else
33begin
34up = maxlist(Series - LastRefSeries, 0);
35down = maxlist(LastRefSeries - Series, 0);
36
37SumUp = LastSumUp + (up - LastSumUp) / Length;
38SumDown = LastSumDown + (down - LastSumDown) / Length;
39end;
40
41if SumUp + SumDown = 0 then
42xf_RSI = 0
43else
44xf_RSI = 100 * SumUp / (SumUp + SumDown);

 

這樣的語法目前系統內建的指標都是常用的指標,如果需要其他的指標,可以用類似的方法來自訂一個函數,例如跨頻率的加權移動平均線EMA就可以像下面這樣的寫法

1SetBarMode(2);
2
3// 跨頻率EMA
4//
5// FreqType是預期要比對的期別, 支援"D", "W", "M"
6// 輸入: FreqType, Series, Length
7//
8input:
9FreqType(string), //引用頻率
10Series(numericseries), //價格序列
11Length(numericsimple); //計算期間
12
13variable:
14Factor(0), lastEMA(0);
15
16condition1 = xf_getdtvalue(FreqType, Date) <> xf_getdtvalue(FreqType, Date[1]);
17if condition1 then
18lastEMA = xf_EMA[1];
19
20value1 = xf_GetCurrentBar(FreqType);
21
22if Length + 1 = 0 then Factor = 1 else Factor = 2 / (Length + 1);
23
24if value1 = 1 then
25xf_EMA = Series
26else if value1 <= Length then
27xf_EMA = (Series + (lastEMA * (value1 - 1)))/value1
28else
29xf_EMA = lastEMA + Factor * (Series - lastEMA);

大家是否有留意到,這類跨頻率指標的寫法都會用到兩個函數,一個是xf_getdtvalue ,一個是xf_GetCurrentBar,要自訂跨頻率函數時,基本上都必須用到這兩個函數,大家可以直接看這兩個系統提供的跨頻率腳本常用函數是怎麼寫的。

以上大致是跨頻率指標同時應用的基本概念,未來有機會再跟大家介紹回測績效不錯的跨頻率函數。