進階篇: 跨商品/跨頻率的語法介紹
2016-03-04 12:51:22
跨商品跨頻率語法介紹

同樣是參考指數趨勢當作進出的條件,我們可以用前一篇基準商品參照功能。也可以直接在腳本中利用跨商品/跨頻率的語法來實現。今天我們將會說明如何在XS中使用GetSymbolField語法取得其他商品的資訊來應用。

GetSymbolField

如果你已經會使用GetField語法,那恭喜你,你馬上就能上手跨商品/跨頻率(GetSymbolField)的語法。

GetSymbolField顧名思義,就是取某個商品、某個欄位的資料。所以你只要在原本的GetField語法前加一個指定商品的參數就行了。

GetField("收盤價"); → 取得目前商品的收盤價

GetSymbolField("TSE.TW","收盤價"); → 取得加權指數的收盤價

如果是要跨頻率的話,GetField和GetSymbolField都一樣在最後一個參數可以指定頻率,例如:

GetField("收盤價","M"); → 取得目前商品的月收盤價

GetSymbolField("TSE.TW","收盤價","M"); → 取得加權指數的月收盤價

注意!在跨頻率取資料的時候,取得的都是該頻率的最新值。例如回測時要從日頻率取月頻率的TSE收盤價,2016/5/1~2016/5/31中的每一天取得的值都會是2016/5的月線收盤價8535.59。

範例

接下來我們看一樣均線多頭排列的策略腳本,在改用GetSymbolField時,該怎麼調整。

原本的警示腳本

input: shortlength(5,"短期均線期數");
input: midlength(10,"中期均線期數");
input: Longlength(20,"長期均線期數");
input: SuperLong(60,"超長期均線期數");
variable: shortaverage(0);
variable: midaverage(0);
variable: Longaverage(0);
variable: SuperLongaverage(0);

settotalbar(maxlist(shortlength,midlength,Longlength,SuperLong) + 3);

if Close > close[1] then
begin
	shortaverage=Average(close,shortlength);
	midaverage=Average(close,midlength) ;
	Longaverage = Average(close,Longlength);
	SuperLongaverage = Average(close,SuperLong);
	if close>shortaverage and
		shortaverage>midaverage and
		midaverage>Longaverage and
		Longaverage>SuperLongaverage
	then ret=1;
end;

這是XS內建的警示腳本,主要是用到了4條不同期間的均線來確認股票是否是多頭排列。

我們拿這個腳本當基礎,修改成大盤和個股要同時滿足均線多頭排列條件才會觸發。

調整後警示腳本

input: shortlength(5,"短期均線期數");
input: midlength(10,"中期均線期數");
input: Longlength(20,"長期均線期數");
input: SuperLong(60,"超長期均線期數");
variable: shortaverage(0),shortaverageTSE(0);
variable: midaverage(0),midaverageTSE(0);
variable: Longaverage(0),LongaverageTSE(0);
variable: SuperLongaverage(0),SuperLongaverageTSE(0);

settotalbar(maxlist(shortlength,midlength,Longlength,SuperLong) + 3);

if Close > close[1] then
begin
	shortaverage=Average(close,shortlength);
	midaverage=Average(close,midlength);
	Longaverage = Average(close,Longlength);
	SuperLongaverage = Average(close,SuperLong);
	shortaverageTSE=Average(GetSymbolField("TSE.TW","收盤價"),shortlength);
	midaverageTSE=Average(GetSymbolField("TSE.TW","收盤價"),midlength) ;
	LongaverageTSE = Average(GetSymbolField("TSE.TW","收盤價"),Longlength);
	SuperLongaverageTSE = Average(GetSymbolField("TSE.TW","收盤價"),SuperLong);
	if GetSymbolField("TSE.TW","收盤價")>shortaverageTSE and
		shortaverageTSE>midaverageTSE and
		midaverageTSE>LongaverageTSE and
		LongaverageTSE>SuperLongaverageTSE
	then
		if close>shortaverage and
			shortaverage>midaverage and
			midaverage>Longaverage and
			Longaverage>SuperLongaverage
		then ret=1;
end;

我們需要把基準商品要執行的邏輯,直接寫在腳本當中。

所以要計算加權指數的均線,把四條均線的程式碼修改一下,數列的部份換成用GetSymbolField取價,例如:

shortaverage=Average(close,shortlength);

shortaverageTSE=Average(GetSymbolField("TSE.TW","收盤價"),shortlength);

在判斷是否觸發的條件中,也變成先檢查加權指數的條件,成立後再去檢查標的條件是否也成立。

這樣子就完成了跨商品應用的策略調整。跨頻率的部份就留給大家自己練習一下。

基準商品參照vs跨商品/跨頻率

這二種參考其他商品資訊做為策略條件的功能,到底有什麼差別?

基準商品參照是可以看成是執行另一個獨立的策略雷達,這個雷達可以指定一個商品、一個頻率、一個腳本執行,只有在參考的策略雷達觸發之後,原本的雷達才有可能觸發。

跨商品/跨頻率則是在腳本中直接取得基準商品的資料運算。

所以,這二種執行方式的差別在於腳本計算的時機:

參考雷達是獨立執行,計算是跟著參考商品的行情更新而計算。

跨商品/跨頻率則是跟著觸發商品的行情更新計算。

所以就算是腳本的觸發邏輯是相同的,因為不同商品報價的更新時間差異,執行的結果可能會有些微不同。

同時,從範例中我們可以看得出來。基準商品參照完全無需做腳本的修改,對初學者來說比較方便。而跨商品/跨頻率會需要修改腳本,但是會在計算的當下,同時更新參考商品的資訊,一般說來是比較精確。就請各位看倌依自己需求選擇適合的工具摟。

我們下次見!