有網友想要了解如何同時用不同頻率的指標來建構一個策略雷達,我今天舉例來跟大家說明。
目前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,要自訂跨頻率函數時,基本上都必須用到這兩個函數,大家可以直接看這兩個系統提供的跨頻率腳本常用函數是怎麼寫的。
以上大致是跨頻率指標同時應用的基本概念,未來有機會再跟大家介紹回測績效不錯的跨頻率函數。