
同樣是參考指數趨勢當作進出的條件,我們可以用前一篇基準商品參照功能。也可以直接在腳本中利用跨商品/跨頻率的語法來實現。今天我們將會說明如何在XS中使用GetSymbolField語法取得其他商品的資訊來應用。
GetSymbolField
如果你已經會使用GetField語法,那恭喜你,你馬上就能上手跨商品/跨頻率(GetSymbolField)的語法。
GetSymbolField顧名思義,就是取某個商品、某個欄位的資料。所以你只要在原本的GetField語法前加一個指定商品的參數就行了。
GetField("收盤價"); → 取得目前商品的收盤價
GetSymbolField("TSE.TW","收盤價"); → 取得加權指數的收盤價
如果是要跨頻率的話,GetField和GetSymbolField都一樣在最後一個參數可以指定頻率,例如:
GetField("收盤價","M"); → 取得商品當下的月收盤價
GetSymbolField("TSE.TW","收盤價","M"); → 取得加權指數當下的月收盤價
在跨頻率取資料的時候,取得的都是該頻率當下的數值。例如回測時要從日頻率取週頻率的TSE開高低收量,在2018/07/16~2018/07/20期間中:
- 週一07/16的週線開盤價為10867.97、週線最高價為10890.20、週線最低價為10817.45、週線收盤價為10817.45、週線成交量為1265.69億;
- 週二07/17的週線開盤價為10867.97、週線最高價為10890.20、週線最低價為10758.83、週線收盤價為10778.99、週線成交量為2619.59億;
- 週三07/18的週線開盤價為10867.97、週線最高價為10890.20、週線最低價為10758.83、週線收盤價為10842.46、週線成交量為4278.96億;
- 週四07/19的週線開盤價為10867.97、週線最高價為10896.25、週線最低價為10758.83、週線收盤價為10835.38、週線成交量5725.45億;
- 週五07/20的週線開盤價為10867.97、週線最高價為10963.95、週線最低價為10758.83、週線收盤價為10932.11、週線成交量7401.97億。
範例
接下來我們看一樣均線多頭排列的策略腳本,在改用GetSymbolField時,該怎麼調整。
原本的警示腳本
1input: shortlength(5,"短期均線期數"); 2input: midlength(10,"中期均線期數"); 3input: Longlength(20,"長期均線期數"); 4input: SuperLong(60,"超長期均線期數"); 5variable: shortaverage(0); 6variable: midaverage(0); 7variable: Longaverage(0); 8variable: SuperLongaverage(0); 9 10settotalbar(maxlist(shortlength,midlength,Longlength,SuperLong) + 3); 11 12if Close > close[1] then 13begin 14 shortaverage=Average(close,shortlength); 15 midaverage=Average(close,midlength) ; 16 Longaverage = Average(close,Longlength); 17 SuperLongaverage = Average(close,SuperLong); 18 if close>shortaverage and 19 shortaverage>midaverage and 20 midaverage>Longaverage and 21 Longaverage>SuperLongaverage 22 then ret=1; 23end;
這是XS內建的警示腳本,主要是用到了4條不同期間的均線來確認股票是否是多頭排列。
我們拿這個腳本當基礎,修改成大盤和個股要同時滿足均線多頭排列條件才會觸發。
調整後警示腳本
1input: shortlength(5,"短期均線期數"); 2input: midlength(10,"中期均線期數"); 3input: Longlength(20,"長期均線期數"); 4input: SuperLong(60,"超長期均線期數"); 5variable: shortaverage(0),shortaverageTSE(0); 6variable: midaverage(0),midaverageTSE(0); 7variable: Longaverage(0),LongaverageTSE(0); 8variable: SuperLongaverage(0),SuperLongaverageTSE(0); 9 10settotalbar(maxlist(shortlength,midlength,Longlength,SuperLong) + 3); 11 12if Close > close[1] then 13begin 14 shortaverage=Average(close,shortlength); 15 midaverage=Average(close,midlength); 16 Longaverage = Average(close,Longlength); 17 SuperLongaverage = Average(close,SuperLong); 18 shortaverageTSE=Average(GetSymbolField("TSE.TW","收盤價"),shortlength); 19 midaverageTSE=Average(GetSymbolField("TSE.TW","收盤價"),midlength) ; 20 LongaverageTSE = Average(GetSymbolField("TSE.TW","收盤價"),Longlength); 21 SuperLongaverageTSE = Average(GetSymbolField("TSE.TW","收盤價"),SuperLong); 22 if GetSymbolField("TSE.TW","收盤價")>shortaverageTSE and 23 shortaverageTSE>midaverageTSE and 24 midaverageTSE>LongaverageTSE and 25 LongaverageTSE>SuperLongaverageTSE 26 then 27 if close>shortaverage and 28 shortaverage>midaverage and 29 midaverage>Longaverage and 30 Longaverage>SuperLongaverage 31 then ret=1; 32end;
我們需要把基準商品要執行的邏輯,直接寫在腳本當中。
所以要計算加權指數的均線,把四條均線的程式碼修改一下,數列的部份換成用GetSymbolField取價,例如:
shortaverage=Average(close,shortlength);
shortaverageTSE=Average(GetSymbolField("TSE.TW","收盤價"),shortlength);
在判斷是否觸發的條件中,也變成先檢查加權指數的條件,成立後再去檢查標的條件是否也成立。
這樣子就完成了跨商品應用的策略調整。跨頻率的部份就留給大家自己練習一下。
基準商品參照vs跨商品/跨頻率
這二種參考其他商品資訊做為策略條件的功能,到底有什麼差別?
基準商品參照是可以看成是執行另一個獨立的策略雷達,這個雷達可以指定一個商品、一個頻率、一個腳本執行,只有在參考的策略雷達觸發之後,原本的雷達才有可能觸發。
跨商品/跨頻率則是在腳本中直接取得基準商品的資料運算。
所以,這二種執行方式的差別在於腳本計算的時機:
參考雷達是獨立執行,計算是跟著參考商品的行情更新而計算。
跨商品/跨頻率則是跟著觸發商品的行情更新計算。
所以就算是腳本的觸發邏輯是相同的,因為不同商品報價的更新時間差異,執行的結果可能會有些微不同。
同時,從範例中我們可以看得出來。基準商品參照完全無需做腳本的修改,對初學者來說比較方便。而跨商品/跨頻率會需要修改腳本,但是會在計算的當下,同時更新參考商品的資訊,一般說來是比較精確。就請各位看倌依自己需求選擇適合的工具摟。
我們下次見!
免費下載桌機版
程式內可購買「盤中量化交易模組」
以「月」計價,首次訂閱後享有7天體驗鑑賞