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