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

By | 2019-07-31

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

 

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

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

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

input: Length_D(9,"日KD期間");

variable:rsv_d(0),kk_d(0),dd_d(0),c5(0);

stochastic(Length_D, 3, 3, rsv_d, kk_d, dd_d);

if xf_RSI("w",close,5)<=20 and kk_d <=30 
and kk_d crosses over dd_d

then ret=1;

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

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

 

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

SetBarMode(2);

// 跨頻率RSI函數
//
// FreqType是預期要引用的頻率, 支援"D", "W", "M"
// 輸入: FreqType, Series, Length
//
input:
FreqType(string), //引用頻率
Series(numericseries), //價格序列
Length(numericsimple); //計算期間

variable: 
SumUp(0), SumDown(0), 
LastSumUp(0), LastSumDown(0),LastRefSeries(Series), 
up(0), down(0),
closePeriod(0);

condition1 = xf_getdtvalue(FreqType, Date) <> xf_getdtvalue(FreqType, Date[1]);
if condition1 then
begin
LastSumUp = SumUp[1];
LastSumDown = SumDown[1];
LastRefSeries = Series[1];
end;

if xf_GetCurrentBar(FreqType) = 1 then
begin
SumUp = Average(maxlist(Series - LastRefSeries, 0), Length); 
SumDown = Average(maxlist(LastRefSeries - Series, 0), Length); 
end
else
begin
up = maxlist(Series - LastRefSeries, 0);
down = maxlist(LastRefSeries - Series, 0);

SumUp = LastSumUp + (up - LastSumUp) / Length;
SumDown = LastSumDown + (down - LastSumDown) / Length;
end;

if SumUp + SumDown = 0 then
xf_RSI = 0
else
xf_RSI = 100 * SumUp / (SumUp + SumDown);

 

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

SetBarMode(2);

// 跨頻率EMA
//
// FreqType是預期要比對的期別, 支援"D", "W", "M"
// 輸入: FreqType, Series, Length
//
input:
FreqType(string), //引用頻率
Series(numericseries), //價格序列
Length(numericsimple); //計算期間

variable:
Factor(0), lastEMA(0);

condition1 = xf_getdtvalue(FreqType, Date) <> xf_getdtvalue(FreqType, Date[1]);
if condition1 then
lastEMA = xf_EMA[1];

value1 = xf_GetCurrentBar(FreqType);

if Length + 1 = 0 then Factor = 1 else Factor = 2 / (Length + 1);

if value1 = 1 then
xf_EMA = Series
else if value1 <= Length then
xf_EMA = (Series + (lastEMA * (value1 - 1)))/value1
else
xf_EMA = lastEMA + Factor * (Series - lastEMA);

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

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